Здравствуйте. 1. Я с помощью функции FindWindowA получаю хендл нужного мне окна. Мне нужно сэмулировать нажатие на клавиатуре комбинации клавиш Ctrl-N в этом окне. Необходимо, насколько я понял, использовать функцию PostMessageA. Но какое сообщение отправлять окну? И как задать нажатие Ctrl? 2. Есть хендл текстого поля. Как считать текст, содержащийся в этом поле.
Отправка Ctrl+N: SendMessageA(WindowHandle,WM_KEYDOWN,0x0E,1); Получение текста: WM_GETTEXT Поищи в нете инфы туева хуча
Так может не получить текст из некоторых контролов у меня, по крайней мере, бывало такое. Потому лучше вручную отправлять сообщение WM_GETTEXT с ним небыло проблем ниразу.
SendMessageA(WindowHandle,WM_KEYDOWN,0x0E,1); - не работает (хотя окно активировано). Почему послдний параметр - 1?
invoke keybd_event,VK_CONTROL, 0, 0, 0 invoke keybd_event,4Eh, 0, 0, 0 invoke keybd_event,4Eh, 0, KEYEVENTF_KEYUP, 0 invoke keybd_event,VK_CONTROL, 0, KEYEVENTF_KEYUP, 0
WM_KEYDOWN у меня вообще не работает. А при помощи WM_CHAR я могу по крайней мере напечатать символ. Пробовал сначала отправить WM_KEYDOWN, потом WM_KEYUP - не получается. Нашел в таблице ASCII кодов, что 0E - код комбинации ^N (Ctrl-N). Пробую отправить SendMessageA(WindowHandle,WM_CHAR,0x0E,1); текстовому полю, был слышен "Beep", как будно была нажата какая-то комбинация клавиш. Но нужно отправить Ctrl-N другому окну, которое не является текстовым полем. Нашел описание WM_CHAR http://www.firststeps.ru/mfc/winapi/keyb/r.php?55, но все равно не могу разобраться со вторым параметром.
Valentin Ваш код у меня работает. Только Ctrl-N нажимается в таком случае "в воздухе", т.е. вместо того, чтобы нажать эту комбинацию клавиш в конкретном окне, они у меня нажимаются в Visual Studio (открывается новый проект).
Понятно. Спасибо. Функция GetText вроде бы не работает c RichEdit. Я видел какие-то специальные сообщения для Edit'ов. Но не могу их найти. Подскажите, пожалуйста.
У меня немного проблемный RichEdit. Он вообще не позволяет выделять текст (мышкой или клавиатурой). То есть мне необходимо: 1) Разрешить выделение текста 2) Выделить текст Как это сделать?
Ещё я пробовал счиать текст следующим образом (выдаёт ошибку записи). char *note=new char[100]; GETTEXTEX param; param.cb=100; param.codepage=NULL; param.flags=NULL; param.lpDefaultChar=NULL; param.lpUsedDefChar=NULL; SendMessageA(hwnd,EM_GETTEXTEX,(WPARAM)¶m,(LPARAM)note);
Получилось! Я идиот! Все было очень просто. Писал SendMessageA(hNotation,WM_GETTEXT,10000,(LPARAM)¬e) вместо правильного SendMessageA(hNotation,WM_GETTEXT,10000,(LPARAM)note) Спасибо всем за помощь и поддержку!