WM_KEYDOWN Отправить Ctrl-N

Тема в разделе "WASM.WIN32", создана пользователем AndreyXYZ, 28 янв 2009.

  1. AndreyXYZ

    AndreyXYZ New Member

    Публикаций:
    0
    Регистрация:
    28 янв 2009
    Сообщения:
    28
    Здравствуйте.
    1. Я с помощью функции FindWindowA получаю хендл нужного мне окна. Мне нужно сэмулировать нажатие на клавиатуре комбинации клавиш Ctrl-N в этом окне. Необходимо, насколько я понял, использовать функцию PostMessageA. Но какое сообщение отправлять окну? И как задать нажатие Ctrl?

    2. Есть хендл текстого поля. Как считать текст, содержащийся в этом поле.
     
  2. AndreyXYZ

    AndreyXYZ New Member

    Публикаций:
    0
    Регистрация:
    28 янв 2009
    Сообщения:
    28
    Забыл добавить, что пишу на C++.
     
  3. mrcrown

    mrcrown Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    227
    Отправка Ctrl+N: SendMessageA(WindowHandle,WM_KEYDOWN,0x0E,1);
    Получение текста: WM_GETTEXT Поищи в нете инфы туева хуча
     
  4. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Код (Text):
    1. int GetWindowText(          HWND hWnd,
    2.     LPTSTR lpString,
    3.     int nMaxCount
    4. );
     
  5. mrcrown

    mrcrown Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    227
    Так может не получить текст из некоторых контролов у меня, по крайней мере, бывало такое. Потому лучше вручную отправлять сообщение WM_GETTEXT с ним небыло проблем ниразу.
     
  6. AndreyXYZ

    AndreyXYZ New Member

    Публикаций:
    0
    Регистрация:
    28 янв 2009
    Сообщения:
    28
    SendMessageA(WindowHandle,WM_KEYDOWN,0x0E,1); - не работает (хотя окно активировано). Почему послдний параметр - 1?
     
  7. Valentin

    Valentin Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2007
    Сообщения:
    128
    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
     
  8. AndreyXYZ

    AndreyXYZ New Member

    Публикаций:
    0
    Регистрация:
    28 янв 2009
    Сообщения:
    28
    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, но все равно не могу разобраться со вторым параметром.
     
  9. AndreyXYZ

    AndreyXYZ New Member

    Публикаций:
    0
    Регистрация:
    28 янв 2009
    Сообщения:
    28
    Valentin
    Ваш код у меня работает. Только Ctrl-N нажимается в таком случае "в воздухе", т.е. вместо того, чтобы нажать эту комбинацию клавиш в конкретном окне, они у меня нажимаются в Visual Studio (открывается новый проект).
     
  10. Valentin

    Valentin Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2007
    Сообщения:
    128
    Окно, в которое посылается сообщение, должно быть активным
     
  11. AndreyXYZ

    AndreyXYZ New Member

    Публикаций:
    0
    Регистрация:
    28 янв 2009
    Сообщения:
    28
    Понятно. Спасибо.
    Функция GetText вроде бы не работает c RichEdit. Я видел какие-то специальные сообщения для Edit'ов. Но не могу их найти. Подскажите, пожалуйста.
     
  12. Valentin

    Valentin Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2007
    Сообщения:
    128
    invoke SendMessage,hRichEdit,WM_COPY,0,0
     
  13. AndreyXYZ

    AndreyXYZ New Member

    Публикаций:
    0
    Регистрация:
    28 янв 2009
    Сообщения:
    28
    У меня немного проблемный RichEdit. Он вообще не позволяет выделять текст (мышкой или клавиатурой). То есть мне необходимо:
    1) Разрешить выделение текста
    2) Выделить текст
    Как это сделать?
     
  14. AndreyXYZ

    AndreyXYZ New Member

    Публикаций:
    0
    Регистрация:
    28 янв 2009
    Сообщения:
    28
    Ещё я пробовал счиать текст следующим образом (выдаёт ошибку записи).
    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)&param,(LPARAM)note);
     
  15. AndreyXYZ

    AndreyXYZ New Member

    Публикаций:
    0
    Регистрация:
    28 янв 2009
    Сообщения:
    28
    Получилось! Я идиот! Все было очень просто.
    Писал
    SendMessageA(hNotation,WM_GETTEXT,10000,(LPARAM)&note)
    вместо правильного
    SendMessageA(hNotation,WM_GETTEXT,10000,(LPARAM)note)
    Спасибо всем за помощь и поддержку!