Witam. Piszę takiego małego hotkey's umożliwiającego ustawianie różnych opcji przez user'a. Wiem jak wyłapywać czy skrót zdefiniowany przez usera został użyty, ale nie wiem jak obsłużyć akcję "wklej". Chodzi o to że mamy np w jakimś lineEdit podany teks i np po wciśnięciu skrótu Alt + v tekst został wysłany do aktywnej aplikacji i obsłużony podobnie jak polecenie wklej. Pisze aplikację w C++ z wykorzystaniem WinAPI. Dokumentację czytać potrafię, a więc proszę tylko o hasła które pomogą rozwiązać mój problem.
Nie znam dobrze C++, praktycznie wcale, nie wiem też co to lineEdit, ale rozumiem że wysłanie komuniatu WM_PASTE
do kontrolki nie pomaga? Bo o ile dobrze zrozumiałem, to chcesz zasymulowac wklejenie? A i na przyszłośc TAGUJ WĄTEK!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Chyba tyle wykrzykników powinno wystarczyć, żeby może chociaż jedna osoba zapamiętała i się zastosowała.
WM_PASTE raczej nie pomoże, gdyż nie chodzi mi o wklejenie tekstu ze schowka... tylko o wklejanie teks który user poda w programie do aktywnego okna :( Ogólnie program ma wyglądać tak:
- user podaje nowy skrót (np alt + v) - to mam
- definiuje że skrót ten ma wklejać tekst podany przez usera - to mam
- user podaje tekst który można zmienić w dowolnej chwili - to mam
- program wyłapuje czy została naciśnięta kombinacja alt + v - to mam
- jeśli tak wysyła do aktywnego okna podany wcześniej tekst - tego nie mam :(
Możesz najpierw wypełnić schowek danymi, a następnie wysłać komunikat WM_PASTE
do danej kontrolki. Zainteresuj się funkcją SetClipboardData
.
Innym wyjściem jest wysłanie kontrolce komunikatu WM_SETTEXT
.
O ile się nie mylę WM_SETTEXT usuwa dany teks i zastępuje go nowym więc raczej nie odzwierciedla zwykłej akcji wklejenia. Pomyślę nad wysłaniem komunikatu WM_PASTE chociaż chciałem zachować nie zależność od schowka systemowego :(
No to najpierw pobierz tekst z kontrolki(WM_GETTEXT
), sklej z docelowym i ustaw za pomocą WM_SETTEXT
Myślałem nad tym ale wydaje mi się że jeśli tekstu jest dużo to operacje takie mogą być czasochłonne, i zastanawiam się czy nie lepiej przechować tekst schowka w jakimś stringu, zmodyfikować schowek, wysłać WM_PASTE i ustawić schowek do wartości poprzedniej ? Która opcja jest "korzystniejsza" ?
Sprawdź to samemu ile co zajmie, przy pomocy GetTickCount
albo innymi algorytmami do wygooglowania na mierzenie czasu wykonania danej operacji. Skoro chcesz modyfikowac zawartośc tekstu kontrolki scalając jej tekst z jakimś innym, to po co w ogóle zawracasz sobie głowe Schowkiem? Skoro i tak wklejanie do kontrolki przez WM_PASTE nic nie daje. No chyba, że ten tekst ma być później do dyzpozycji użytkownika w Schowku, ale o tym chyba nie wspomniałeś.