Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.134.104.173] |
|
Страницы: (4) 1 [2] 3 4 все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
Открываешь MSDN или Win SDK и ищешь CreateToolHelp functions
|
Сообщ.
#17
,
|
|
|
Искал, в SDK нет ни одной функции, с помощью которой можно получить title процесса.
Там указывается только код на асме, а как его юзать, я не понял |
Сообщ.
#18
,
|
|
|
Про r0 (для Windows 95/98/ME) есть пример в >FAQ< по асму (см. про резидент).
А про GetWindowText ты не прав, Song. Он выдаёт название для любого процесса! |
Сообщ.
#19
,
|
|
|
2 Jin X: GetWindowText НЕ ВЫДАЁТ title процесса!!
А на асм забейте, я его ещё не изучал и, видимо, нескоро буду |
Сообщ.
#20
,
|
|
|
Цитата V4ng3R<RnD>, 23.03.03, 22:34:29 Искал, в SDK нет ни одной функции, с помощью которой можно получить title процесса. Что имеешь ввиду под "title процесса"? |
Сообщ.
#21
,
|
|
|
О-о-о... :'(
Блин, .alex, ты внимательно читал мессаги наверху? Под titl'ом процесса я подразумеваю то что отображается при нажатии CAD. Запускаю Дельфя, пишу: application.Title:='dats ma pr0c355'; Запускаю прогу, жму CAD, вижу строчку: "dats ma pr0c355". Всё просто Так вот, как получить такую строчку ??? |
Сообщ.
#22
,
|
|
|
Блин! Да выдаёт GetWindowText title
Попробуй сам: procedure TForm1.FormCreate(Sender: TObject);<br>var<br> Name: PChar;<br>begin<br> Application.Title := 'Хрен собачий';<br> ListBox1.Clear;<br> GetMem(Name, 256);<br> GetWindowText(Application.Handle, Name, 256);<br> MessageBox(0, Name, 'Угадал?', mb_Ok + mb_IconInformation);<br> FreeMem(Name, 256);<br> Halt<br>end; |
Сообщ.
#23
,
|
|
|
Тогда почему не пашет следущее :
<br>...<br>var<br> Form1: TForm1;<br> ProcEntry: tprocessentry32;<br> hSnapShot,phndl: thandle;<br> i: integer;<br> pid: array[0..49] of cardinal;<br> procid: cardinal;<br> proctitle: pchar;<br><br>...<br><br>procedure TForm1.lstprocDropDown(Sender: TObject); [b]//всё тот же ComboBox[/b]<br>begin<br>hsnapshot:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);<br>procentry.dwSize:=sizeof(PROCESSENTRY32);<br>if Process32First(hsnapshot,Procentry) then<br>begin<br> lstproc.Clear;<br> i:=0;<br> GetMem(proctitle, 256);<br> with lstproc.Items do<br> begin<br> repeat<br> pid[i]:=procentry.th32ProcessID;<br> phndl:=OpenProcess(PROCESS_ALL_ACCESS,false,pid[i]);<br> GetWindowText(phndl, proctitle, 256);<br> Add(proctitle);<br> closehandle(phndl);<br> inc(i);<br> until not Process32Next(hsnapshot,Procentry);<br> end;<br>end;<br>FreeMem(proctitle, 256);<br>CloseHandle(hsnapshot);<br>end;<br>...<br> ??? ??? ??? |
Сообщ.
#24
,
|
|
|
Скорее всего это ваще не работает
phndl:=OpenProcess(PROCESS_ALL_ACCESS,false,pid[i]); GetWindowText(phndl, proctitle, 256); |
Сообщ.
#25
,
|
|
|
А почему ???
Почему, когда передаёшь хэндл своего процесса, то всё получатся, а когда передаёшь хэндл чужого процесса, выдаётся пустая строка? Кстати при перечислении процессов хэндл своего процесса (Application.Handle) сильно отличается от перечисляемого хэндла... О, идея, а может надо передавать хэндл модуля?.. Щас попробую. |
Сообщ.
#26
,
|
|
|
Блин, не получилось Я не могу получить хэндл модуля. GetModuleHandle возвращает, судя по WinSDK, хэндл только своего процесса.
|
Сообщ.
#27
,
|
|
|
V4ng3R<RnD>, по-моему я сказал как получить title.. ты читаешь постинги?
Забудьте про GetWindowText() или WM_GETTEXT, они возвращают строку с окна. Это прокатит только для окна объекта класса TApplication. В других программах такого окна нет, поэтому и возвращается пустая строка. |
Сообщ.
#28
,
|
|
|
Цитата Song, 25.03.03, 12:06:05 ...по-моему я сказал как получить title.. ты читаешь постинги?... Блин, конечно я читаю постинги, но, по-моему, ни один из предложенных способов не помогает! ToolHelp не помогает, кодом на асме я не знаю как пользоваться, GetModuleFileName выдаёт имя экзешника или прочего модуля, а не title. Блин, хэлп ми !! :'( |
Сообщ.
#29
,
|
|
|
Покажи как ты ToolHelp используешь.
|
Сообщ.
#30
,
|
|
|
Троеточием обозначены пропуски кода
... uses ..., TlHelp32; type Tfmain = class(TForm) ... lstProcs: TListBox; cTimer: TTimer; ... procedure cTimerTimer(Sender: TObject); procedure FormCreate(Sender: TObject); ... ... var fmain: Tfmain; hsnapshot,...: thandle; procentry: tprocessentry32; pid: array[0..49] of cardinal; ppath: array[0..49] of ansistring; i,...: integer; implementation procedure ListProcs; begin ... hsnapshot:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); procentry.dwSize:=sizeof(PROCESSENTRY32); if Process32First(hsnapshot,procentry) then begin fmain.lstprocs.Clear; i:=0; with fmain.lstProcs.Items do {Здесь в lstProcs (ListBox) в цикле дожны перечисляться titl'ы процессов} begin repeat with procentry do begin pid[i]:=th32ProcessID; ppath[i]:=szExeFile; end; Add(ExtractFileName(ppath[i])); inc(i); until not Process32Next(hsnapshot,procentry); end; end; CloseHandle(hsnapshot); ... end; {$R *.dfm} ... procedure Tfmain.cTimerTimer(Sender: TObject); begin listprocs; end; procedure Tfmain.FormCreate(Sender: TObject); begin listprocs; ... end; ... С помощь ToolHelp'а я перечисляю процессы и получаю их id'ы. И что ты хотел увидеть? :-/ |