2009-04-14 4 views
4

Ich arbeite an einem Projekt, das einen Tastendruck von der Windows-Taste emulieren muss. Ich habe SendKeys.Send vergeblich versucht.Wie sende ich Keyboard Scan Codes manuell?

Insbesondere ist die Windows-Taste Bedürfnisse Konzert mit einem Knopf kommen. Das heißt, ich möchte Windows Key und Plus/Minus senden.

Antwort

1

Dieses zu viel des Guten, aber Sie könnten versuchen, AutoItX mit dem ein Weg AutoIt als DLL zu verwenden ist. Ich habe nur eigenständige Skripte geschrieben, aber ich weiß, dass es mit AutoIt sehr einfach ist, das Drücken der Windows-Taste zu simulieren.

beispielsweise den Dialog zu öffnen ist nur:

Send ("# r"); Win + R

Run =
2

Ich denke, die beste Wahl keybd_event keydown (genannt ExtendedKey) mit dem LWin Wert des System.Windows.Forms.Keys Enum verwendet, dann keydown zweite Zeichen (+), und keyup beiden Tasten.

Ich glaube nicht, Tastaturbefehle mit der Windows-Taste als Modifikator arbeitet.

6

Ich würde hinzufügen, dass es oft unwahrscheinlich ist, dass Sie niedrigere Funktionen wie diese im .NET-Framework finden. Wenn Sie waren verwirrt, warum die Vorschläge sowohl wies auf „non C#“ Funktionen, dann haben Sie wahrscheinlich einige Details über P/Invoke nutzen könnten.

Grundsätzlich gibt es Möglichkeiten, C# -Funktionen zu definieren, die sie mit Windows-API-Funktionen verknüpfen, die nicht in .NET-Assemblies vorhanden sind (stattdessen sind sie normalerweise in C++ implementiert und als Standard-DLL verfügbar). Dieser Prozess wird als "(Windows) Platform Invoking" (also P/Invoke) betrachtet.

Es kann zunächst ein wenig wackelig sein, alle Datentypen zwischen C++ - und C# -Anrufen zusammenzufassen, aber glücklicherweise gibt es andere, die den Weg geebnet haben.

Die vorgeschlagene Funktion, SendInput, hat eine PInvoke wrapper über PInvoke.net. Wenn diese Wrapperklasse in Ihrer Assembly verfügbar ist, können Sie SendInput wie eine C# -Funktion aufrufen.

PInvoke.net ist im Grunde ein PInvoke Wiki für bekannte API-Aufrufe in den Fenstern, und hat typischerweise einen C#/VB.NET-Wrapper von API-Aufrufen.