Главная страница
    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.45 MB
Время: 0.035 c
15-1146744905
Golik
2006-05-04 16:15
2006.05.28
Как создать резервную копию БД ?


2-1147420555
Ling
2006-05-12 11:55
2006.05.28
в чём разница?


15-1146261312
lookin
2006-04-29 01:55
2006.05.28
Skype никто не желает?


4-1141659727
webpauk
2006-03-06 18:42
2006.05.28
RCDATA


3-1142866117
Wolferio
2006-03-20 17:48
2006.05.28
Кодировка DBF файлов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский