![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
twm as AttachThreadInput [D7, WinXP]
Axis_of_Evil © (2006-02-28 13:38:00)пытался ради интереса реализовать в Windows функциональность как в twm, т.е. фокусировку ввода на том окне, над которым висить курсор.
реализвал ето так:
procedure TMainForm.FormCreate(Sender: TObject);
begin
hDesktop := GetDeskTopWindow;
hPrevWindow := 0;
OutList.Items.Add('found DesktopWindow at ' + IntToStr(hDesktop));
SystemParametersInfo(SPI_SETFOREGROUNDFLASHCOUNT, 0, nil, 0);
end;
procedure TimerProc(uTimerID, uMessage: UINT; dwUser, dw1, dw2: DWORD); stdcall;
//var
// hChildWindow: hwnd;
begin
GetCursorPos(CurPos);
hWindow := ChildWindowFromPointEx(hDesktop, CurPos, cwp_SkipInvisible{ or cwp_SkipDisabled});
if (hPrevWindow <> hWindow) then
begin
// hChildWindow := ChildWindowFromPointEx(hWindow, CurPos, cwp_SkipInvisible{ or cwp_SkipDisabled});
SetForegroundWindow(hWindow);
// SetFocus(hChildWindow);
/// if (hPrevWindow <> 0) then
// AttachThreadInput(GetWindowThreadProcessId(hPrevWindow), GetCurrentThreadId, False);
AttachThreadInput(GetWindowThreadProcessId(hWindow), GetCurrentThreadId, True);
hPrevWindow := hWindow;
end;
end;
// вроде работает
вот только корректно ли это?
Рихтер (вообще кодилось и читалось давно -> могу ошибаться),
вроде говорил, что неправлильно аттачить всех к одному потоку
// а в данном случае, вроде, это и делается
0) как учинить преследуемую цель болле правильно?
1) кто-нибудь, если не лень, объяснит, чего на уровне ОС творится, когда срабатывает мой код? // RIT, etc
Axis_of_Evil (2006-03-03 16:22:00) [1]Ъ, я имею ввиду "корректен ли код? не приводит ли он к неверной работе системы, etc?"
GetCursorPos(CurPos);
hWindow := ChildWindowFromPointEx(hDesktop, CurPos, cwp_SkipInvisible);
if (hPrevWindow <> hWindow) then
begin
SetForegroundWindow(hWindow);
AttachThreadInput(GetWindowThreadProcessId(hWindow), GetCurrentThreadId, True);
hPrevWindow := hWindow;
end;
Сергей М. (2006-02-28 14:46:00) [2]
> не в этом вопрос
Тогда обозначь критерий "правильности" (см. "как учинить преследуемую цель болле правильно")
Axis_of_Evil (2006-02-28 14:13:00) [3]>Сначала объясни самому себе, причем здесь таймер ..
тому что хук ставить ломало
не в этом вопрос
Сергей М. (2006-02-28 14:04:00) [4]Сначала объясни самому себе, причем здесь таймер ..