Input Boxen einer Fremdapplikation automatisch füllen
-
Hallo,
ich hab vor einigen Wochen schon nachgefragt wie ich den Dialogtitel von Fremdapplikationen per WinAPI ändern kann. Auf diese Frage wurde mir wunderbar geholfen.
Allerdings hab ich mittlerweile eine weitere Frage.
Ich rufe über ein von mir erstelletes Programm ("Booty") eine andere Applikation auf. Bei dieser erscheint ein Login Screen. Jetzt sollen in "Booty" Username und Passwort hinterlegbar sein. Diese Daten sollen dann praktisch an die Fremdapplikation gesandt werden, so das es dem User nicht nötig ist, ständig seine Daten einzugeben.
Ist es also möglich Strings an Input Felder einer anderen Applikation zu senden? Und ist es möglich im Anschluss dann automatisch einen "Login" Button zu drücken?
Vielen Dank für eure Hilfe
Gruss
Thomas
-
mit Hooking gehts aber geht evtl auch besser , kA
keybd_event(KeyLeft, 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0 );// Simulate a key press(Ein Mausklick ist auch ein keybd_event)
Dann noch den Mauszieger an die richtige Position setzen :(di musst du halt wissen oder irgendwie herausfinden, weiss nicht wie das geht )
mouse_event(MOUSEEVENTF_MOVE | MOUSEEVENT_ABSOLUTE ,posx,posy,0,0); //Set The Cursor to the place (posx/posy)
-
Per EnumChildWindows alle Childs durchsteppen (bei Passwort evtl. auf den Style ES_PASSWORD vergleichen), per SetDlgItemText() die Infos setzen, den ButtonClick per SendMessage(HandleZumDialog, WM_COMMAND, MAKEWPARAM(WM_IDDESBUTTONS, 0), NULL)
Spy++ oder Winspector Spy sind da meißt Deine Freunde und ideale Hilfsmittel...
-
Hallo,
erstmal danke für deine Hilfe!
Allerdings versteh ich noch nicht ganz wie ich mit "EnumChildWindows" durch meine Fenster 'durchzappen' kann? Kann ich nicht mit "FindWindow" arbeiten?
Den Rest probier ich dann wenn ich Infos zu meinen Fragen hab...
Nochmals dank
Tom
-
FindWindow findet nur "Top-Level-Fenster", wenn schon müßtest Du mit FindWindowEx arbeiten...
Ist aber (so finde ich) weitaus aufwändiger als mit EnumWindows...
EnumWindows ist ganz einfach:
Es benötigt eine CALLBACK-Funktion, die dann mit ALLEN ChildWindow-Handles deines "Hauptfensters" aufgerufen wird, eines nach dem anderen.BOOL CALLBACK EnumChildProc(HWND hWnd, LPARAM lParam) { // hWnd ist ein Handle auf ein Childfenster, also ein Button, Editfeld oder wasweißich! // Also mußt Du hier prüfen, ob es dein gewünschtes Fenster ist (z. B. ein Editfeld) // und die Arbeit mit diesem Fenster machen. // TRUE zurückgeben, wenn Du weiter mit dem nächsten Handle // machen willst, FALSE wenn Du kein weiteres ChildFenster mehr brauchst return TRUE; }Aufrufen tust Du das so:
EnumChildWindows(HandlezumHauptfenster, EnumChildProc, NULL);Die EnumChildProc wird so oft aufgerufen, wie ChildFenster vorhanden sind, und zwar jedesmal mit dem HWND zum entsprechenden ChildFenster!
-
Hallöchen,
danke für die genaue Erklärung, allerdings versteh ich es immernoch nicht so richtig.
Wieso kann ich es nicht wie folgt machen:
Um den Dialogtitel der Fremdapplikation zu ändern benutze ich folgendes Kommando:
CWnd* pWnd = FindWindow(NULL,"Business"); if(pWnd) { char text[255] = "Dies ist der neue Titel"; pWnd->SetWindowText(text); }wäre es dann nicht möglich mit die Einträge zu setzen?
pWnd->SetDlgItemText(IDC_USERNAME,"Testuser") pWnd->SetDlgItemText(IDC_PASSWORD,"TestPassword")aber dann würden wir schon zum zweiten Problem kommen... Ich bin nicht in der Lage über Spy++ die Handles rauszubekommen. Wahrscheinlich stelle ich mich nur zu blöd an...
Trotzdem danke!
-
Galdan schrieb:
CWnd* pWnd = FindWindow(NULL,"Business");Suchst du eine MFC oder eine WinAPI Lösung?!
Galdan schrieb:
wäre es dann nicht möglich mit die Einträge zu setzen?
Wenn die Controls direkte Childs sind könnte das so klappen

Galdan schrieb:
Ich bin nicht in der Lage über Spy++ die Handles rauszubekommen. Wahrscheinlich stelle ich mich nur zu blöd an...
Die Handles würden dir auch wenig bringen, da die sich jedes Mal ändern - du brauchst die ID.
Diese bekommst du z.B. so:
- Fenster suchen anklicken
- Suchwerkzeug auf das gewünschte Control ziehen
- Eigenschaften anzeigen lassen
- Steuerelement-ID anschauen (Hex)