Re[4]: Как получить хендл чужого окна?
От: Leonid_CSIT  
Дата: 12.01.07 07:32
Оценка:
Здравствуйте, Andrew S, Вы писали:

L_C>>>>Для получения хендела окна использую ::GetForegroundWindow();


L_C>>>>Может, кто знает, как добраться до EditBox`а?


AS>>>GetForegroundWindow, GetWindowThreadProcessId, AttachThreadInput и GetFocus.


L_C>>Вроде так и делаю, может что то не так?!!!


AS>Вам нужно получать фокус, а не устанавливать? Если так, тогда приведенный вами код выглядит по меньшей мере странно.



L_C>>
L_C>>HWND hwnd = ::GetForegroundWindow();
    
L_C>>    if(IsWindow(hwnd))
L_C>>    {
L_C>>        if(hwnd != this->m_hWnd)
L_C>>        {
L_C>>            if(m_hwndFocus != hwnd)
L_C>>            {
L_C>>                DWORD t1 = GetWindowThreadProcessId(hwnd, NULL);
L_C>>                DWORD t2 = GetCurrentThreadId();
L_C>>                if(IsWindow(m_hwndFocus))
L_C>>                {
L_C>>                    AttachThreadInput(t2, t1, FALSE);
L_C>>                }
L_C>>                m_hwndFocus = hwnd;
L_C>>                AttachThreadInput(t2, t1, TRUE);
L_C>>                ::SetFocus(hwnd);
L_C>>            }
L_C>>        }
L_C>>    }
L_C>>


Это я уже экспериментировал Да SetFocus тут не нужен, прошу прощение. Скачал для примера исходники подобной клавиатуры с http://www.codeproject.com, там был SetFocus ( там такая же проблема). Но проблема остается в студии не работает, в Excel, Word тоже, вообщем во всех случаях, когда есть фрейм и есть любое поле для ввода текста. В этом случаи поле для ввода теряет фокус при нажатии на мою клавиатуру. В других случаях такого не наблюдал. В диалоговом окне, где много полей ввода все нормально.

Я даже знаю в чем проблема: мое окно становится на время активным, что с виндовской клавиатурой не случается. Хотя у меня есть такой код:


void CMyKeyboardDlg::OnWindowPosChanging(WINDOWPOS* lpwndpos)
{
    SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE | SWP_SHOWWINDOW | SWP_NOOWNERZORDER);
    CDialog::OnWindowPosChanging(lpwndpos);

    // TODO: Add your message handler code here
}


Может он не в том месте, или необходимо что то еще сделать?

P.S.
Может кто знает откуда можно скачать рабочий пример экранной клавиатуры?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.