SendMessage( hWnd, WM_KEYDOWN, VK_F7, 0x01000000 );
SendMessage( hWnd, WM_KEYUP , VK_F7 , 0xc1000000 );
SendMessage F7
Код:
Не работает. Помогите.
Цитата: nikipelovav
Пытаюсь "нажать" клавишу F7 в окне другого приложения
Не работает. Помогите.
Код:
SendMessage( hWnd, WM_KEYDOWN, VK_F7, 0x01000000 );
SendMessage( hWnd, WM_KEYUP , VK_F7 , 0xc1000000 );
SendMessage( hWnd, WM_KEYUP , VK_F7 , 0xc1000000 );
Не работает. Помогите.
Это наверно надо делать не из своего процесса, а из процесса того приложения. Для этого надо туда внедрится: CreateRemoteThread, SetWindowsHookEx и т.д.
эмуляцией нажатия символьной клавиши
Код:
SendMessage( hWnd2, WM_KEYDOWN, 'Z', 0x00000000 );
SendMessage( hWnd2, WM_CHAR , 'Z', 0x40000000 );
SendMessage( hWnd2, WM_KEYUP , 'Z', 0xc0000000 );
SendMessage( hWnd2, WM_CHAR , 'Z', 0x40000000 );
SendMessage( hWnd2, WM_KEYUP , 'Z', 0xc0000000 );
или нажатие Enter
Код:
SendMessage( hWnd2, WM_KEYDOWN, VK_RETURN, 0x00000000 );
SendMessage( hWnd2, WM_KEYUP , VK_RETURN, 0xc0000000 );
SendMessage( hWnd2, WM_KEYUP , VK_RETURN, 0xc0000000 );
Почему это работает, а с функциональной клавишей нет.
И вроде все необходимые биты в параметре lParam ставлю.
Вопросы:
1) Если Я пытаюсь иметировать нажатие функциональной клавиши,
которая является "горячей" клавишей в другом приложении,
может необходимо послать ещё какое-либо сообщение кроме
WM_KEYDOWN + WM_KEYUP?
2) сообщения должны посылаться главному окну или
какому-либо "wincontrol" типа TEdit, TButton ?
Прочитал, что SendMessage не возвращает управление программе, пока сообщение не обработано другим приложением. По совету, попробовал PostMessage. С клавишей F7 полчилось! Но только в программе TecDoc. А вот эксперемент с "Калькулятором" в инженерном режиме дал отрицательный результат.
Пожалуйста объясните тонкости "удалённого управления клавиатурой".
Код:
INPUT inp[4];
SetForegroundWindow(win);
memset(inp,0,sizeof(inp));
inp[0].type=INPUT_KEYBOARD;
inp[0].ki.wVk=VK_CONTROL;
inp[1].type=INPUT_KEYBOARD;
inp[1].ki.wVk=VK_INSERT;
inp[2].type=INPUT_KEYBOARD;
inp[2].ki.wVk=VK_INSERT;
inp[2].ki.dwFlags=KEYEVENTF_KEYUP;
inp[3].type=INPUT_KEYBOARD;
inp[3].ki.wVk=VK_CONTROL;
inp[3].ki.dwFlags=KEYEVENTF_KEYUP;
SendInput(4,inp,sizeof(INPUT));
SetForegroundWindow(win);
memset(inp,0,sizeof(inp));
inp[0].type=INPUT_KEYBOARD;
inp[0].ki.wVk=VK_CONTROL;
inp[1].type=INPUT_KEYBOARD;
inp[1].ki.wVk=VK_INSERT;
inp[2].type=INPUT_KEYBOARD;
inp[2].ki.wVk=VK_INSERT;
inp[2].ki.dwFlags=KEYEVENTF_KEYUP;
inp[3].type=INPUT_KEYBOARD;
inp[3].ki.wVk=VK_CONTROL;
inp[3].ki.dwFlags=KEYEVENTF_KEYUP;
SendInput(4,inp,sizeof(INPUT));
Попробуй через keybd_event.
качните мой исходник ProjBeam и изучите класс BSendWM.
(Файлы BSendMess.h и BSendMess.cpp)
Цитата: nikipelovav
Кому интересен результат поисков решения проблемы,
качните мой исходник ProjBeam и изучите класс BSendWM.
(Файлы BSendMess.h и BSendMess.cpp)
качните мой исходник ProjBeam и изучите класс BSendWM.
(Файлы BSendMess.h и BSendMess.cpp)
А где можно скачать твой исходник ?:confused:
Цитата: nikipelovav
Прочитал, что SendMessage не возвращает управление программе, пока сообщение не обработано другим приложением. По совету, попробовал PostMessage.
Если с SendMessage всё нормально, а с PostMessage - нет, то можно попробовать с SendNotifyMessage.