Bonjour, bonsoir,
En 2012, Bit-X présentait une méthode pour effectuer des cliques qui ne monopolisent pas la souris. Cette méthode n'étant plus fonctionnelle sur toutes les fenêtres, je vous propose la méthode des PostMessage. Si vous souhaitez voir celle de Bit-X, cliquez ici.
Sans plus attendre, commençons...
Pour utiliser les PInvoke, vous devez importer ceci :
Ensuite, on va importer les fonctions qui nous intéressent. Le code n'est pas commenté, rien n'est à expliquer ici.
Pour cela, ajoutez ceci:
On peut maintenant venir créer notre fonction de clique. Elle sera un Sub, prendra 3 paramètres (iX, iY, Hwnd) et se nommera LClick:
Explications:
-iX est la position X désirée du clique.
-iY est la position Y désirée du clique.
-Hwnd est le Handle de la fenêtre dans laquelle on désire cliquer. J'y reviendrait après.
A l'intérieur de LClick, ajoutez ceci:
Et maintenant, voilà la fonction GetHiLoWord:
Pour appeler la fonction, il suffit simplement de faire:
Certaines fenêtres, comme Dofus par exemple, changent de Handle, rendant l'opération impossible. Si votre fenêtre en fait parti, utilisez ceci pour résoudre le problème:
Maintenant vous pouvez cliquer sur n'importe quelle fenêtre comme ceci (exemple Dofus) :
Les Liens :
FindWindow : Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
PostMessage : Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
Les divers Messages pour compléter un bot : Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
Process.MainWindowHandle : Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
En 2012, Bit-X présentait une méthode pour effectuer des cliques qui ne monopolisent pas la souris. Cette méthode n'étant plus fonctionnelle sur toutes les fenêtres, je vous propose la méthode des PostMessage. Si vous souhaitez voir celle de Bit-X, cliquez ici.
Sans plus attendre, commençons...
Pour utiliser les PInvoke, vous devez importer ceci :
Code:
Imports System.Runtime.InteropServices
Public Class MaClasseGeniale
End Class
Ensuite, on va importer les fonctions qui nous intéressent. Le code n'est pas commenté, rien n'est à expliquer ici.
Pour cela, ajoutez ceci:
Code:
Public Class MaClasseGeniale
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)>
Public Shared Function PostMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Integer
End Function
Public Enum WindowMessages As UInteger
WM_LBUTTONUP = &H202
WM_LBUTTONDOWN = &H201
End Enum
End Class
On peut maintenant venir créer notre fonction de clique. Elle sera un Sub, prendra 3 paramètres (iX, iY, Hwnd) et se nommera LClick:
Code:
Public Shared Sub LClick(ByVal iX As Integer, ByVal iY As Integer, ByVal hwnd As IntPtr)
End Sub
Explications:
-iX est la position X désirée du clique.
-iY est la position Y désirée du clique.
-Hwnd est le Handle de la fenêtre dans laquelle on désire cliquer. J'y reviendrait après.
A l'intérieur de LClick, ajoutez ceci:
Code:
Dim ClickPos As IntPtr 'On convertit les paramètres pour les utiliser avec PostMessage
Dim Btn As IntPtr 'On convertit les paramètres pour les utiliser avec PostMessage
ClickPos = GetHiLoWord(CInt(iX), CInt(iY)) 'Cette fonction vous sera donnée plus tard
Btn = CUInt(Keys.LButton) 'On convertit les paramètres pour les utiliser avec PostMessage
PostMessage(hwnd, WindowMessages.WM_LBUTTONDOWN, Btn, ClickPos) 'On appuie sur le bouton gauche aux position données
Threading.Thread.Sleep(200) 'On attend 0.2 secondes le temps que le clique s'effectue
PostMessage(hwnd, WindowMessages.WM_LBUTTONUP, Btn, ClickPos) 'On relâche le bouton gauche aux position données
Et maintenant, voilà la fonction GetHiLoWord:
Code:
Public Shared Function GetHiLoWord(ByVal Lo As Short, ByVal Hi As Short) As IntPtr
Return CInt(Hi) << 16 Or Lo
End Function
Pour appeler la fonction, il suffit simplement de faire:
Code:
LClick(0, 0, MonProcess.MainWindowHandle)
Certaines fenêtres, comme Dofus par exemple, changent de Handle, rendant l'opération impossible. Si votre fenêtre en fait parti, utilisez ceci pour résoudre le problème:
Code:
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)>
Public Shared Function FindWindow(
ByVal lpClassName As String,
ByVal lpWindowName As String) As IntPtr
End Function
Maintenant vous pouvez cliquer sur n'importe quelle fenêtre comme ceci (exemple Dofus) :
Code:
Dim MonHandle As IntPtr = FindWindow("ApolloRuntimeContentWindow", "Dofus")
LClick(0, 0, MonHandle)
Les Liens :
FindWindow : Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
PostMessage : Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
Les divers Messages pour compléter un bot : Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!
Process.MainWindowHandle : Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!