Benutzer mit den meisten Antworten
Tastencodes aus RDP Sitzung an Hostpc Durchreichen

Frage
-
Hallo Forum,
Ich habe eine nicht alltägliches Problem, ich soll einen Tastendruck in einer RDP Verbindung(Windows 2003 Server) isolieren und an den Windows Vista Pc der die RDP Verbindung aufgebaut hat durchreichen.
Hat jemand eine Idee wie das geht?
Ich hatte schon daran gedacht ein Datei als Flag in ein Bestimmtes Verzeichnis zusetzen , und auf dem Lokale Pc dieses mit einem Watcher zu überwachen, nur halte ich die Lösung für nicht besonders gut
Hat jemand eine bessere Idee
Besten Dank im Voraus
Bernhard
<object height="0" id="plugin0" style=";z-index:1000;" type="application/x-dgnria" width="0"><param name="tabId" value="ff-tab-0" /><param name="counter" value="3" /></object>
Antworten
-
Hallo Bernhard,
Poste bitte deinen gesamten, nicht funktionierenden Code. Du verwendest - wie es aussieht, und anders als ich - eine Konsolenanwendung. Und das ist schon mal keine besonders gute Voraussetzung für einen Low-Level-Keyboard-Hook.
SetWindowHookEx() bzw. die LowLevelKeyboardProc-Callback-Funktion benötigen eine funktionierende Nachrichtenpumpe in der Anwendung (und das ist mit Konsolenanwendungen nicht ganz trivial einzurichten). Ohne Nachrichtenpumpe wird dem aktiven RDP-Client aber womöglich zu viel CPU-Zeit eingeräumt, Verarbeitungszeit die dem empfangenden Programm dann fehlt. Deine Consolen-Anwendung kommt vermutlich einfach nicht zum Zug, da der Thread der den Hook installiert hat, die Windows-Nachricht nie, oder nur sporadisch empfängt. Weitere Details findest Du in der Dokumentation zur LowLevelKeyboardProc (Link weiter oben).
Man muss auch beachten, dass jede Window Station eine eigene Nachrichtenschleife hat, d.h. falls der RDP-Client in einer Window Station läuft, und das empfangende Programm in einer anderen, gibt es für die Nachrichten keinen Weg dieses Boundary zu durchbrechen.
Auch gelten für die Anwendung bzw. für die Remote Desktop Session u.U. verschiedene Sicherheitskontexte, die sich positiv/nachteilig auf die Fähigkeit auswirken, Tastaturanschläge abzufangen.
Gruß
Marcel- Als Antwort markiert BerndSch111 Mittwoch, 7. November 2012 08:40
Alle Antworten
-
Hallo Bernhard,
Hast Du mit GetAsyncKeyState versucht? Oder vielleicht ein KeyBoard Hook?
Viele Grüße,
Ionut
- Bearbeitet Ionut DumaModerator Montag, 5. November 2012 10:32 Broken link
- Als Antwort markiert BerndSch111 Montag, 5. November 2012 10:51
- Tag als Antwort aufgehoben BerndSch111 Montag, 5. November 2012 14:47
- Als Antwort vorgeschlagen Marcel RomaModerator Montag, 5. November 2012 17:43
-
Hallo Bernhard und Ionut,
Mit einem sog. low level hook über SetWindowsHookEx() klappt es garantiert, auch mit dem Windows Server 2003 (da hatte Ionut schon recht gehabt).
Ich hatte mal selbst im C#-Forum eine überarbeitete Version von Stephen Toub's Low-Level Keyboard Hook in C# gepostet. Dort kannst Du einfach im HookCallback-Handler die F7/F8-Keyabfrage auskommentieren und stattdessen diese Zeile einfügen:
this.Invoke(new Action(()=>Text = keys.ToString()));
Damit werden die Tastaturanschläge im Fenstertitel der Test-Form angezeigt, auch wenn Du sie im RDP-Client ausführst.
P.S. Ab Vista ist Elevierung erforderlich.
Gruß
Marcel
- Bearbeitet Marcel RomaModerator Montag, 5. November 2012 16:08 Nachtrag
-
Hallo Ionut,
Ich hatte folgendes Testsetup Windows Vista 32 bit baut RDP Verbindung zu Windows 2003 Server auf und das http://www.codeproject.com/Articles/19004/A-Simple-C-Global-Low-Level-Keyboard-Hook
Demoprogramm wurde auf dem Hosptpc also Windows Vista ausgeführt, solange ich nciht in der RDP sitzung wahr wurden alle a´s und b´s gelogt in der RDP Sitzung angebene a´s uind b´s wurden nichtmehr aufgezeichent
Lg
Bernhard- Bearbeitet BerndSch111 Montag, 5. November 2012 16:05
- Bearbeitet Robert BreitenhoferModerator Dienstag, 6. November 2012 15:12 URL als Link
-
Hallo Bernhard,
Hab's gerade nochmals sowohl von einem Windows XP als auch von einem Windows 7-Client aus getestet, und der Low-Level-Hook funktionierte in beiden Fällen tadellos.
Allerdings mußt Du daran denken, die empfangende Anwendung im elevierten Modus zu starten (als Administrator).
Gruß
Marcel -
Hallo Marcel,
Ich habe das Verhalten bei mir als Video mal aufgezeichent, der Hock schreib alles mit bis ich in die RDP Sitzung gehe dannach nicht mehr, ich habe das Programm direck aus Visual Studio heraus als Administrator gestartet
Keine Ahnung warum es nicht geht, in der 1 Sequentz ist es Windows 7 auf Windows 2008 Server in der 2 Sequenz Windows 7 auf Windows 2003 Server.
Besonders da es bei dir Funktioniert
LG
Bernhard
- Bearbeitet Robert BreitenhoferModerator Dienstag, 6. November 2012 15:18 Formatierung
-
Hallo Bernhard,
Poste bitte deinen gesamten, nicht funktionierenden Code. Du verwendest - wie es aussieht, und anders als ich - eine Konsolenanwendung. Und das ist schon mal keine besonders gute Voraussetzung für einen Low-Level-Keyboard-Hook.
SetWindowHookEx() bzw. die LowLevelKeyboardProc-Callback-Funktion benötigen eine funktionierende Nachrichtenpumpe in der Anwendung (und das ist mit Konsolenanwendungen nicht ganz trivial einzurichten). Ohne Nachrichtenpumpe wird dem aktiven RDP-Client aber womöglich zu viel CPU-Zeit eingeräumt, Verarbeitungszeit die dem empfangenden Programm dann fehlt. Deine Consolen-Anwendung kommt vermutlich einfach nicht zum Zug, da der Thread der den Hook installiert hat, die Windows-Nachricht nie, oder nur sporadisch empfängt. Weitere Details findest Du in der Dokumentation zur LowLevelKeyboardProc (Link weiter oben).
Man muss auch beachten, dass jede Window Station eine eigene Nachrichtenschleife hat, d.h. falls der RDP-Client in einer Window Station läuft, und das empfangende Programm in einer anderen, gibt es für die Nachrichten keinen Weg dieses Boundary zu durchbrechen.
Auch gelten für die Anwendung bzw. für die Remote Desktop Session u.U. verschiedene Sicherheitskontexte, die sich positiv/nachteilig auf die Fähigkeit auswirken, Tastaturanschläge abzufangen.
Gruß
Marcel- Als Antwort markiert BerndSch111 Mittwoch, 7. November 2012 08:40
-
A Endlich es läuft jai Danke !!!
- Bearbeitet BerndSch111 Mittwoch, 7. November 2012 08:40