Главная страница
    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.46 MB
Время: 0.01 c
4-1141671032
spyrytus
2006-03-06 21:50
2006.05.28
HOOK на комбинацию клавиш


15-1146591343
Sergey Masloff
2006-05-02 21:35
2006.05.28
Крамольная мысль - а оно вообще надо? Про раздел начинающим да


6-1138136250
Yeg
2006-01-24 23:57
2006.05.28
Ответ на ICQ сообщения


1-1145612267
petun[-]
2006-04-21 13:37
2006.05.28
группируем несколько процедур в одну


15-1146158506
fivtin
2006-04-27 21:21
2006.05.28
Список





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