Невозможно установить окно на передний план (Delphi)
Вот код, который я использую для восстановления и установки окна на передний план. Когда окно свернуто, код работает безупречно, но когда окно скрывается за некоторыми другими окнами, я не могу вывести окно на передний план, тогда позже я обнаружил, что SetForegroundWindow(Handle)
все время возвращалось false. Однако, если я запускаю программу в режиме отладки, окно можно вывести на передний план. Кажется, я не могу понять, что является причиной этого.
function EnumWindowsCallback(Handle: HWND; lParam: Integer): bool; stdcall;
var
WID, PID: Integer;
begin
WID := 0;
PID := lParam;
GetWindowThreadProcessId(Handle, @WID);
if (PID = WID) and IsWindowVisible(Handle) then begin
ShowWindow(Handle, SW_RESTORE);
SetForegroundWindow(Handle);
FlashWindow(Handle, True);
end;
Result := True;
end;
function ShowProcessWindow(PID: Integer): boolean;
begin
Result := EnumWindows(@EnumWindowsCallback, lParam(PID))
end;
Где PID - это идентификатор процесса окна, которое я хочу восстановить и установить на передний план.
Обновление: я только что прочитал это в документации . Может ли это быть связано?
Приложение не может вывести окно на передний план, пока пользователь работает с другим окном. Вместо этого Windows мигает кнопкой панели задач окна, чтобы уведомить пользователя.
Ответы
Я заменил SetForegroundWindow(Handle)
следующие две строки кода, и он работает на моем сайте:
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NoMove or SWP_NoSize);
SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NoMove or SWP_NoSize);