Entwickler-Ecke

Windows API - Steuerung von Fremdem Programm -> Tastaureingabe in Textfeld


Alice - Do 11.07.13 15:44
Titel: Steuerung von Fremdem Programm -> Tastaureingabe in Textfeld
Hallo Boardies,

ich will einen Telefonie Client Quasi Fernsteuern. x86 / x64 unter Win7

Manuell geht das so:

Start:
TelNrFeld: Leer
Button 'Anrufen': Disabled

Manuelle Eingabe:
Nummer eingeben im TelNrFeld
den Button 'Anrufen' (nun Enabled) betätigen.

Im Prinzip will ich genau das selbe, halt von außerhalb Steuern.

Bisheriges Vorgehensweise:
Application Handle holen -> Findwindowbytitle
ID des Controls darin auslesen -> GetDlgCtrlID

dann per Sendmessage, WM_SETTEXT die Nummer übergeben.
Button 'Anrufen' drücken.

klappt soweit auch alles, d.h. Text(Nr) übergeben, Button drücken

Jedoch bleibt der Button 'Anrufen' Disabled nachdem ich den Text per Sendmessage
reingeschrieben habe, danach kann ich natürlich keinen button betätigen da
er noch disabled ist. sobald ich manuell in das textfeld eine zb. führende zusätzliche null
ist der Button Enabled und der buttonpress via fernsteuerung gelingt.

was muss ich ändern?

thx


jaenicke - Do 11.07.13 16:24

Probier mal SendInput:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646310(v=vs.85).aspx
Vielleicht aktiviert das den Button, wenn der Programmierer das bei Mousedown oder Mouseup eingebaut hat.


Alice - Do 11.07.13 17:01

hi,

erstmal danke für den tip.

ich probiere das mal aus, kannte ich gar nicht!


Alice - Mo 15.07.13 08:51

user profile iconAlice hat folgendes geschrieben Zum zitierten Posting springen:
hi,

erstmal danke für den tip.

ich probiere das mal aus, kannte ich gar nicht!


Also mit 'Sendinput' läuft das ganze nun gut, hier Lokal auf meinem Rechner. Danke !

Jedoch tut sich mir grade ein anderes Problem auf:
Die zu Steuernde Applikation läuft innerhalb von Citrix.

Wenn ich mir nun die Applikation innerhalb der Citrix Welt ansehen, sehe ich das nur das MainWindow
ein Handle bekommt, alle anderen eingebetteten Controls werden anscheinend nicht mit übergeben.

Somit komme ich nicht an die einzelnen Controls innerhalb der Form heran und kann nichts Steuern usw.

Irgendwelche Tips hierzu?, oder gibt es eine Mögl. Citrix dazu zu bewegen alle Handles dieses Programms zu übergeben?

Alice


Narses - Mo 15.07.13 13:59

Moin!

user profile iconAlice hat folgendes geschrieben Zum zitierten Posting springen:
Die zu Steuernde Applikation läuft innerhalb von Citrix.
[...]
Irgendwelche Tips hierzu?
Starte deine Anwendung im Kontext der Citrix-Session (also auf dem Server). Lokal auf deinem Rechner (also dem Session-Host) kommst du da nicht ran (und das ist auch gut so).

cu
Narses


Alice - Mo 15.07.13 17:00

ich hatte schon versucht, innerhalb einer Citrix-Session über eine gemountetes verzeichniss die app.
zu starten und es so zu versuchen, dennoch kein zugriff auf die handles.

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Moin!
Starte deine Anwendung im Kontext der Citrix-Session (also auf dem Server). Lokal auf deinem Rechner (also dem Session-Host) kommst du da nicht ran (und das ist auch gut so).



ok, was heisst das genau?

wo muss meine kleine app liegen und wie muss ich sie starten damit ich
auf die handles zugreifen kann, danke dir :-)

Alice


jaenicke - Mo 15.07.13 20:14

Du greifst ja mit Citrix auf einen Server zu. Und genau dort muss parallel zu dem zu steuernden Programm auch dein Programm liegen.


Alice - Mi 17.07.13 16:17

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Probier mal SendInput:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646310(v=vs.85).aspx
Vielleicht aktiviert das den Button, wenn der Programmierer das bei Mousedown oder Mouseup eingebaut hat.


Mir ist es hiermit gelungen einen Text in eine Fremde Applikation zu schreiben,
jedoch nicht das senden eines zb. " Ctrl + D "

Wie kann ich das mit der o.g. Funktion bewerkstelligen?

Danke

Alice


jaenicke - Mi 17.07.13 17:25

In welcher Reihenfolge sendest du denn?
Funktionieren sollte:
Ctrl down, D down, D up, Ctrl up


Alice - Fr 16.08.13 09:33

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
In welcher Reihenfolge sendest du denn?
Funktionieren sollte:
Ctrl down, D down, D up, Ctrl up


Hi,

so hatte ich das auch Versucht. Leider ohne erfolg.

Mit welcher Funktion bewerkstellige ich das am besten?

thx

Alice


jaenicke - Fr 16.08.13 10:34

Vielleicht hilft dir das weiter, das ist ein Wrapper für diese Funktion:
http://www.delphipraxis.net/154931-sendinputhelper-ein-wrapper-der-den-umgang-mit-sendinput-vereinfacht.html

Da du deinen Quelltext nicht gepostet hast, kann ich nicht sagen warum das bei dir nicht funktioniert. Prinzipiell kann die Funktion jedenfalls auch Tastenkombinationen simulieren.