Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.05.28;
Скачать: CL | DM;

Вниз

twm as AttachThreadInput   Найти похожие ветки 

 
Axis_of_Evil ©   (2006-02-28 13:38) [0]

пытался ради интереса реализовать в 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


 
Сергей М. ©   (2006-02-28 14:04) [1]

Сначала объясни самому себе, причем здесь таймер ..


 
Axis_of_Evil ©   (2006-02-28 14:13) [2]

>Сначала объясни самому себе, причем здесь таймер ..
тому что хук ставить ломало

не в этом вопрос


 
Сергей М. ©   (2006-02-28 14:46) [3]


> не в этом вопрос


Тогда обозначь критерий "правильности" (см. "как учинить преследуемую цель болле правильно")


 
Axis_of_Evil ©   (2006-03-03 16:22) [4]

Ъ, я имею ввиду "корректен ли код? не приводит ли он к неверной работе системы, etc?"


GetCursorPos(CurPos);
hWindow := ChildWindowFromPointEx(hDesktop, CurPos, cwp_SkipInvisible);
if (hPrevWindow <> hWindow) then
begin
  SetForegroundWindow(hWindow);
  AttachThreadInput(GetWindowThreadProcessId(hWindow), GetCurrentThreadId, True);
  hPrevWindow := hWindow;
end;



Страницы: 1 вся ветка

Текущий архив: 2006.05.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.036 c
2-1147101450
Ezorcist
2006-05-08 19:17
2006.05.28
Обращение к сайту


3-1144406589
Dest81
2006-04-07 14:43
2006.05.28
Adotable.filter


4-1141980849
Альберт
2006-03-10 11:54
2006.05.28
Канва и прочие премудрости


2-1147621938
bazadaykin
2006-05-14 19:52
2006.05.28
Новый глюк?


2-1147203470
Mr tray
2006-05-09 23:37
2006.05.28
узнать хендл объекта с фокусом клавиатуры