Главная страница
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
8-1082628941
Аноним
2004-04-22 14:15
2004.07.04
Мигания в TImage


3-1086806406
VitGun
2004-06-09 22:40
2004.07.04
Связь "клиента" и "сервера". Как лучше?


8-1080744821
$tranger
2004-03-31 18:53
2004.07.04
Звуковые потоки


1-1087548694
Bober
2004-06-18 12:51
2004.07.04
Вопрос по IDE Delphi


4-1085460090
Alibaba
2004-05-25 08:41
2004.07.04
Мастера, не подскажите ли, как можно выделить определенный item в