Главная страница
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.054 c
1-1087456832
Virus
2004-06-17 11:20
2004.07.04
Скрытие окошка копирования


6-1084303062
SiDoff
2004-05-11 23:17
2004.07.04
RCPT TO:<...@...> NOTIFY=SUCCESS,FAILURE ORCPT=rfc822; ...@...


1-1087357108
Zipkin
2004-06-16 07:38
2004.07.04
Main+Menu


1-1087461468
AlexXn
2004-06-17 12:37
2004.07.04
Регистренная Delphi или нет


1-1087311857
RealRascal
2004-06-15 19:04
2004.07.04
DrawText