ProgHelp

Une communauté intelligente et active

Besoin d'aide ... autoit

Message par ecorcia » 30 Décembre 2016, 05:28

Bonjour,

j'ai commencé ( i'm a débutant you know lol ) à codé quelque chose qui me permettrait de :

Cliqué sur le PNJ , Cliqué sur la case "Parler" et continuer les dialogues avec ce dernier.

Le problème c'est que je veux faire ça en fenêtre non focus ( donc fenêtre minimisé) et tout va bien j'arrive à :

Cliqué sur le PNJ ( qui génère la miniboite "Parler" ) mais impossible d'appuyer sur "Parler" en effet ce dernier clique belle et bien mais comme si la miniboite n'existait pas , il clique à l'endroit ou se situe la boite mais sans cliqué sur la boite , je sais c'est un peu mal foutu , parcontre cela fonctionne parfaitement quand notre curser survol la boite ...
Si quelqu'un a une explication ...

SPOILER : AFFICHER
Func Win_Click($Title, $iButton = "left", $X = "", $Y = "", $iClicks = 1)
Local $Full = WinGetTitle ($Title)
Local $HWnD = WinGetHandle ($Full)
Local $MK_LBUTTON = 0x0001
Local $WM_LBUTTONDOWN = 0x0201
Local $WM_LBUTTONUP = 0x0202
Local $MK_RBUTTON = 0x0002
Local $WM_RBUTTONDOWN = 0x0204
Local $WM_RBUTTONUP = 0x0205
Local $WM_MOUSEMOVE = 0x0200
Local $i = 0
Local $Button,$ButtonDown,$ButtonUp,$MouseCoord
If IsHWnD ($HWnD) And WinExists ($Full) <> '0' Then

Select
Case $iButton = "left"
$Button = $MK_LBUTTON
$ButtonDown = $WM_LBUTTONDOWN
$ButtonUp = $WM_LBUTTONUP
Case $iButton = "right"
$Button = $MK_RBUTTON
$ButtonDown = $WM_RBUTTONDOWN
$ButtonUp = $WM_RBUTTONUP
EndSelect

If $X = "" OR $Y = "" Then
$MouseCoord = MouseGetPos()
$X = $MouseCoord[0]
$Y = $MouseCoord[1]
EndIf

For $i = 1 to $iClicks
DllCall("user32.dll", "int", "SendMessage","hwnd",$HWnD,"int",$WM_MOUSEMOVE,"int","long",_MakeLong($X, $Y))
DllCall("user32.dll", "int", "SendMessage","hwnd",$HWnD,"int",$ButtonDown,"int",$Button,"long",_MakeLong($X, $Y))
DllCall("user32.dll", "int", "SendMessage","hwnd", $HWnD,"int",$ButtonUp,"int",$Button,"long", _MakeLong($X, $Y))
Next
EndIf
EndFunc
Func _MakeLong($LoWord,$HiWord)
Return BitOR($HiWord * 0x10000, BitAND($LoWord, 0xFFFF))
EndFunc


Win_Click("Adobe Flash Player 18","left",870,570,2) ;"Adobe Flash Player 18","left"
Sleep(1500)

Win_Click("Adobe Flash Player 18","left",433,650,1) ;"Adobe Flash Player 18","left"
Dernière édition par ecorcia le 03 Janvier 2017, 14:09, édité 1 fois.
ecorcia
Petit nouveau
 
Messages : 10
Points d'honneur : 2 PH
Inscription : 27 Déc 2016

Message par SoulAddict » 31 Décembre 2016, 01:07

Salut!
La fonction ControlClick ( "title", "text", controlID [, button = "left" [, clicks = 1 [, x [, y]]]] ) te permet de simuler un clic de souris dans une fenêtre en arrière plan, peut être que ça fonctionnera dans ton cas ;)
SoulAddict
Petit nouveau
 
Messages : 1
Points d'honneur : 0 PH
Inscription : 31 Déc 2016

Message par ecorcia » 31 Décembre 2016, 15:12

Malheureusement non ... j'ai à la base fais un script avec cette fonction qui est ENORMEMENT bugué dans la plupart des jeux elle ne clique pas réellement , alors j'ai tenter de le code que tu vois actuellement , et le problème reste le même , les petite boites générer par le jeu ( comme celle Parler , je vous mets un screen .) Je ne peux pas cliqué dessus SAUF SI : mon curseur est présent sur la boite ( et qu'il survol la boite )

screen : Image
ecorcia
Petit nouveau
 
Messages : 10
Points d'honneur : 2 PH
Inscription : 27 Déc 2016


Retour vers Demande d'aide

  • Qui est en ligne ?
  • Consulter les nouveaux messages
  • Consulter les messages sans réponse
  • Au total, il y a 0 utilisateur en ligne :: 0 inscrit, 0 invisible et 0 invité (basé sur le nombre d’utilisateurs actifs des 5 dernières minutes)
  • Le nombre maximum d’utilisateurs en ligne simultanément a été de 272 le 12 Mars 2015, 03:11
  • Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 0 invité(s)