Hallo,
ich habe ein Problem, welches sich auf Tastendrücke bezieht.
Und zwar möchte ich einen Tastendruck "simulieren". Dazu habe ich in der API die Funktion keybd_event gefunden. Das klappt auch soweit, aber wie kann ich es realisieren dass die Taste PERMANENT gedrückt ist bis ich die wieder "freigebe". Mit der Funktion selber kann ich nur einen einmaligen Tastendruck simulieren.
Hat jemand eine Idee?
MFG Don
Seite 1 von 1
Tastendruck Simulieren C#
Anzeige
#3
geschrieben 06. April 2006 - 20:17
Das hatten wir doch schon mal so ähnlich...
// frei unter GPL :-) namespace blah { using System; using System.Runtime.InteropServices; public class foobar { public static void main(String[] args) { [DllImport("user32.dll",EntryPoint="PostMessage")] public static extern IntPtr PostMessage(IntPtr hWnd, int msg, int wParam, int lParam); [DllImport("user32.dll",EntryPoint="FindWindow")] private static extern int FindWindow(string _ClassName, string _WindowName); private const int WM_KEYDOWN = 0x0100; private const int VK_F8 = 0x77; // oder die jeweilige Taste private const int Flags = 0x0000; // keine Spezialtaste, Taste war vorher nicht gedrückt int HWND = FindWindow("Shell_TrayWnd", NULL); //oder der jeweilige Name des Fenster PostMessage(*HWND, WM_KEYDOWN, VK_F8, Flags ); } } }
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Ja, mata ne!
(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
Ja, mata ne!
(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
#4
geschrieben 06. April 2006 - 21:18
hallo
kann man auch die windows-taste irgendwie simulieren ? die hab ich hier nicht auf der ersatztastatur drauf aber bräuchte sie eben.
kann man auch die windows-taste irgendwie simulieren ? die hab ich hier nicht auf der ersatztastatur drauf aber bräuchte sie eben.
#5
geschrieben 06. April 2006 - 21:54
Der Scancode der Windows-Taste ist 0x5DE0.
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Ja, mata ne!
(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
Ja, mata ne!
(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
#6
geschrieben 07. April 2006 - 07:33
Mhh, das mit der Schleife klappt nich so ganz, weil ich dann nur x Tastendrücke pro Sekunde simuliere und keine wirklich permanent gedrückte taste.
Und das Beispiel klappt leider auch net so wirklich.
Kann ich denn net einfach en Flag setzen?
Und das Beispiel klappt leider auch net so wirklich.
Kann ich denn net einfach en Flag setzen?
#7
geschrieben 07. April 2006 - 08:14
Ich korrigiere mich. Das Beispiel funzt. Aber leider habe ich jetzt festgestellt das das Zielprogram die tasten per DirectInput abfragt.
Kann ich da auch was simulieren? Hab davon gar keine Ahnung.
Kann ich da auch was simulieren? Hab davon gar keine Ahnung.
#8
geschrieben 07. April 2006 - 18:26
DirectInputDevice dev = new DirectX9().DirectInputCreate().CreateDevice("GUID_SysKeyboard");
dev.SetCommonDataFormat(DIFORMAT_KEYBOARD);
dev.SetCooperativeLevel(*HWND, DISCL_BACKGROUND | DISCL_NONEXCLUSIVE);
dev.SetDeviceStateKeyboard((new DIKEYBOARDSTATE()).setKey(scancode));
Bringt aber nur was, wenn die Zielapplikation ebenfalls NONEXCLUSIVE benutzt. Ansonsten muss man selbst Events erzeugen und via DDE an die Zielapplikation schicken...
Und frag mich nicht welche Header und Libs man braucht.
dev.SetCommonDataFormat(DIFORMAT_KEYBOARD);
dev.SetCooperativeLevel(*HWND, DISCL_BACKGROUND | DISCL_NONEXCLUSIVE);
dev.SetDeviceStateKeyboard((new DIKEYBOARDSTATE()).setKey(scancode));
Bringt aber nur was, wenn die Zielapplikation ebenfalls NONEXCLUSIVE benutzt. Ansonsten muss man selbst Events erzeugen und via DDE an die Zielapplikation schicken...
Und frag mich nicht welche Header und Libs man braucht.
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Ja, mata ne!
(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
Ja, mata ne!
(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
Thema verteilen:
Seite 1 von 1