Во-первых, не все верхние окна являются элементами редактирования.Таким образом, EditHandle
непредсказуемо.
Тогда WM_COPY
поддерживается только в поле редактирования или в поле со списком.То же самое касается WM_GETTEXT
, они не поддерживают все окна.Вы не сможете изменить механизм обработки сообщений, если не являетесь владельцем Windows.
Однако есть обходной путь - имитируйте ввод с клавиатуры «Ctrl + C» в целевом окне.
//SetForegroundWindow(hWindow); Since hWindow is already a Foreground Window
keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0); // Ctrl down
keybd_event(ord('C'), MapVirtualKey(ord('C'), 0), 0, 0); // C down
keybd_event(ord('C'), MapVirtualKey(ord('C'), 0), KEYEVENTF_KEYUP, 0); // C up
keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0); // Ctrl up
РЕДАКТИРОВАТЬ:
Поскольку keybd_event
был заменен SendInput
, вот пример C ++ для использования SendInput
:
INPUT input[4] = {0};
input[0].type = input[1].type = input[2].type = input[3].type = INPUT_KEYBOARD;
input[0].ki.wVk = input[3].ki.wVk = VK_CONTROL;
input[0].ki.wScan = input[3].ki.wScan = MapVirtualKey(VK_CONTROL, MAPVK_VK_TO_VSC);
input[1].ki.wVk = input[2].ki.wVk = 'C';
input[1].ki.wScan = input[2].ki.wScan = MapVirtualKey('C', MAPVK_VK_TO_VSC);
input[2].ki.dwFlags = input[3].ki.dwFlags = KEYEVENTF_KEYUP; // there is no KEYEVENTF_KEYDOWN
SendInput(4, input, sizeof(INPUT));