VK_SHIFT per PostMessage senden
-
Hi,
ich möchte gern per PostMessage ein z.B. "%" oder "&" Zeichen an ein Fenster senden. Den Ascii-Wert des Zeichens zu senden klappt in meinem Fall nicht, deswegen möchte ich Shift + "5" bzw. "6" senden.
Nur wie stelle ich das an?
Die Ergebnisse der Boardsuche haben mir nicht wirklich weitergeholfen.
Ich danke Euch im Voraus.
ravel
-
Vielleicht keybd_event? Oder auch die Nachricht WM_KEYUP, WM_KEYDOWN.
-
Hi,
nein, kein keybd_event, ich sagte PostMessage. WM_KEYUP und WM_KEYDOWN habe ich natürlich benutzt.
Gruß
ravel
-
Hi,
ist es wirklich so schwer? - Ich bin noch bestimmt nicht der Erste der einen Shift-Druck per PostMessage versenden will.
Gruß
ravel
-
Warum willst du kein keybd_event verwenden? Ansonsten: evtl hilft es, wenn du noch WM_CHAR sendest

-
flenders schrieb:
Warum willst du kein keybd_event verwenden? Ansonsten: evtl hilft es, wenn du noch WM_CHAR sendest

Hi,
weil das empfangende Fenster im Hintergrund ist und auch dort bleiben soll.
WM_CHAR zusätzlich mitzusenden habe ich auch bereits getestet, leider ohne Erfolg.Ich wäre also für weitere Hilfe sehr Dankbar!
Gruß
ravel
-
Wirklich Ahnung habe ich davon auch nicht, aber evtl. kannst du über AttachThreadInput und dann SendInput o.ä. was machen

-
Hi!
Also flenders, dafür dass Du keine Ahnung hast, hast Du aber ziemlich in Schwarze getroffen und dafür danke ich Dir!

Hier erstmal die wichtigsten Stellen meines Codes:
hwnd = FindWindow(0,"Fenstertitel"); DWORD fenster=0; DWORD self = GetCurrentThreadId(); GetWindowThreadProcessId(hwnd,&fenster); AttachThreadInput(fenster,self,true); //attach UINT scancode = MapVirtualKey(VK_SHIFT,0); KEYBDINPUT ki; INPUT ipEvent; UINT nNumEvents; ki.wVk= VK_SHIFT; ki.wScan=scancode; ki.dwFlags=KEYEVENTF_EXTENDEDKEY; ki.time=0; ki.dwExtraInfo=0; ipEvent.type=INPUT_KEYBOARD; ipEvent.ki=ki; SendInput(1,&ipEvent,sizeof(ipEvent)); // Hier der PostMessage kram AttachThreadInput(fenster,self,false); // detachEin paar Fragen habe ich aber trotzdem noch.
- Mit dem Code setze ich scheinbar ein globales SHIFT_DOWN, geht das auch nur für das gewünschte Fenster? Hab ich evtl. beim AttachThreadInput einen Fehler gemacht?
- Wie kann ich Shift wieder loslassen bzw. den gedrückten Zustand aufheben? Nochmals SendInput(1,&ipEvent,sizeof(ipEvent)); zu senden hat leider nicht geklappt.
- Kann mal jemand den Code durchsehen, gibts daran noch irgendetwas zu verbessern?Ich danke im Voraus und nochmal ein großes Dankeschön an flenders! (malwieder)
Gruß
ravel
-
AAAAHHHH!!
Ich beiß gleich ins Keyboard (und brauch dabei nichtmal Shift zu treffen), denn diese PostMessage Nachricht macht genau das was ich will, nämlich das "/"-Zeichen senden:
PostMessage(hwnd, WM_CHAR, 47, 0x80001);
Naja, wenigstens habe ich jetzt was gelernt...
PS: Hoch lebe Winspector!
Gruß
ravel