Wie kontrolliere ich die text-Eingabebereich programmgesteuert (TabTip.exe) in Windows Vista/7
Ich bin der Anpassung einer Anwendung für touch-screen-interface und wir wollen die tablet-text-Eingabebereich in Windows Vista/7, insbesondere seine Tastatur. Ich möchte, um zu zeigen und verstecken Sie ihn als angemessen für mein app. Im Grunde möchte ich ShowKeyboard()
und HideKeyboard()
Funktionen. Was ist der beste Weg, dies zu kontrollieren?
Ich schaute auf die ITextInputPanel API, aber ich war nicht in der Lage zu Steuern, die Tastatur direkt mit ihm (vielleicht habe ich etwas verpasst?). Ich habe auch erfolglos versucht, Fenster senden von Nachrichten an Ihre Fenster.
Die Anwendung geschrieben in C++/MFC.
Jegliche Hinweise sind wir sehr dankbar.
InformationsquelleAutor der Frage Yngve Hammersland | 2009-11-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich das problem gelöst. Es stellt sich heraus, dass Spy++ ist wirklich ein Windows-Programmierer, die beste Freundin.
Ersten, die window-Klasse von der "input panel" - Fenster entpuppt sich "IPTip_Main_Window". Ich benutze dies, um das Fenster-handle wie so:
Es stellt sich heraus, dass ich gerade das gleiche posten WM_COMMAND-Nachrichten, die über sein eigenes Menü senden. Die meisten Operationen werden im Menü zur Verfügung: dock oben, dock unten und float. Der code für den Versand dieser Nachrichten sind:
wobei X 10021 für dock unten, 10023 für dock-top und 10020 zum schweben. Die 0 in das hohe word der anzeigt, dass die Nachricht von einem Menü.
Endlich, ich wollte in der Lage sein, ein-und ausblenden des Eingabebereichs an. Ich bemerkte, dass ich konnte wieder auf den Schreibtisch band, die enthält nur eine einzige Taste zum Umschalten der Sichtbarkeit des Eingabebereichs. Spy++ - ing auf die Nachrichten, die aus dieser Schaltfläche ergeben, dass es sendet eine Globale registriert Meldungsfenster mit dem Namen "TabletInputPanelDeskBandClicked".
Senden Sie diese Nachricht an die input-panel bewirkt, dass es, um die Sichtbarkeit umzuschalten.
Den HideKeyboard () - Funktion sieht nun wie folgt aus:
Die ShowWindow() Funktion implementiert ist ähnlich, aber es beginnt auch die Tastatur, wenn es nicht läuft.
Update:
Scheint es, dass diese inter-Prozess-messaging ist verboten, in Windows Vista/7. Wenn dieser Befehl ausgeführt wird in einem nicht elevated Prozess wird es nicht mit "Zugriff verweigert". Meine Vermutung ist, dass dies verursacht wird durch die User Interface Process Isolation (UIPI) Schutz in Windows Vista/7. Da der Tablet PC-Eingabebereich ausgeführt wird, als ein Kind-Prozess des service-es hat eine höhere integrity level als user-Programme, und somit nicht gesendet werden kann, alle (oder einen bestimmten) Nachrichten.
Update:
Es stellt sich heraus, dass der Tablet-PC-Input-Panel ist in der Tat laufen in high integrity level, in der Erwägung, dass die Prozesse gestartet, die von einem eingeschränkten Benutzerkonto ist medium integrity level.
InformationsquelleAutor der Antwort Yngve Hammersland
Für Windows 8:
Hinweis: ebenso wie die Lösung für Windows 7, dies erfordert einen erhöhten Prozess.
Der Eingabebereich ist nicht ein Nachkomme von HWND_DESKTOP. (Es ist wohl eine Art U-Bahn-Fenster). Um das Fenster-handle einer Reihe von horizontalen sweeps in a raster-like pattern testing mit WindowFromPoint(). Für jeden test, überprüfen Sie die window-Klasse des übergeordneten Fensters, um zu sehen, wenn es "IPTip_Main_Window".
Zeigen das "input panel" starten Sie
"C:\\Program Files\\Common Files\\microsoft shared\\ink\\tabtip.exe"
. Um festzustellen, ob es bereits im angedockten Modus, Lesen registry Schlüssel:Einen Wert von 0 zeigt die input-panel ist im floating-Modus. Wenn das der Fall war, veröffentlichen die folgende Nachricht zum Umschalten der gedockten Zustand:
Um die Tastatur auszublenden, post Folgendes:
InformationsquelleAutor der Antwort Ryand