-
Окно - блокнот виндов.
NotePadHandle := FindWindow('notepad', 'Áåçûìÿííûé - Áëîêíîò');
If NotePadHandle = 0 then //Íåòó? // - Äà, íåòó, ñîçäàþ NotePadHandle := WinExec('Notepad', SW_SHOW) else Begin SetForegroundWindow(NotePadHandle); End;
Всё работает, пока блокнот не свернули. А вот свёрнутый не хочет разворачиваться и всё. Это не критично важно, но любопытно. Читал в одной книжке, что так и должно быть.
-
ShowWindow с SW_RESTORE попробуй
-
> ShowWindow с SW_RESTORE попробуй
+ IsIconic()
-
function ForceForegroundWindow(hWnd: HWND): BOOL;
const
SPI_GETFOREGROUNDLOCKTIMEOUT = $2000;
SPI_SETFOREGROUNDLOCKTIMEOUT = $2001;
var
OsVerInfo: TOSVersionInfo;
Win32MajorVersion: Integer;
Win32MinorVersion: Integer;
Win32Platform: Integer;
ForegroundThreadID: DWORD;
ThisThreadID: DWORD;
Timeout: DWORD;
begin
OsVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
GetVersionEx(osVerInfo);
Win32MajorVersion := OsVerInfo.dwMajorVersion;
Win32MinorVersion := OsVerInfo.dwMinorVersion;
Win32Platform := OsVerInfo.dwPlatformId;
if IsIconic(hWnd) then ShowWindow(hWnd, SW_RESTORE);
if GetForegroundWindow = hWnd then Result := True
else
begin
if ((Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion > 4)) or
((Win32Platform = VER_PLATFORM_WIN32_WINDOWS) and ((Win32MajorVersion > 4) or
((Win32MajorVersion = 4) and (Win32MinorVersion > 0)))) then
begin
Result := False;
ForegroundThreadID := GetWindowThreadProcessID(GetForegroundWindow, nil);
ThisThreadID := GetWindowThreadPRocessId(hWnd, nil);
if AttachThreadInput(ThisThreadID, ForegroundThreadID, True) then
begin
BringWindowToTop(hWnd);
SetForegroundWindow(hWnd);
AttachThreadInput(ThisThreadID, ForegroundThreadID, False);
Result := (GetForegroundWindow = hWnd);
end;
if not Result then
begin
SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @Timeout, 0);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, nil, SPIF_SENDCHANGE);
BringWindowToTop(hWnd);
SetForegroundWindow(hWnd);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, @Timeout, SPIF_SENDCHANGE);
end;
end
else
begin
BringWindowToTop(hWnd);
SetForegroundWindow(hWnd);
end;
Result := (GetForegroundWindow = hWnd);
end;
end;
-
Спасибо. Вот именно то, что нужно, ибо срабатывает и при свёрнутом окне, чего у меня никак не иполучалось, в т. ч. с использованием сооветов из книжки.
-
> clickmaker (14.10.2009 09:55:02) [2]
Не для того его сворачивали.
-
Да сворачиваю его я же сам, чтобы не мешалось. Спасибо ещё раз.
|