Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Вниз

Процессы!   Найти похожие ветки 

 
Александр1 ©   (2004-03-24 14:35) [0]

Здравствуйте уважаемые мастера! Ниже показан пример как можно отобразить список запушенных приложений (тоже, что при нажатии горячих клавиш).
А как сделать так, чтобы программа выдавала не только названия приложений, но и пути к исполняемым файлам их имена ( C:\хххх\xxxx.exe).
Заранее спасибо за помощь!

procedure TForm1.Button1Click(Sender: TObject);
var
Wnd: hWnd;
buff: array [0..127] of char;
begin
ListBox1.Clear; Wnd := GetWindow(Handle, gw_HWndFirst);
while Wnd <> 0 do begin // Не показываем:
if (Wnd <> Application.Handle) // Собственное окно
and IsWindowVisible(Wnd) // Невидимые окна
and (GetWindow(Wnd, gw_Owner) = 0) // Дочерние окна
and (GetWindowText(Wnd, buff, sizeof(buff)) <> 0) then begin
GetWindowText(Wnd, buff, sizeof(buff)); ListBox1. Items.Add(StrPas(buff));
end;
Wnd := GetWindow(Wnd, gw_hWndNext);
end;
ListBox1. ItemIndex:= 0;

end;


 
Digitman ©   (2004-03-24 15:16) [1]


> список запушенных приложений


не понятно, какое отношение "список запушенных приложений
" имеет к списку видимых верхнеуровневых окон текущего дисктопа ...

мало ли как некое приложение может манипулировать своими окнами .. оно вправе сделать свои окна невидимыми, но от этого состояние "запушености" процесса приложения иным не становится


 
Александр1 ©   (2004-03-24 19:23) [2]

На счёт видимых окон. Это не мой пример.

Это понятно. Представте себе к примеру у меня запушено приложение - некий файл xxx.exe. Мне надо опредилить место положения этого файла. Как это сделать?


 
Игорь Шевченко ©   (2004-03-24 22:38) [3]

Александр1 ©   (24.03.04 19:23)


> Представте себе к примеру у меня запушено приложение - некий
> файл xxx.exe. Мне надо опредилить место положения этого
> файла.


www.sysinternals.com Process Explorer


 
Александр1 ©   (2004-03-25 19:31) [4]

А по русски ни чего нет?


 
Александр1 ©   (2004-03-25 19:37) [5]

Мне проект нужен на delphi


 
Александр1 ©   (2004-03-27 18:59) [6]

Ау люди!


 
Yanis ©   (2004-03-28 00:48) [7]


function GetModulesListByProcessId(
 ProcessId: Cardinal): TModuleArray;
var
hSnapshot : THandle;
lpme : TModuleEntry32;
 procedure AddModuleToList;
 begin
   SetLength(Result,High(Result)+2);
   Result[high(Result)]:=lpme;
 end;
begin
 SetLength(Result,0);
 hSnapshot:=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,ProcessId);
 if hSnapshot=-1 then RaiseLastWin32Error;
 lpme.dwSize:=SizeOf(lpme);
 if Module32First(hSnapshot,lpme) then
 begin
   AddModuleToList;
   while Module32Next(hSnapshot,lpme) do AddModuleToList;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
VAR
 Wnd : hWnd;
 buff: ARRAY [0..127] OF Char;
 Pid : Cardinal;
 i:integer;
 modarr : TModuleArray;
 Name : String;
begin
 StringGrid1.RowCount:=1;
 Wnd := GetWindow(Handle, gw_HWndFirst);
 WHILE Wnd <> 0 DO
 BEGIN
   IF (GetWindowText(Wnd, buff, sizeof(buff)) <> 0) THEN
   BEGIN
     fillchar(name,sizeof(name),#0);
     GetWindowText(wnd,buff,sizeof(buff));
     GetWindowThreadProcessId(Wnd,@Pid);
     modarr:=GetModulesListByProcessId(Pid);
     name:="Null";
   for i:=0 to High(modarr) do
   begin
     if Integer(modarr[i].modBaseAddr)=$400000 then
     begin
       name:=modarr[i].szExePath;
       break;
     end;
   end;
     StringGrid1.Cells[0,StringGrid1.RowCount-1]:=StrPas(buff);
     StringGrid1.Cells[1,StringGrid1.RowCount-1]:= StrPas(PChar(name));
     StringGrid1.RowCount:=StringGrid1.RowCount+1;
   END;
   Wnd := GetWindow(Wnd, gw_hWndNext);
 END;
StringGrid1.RowCount:=StringGrid1.RowCount-1;
end;

Почему то я сомневаюсь, что тебе это поможет :).


 
Александр1 ©   (2004-03-28 05:53) [8]

Да пример похоже то, что надо. Только помогите мне его использовать пожалуйста!

function GetModulesListByProcessId(ProcessId: Cardinal):TModuleArray;На эту строчку показывает ошибку.

Incompatible types.

Может какой модуль подключить надо и как?


 
Cobalt ©   (2004-03-28 11:23) [9]

tlhelp32


 
Александр1 ©   (2004-04-02 19:52) [10]

Cobalt -А ге взять и что это?


 
имя   (2004-04-04 00:35) [11]

Удалено модератором


 
Керосинщик   (2004-04-09 07:34) [12]

Данный пример под win2000 дает только имя исполняемого файла без полного пути до него. У кого-нибудь есть идеи что делать?


 
Yanis ©   (2004-04-09 08:39) [13]

У меня есть идея: вам надо поменьше трепаться в форуме, а искать примеры и статьи раз уж самим никак :)))))))))
И еще посмотрите здесь:
http://delphibase.endimus.ru/?action=viewfunc&topic=sysiface&id=10211


 
Yanis ©   (2004-04-09 08:40) [14]

Удалено модератором
Примечание: Дубль


 
Yanis ©   (2004-04-09 08:42) [15]

Я случайно :)


 
Александр1 ©   (2004-04-09 20:29) [16]

Yanis Спасибо посмотрю!


 
Songoku ©   (2004-04-10 16:34) [17]

2 Александр1:
То что я тебе заскажу работает только под Win2k/XP
Кароче с помощью GetWindowThreadProcessId узнаюсь PID каторому пренадлежит окно. Потом открываешь процесс OpenProcess. В PSAPI.dll находится GetModuleFileNameEx <- спомошью этой фонкции ты узнаешь где именно ноходится пиложение каторое создалло определёное окно. Я думаю тут всё понятно. А ... в втором параметры ты должен указать HMODULE. Что бы узнать правильный HMODULE используй EnumModules!PSAPI.DLL ... она овыращает масив из адресов всех присудствующих модулей в том процессе. Ты должен указать первый модуль из масива и всё будет ОК. Если возникнут вопросы то спашивай!



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.043 c
1-1084208904
ArthurKhamitov
2004-05-10 21:08
2004.05.23
CD-ROM


7-1082190027
Sanek_metaller
2004-04-17 12:20
2004.05.23
Отклучение службы


1-1084352608
Trash
2004-05-12 13:03
2004.05.23
Отображение форм при "Крупном шрифте"


4-1081405299
alex732
2004-04-08 10:21
2004.05.23
WM_COPYDATA


1-1084355615
BlackTiger
2004-05-12 13:53
2004.05.23
Проебразовать "&amp;#1092;&amp;#1099;&amp;#1074;" в читабельный вид.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский