Computers ain't that smart, Whatever man built could be taken apart
De tekst gaat dus altijd naar het actieve venster.MSDN zegt:
Sends one or more keystrokes to the active window as if typed at the keyboard.
Maar als je de window handle (hWnd) van de form hebt (en die heb je als je al weet dat het Form1 is, dan is dat namelijk Form1.hWnd
Aangezien het blijkbaar een form is binnen je eigen applicatie, kan je die form natuurlijk ook gewoon een method geven die je aanroept en de benodigde acties uitvoert.
4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1
Verwijderd
[EDIT]
btw; wat wil je maken? Een of andere tekst die langzaam ingetypt wordt?
maar hoe dat met Form1.hWnd moet snap ik dan nog steeds niet?!
Form1.hWnd.Sendkeys werkt ook niet hoor?!
Computers ain't that smart, Whatever man built could be taken apart
Nee, zo moet het ook nietKnEuTeR schreef op 30 oktober 2002 @ 21:24:
nee, er moeten gewoon keys naar een bepaalde applicatie hemzelf gestuurd worden
maar hoe dat met Form1.hWnd moet snap ik dan nog steeds niet?!
Form1.hWnd.Sendkeys werkt ook niet hoor?!
Ik zal een voorbeeldje geven. Als je een toets indrukt en weer loslaat worden er window messages naar de betreffende window gestuurd: WM_KEYDOWN als je de toets indrukt, en WM_KEYUP als je hem weer loslaat. VB verbergt deze message afhandeling voor je door de messages zelf te verwerken, en op de gepaste momenten de Form_KeyDown, Form_KeyUp en Form_KeyPress methoden aan te roepen.
De oplossing die ik voorstel, is om deze messages zelf in de queue van dat venster te zetten. Voor de form is het dan alsof er echt een toets in wordt gedrukt en losgelaten. Voor iedere toetsaanslag moet je dus 2 messages sturen: een WM_KEYDOWN en een WM_KEYUP.
Stel je wilt de letter A versturen. Dat kan je doen met de volgende code:
1
2
3
4
5
6
7
8
9
10
11
12
| ' Dit in je Declarations: Const WM_KEYDOWN As Long = &H0100 Const WM_KEYUP As Long = &H0101 Declare Function PostMessage Lib "user32" Alias "PostMessageA" _ (ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ ByVal lParam As Long) As Long ' Ergens in je code zet je dit om de letter A naar Form1 te sturen. PostMessage Form1.hWnd, WM_KEYDOWN, vbKeyA, 0 PostMessage Form1.hWnd, WM_KEYUP, vbKeyA, 0 |
Form1 ontvangt nu de letter A en zal die verwerken alsof het via het toetsenbord werd ingetypt. Voor andere letters kun je de andere VB keycode constanten gebruiken, maar het is ook mogelijk om de keycode te berekenen aan de hand van de ASCII waarden van de letters. Het is dus mogelijk om een eigen SendKeys implementatie te maken die naar ieder willekeurig venster kan sturen.
[edit]
Naast WM_KEYDOWN en WM_KEYUP is er ook nog WM_CHAR. Wellicht kan het ipv de twee WM_KEY* messages ook met een enkele WM_CHAR. Dat zou je even moeten onderzoeken
Het zou zelfs kunnen dat het per se met een WM_CHAR moet, dat ligt aan de message afhandeling door VB (waarvan ik niet precies in mn hoofd heb zitten hoe die gedaan wordt - of VB zelf character input genereert aan de hand van de KEYDOWN en KEYUP, of dat ie CHAR messages direct omzet in character input)...
4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1
Computers ain't that smart, Whatever man built could be taken apart
Het is idd een omweg, maar ook de enige (juiste) manier als je die Form1 niet naar voren wilt halen zodat het met SendKeys kan...KnEuTeR schreef op 30 oktober 2002 @ 21:43:
ja maar da's dan een bestwel grote omweg als het met ApplicationObject.Sendkeys OOK kan, maar hoe krijg je het zover dat ApplicationObject JOUW programma is?!
Eigenlijk wordt je door VB gewoon verwend met SendKeys; VC++ programmeurs moeten ook gewoon zelf deze messages sturen om hetzelfde effect te verkrijgen
[edit]
Ik heb er nu geen tijd voor, maar als ik er morgen aan denk zal ik eens een SendKeys implementatie bouwen die een textstring naar ieder willekeurig window kan sturen...
4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1
(met andere toetsen dus)
maar dan gebeurt er helemaal niks
PostMessage Form1.hwnd, WM_KEYDOWN, vbKeyTab, 0
PostMessage Form1.hwnd, WM_KEYUP, vbKeyTab, 0
PostMessage Form1.hwnd, WM_KEYDOWN, vbKeyReturn, 0
PostMessage Form1.hwnd, WM_KEYUP, vbKeyReturn, 0
Computers ain't that smart, Whatever man built could be taken apart
4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1
niks geen keylogger?! ik log geen keys ik geneer ze?!Verwijderd schreef op 31 oktober 2002 @ 08:54:
keylogger? heh heh
hej, bedankt, werkt op zich wel, maar toch nog niet helemaal goed genoegjohnwoo schreef op 31 oktober 2002 @ 09:45:
Okee, ik heb even wat in elkaar gedraaid: klik.
Ik hoop dat je er wat aan hebt
ik maak gebruik van een Microsoft Internet Tools component (zo'n browsertje)
als ik een paar keer TAB verstuur beweegt hij wel over het scherm heen, en ook in het browser venstertje, naar link 1, maar als hij eenmaal daarin is, hoeveel tabs ik daarna ook verstuur, hij blijft HANGEN, gaat niet naar de volgende link
Me.hWnd werkte niet goed, dus ik dacht ik probeer WebBrowser1.hWnd, die bestaat wel maar toch krijg ik een error:
Run-time error '-2147467259 (80004005)'
Method HWND of 'IWebBrowser2' failed
ik word echt helemaaal gek, stom programma werkt nog steeeds niet?!
Computers ain't that smart, Whatever man built could be taken apart
Ooh, het gaat om zo'n WebBrowser componentje? Die heeft toch gewoon een method Navigate (of Navigate2, zou ook wel kunnen)? Kun je daarmee niet gewoon naar een andere URL gaan, in plaats van te tabben naar de juiste link en dan een Enter te gevenKnEuTeR schreef op 31 oktober 2002 @ 13:02:
[...]
niks geen keylogger?! ik log geen keys ik geneer ze?!
[...]
hej, bedankt, werkt op zich wel, maar toch nog niet helemaal goed genoeg
ik maak gebruik van een Microsoft Internet Tools component (zo'n browsertje)
als ik een paar keer TAB verstuur beweegt hij wel over het scherm heen, en ook in het browser venstertje, naar link 1, maar als hij eenmaal daarin is, hoeveel tabs ik daarna ook verstuur, hij blijft HANGEN, gaat niet naar de volgende link(terwijl als ik dan handmatig op tab druk dan verspringt ie wel)
Me.hWnd werkte niet goed, dus ik dacht ik probeer WebBrowser1.hWnd, die bestaat wel maar toch krijg ik een error:
Run-time error '-2147467259 (80004005)'
Method HWND of 'IWebBrowser2' failed
ik word echt helemaaal gek, stom programma werkt nog steeeds niet?!
4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1
[rml][ C++] SendInput naar ander window[/rml]
Eigenlijk ook nog niet echt een oplossing op...
Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO
nee, zo kan het niet, niet wat ik wiljohnwoo schreef op 31 oktober 2002 @ 15:33:
[...]
Ooh, het gaat om zo'n WebBrowser componentje? Die heeft toch gewoon een method Navigate (of Navigate2, zou ook wel kunnen)? Kun je daarmee niet gewoon naar een andere URL gaan, in plaats van te tabben naar de juiste link en dan een Enter te geven
hoe kan ik de tabs naar dat window sturen?!
Computers ain't that smart, Whatever man built could be taken apart
daarbij vond ik deze oplossing:
http://www.vbcodemagician.dk/tips/internet_browserhwnd.htm
maar die werkt nog steeds niet
Computers ain't that smart, Whatever man built could be taken apart
PostMessage hWnd, WM_KEYDOWN, vbKeyTab, &H1
PostMessage hWnd, WM_KEYUP, vbKeyTab, &H80000001
4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1