Задачка непростая... Минимальный геморрой будет с запуском в отдельном потоке в цикле проверки на активное окно и принятия соответствующих мер. В Form.OnShow, в случае VCL, или после CreateWindowEx(), создающего главное окно, впиши, добавив переменную ThID типа DWORD:
| Код | CreateThread(nil, 0, @CheckWin, nil, 0, ThID);
|
И добавь чуть выше собственно главную процедурку:
| Код | procedure CheckWin; stdcall; var TargetWnd: DWORD; begin repeat TargetWnd := FindWindow(nil, 'Калькулятор'); if TargetWnd <> 0 then if GetForegroundWindow = TargetWnd then SetForegroundWindow(хендл_твоего_окна); //В случае с VCL - Application.Handle Sleep(150); //Проверка будет выполняться каждые 0.15 секунд, достаточно приемлемо, чтобы юзер не замечал задержки и чтобы процессор не кушался. until False; end;
|
|