Здравствуйте, 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);
?
Хотя программа ведет себя одинаково, что странно, в обоих случаях.