![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Прочитать список всех запущенных Exe [D7, Win2k, WinXP]
Merlot © (2006-10-31 17:34:00)Здравствуйте Уважаемые!
Подскажите, как прочитать список всех запущенных Exe, проверить, запущен ли Exe и если да, то сделать его активным.
MetalFan (2006-10-31 18:17:00) [1]
> DVM © (31.10.06 18:11) [18]
>
>
> Теперь документирована значит
MSDN 2004 ;)
DVM (2006-10-31 18:11:00) [2]
> MetalFan © (31.10.06 18:08) [17]
Теперь документирована значит. Раньше не было вроде как. За то, что эта функция в будущих версиях Win исчезнет можно не беспокоиться - куча ПО от MS ее использует.
MetalFan (2006-10-31 18:08:00) [3]MSDN
SwitchToThisWindow Function
--------------------------------------------------------------------------------
The SwitchToThisWindow function is called to switch focus to a specified window and bring it to the foreground.
Syntax
VOID SwitchToThisWindow( HWND hWnd,
BOOL fAltTab
);
Parameters
hWnd
[in] Handle to the window being switched to.
fAltTab
[in] A TRUE for this parameter indicates that the window is being switched to using the Alt/Ctl+Tab key sequence. This parameter should be FALSE otherwise.
Return Value
None.
Remarks
This function is typically called to maintain window z-ordering.
Although you can access this function by using LoadLibrary and GetProcAddress combined in Microsoft® Windows® versions prior to Windows XP, the function is not accessible using the standard Include file and library linkage. The header files included in Windows XP Service Pack 1 (SP1) and Windows Server 2003 document this function and make it accessible using the appropriate Include file and library linkage. However, this function is deprecated and not intended for general use. It is recommended that you do not use it in new programs because it might be altered or unavailable in subsequent versions of Windows.
MetalFan (2006-10-31 18:06:00) [4]DVM © (31.10.06 17:53) [13]
...
> недокументированной функцией SwitchToThisWindow().
в каком это месте она недокументирована? все, что в ней делается - документированно)
MetalFan (2006-10-31 18:04:00) [5]
> Ketmar © (31.10.06 17:41) [7]
>
> >[5] MetalFan(c) 31-Oct-2006, 17:39
> >выполняется ли его поток в данный момент системой)))
> а если процесс есть, а потоки все спят? %-)
>
ну тоды кранты. я просто решил телепатией позаниматься, заодно и поприкалываться.
DVM (2006-10-31 17:55:00) [6]
> Merlot (31.10.06 17:51) [12]
ЕnumWindows() поможет получить список окон. Профильтровав немного оный можно получить точно тот же список, что по alt+tab
DVM (2006-10-31 17:53:00) [7]
> Stanislav © (31.10.06 17:50) [11]
В Win2000 и выше SetForegroundWindow (H); не передаст фокус указанному окну. Либо как я написал, либо пользоваться недокументированной функцией SwitchToThisWindow().
> по alt+tab вы можете преключаться между ними, а мне надо
> переключаться программно
Ну так переключайся, вопрос в чем?
Merlot (2006-10-31 17:51:00) [8]речь идет о программах запущенных на компьюторе. по alt+tab вы можете преключаться между ними, а мне надо переключаться программно...:(((
Stanislav (2006-10-31 17:50:00) [9]где s - имя окна
H:=FindWindow (nil,PCHAR(S));
Windows.ShowWindow(H,SW_Maximize);
Windows.SetForegroundWindow (H);
DVM (2006-10-31 17:46:00) [10]Переключиться на окно можно так, например:
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, TObject(0),
SPIF_SENDCHANGE);
BringWindowToTop(hWnd);
SetForegroundWindow(hWnd);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(Timeout),
SPIF_SENDCHANGE);
end;
end
else
begin
BringWindowToTop(hWnd);
SetForegroundWindow(hWnd);
end;
Result := (GetForegroundWindow = hWnd);
end;
end; // End of function ForceForegroundWindow
DVM (2006-10-31 17:44:00) [11]
> Merlot (31.10.06 17:42) [8]
По всей видимости речь идет об Top-level окнах приложений. Переключаться надо между окнами. Процесс может и не иметь окон. Как тогда на него "переключиться".
Merlot (2006-10-31 17:42:00) [12]есть ряд запущенных программ (блокнот, word, excel и т.д.) в данный момент активен word, надо проверить запущен ли блокнот и если да, то переключиться на него.
Ketmar (2006-10-31 17:41:00) [13]>[5] MetalFan(c) 31-Oct-2006, 17:39
>выполняется ли его поток в данный момент системой)))
а если процесс есть, а потоки все спят? %-)
DVM (2006-10-31 17:40:00) [14]
> выполняется ли его поток в данный момент системой)))
А что потоки "неактивных" (читай остальных) процессов спят?
MetalFan (2006-10-31 17:39:00) [15]
> активный exe
выполняется ли его поток в данный момент системой)))
DVM (2006-10-31 17:39:00) [16]
> то сделать его активным(переключиться на него).
Что значит переключиться на процесс?
Я не придираюсь, просто правильно сформулированный вопрос - это уже половина ответа зачастую.
Gero (2006-10-31 17:38:00) [17]Ну запущенный это понятно, а вот активный exe — это что-то новенькое.
Merlot (2006-10-31 17:37:00) [18]Могу перефразировать: как прочитать список всех запущенных процессов(программ), проверить, запущен ли процесс(программа) и если да, то сделать его активным(переключиться на него).
DVM (2006-10-31 17:35:00) [19]1) Что такое запущенный EXE? Это Exe в плохом состоянии совсем?
2) Что такое активный EXE?