dpher Napisano Grudzień 12, 2010 Zgłoś Share Napisano Grudzień 12, 2010 Zastanawiam się, czy jest możliwość wykorzystania tego komponentu, żeby wywoływał procedury wraz z naciśnięciem kombinacji ctrl+v? Chcę napisać program, który podmienia wartości w schowku po kliknięciu ctrl+v (tylko dla wygody). Jeśli jest taka możliwość to prosiłbym o wskazanie w jaki sposób to zrobić. Link do komentarza Udostępnij na innych stronach More sharing options...
olesio Napisano Grudzień 13, 2010 Zgłoś Share Napisano Grudzień 13, 2010 A po co używać tego komponentu z timerami, jak powinien na wszystkich nowszych Windowsach od XP począwszy zadziałać taki globalny Hook na klawiaturę jak pokazałem poniżej. Tylko trochę szkoda że nie szukałeś samodzielnie informacji na ten temat, bo tak napisałem cały program za Ciebie i nic się nie nauczyłeś. Kod testowałem pod Delphi 7 Personal oraz Windows XP SP 2 i działa jak należy. Dodam, że podobne kody znaleźć można w google i dopasować. //... var Form1 : TForm1; const WH_KEYBOARD_LL = $000D; type tagKBDLLHOOKSTRUCT = packed record vkCode : DWord; ScanCode : DWord; Flags : DWord; Time : DWord; dwExtraInfo : integer; end; KBDLLHOOKSTRUCT = tagKBDLLHOOKSTRUCT; PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT; var HKHook : HHook; implementation {$R *.dfm} procedure CopyTextToClipBoard(TextToCopy : string); var ClipBoardH : HGLOBAL; begin OpenClipboard(0); EmptyClipboard; ClipBoardH := GlobalAlloc(GMEM_MOVEABLE and GMEM_DDESHARE, Length(TextToCopy) + 1); StrCopy(GlobalLock(ClipBoardH), PChar(TextToCopy)); GlobalUnlock(ClipBoardH); SetClipboardData(CF_TEXT, ClipBoardH); CloseClipboard; end; function LowLevelKeyboardProc(nCode : Integer; wParam : Integer; lParam : Integer) : Integer; stdcall; export; {$WARN COMPARING_SIGNED_UNSIGNED OFF} var Hook : PKBDLLHOOKSTRUCT; bControlKeyDown : boolean; begin Hook := Pointer(lParam); case nCode of HC_ACTION : begin bControlKeyDown := ((GetAsyncKeyState(VK_CONTROL) shr ((Sizeof(SHORT) * 8) - 1)) <> 0); if (Hook.vkCode = VKKeyScan('v')) and (bControlKeyDown = True) then begin CopyTextToClipBoard('Tekst do wklejenia do Schowka'); Result := 0; // Lub Result := 1; jak System ma nie reagować na klawisz tylko skopiować tekst end else begin Result := CallNextHookEx(HKHook, nCode, wParam, lParam); end; end; else begin Result := CallNextHookEx(HKHook, nCode, wParam, lParam); end; end; end; procedure TForm1.FormCreate(Sender : TObject); begin HKHook := SetWindowsHookEx(WH_KEYBOARD_LL, @LowLevelKeyboardProc, hInstance, 0); end; procedure TForm1.FormDestroy(Sender : TObject); begin UnHookWindowsHookEx(HKHook); end; Pozdrawiam: olesio Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.