Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.04;
Скачать: CL | DM;

Вниз

Как обойти ограничения на получения формой, фокуса ввода в K2/XP   Найти похожие ветки 

 
Федор Т   (2004-05-26 23:57) [0]

Как обойти ограничения на получения формой, фокуса ввода в 2000/ХР виндах?

Собственно по сабжу:
Известно, что для перемещения окна на передний план существует функция SetForegroundWindow из Win32 API . Она отлично работала под Windows 95 и Window NT. Но потом парни из Майкрософт провозгласили новый принцип: "Никто кроме пользователя не имеет право выдвигать окно на передний план". И хотя их собственные продукты продолжают делать это при необходимости, функция SetForegroundWindow перестала работать, как раньше. Теперь только активный процесс (foreground process) может переместить окно на передний план с использовании этой функции, а окно фонового процесса начнёт "мерцать" на панели задач, чтобы привлечь внимание пользователя.

Функции:

SwitchToThisWindow)(HWND, BOOL);
SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, &dwTimeout, 0);
procedure SwitchToThisWindow(wnd : HWND; bRestore: BOOL); stdcall;

дают аналогичный результат, что и  SetForegroundWindow


 
Cobalt ©   (2004-05-27 00:12) [1]

А SetFocus не работает?


 
Федор Т   (2004-05-27 00:33) [2]

Cobalt ©  (27.05.04 00:12) [1]
окно наверх выводит, а фокус ввода не дает.
В том то и есть ограничения 2000/ХР


 
BlackTr   (2004-05-27 09:25) [3]


function SetForegroundWindow98(const Wnd: HWND): Boolean;
var
 ForeThreadID, NewThreadID: DWORD;
begin
 if GetForegroundWindow <> Wnd then
 begin
   ForeThreadID := GetWindowThreadProcessId(GetForegroundWindow, nil);
   NewThreadID := GetWindowThreadProcessId(Wnd, nil);
   if ForeThreadID <> NewThreadID then
   begin
     AttachThreadInput(ForeThreadID, NewThreadID, True);
     Result := SetForegroundWindow(Wnd);
     AttachThreadInput(ForeThreadID, NewThreadID, False);
     if Result then
       Result := SetForegroundWindow(Wnd);
   end
   else
     Result := SetForegroundWindow(Wnd);
 end
 else
   Result := True;
end;



Страницы: 1 вся ветка

Текущий архив: 2004.07.04;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.043 c
14-1085824969
Kerk
2004-05-29 14:02
2004.07.04
Концлагеря третьего тысячелетия


8-1081152480
SDV
2004-04-05 12:08
2004.07.04
Помещение изображения в TMemoryStream


14-1087041779
juiceman
2004-06-12 16:02
2004.07.04
Как установить в 98ой сетевое окружение ?


1-1087140140
killer
2004-06-13 19:22
2004.07.04
TreeView с возможностью выбора...


14-1086700096
hgd
2004-06-08 17:08
2004.07.04
Расстояние до объекта