[win32] keybord input in andere app simuleren

Pagina: 1
Acties:

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
na jaren er nix mee gedaan te hebben ben ik weer eens met win32 aan het pielen geslagen. wat ik nu wil is het volgende:

* kep een willekeurig 3rd party windows progje draaien, met daarin een text-invoer veld. (uiteraard niet echt willekeurig, ik heb zo m'n doelstellingen >:) )

* nu wil nu een programma schrijven, dat periodiek een bepaalde string in het textveld van het andere programma inklopt en een <RETURN> simuleert, zodat het commando wordt uitgevoerd.

Het enige wat ik tot nu toe kan, is de HWND van het andere progje te pakken krijgen en sommige functies daarop uitvoeren (zoals ShowWindow)

Een commando als SetActiveWindow(HWND hWnd) lukt al niet, waarschijnlijk om de volgende reden:
If the window identified by the hWnd parameter was created by the calling thread, the active window status of the calling thread is set to hWnd. Otherwise, the active window status of the calling thread is set to NULL.
dit zou ik hiermee kunnen oplossen:
By using the AttachThreadInput function, a thread can attach its input processing to another thread. This allows a thread to call SetActiveWindow to activate a window attached to another thread's message queue.
voor AttachThreadInput heb ik weer het ThreadId van het andere programma nodig...voor GetThreadId(HANDLE Thread) heb ik weer een HANDLE naar een Thread nodig...en dan moet ik nog de juiste rechten hebben ook (THREAD_QUERY_INFORMATION)...

ik heb zo'n vermoeden dat windows wel dusdanig veilig is dat me dit niet gaat lukken, of zijn er toch manieren om dit voor elkaar te krijgen?

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Je hebt totaal geen focus op het andere programma nodig, je kunt met SendMessage(..., WM_CHAR, ...) moeiteloos input faken. Oftewel je achterhaalt de handle naar het andere app-window, zoekt daarbinnen de handle naar de Edit control van je keuze en gaat er met PostMessage of SendMessage troep inpompen. :)

Professionele website nodig?


  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
dankjewel! ik had er al naar gekeken en dat werkte niet...maar ik moet dus specifiek het edit control opzoeken en daar iets heen sturen? ik heb wel es gehoord van tooltjes waarmee je de resource files kunt decompilen zodat je de Id's daarvan te pakken kan krijgen. hoe heet dat?

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

Je kunt gewoon Spy++ (standaard bij Visual Studio) gebruiken om de class van een edit te vinden. Of Winsight (standaard bij Delphi). Vervolgens kun je de handle van het formulier gebruiken om via FindChildWindow (uit de losse pols...) de verschillende childwindows te zoeken. Op zoek naar de class die je met Spy++ gevonden hebt dus!

My personal website


  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
hmm ik gebruik bloodshed dev-c++...ik heb niet zoveel geld voor Visual Studio ;)...maar goed ik kom er wel...

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Spy++ is volgens mij een unlicensed SDK-tool dus kan iemand je wel even doormailen (ik heb hier zelf geen werkende VS full-install op deze bak). Je hebt zelfs kans dat je 'm gewoon bij MS kunt downloaden.

Professionele website nodig?


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Of deze freeware variant die beweert beter te zijn dan Spy++

GipsySoft Winspector.

Professionele website nodig?


  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
thx maar kep al iets moois gevonden: "ResHacker" , werkt als een tierelier :)
Pagina: 1