我有大幹快上的熱鍵(應該運行,只是它給前)調用,剪貼板數據發送到使用文本框的一個MFC應用程序,如何使用熱鍵複製外部應用程序中的文本?
SendMessage(hWnd,WM_PASTE,0,0);
一切工作正常至今。
我們得到了新的要求,我們應該能夠使用熱鍵將選定的文本複製到剪貼板(而不使用Ctrl + C),然後啓動我們的應用程序。
我試過用SendMessage(WM_COPY)
,但是不起作用。
請建議如何在剪貼板上獲取任何其他應用程序的選定文本。
我有大幹快上的熱鍵(應該運行,只是它給前)調用,剪貼板數據發送到使用文本框的一個MFC應用程序,如何使用熱鍵複製外部應用程序中的文本?
SendMessage(hWnd,WM_PASTE,0,0);
一切工作正常至今。
我們得到了新的要求,我們應該能夠使用熱鍵將選定的文本複製到剪貼板(而不使用Ctrl + C),然後啓動我們的應用程序。
我試過用SendMessage(WM_COPY)
,但是不起作用。
請建議如何在剪貼板上獲取任何其他應用程序的選定文本。
最後我自己得到了答案。
我不得不使用SendInput
,下面是示例代碼,
INPUT ip;
// Set up a generic keyboard event.
ip.type = INPUT_KEYBOARD;
ip.ki.wScan = 0; // hardware scan code for key
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;
// Press the "Ctrl" key
ip.ki.wVk = VK_CONTROL;
ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));
// Press the "C" key
ip.ki.wVk = 'C';
ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));
// Release the "C" key
ip.ki.wVk = 'C';
ip.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, &ip, sizeof(INPUT));
// Release the "Ctrl" key
ip.ki.wVk = VK_CONTROL;
ip.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, &ip, sizeof(INPUT));
你真的應該將這四個輸入事件綁定到一個SendInput()調用中,以確保它們不與其他鍵盤事件交錯。想象一下你按下Ctrl +?要調用熱鍵處理程序,它會發送Ctrl DOWN事件,此時您釋放了Ctrl鍵(將Ctrl UP插入到隊列中),取消您的操作。 –
的SendMessage接受一個窗口作爲它的第一個參數。你在你的代碼中省略了。你的問題非常缺乏細節。我們無法分辨你做錯了什麼?您是否使用剪貼板傳輸文本?即使用戶是爲了控制剪貼板。 –
是的,問題是非常缺乏細節。 – user1
您的新要求'我們應該使用熱鍵<...>'<...>',然後啓動我們的應用程序'有一個問題:*如果您的應用程序尚未運行,*世衛組織*正在處理您的熱鍵? –