Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.

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.



 
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.041 c
15-1164542000
Чапаев
2006-11-26 14:53
2006.12.17
Пакеты


15-1164232592
Горгер
2006-11-23 00:56
2006.12.17
Книги, которые пишут женщины, могут читать только женщины


3-1160373460
jbond
2006-10-09 09:57
2006.12.17
Работа из Turbo Delphi Explorer с SQLite


15-1164737905
vain
2006-11-28 21:18
2006.12.17
Пожалуй, самая прикольная шутка.


15-1164368007
Delphi basic
2006-11-24 14:33
2006.12.17
Использование JasperReports





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский