Подавить выдвигание окна на передний план и передачу фокуса
От: Аноним  
Дата: 26.03.04 10:19
Оценка:
Собственно смысл такой: При определенных условиях некоторые программы выдвигают себя на передний план и перехватывают фокус, причем отключить настройками самой программы это нельзя. При помощи чего и куда копать чтобы перехватить это и не позволять менять фокус этой программы. Должно получиться что-то вроде: задаем имя процесса или Id и для этого процесса если акивен не данный процесс чтобы не позволяло уме перевести фокус на перений план. Как это можно красиво сделать? Можно ли это сделать без глобального хука?
Re: Подавить выдвигание окна на передний план и передачу фок
От: lpro  
Дата: 29.03.04 19:50
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Собственно смысл такой: При определенных условиях некоторые программы выдвигают себя на передний план и перехватывают фокус, причем отключить настройками самой программы это нельзя. При помощи чего и куда копать чтобы перехватить это и не позволять менять фокус этой программы. Должно получиться что-то вроде: задаем имя процесса или 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...
EA 00 00 FF FF
Re[2]: Подавить выдвигание окна на передний план и передачу
От: Аноним  
Дата: 30.03.04 17:12
Оценка:
L>

L>var
L>hFirewall  : HWND;
L>hForeGRND  : HWND;
L>hForeGRND1 : HWND;

L>procedure TForm1.Button1Click(Sender: TObject);
L>begin
L>if hFirewall:=FindWindow(nil, 'MyScreamingFirewall') <> 0 then 
L>Timer1.Enabled:=True else MessageBox(0,'Нету такова акна','Ашыпка',$10); //гы-гы... :)
L>end;

L>// Timer.Interval:=10  - поэксперементируй с интервалом

L>procedure TForm1.Timer1OnTimer(Sender: TObject);
L>begin
L>hForeGRND:=GetForegroundWindow;
L>if hForeGRND = hFirewall then 
L>   begin
L>     SetForegroundWindow(hForeGRND1);
L>     Exit;
L>   end;
L>hForeGRND1:=hForeGRND;
L>end;

L>

L>сам не пробовал...ну наверное сработает....хотя не исключено, что моргание все-таки будет....
L>да и хендл окна смениться наверное может....конечно нужно тогда по ProcessId...
L>тогда используй после FindWindow — GetWindowThreadProcessId...

Не подходит, т. к. нужно чтоб фокус вообще не смещался. Ибо в данном случке такая ерунда: сижу в одном приложении, другое решает выдвинуться топмост и перехватить фокус, чего нельзя позволять.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.