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=7686

    if (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!


Anmelden zum Antworten