Re[4]: Не удается активировать окно, SetActiveWindow
От: Ambianx Украина  
Дата: 10.11.11 15:00
Оценка:
Здравствуйте, rus blood, Вы писали:

RB>Здравствуйте, Ambianx, Вы писали:


A>>
A>>HWND hCurrWnd = GetForegroundWindow();
A>>DWORD idAttachTo = GetWindowThreadProcessId(hCurrWnd, NULL);
A>>DWORD idAttach = GetCurrentThreadId();
A>>AttachThreadInput(idAttach, idAttachTo, TRUE);
RB>


RB>У тебя в первом посте был такой код

RB>
RB>DWORD idAttach = GetWindowThreadProcessId(hwnd, &pid);
RB>DWORD idAttachTo = GetCurrentThreadId();
RB>bRes = AttachThreadInput(idAttach, idAttachTo, TRUE);
RB>


RB>Параметры у AttachThreadInput в разном порядке.


Это два разных способа. Способ в первом примере описан в этой теме под №3. Способ же, который я привел в заголовке темы, исходит из описания функции SetActiveWindow() в MSDN:

The window must be attached to the calling thread's message queue.

Сокращенно может быть записан так:

AttachThreadInput(GetWindowThreadProcessId(hwnd, NULL), GetCurrentThreadId(), TRUE);
SetActiveWindow(hwnd);
AttachThreadInput(GetWindowThreadProcessId(hwnd, NULL), GetCurrentThreadId(), FALSE);


Может, все-таки, правильно так:

AttachThreadInput(GetCurrentThreadId(), GetWindowThreadProcessId(hwnd, NULL), TRUE);
SetActiveWindow(hwnd);
AttachThreadInput(GetCurrentThreadId(), GetWindowThreadProcessId(hwnd, NULL), FALSE);


?

Хотя программа ведет себя одинаково, что странно, в обоих случаях.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.