Здравствуйте, Аноним, Вы писали:
А>Собственно смысл такой: При определенных условиях некоторые программы выдвигают себя на передний план и перехватывают фокус, причем отключить настройками самой программы это нельзя. При помощи чего и куда копать чтобы перехватить это и не позволять менять фокус этой программы. Должно получиться что-то вроде: задаем имя процесса или Id и для этого процесса если акивен не данный процесс чтобы не позволяло уме перевести фокус на перений план. Как это можно красиво сделать? Можно ли это сделать без глобального хука?
var
hFirewall : HWND;
hForeGRND : HWND;
hForeGRND1 : HWND;
procedure TForm1.Button1Click(Sender: TObject);
begin
if hFirewall:=FindWindow(nil, 'MyScreamingFirewall') <> 0 then
Timer1.Enabled:=True else MessageBox(0,'Нету такова акна','Ашыпка',$10); //гы-гы... :)
end;
// Timer.Interval:=10 - поэксперементируй с интервалом
procedure TForm1.Timer1OnTimer(Sender: TObject);
begin
hForeGRND:=GetForegroundWindow;
if hForeGRND = hFirewall then
begin
SetForegroundWindow(hForeGRND1);
Exit;
end;
hForeGRND1:=hForeGRND;
end;
сам не пробовал...ну наверное сработает....хотя не исключено, что моргание все-таки будет....
да и хендл окна смениться наверное может....конечно нужно тогда по ProcessId...
тогда используй после FindWindow — GetWindowThreadProcessId...