Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.011 c
2-1147003062
Mr tray
2006-05-07 15:57
2006.05.28
setkeyboardstate


2-1147368259
kilonet
2006-05-11 21:24
2006.05.28
Invalid pointer operation при проверке указателя на nil


2-1147078700
cardexc
2006-05-08 12:58
2006.05.28
не получается сделать запрос


2-1146969649
TBAPb
2006-05-07 06:40
2006.05.28
Помогите сделать поект


6-1138388766
KLAUS
2006-01-27 22:06
2006.05.28
Ошибка сценария Interner Explorer





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский