Fenster finden und Tastatur anschalg simulieren



  • Hi

    Ich hab nen Problem und finde die Lösung nicht. Nur Ansätze die keine Lösung bringen.

    Folgendes Problem:
    Ich rufe ein VB Script auf. Dieses VB Script zeigt ein Fenster wo man eine Zahl oder ein * eingeben soll. Ich habe das Handle auf den dazugehörigen wsrcipt.exe Prozess, komme aber partou nicht an das Fenster auch ein

    ::PostMessage(HWND_BROADCAST, WM_KEYDOWN, VK_MULTIPLY,1);
    

    brachte kein * in die Textbox.

    Ach ja, den Fenstertitel kenne ich auch. Aber über

    ::FindWindow(0, strTitle);
    

    kriege ich leider auch kein Handle.



  • Guck dir das doch mal mit Spy++ an und geb dann die Fensterklasse an.



  • Hab mir das jetzt mal mit Spy++ angeguckt.
    Da steht unter "Class Name" "#32770 (Dialog)".
    Also hab ich jetzt mal

    HWND hWnd = ::FindWindow("Dialog", strTitle);
    ::PostMessage(hWnd, WM_KEYDOWN, VK_MULTIPLY,1);
    

    gemacht.

    Aber es erscheint immernoch kein * in der EditBox.
    Liegts an der Message oder dem Handle?



  • dein findwindow() findet explizit nur das fenster, das als klasse "dialog" registriert hat UND den fenstertitel strTitle besitzt.

    wenn das zu findende fenster die fensterklasse mit dem namen "dialog" hat, dann lautet der code:

    FindWindow("dialog", NULL);
    

    mfg pendragon



  • Genau das war ja was ich wollte Pendragon.
    Allerdings habe ich immer ein Handle aus lauter Nullen bekommen 😞

    Ich bin jetzt schon so weit, dass ich über

    ::FindWindow(0,strTitle);
    

    Das richtige Handle kriege.
    Aber weder mit

    ::PostMessage(hWnd, WM_KEYDOWN, VK_MULTIPLY,1);
    

    noch mit

    keybd_event(VK_MULTIPLY, 0, KEYEVENTF_KEYUP, 0);
    

    kriege ich das Sternchen in das Edit Feld. Es wird einfach ignoriert 😞

    Irgendjemand eine Idee wo das Problem liegt?



  • ich glaube, du hast einen grundsätzlichen fehler in deinem programmaufbau. so wie du das jetzt machst, wird die nachricht an das fenster und nicht an die editbox geschickt. kein wunder, dass nichts angezeigt wird. was bewriken die letzten beiden parameter deiner postmessage?



  • VK_MULTIPLY ist der keycode für *
    und 1 ist die Anzahl.
    So wurde es mir von nem Kollegen gesagt.
    Ich soll WM_KEYDOWN an das Fenster schicken, so dass es intern VK_MULTIPLY und 1 verarbeitet.



  • dann musst du in deinem vb programm WM_KEYDOWN abfangen und anschließend LPARAM und WPARAM auswerten und in deine edit box schreiben...



  • An die VB Scripte darf ich nicht ran. Hab mich jetzt aber mit den Erstellern der Scripte auf ein Workaround einigen können.
    Allerdings muss es da einen Weg geben. Per AutoIt3 Script funktioniert das schreiben in die Fenster bestens.


Log in to reply