Strg+V => Shift+Einf - nur wie?
-
Hi,
also ich hab beschloss mal ein Programm zu schreiben, was einigen in der Schule helfen soll mit älterer Software klar zu kommen! In der Software wird nur Strg+Ins, Shift+Inf und Shift+ Entf unterstützt statt der üblichen Strg+C, Strg+V und Strg+X kompinationen! Da kommen einige in meiner Klass nicht mit klar!SO hab ich mit gedacht ich regge einen Hotkey (http://www.c-plusplus.net/forum/viewtopic.php?t=39144 - funktioniert aus) und simuliere dann einen Tastendruck!
Bei Strg+C funktioniert das auch! Da ich aber bei Strg+V das Strg irgendwie wegbekommen muss, soll ja dann nur Shift+Einf sein, bekomme ich Probleme!
Wie kann ich also Tasten die gedrückt sind an Windows "vorbei leiten" um Strg+V in Shift+Einf umzuändern! Oder würdet ihr das ganz anders angehen?
MfG
Alexander Sulfrian
-
Hi,
ich will nicht drängeln!Ich wollt nur mal wissen ob ihr meine Frage nicht versteht oder keine Antwort wisst außern einen neuen Tastaturtreiber zu schreiben?
MfG
Alexander Sulfrian
-
Suchfunktion benutzen!?
http://www.c-plusplus.net/forum/viewtopic.php?t=7686if (Keys == STRG+V) { SchickeNachricht(AnderesProg, SHIFT+Einfg); }
-
Hi,
erstmal danke! Nur wie bekomme ich das Programm raus was gerade windowsweit im Vordergrund ist bzw. den Focus hat?Danke
Alexander Sulfrian
-
HI,
irgendwas mache ich immernoch falsch:HWND window = GetFocus(); SendMessage(window, WM_KEYDOWN, 0x10, 24); SendMessage(window, WM_KEYDOWN, VK_INSERT, 24);
Nur was?
Dei Strg+C mache ich das ja einfach mit:
keybd_event(VK_CONTROL, 0, 0, 0); keybd_event(VK_INSERT, 0, 0, 0); keybd_event(VK_INSERT, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
Das geht ja! Aber das von oben nicht! Was mache ich also falsch?
MfG
Alexander Sulfrian
-
Hi,
also einen Fehler hab ich schon gefunden:HWND window = GetForegroundWindow(); AttachThreadInput(GetWindowThreadProcessId(window, NULL) , GetCurrentThreadId(), true); HWND Edit = GetFocus(); AttachThreadInput(GetWindowThreadProcessId(window, NULL) , GetCurrentThreadId(), false);
Nur wenn ich jetzt ein WM_KEYDOWN an Edit sende passier immer noch nichts! Und ich hab schon überprüft: Edit ist das Fenster welches den Fokus hat!
Was mache ich falsch?
MfG
Alexander Sulfrian
PS: Vielleicht sollte man mich ins WINAPI Forum verschieben!
-
tut mir leid Alexander, dass du selbstgespräche führen musstest. Ich hab zur Zeit andere Probleme
ich schieb dich laut wunsch ins WinApi was wohl doch besser passt...
sorry.
-
Ist schon gut ich habs!
Ich hab ja versucht die Tastencomb für Copy&Paste im alten Stil zu simulieren! Jetzt hab ich aber die WM_COPY uns. Messages gefunen und es hat auf Anhieb geklappt:
HWND window = GetForegroundWindow(); AttachThreadInput(GetWindowThreadProcessId(window, NULL) , GetCurrentThreadId(), true); HWND hwnd = GetFocus(); if (Msg.LParamHi == 0x43) //Strg+C SendMessage(hwnd, WM_COPY, 0, 0); else if (Msg.LParamHi == 0x56) //Strg+V SendMessage(hwnd, WM_PASTE, 0, 0); else if (Msg.LParamHi == 0x58) //Strg+X SendMessage(hwnd, WM_CUT, 0, 0); AttachThreadInput(GetWindowThreadProcessId(window, NULL) , GetCurrentThreadId(), false);
Das dürfte für alle Anwendungen funktionieren! (außer Anwendungen im DOS Fenster - dürfte aber klar sein!)
MfG
Alexander Sulfrian
PS: Mein Programm, welches versteckt im Hintergrund arbeitet, wird bald (etwa ab Fr) auf meiner Homepage ( www.AlexSoftware.net.tc )zum Downlaod bereit stehen!