|
|
| Auteur |
Bericht |
gerben123
|
|
Onderwerp: Programma's besturen
Geplaatst: 09 mrt 2010 - 16:13
|
|
In de startblokken
Geregistreerd op: 24-mei-2009
Berichten: 11
Status: Offline
|
|
Hallo,
Is het mogelijk om andere programma's te besturen?
Bijvoorbeeld iets aan laten klikken |
|
|
| |
|
|
|
 |
Vozzie
|
|
Onderwerp: Re: Programma's besturen
Geplaatst: 09 mrt 2010 - 18:42
|
|
Moderator

Geregistreerd op: 11-mei-2009
Berichten: 937
Status: Offline
|
|
Hallo,
Ja dit kan,... Een paar van de functies die je nodig hebt zijn FindWindow, EnumWindows, EnumChildWindows, SendMessage, PostMessage, keybd_event,...
Met FindWindow, FindWindowEx, EnumWindows, EnumChildWindows kan je windows en controls achterhalen.
Door SendMessage/PostMEssage kan je events genereren(om het in vb.net termen te zeggen).
Er zijn nog een paar functies maar dit zijn alvast de belangrijkste...
Je kan ook code injecteren in een process en in een ander process laten "draaien". Bijvoorbeeld events in een remote process opvangen en doorsturen naar jouw toepassing.
Je kan debug tools gebruiken zoals OllyDbg of zelfs visual studio. Een handige tool om windows(ramen) te analyseren en messages(events) te bekijken in een toepassing is Spy++. Deze kan je vinden onder visual studio tools.
Update: even vergeten, als je het programma zelf schreef kan je dit wel voorzien. (IPC inter process communication) Of als het ander programma een .Net programma is kan je redelijk eenvoudig eventueel stukken code aanroepen.
Groeten |
_________________ con\con
Stappen, keuzes en herhaling combineren is programmeren.
|
| |
|
|
|
 |
gerben123
|
|
Onderwerp: Re: Programma's besturen
Geplaatst: 12 mrt 2010 - 19:52
|
|
In de startblokken
Geregistreerd op: 24-mei-2009
Berichten: 11
Status: Offline
|
|
Hallo,
Ik heb het programma niet zelf geschreven. En ik heb nu een log van het andere programma. Kun je me uitleggen hoe ik dat moet gebruiken in mijn programma?
Alvast bedankt
 |
|
|
| |
|
|
|
 |
Vozzie
|
|
Onderwerp: Re: Programma's besturen
Geplaatst: 12 mrt 2010 - 20:34
|
|
Moderator

Geregistreerd op: 11-mei-2009
Berichten: 937
Status: Offline
|
|
Hallo,
Wat heb je in een log staan?
Er is nog vraag naar uitleg over dit topic, ik zal dan eens een tutorial schrijven maar er is genoeg te vinden op het net hierover.
Je kan een voorbeeld programma vinden van me hier op dit forum gepost. "PassWindow.zip". Het dient om een raam voorbij te gaan,... Je kan daar al heel veel info uit halen.
Update 1: post met PassWindow.zip
Update 2: deze search kan ook al helpen
Groeten |
_________________ con\con
Stappen, keuzes en herhaling combineren is programmeren.
|
| |
|
|
|
 |
gerben123
|
|
Onderwerp: Re: Programma's besturen
Geplaatst: 13 mrt 2010 - 11:51
|
|
In de startblokken
Geregistreerd op: 24-mei-2009
Berichten: 11
Status: Offline
|
|
Ik word niets wijzer uit de log en de PassWindow werkt niet voor het programma dat ik wil besturen.
update:
Het programma AnalyseWindow werkt wel alleen krijg ik geen functies te zien.
Bij andere programma's wel.
 |
|
|
| |
|
|
|
 |
Vozzie
|
|
Onderwerp: Re: Programma
Geplaatst: 14 mrt 2010 - 03:38
|
|
Moderator

Geregistreerd op: 11-mei-2009
Berichten: 937
Status: Offline
|
|
Hallo,
Code voor tutorial
Even een voorbeeld, we gaan in de internet explorer settings de cookies clearen op deze manier.
(Er zijn andere manieren om cookies te verwijderen maar dit leek me een eenvoudig voorbeeld.)
Deze tutorial werkt waarschijnlijk enkel voor een Windows XP engels. De code zal dus niet overal werken. GetClassName, control index etc kunnen helpen om de code misschien op anderstalige computers te laten werken. De gebruikte methode werkt op verschillende versies van windows met verschillende programmas... mits aanpassing
Het process met settings raam kan je zo starten.
Visual Basic code: Dim process As New Diagnostics.Process process.StartInfo.UseShellExecute = False process.StartInfo.FileName = "rundll32.exe" process.StartInfo.Arguments = "shell32.dll,Control_RunDLL inetcpl.cpl,,0" process.Start() process.WaitForInputIdle()
MsgBox(process.MainWindowHandle = IntPtr.Zero)
process.WaitForExit()
De msgbox toont True. Dus er is geen "MainWindowHandle". Die is IntPtr.Zero(NULL).
Het internet settings raam gaat open.
shot_01
Wat je kan zien in shot_01 is dat de titel "Internet Properties" is, en de tekst op de knop "Delete".
shot_02
In shot_02 kan je zien dat Spy++ de ClassName en Tekst verklapt van de "Delete" knop.
shot_03
In shot_03 zie je dat de button een child is van de tabpage en de tabpage van de window. Dit gaan we gebruiken bij FindWindowEx omdat deze teksten uniek zijn in het raam.
Dus nu gaan we gebruik maken van FindWindow en FindWindowEx om het raam en de knop te vinden.
En de functie SendMessage om een klik op de knop de simuleren.
Visual Basic code: Option Explicit On Option Strict On
Imports System.Runtime.InteropServices
Class EntryPoint
Shared Sub Main()
Const WM_LBUTTONUP As Integer = &H202 Const WM_LBUTTONDOWN As Integer = &H201
Dim process As New Diagnostics.Process process.StartInfo.UseShellExecute = False process.StartInfo.FileName = "rundll32.exe" process.StartInfo.Arguments = "shell32.dll,Control_RunDLL inetcpl.cpl,,0" process.Start() process.WaitForInputIdle()
Dim hWndProperties As IntPtr hWndProperties = User32.FindWindow(vbNullString, "Internet Properties") If (hWndProperties = IntPtr.Zero) Then MsgBox("Properties window niet gevonden.") Return End If
Dim hWndTabGeneral As IntPtr hWndTabGeneral = User32.FindWindowEx(hWndProperties, IntPtr.Zero, vbNullString, "General") If (hWndTabGeneral = IntPtr.Zero) Then MsgBox("Tab control niet gevonden.") Return End If
Dim hWndDeleteButton As IntPtr hWndDeleteButton = User32.FindWindowEx(hWndTabGeneral, IntPtr.Zero, vbNullString, "&Delete...") If (hWndDeleteButton = IntPtr.Zero) Then MsgBox("Delete button niet gevonden.") Return End If
User32.SendMessage(hWndDeleteButton, WM_LBUTTONDOWN, 0, 0) User32.SendMessage(hWndDeleteButton, WM_LBUTTONUP, 0, 0)
process.WaitForExit()
End Sub
End Class
Class User32
Public Const NAME As String = "User32.dll"
<DllImport(NAME, SetLastError:=True)> _ Public Shared Function FindWindow( _ ByVal lpClassName As String, _ ByVal lpWindowName As String _ ) As IntPtr End Function
<DllImport(NAME, SetLastError:=True)> _ Public Shared Function FindWindowEx( _ ByVal hwndParent As IntPtr, _ ByVal hwndChildAfter As IntPtr, _ ByVal lpClassName As String, _ ByVal lpWindowName As String _ ) As IntPtr End Function
<DllImport(NAME, SetLastError:=True)> _ Public Shared Function SendMessage( _ ByVal hWnd As IntPtr, _ ByVal uMsg As UInteger, _ ByVal wParam As Integer, _ ByVal lParam As Integer _ ) As IntPtr End Function
End Class
En ziezo, hier gaat het "Delete Browsing History" raam al open.
- Ik heb een beetje mijn manier van "Native Functions" te importeren. Normaal maak ik een mapje aan "Native" en voeg ik daar classes per DLL aan toe met daarin de import declaraties. In dit voorbeeld ga ik alles uitbouwen in 1 bestand(1 code file).
- Meestal kijk ik in de MSDN naar de declaratie van de functie en schrijf dan de import. Dit is de beste manier om het te leren en zo zie je ook de parameter en teruggeefwaarde omschrijving. Maar een handige website om de declaraties te vinden is pinvoke.net. Wat staat voor (Platform Invoke).
- Je kan nog steeds gebruik maken van het "Declare" statement. Maar dit statement is niet compatible met andere .Net talen.(C#, F#, Managed C++,...). Dus is het misschien beter het DllImport attribute te gebruiken.
FindWindow en FindWindowEx zijn een manier om een raam te vinden. Maar ook EnumWindows en EnumChildWindows. Nu gaan we gebruik maken van EnumChildWindows en SendMessage voor alle checkboxen uit te vinken behalve de Cookies
.
Merk de verandering op van SendMessage naar PostMessage voor het klikken op de "Delete" knop. Dit is omdat SendMessage pas terugkeert nadat de message verwerkt is. PostMessage stuurt de message en keert direct terug.
(We zouden ook een andere thread kunnen opstarten.)
Visual Basic code: Option Explicit On Option Strict On
Imports System.Runtime.InteropServices
Class EntryPoint
Const WM_LBUTTONUP As Integer = &H202 Const WM_LBUTTONDOWN As Integer = &H201 Const BM_GETCHECK As Integer = &HF0 Const BM_SETCHECK As Integer = &HF1
Shared Sub Main()
Dim process As New Diagnostics.Process process.StartInfo.UseShellExecute = False process.StartInfo.FileName = "rundll32.exe" process.StartInfo.Arguments = "shell32.dll,Control_RunDLL inetcpl.cpl,,0" process.Start() process.WaitForInputIdle()
Dim hWndProperties As IntPtr hWndProperties = User32.FindWindow(vbNullString, "Internet Properties") If (hWndProperties = IntPtr.Zero) Then MsgBox("Properties window niet gevonden.") Return End If
Dim hWndTabGeneral As IntPtr hWndTabGeneral = User32.FindWindowEx(hWndProperties, IntPtr.Zero, vbNullString, "General") If (hWndTabGeneral = IntPtr.Zero) Then MsgBox("Tab control niet gevonden.") Return End If
Dim hWndDeleteButton As IntPtr hWndDeleteButton = User32.FindWindowEx(hWndTabGeneral, IntPtr.Zero, vbNullString, "&Delete...") If (hWndDeleteButton = IntPtr.Zero) Then MsgBox("Delete button niet gevonden.") Return End If
User32.PostMessage(hWndDeleteButton, WM_LBUTTONDOWN, 0, 0) User32.PostMessage(hWndDeleteButton, WM_LBUTTONUP, 0, 0)
System.Threading.Thread.Sleep(500)
Dim hWndBrowseHistory As IntPtr hWndBrowseHistory = User32.FindWindow(vbNullString, "Delete Browsing History") If (hWndBrowseHistory = IntPtr.Zero) Then MsgBox("Browse history raam niet gevonden.") Return End If
User32.EnumChildWindows(hWndBrowseHistory, AddressOf EnumBrowseHistoryChilds, IntPtr.Zero)
Dim hWndOkButton As IntPtr hWndOkButton = User32.FindWindowEx(hWndProperties, IntPtr.Zero, vbNullString, "OK") If (hWndOkButton = IntPtr.Zero) Then MsgBox("OK button niet gevonden.") Return End If
User32.SendMessage(hWndOkButton, WM_LBUTTONDOWN, 0, 0) User32.SendMessage(hWndOkButton, WM_LBUTTONUP, 0, 0)
process.WaitForExit()
End Sub
Shared Function EnumBrowseHistoryChilds(ByVal hWndChild As IntPtr, ByVal lParam As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean Dim len As Integer = User32.GetWindowTextLength(hWndChild) If len > 0 Then Dim pString As IntPtr = Marshal.AllocHGlobal((len + 1) * 2) Try User32.GetWindowTextW(hWndChild, pString, len + 1) Dim windowText As String = Marshal.PtrToStringUni(pString, len) Select Case windowText Case "P&reserve Favorites website data" SetCheckBox(hWndChild, CheckState.Unchecked) Case "&Temporary Internet files" SetCheckBox(hWndChild, CheckState.Unchecked) Case "C&ookies" SetCheckBox(hWndChild, CheckState.Checked) Case "&History" SetCheckBox(hWndChild, CheckState.Unchecked) Case "&Form data" SetCheckBox(hWndChild, CheckState.Unchecked) Case "&Passwords" SetCheckBox(hWndChild, CheckState.Unchecked) Case "&InPrivate Filtering data" SetCheckBox(hWndChild, CheckState.Unchecked) Case "&Delete" User32.SendMessage(hWndChild, WM_LBUTTONDOWN, 0, 0) User32.SendMessage(hWndChild, WM_LBUTTONUP, 0, 0) End Select Finally Marshal.FreeHGlobal(pString) End Try End If Return True End Function
Shared Sub SetCheckBox(ByVal hWndCheckBox As IntPtr, ByVal state As CheckState) Dim currentState As CheckState currentState = CType(User32.SendMessage(hWndCheckBox, BM_GETCHECK, 0, 0), CheckState) If currentState <> state Then User32.SendMessage(hWndCheckBox, BM_SETCHECK, state, 0) End If End Sub
End Class
Class User32
Public Const NAME As String = "User32.dll"
<DllImport(NAME, SetLastError:=True)> _ Public Shared Function FindWindow( _ ByVal lpClassName As String, _ ByVal lpWindowName As String _ ) As IntPtr End Function
<DllImport(NAME, SetLastError:=True)> _ Public Shared Function FindWindowEx( _ ByVal hwndParent As IntPtr, _ ByVal hwndChildAfter As IntPtr, _ ByVal lpClassName As String, _ ByVal lpWindowName As String _ ) As IntPtr End Function
<DllImport(NAME, SetLastError:=True)> _ Public Shared Function SendMessage( _ ByVal hWnd As IntPtr, _ ByVal uMsg As UInteger, _ ByVal wParam As Integer, _ ByVal lParam As Integer _ ) As Integer End Function
<DllImport(NAME, SetLastError:=True)> _ Public Shared Function PostMessage( _ ByVal hWnd As IntPtr, _ ByVal uMsg As UInteger, _ ByVal wParam As Integer, _ ByVal lParam As Integer _ ) As IntPtr End Function
<DllImport(NAME, SetLastError:=True)> _ Public Shared Function GetWindowTextLength( _ ByVal hWnd As IntPtr _ ) As Integer End Function
<DllImport(NAME, SetLastError:=True)> _ Public Shared Function GetWindowTextW( _ ByVal hWnd As IntPtr, _ ByVal lpBuffer As IntPtr, _ ByVal bufferLen As Integer _ ) As Integer End Function
Public Delegate Function EnumChildDelegate(ByVal hwnd As IntPtr, ByVal lParam As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean
<DllImport(NAME, SetLastError:=True)> _ Public Shared Function EnumChildWindows( _ ByVal hWndParent As IntPtr, _ ByVal lpEnumFunc As EnumChildDelegate, _ ByVal lParam As IntPtr _ ) As <MarshalAs(UnmanagedType.Bool)> Boolean End Function
End Class
Nu voor wat je precies wilt doen zal je moeten onderzoeken welke control, welke messages je er naartoe kan sturen en hoe je alles kan doen. Heb je nog vragen, stel ze gerust,...
Ik moet je bijgeleverde zip bestand nog bekijken. Maar ik ga eerst eventjes slapen...
Groeten |
_________________ con\con
Stappen, keuzes en herhaling combineren is programmeren.
Laatst aangepast door Vozzie op 16 mrt 2010 - 17:26, in totaal 4 keer bewerkt
|
| |
|
|
|
 |
Vozzie
|
|
Onderwerp: Re: Programma
Geplaatst: 14 mrt 2010 - 04:23
|
|
Moderator

Geregistreerd op: 11-mei-2009
Berichten: 937
Status: Offline
|
|
| Extra post voor de code te kunnen posten van bovenstaande tutorial. Maximum 3 attachments... |
_________________ con\con
Stappen, keuzes en herhaling combineren is programmeren.
Laatst aangepast door Vozzie op 16 mrt 2010 - 17:25, in totaal 1 keer bewerkt
|
| |
|
|
|
 |
Vozzie
|
|
Onderwerp: Re: Programma
Geplaatst: 14 mrt 2010 - 04:41
|
|
Moderator

Geregistreerd op: 11-mei-2009
Berichten: 937
Status: Offline
|
|
Hallo gerben123,
In de zip kan ik veel en niks zien. Kan je even zeggen wat je wilt doen. Een omschrijving in de zin van
- ik wil een programma starten
- dan een teksvak invullen
- dan nog een tekstvak invullen
- en dan op een knop duwen
Misschien kan de tutorial die ik schreef al helpen.
Kan je een screenshot mee leveren van het raam?
Kan je met spy++ de structuur van het raam onderzoeken?
Groeten |
_________________ con\con
Stappen, keuzes en herhaling combineren is programmeren.
|
| |
|
|
|
 |
gerben123
|
|
Onderwerp: Re: Programma's besturen
Geplaatst: 14 mrt 2010 - 14:06
|
|
In de startblokken
Geregistreerd op: 24-mei-2009
Berichten: 11
Status: Offline
|
|
Met Spy++ lukt het niet. Hij kan geen onderscheid maken tussen de knoppen en de form.
(Denk ik)
In screenshot 1 staat wat er gebeurt met de tutorial form.
In screenshot 2 staat waar mijn programma op zou moeten 'klikken' |
|
|
| |
|
|
|
 |
wargod97
|
|
Onderwerp: Re: Programma
Geplaatst: 14 mrt 2010 - 14:07
|
|
Op dreef
Geregistreerd op: 24-jul-2009
Berichten: 185
Status: Offline
|
|
Kan je ook text uit een textbox halen?
Bijvoorbeeld IE staat open en ik wil de url lezen of een andere tekstbox is dat mogelijk? |
|
|
| |
|
|
|
 |
Vozzie
|
|
Onderwerp: Re: Programma
Geplaatst: 14 mrt 2010 - 14:12
|
|
Moderator

Geregistreerd op: 11-mei-2009
Berichten: 937
Status: Offline
|
|
Hallo,
Die screenshots, komt dat uit een website of een programma? Indien een site, kan je eens de link geven...
Voor websites zijn er eventueel andere manieren maar windows messages zijn dan waarschijnlijk wel te complex tegenover de andere manieren.
Groeten |
_________________ con\con
Stappen, keuzes en herhaling combineren is programmeren.
|
| |
|
|
|
 |
Vozzie
|
|
Onderwerp: Re: Programma
Geplaatst: 14 mrt 2010 - 15:16
|
|
Moderator

Geregistreerd op: 11-mei-2009
Berichten: 937
Status: Offline
|
|
Hallo,
gerben123 schreef: In screenshot 1 staat wat er gebeurt met de tutorial form. Je hebt precies enkel het eerste blokje bekeken. Maar ik denk dat de manier toch niet volledig werkt. Dat er True staat is normaal volgens de tutorial. Ik zie op de screenshot dat je pc in het nederlands staat. Dan moet je enkel in de code de teksten aanpassen naar die in het nederlands en dan zou de code normaal horen te werken.
gerben123 schreef: In screenshot 2 staat waar mijn programma op zou moeten 'klikken' Ik heb nog eens die log bekeken. (als het een website is laat het weten, dan kan ik misschien andere manieren aanduiden)
Ik zie in de log ,
<00283> 004402FA P WM_LBUTTONDOWN fwKeys:MK_LBUTTON xPos:92 yPos:453
<00283> 004402FA S WM_IME_SETCONTEXT fSet:0 iShow:C000000F
<00284> 004402FA R WM_IME_SETCONTEXT
<00285> 004402FA S WM_IME_SETCONTEXT fSet:1 iShow:C000000F
<00286> 004402FA R WM_IME_SETCONTEXT
<00287> 004402FA S WM_NCHITTEST xPos:284 yPos:582
<00288> 004402FA R WM_NCHITTEST nHittest:HTCLIENT
<00289> 004402FA S WM_NCHITTEST xPos:284 yPos:582
<00290> 004402FA R WM_NCHITTEST nHittest:HTCLIENT
<00291> 004402FA P WM_LBUTTONUP fwKeys:0000 xPos:92 yPos:453
S = SendMessage
P = PostMessage
s = SendMessage zonder teruggeefwaarde(verboden)
R = Message return value
Als dat het klikken op de start knop is wat daar in die log staat, dan kan je zien dat er een PostMessage WM_LBUTTONDOWN en een PostMessage WM_LBUTTONUP was.
gerben123 schreef: Met Spy++ lukt het niet. Hij kan geen onderscheid maken tussen de knoppen en de form. (Denk ik) Wat je daar denkt klopt in volgend scenario. Stel nu dat de applicatie een "Skin" heeft en afhankelijk van de "Locatie" bepaalt waarop geklikt was, dan zouden we de klik kunnen simuleren op die plaatsen.
Als je de beschrijving bekijkt, samen met de log,... zou deze code(c++) kunnen werken.
Code: HWND hWnd = FindWindow(NULL, L"TheApp");
if(hWnd){
PostMessage(hWnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(92,453));
PostMessage(hWnd, WM_LBUTTONUP, 0, MAKELPARAM(92,453));
}
Je kan eens zoeken op google naar "Const MK_LBUTTON" en "MakeDWord WM_LBUTTONDOWN" om deze te vertalen naar VB.Net. Je kan ook de WM_NCHITTEST messages sturen enzo,.. dus het is wel mogelijk. Maar als het niet met "standard windows controls" is dan is het soms wel een stuk moeilijker.
Update: De defenities van de windows messages kan je bekijken op de MSDN en de waarden om ze te declareren in VB.Net kan je vinden in WinUser.h. (c/c++)
Zie: http://www.google.be/search?hl=nl&q ... l=&oq=
Groeten |
_________________ con\con
Stappen, keuzes en herhaling combineren is programmeren.
|
| |
|
|
|
 |
gerben123
|
|
Onderwerp: Re: Programma's besturen
Geplaatst: 15 mrt 2010 - 19:24
|
|
In de startblokken
Geregistreerd op: 24-mei-2009
Berichten: 11
Status: Offline
|
|
Het is geen website, maar een programma. Ik heb wat zitten zoeken op google en heb nu deze code:
Visual Basic code: Windows.Forms.Cursor.Position = New System.Drawing.Point(269, 555)
Daarmee gaat de cursor naar de plaats van de knop alleen klikt hij nog niet. |
|
|
| |
|
|
|
 |
Vozzie
|
|
Onderwerp: Re: Programma
Geplaatst: 16 mrt 2010 - 03:22
|
|
Moderator

Geregistreerd op: 11-mei-2009
Berichten: 937
Status: Offline
|
|
Hallo,
Je kan beter proberen te begrijpen wat ik hierboven al schreef, dan zal je misschien een manier kunnen bedenken. (het stukje code uit mijn vorige post vertalen ware al een begin)
Ik weet niet of het zal lukken door de cursor te plaatsen met .Net code maar je kan het proberen. Je zou dan kunnen de mouse_event functie gebruiken.
Hiervoor zie
- http://www.pinvoke.net/default.aspx/use ... tml?diff=y
- http://msdn.microsoft.com/en-us/library ... S.85).aspx
Maar de keybd_event en mouse_event functies kunnen ook input sturen naar een verkeerd raam/programma. (Gebruik oa SetForegroundWindow om het raam naar de voorgrond te brengen)
DUS om te leren programma's sturen op een betere manier....
1) Je moet EERST! een handle van het raam bekomen. Dit kan ofwel door FindWindow, of misschien door Process.Getprocesses() en dan process.MainWindowHandle. Ik zou voor FindWindow gaan.
2) Dan kan je beginnen met messages(Events zoals click) te sturen naar het raam. Dit door PostMessage en SendMessage.
Dus
Visual Basic code: Dim hWnd As IntPtr hWnd = FindWindow(vbNullString, "Rockstar Games Social Club") If hWnd = IntPtr.Zero Then MsgBox( "Raam niet gevonden, probeer met andere classname of windowtext, gebruik misschien spy++") Else MsgBox( "Yes! Raam gevonden, we kunnen beginnen met messages te sturen, misschien door spy++ achterhalen welke, trail and loads of errors,....!") SendMessage(hWnd, WM_??????, ??????, ?????) End If
besluit: Als je programma's wil besturen, leer dan werken met de genoemde functies.
Groeten |
_________________ con\con
Stappen, keuzes en herhaling combineren is programmeren.
|
| |
|
|
|
 |
gerben123
|
|
Onderwerp: Re: Programma's besturen
Geplaatst: 16 mrt 2010 - 15:24
|
|
In de startblokken
Geregistreerd op: 24-mei-2009
Berichten: 11
Status: Offline
|
|
Ok ik heb de code geprobeerd alleen krijg ik errors.
Zou iemand deze kunnen verbeteren?
Alvast bedankt.
Visual Basic code: Dim hWnd As IntPtr hWnd = FindWindow(vbNullString, "Rockstar Games Social Club") If hWnd = IntPtr.Zero Then MsgBox("Raam niet gevonden, probeer met andere classname of windowtext, gebruik misschien spy++") Else MsgBox("Yes! Raam gevonden, we kunnen beginnen met messages te sturen, misschien door spy++ achterhalen welke, trail and loads of errors,....!") SendMessage(hWnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(92, 453)) SendMessage(hWnd, WM_LBUTTONUP, 0, MAKELPARAM(92, 453)) End If
|
|
|
| |
|
|
|
 |
|
|
|
|
|