Форум: "Основная";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];
ВнизПрочитать список всех запущенных Exe Найти похожие ветки
← →
Merlot (2006-10-31 17:34) [0]Здравствуйте Уважаемые!
Подскажите, как прочитать список всех запущенных Exe, проверить, запущен ли Exe и если да, то сделать его активным.
← →
DVM © (2006-10-31 17:35) [1]1) Что такое запущенный EXE? Это Exe в плохом состоянии совсем?
2) Что такое активный EXE?
← →
Merlot (2006-10-31 17:37) [2]Могу перефразировать: как прочитать список всех запущенных процессов(программ), проверить, запущен ли процесс(программа) и если да, то сделать его активным(переключиться на него).
← →
Gero © (2006-10-31 17:38) [3]Ну запущенный это понятно, а вот активный exe — это что-то новенькое.
← →
DVM © (2006-10-31 17:39) [4]
> то сделать его активным(переключиться на него).
Что значит переключиться на процесс?
Я не придираюсь, просто правильно сформулированный вопрос - это уже половина ответа зачастую.
← →
MetalFan © (2006-10-31 17:39) [5]
> активный exe
выполняется ли его поток в данный момент системой)))
← →
DVM © (2006-10-31 17:40) [6]
> выполняется ли его поток в данный момент системой)))
А что потоки "неактивных" (читай остальных) процессов спят?
← →
Ketmar © (2006-10-31 17:41) [7]>[5] MetalFan(c) 31-Oct-2006, 17:39
>выполняется ли его поток в данный момент системой)))
а если процесс есть, а потоки все спят? %-)
← →
Merlot (2006-10-31 17:42) [8]есть ряд запущенных программ (блокнот, word, excel и т.д.) в данный момент активен word, надо проверить запущен ли блокнот и если да, то переключиться на него.
← →
DVM © (2006-10-31 17:44) [9]
> Merlot (31.10.06 17:42) [8]
По всей видимости речь идет об Top-level окнах приложений. Переключаться надо между окнами. Процесс может и не иметь окон. Как тогда на него "переключиться".
← →
DVM © (2006-10-31 17:46) [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
← →
Stanislav © (2006-10-31 17:50) [11]где s - имя окна
H:=FindWindow (nil,PCHAR(S));
Windows.ShowWindow(H,SW_Maximize);
Windows.SetForegroundWindow (H);
← →
Merlot (2006-10-31 17:51) [12]речь идет о программах запущенных на компьюторе. по alt+tab вы можете преключаться между ними, а мне надо переключаться программно...:(((
← →
DVM © (2006-10-31 17:53) [13]
> Stanislav © (31.10.06 17:50) [11]
В Win2000 и выше SetForegroundWindow (H); не передаст фокус указанному окну. Либо как я написал, либо пользоваться недокументированной функцией SwitchToThisWindow().
> по alt+tab вы можете преключаться между ними, а мне надо
> переключаться программно
Ну так переключайся, вопрос в чем?
← →
DVM © (2006-10-31 17:55) [14]
> Merlot (31.10.06 17:51) [12]
ЕnumWindows() поможет получить список окон. Профильтровав немного оный можно получить точно тот же список, что по alt+tab
← →
MetalFan © (2006-10-31 18:04) [15]
> Ketmar © (31.10.06 17:41) [7]
>
> >[5] MetalFan(c) 31-Oct-2006, 17:39
> >выполняется ли его поток в данный момент системой)))
> а если процесс есть, а потоки все спят? %-)
>
ну тоды кранты. я просто решил телепатией позаниматься, заодно и поприкалываться.
← →
MetalFan © (2006-10-31 18:06) [16]DVM © (31.10.06 17:53) [13]
...
> недокументированной функцией SwitchToThisWindow().
в каком это месте она недокументирована? все, что в ней делается - документированно)
← →
MetalFan © (2006-10-31 18:08) [17]MSDN
SwitchToThisWindow Function
--------------------------------------------------------------------------------
The SwitchToThisWindow function is called to switch focus to a specified window and bring it to the foreground.
SyntaxVOID 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.
← →
DVM © (2006-10-31 18:11) [18]
> MetalFan © (31.10.06 18:08) [17]
Теперь документирована значит. Раньше не было вроде как. За то, что эта функция в будущих версиях Win исчезнет можно не беспокоиться - куча ПО от MS ее использует.
← →
MetalFan © (2006-10-31 18:17) [19]
> DVM © (31.10.06 18:11) [18]
>
>
> Теперь документирована значит
MSDN 2004 ;)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.067 c