Все хорошо печатается в блокноте и других подобных приложениях, но если мне нужно, что то написать в EditBox (текстовом поле) (например, в поле поиска VS), то пишется все в основном окне (в случаи с VS пишет там, где код).
Для получения хендела окна использую ::GetForegroundWindow();
Здравствуйте, Leonid_CSIT, Вы писали:
L_C>Здравствуйте!
L_C>Пишу экранную клавиатуру.
L_C>Все хорошо печатается в блокноте и других подобных приложениях, но если мне нужно, что то написать в EditBox (текстовом поле) (например, в поле поиска VS), то пишется все в основном окне (в случаи с VS пишет там, где код).
L_C>Для получения хендела окна использую ::GetForegroundWindow();
L_C>Может, кто знает, как добраться до EditBox`а?
Подход неверный. Забей на окна, используй SendInput
Здравствуйте, Andrew S, Вы писали:
L_C>>Для получения хендела окна использую ::GetForegroundWindow();
L_C>>Может, кто знает, как добраться до EditBox`а?
AS>GetForegroundWindow, GetWindowThreadProcessId, AttachThreadInput и GetFocus.
Здравствуйте, SergH, Вы писали:
SH>Здравствуйте, Leonid_CSIT, Вы писали:
L_C>>Здравствуйте!
L_C>>Пишу экранную клавиатуру.
L_C>>Все хорошо печатается в блокноте и других подобных приложениях, но если мне нужно, что то написать в EditBox (текстовом поле) (например, в поле поиска VS), то пишется все в основном окне (в случаи с VS пишет там, где код).
L_C>>Для получения хендела окна использую ::GetForegroundWindow();
L_C>>Может, кто знает, как добраться до EditBox`а?
SH>Подход неверный. Забей на окна, используй SendInput
Я использую keybd_event, это почти тоже самое что и SendInput
Здравствуйте, Leonid_CSIT, Вы писали:
L_C>Я использую keybd_event, это почти тоже самое что и SendInput
Тогда не понимаю, зачем тебе окна — оно само всё разрулит. Единственное, о чём нужно позаботиться — чтобы твоё собственное окно-клавиатура не оказалась текущей
Здравствуйте, SergH, Вы писали:
SH>Здравствуйте, Leonid_CSIT, Вы писали:
L_C>>Я использую keybd_event, это почти тоже самое что и SendInput
SH>Тогда не понимаю, зачем тебе окна — оно само всё разрулит. Единственное, о чём нужно позаботиться — чтобы твоё собственное окно-клавиатура не оказалась текущей
Здравствуйте, Leonid_CSIT, Вы писали:
L_C>Пишу экранную клавиатуру.
L_C>Все хорошо печатается в блокноте и других подобных приложениях, но если мне нужно, что то написать в EditBox (текстовом поле) (например, в поле поиска VS), то пишется все в основном окне (в случаи с VS пишет там, где код).
Здравствуйте, McQwerty, Вы писали:
MQ>Здравствуйте, Leonid_CSIT, Вы писали:
L_C>>Пишу экранную клавиатуру.
L_C>>Все хорошо печатается в блокноте и других подобных приложениях, но если мне нужно, что то написать в EditBox (текстовом поле) (например, в поле поиска VS), то пишется все в основном окне (в случаи с VS пишет там, где код).
MQ>Как не активировать окно обсуждалось здесь
L_C>>>Для получения хендела окна использую ::GetForegroundWindow();
L_C>>>Может, кто знает, как добраться до EditBox`а?
AS>>GetForegroundWindow, GetWindowThreadProcessId, AttachThreadInput и GetFocus.
L_C>Вроде так и делаю, может что то не так?!!!
Вам нужно получать фокус, а не устанавливать? Если так, тогда приведенный вами код выглядит по меньшей мере странно.
Здравствуйте, Andrew S, Вы писали:
L_C>>>>Для получения хендела окна использую ::GetForegroundWindow();
L_C>>>>Может, кто знает, как добраться до EditBox`а?
AS>>>GetForegroundWindow, GetWindowThreadProcessId, AttachThreadInput и GetFocus.
L_C>>Вроде так и делаю, может что то не так?!!!
AS>Вам нужно получать фокус, а не устанавливать? Если так, тогда приведенный вами код выглядит по меньшей мере странно.
Это я уже экспериментировал Да SetFocus тут не нужен, прошу прощение. Скачал для примера исходники подобной клавиатуры с http://www.codeproject.com, там был SetFocus ( там такая же проблема). Но проблема остается в студии не работает, в Excel, Word тоже, вообщем во всех случаях, когда есть фрейм и есть любое поле для ввода текста. В этом случаи поле для ввода теряет фокус при нажатии на мою клавиатуру. В других случаях такого не наблюдал. В диалоговом окне, где много полей ввода все нормально.
Я даже знаю в чем проблема: мое окно становится на время активным, что с виндовской клавиатурой не случается. Хотя у меня есть такой код:
Здравствуйте, Leonid_CSIT, Вы писали:
L_C>Здравствуйте!
L_C>Пишу экранную клавиатуру.
L_C>Все хорошо печатается в блокноте и других подобных приложениях, но если мне нужно, что то написать в EditBox (текстовом поле) (например, в поле поиска VS), то пишется все в основном окне (в случаи с VS пишет там, где код).
L_C>Для получения хендела окна использую ::GetForegroundWindow();
L_C>Может, кто знает, как добраться до EditBox`а?
L_C>Заранее большое спасибо!
Всем большое спасибо, сам разобрался надо было просто добавить:
int CMyKeyboardDlg::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message)
{
// TODO: Add your message handler code here and/or call default
return MA_NOACTIVATE; //CDialog::OnMouseActivate(pDesktopWnd, nHitTest, message);
}