Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Определить имя файла процесса и наоборот???!!! 
:(
    Опции темы
Nicholas
  Дата 21.10.2004, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 436
Регистрация: 30.9.2004

Репутация: нет
Всего: 0



1. Вот так получаем список запущенных приложений:

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 {Hе показываем:}
IF (Wnd <> Application.Handle) AND {-Собственное окно}
IsWindowVisible(Wnd) AND {-Hевидимые окна}
(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;

Выполнив получаем примерно такое:

Документ1 – Microsoft Word

Windows Commander
……..

А надо что бы выводилось так:

Документ1 – Microsoft Word | Winword.exe

Windows Commander | Wincmd32.exe
………….

а лучше так:

Документ1 – Microsoft Word | c:\Program files\Microsoft Office\Office10\Winword.exe

Windows Commander | c:\WinCmd\Wincmd32.exe
………….

Покажите как такое организовать, желательно с помощью Win 32 API ???

2. Как получить HWnd по имени файла, к примеру у меня calc.exe имя файла и калькулятор запущен, мне надо найти окно созданное этой программой и закрыть его.
Только вот привязка должна быть к файлу, т.к. есть некоторые системные приложения у которых имена файлов разные, а classname одинаковые, при этом заголовок окна не известен?????

Собственно если на первый вопрос кто ответит, то второй не понадобиться, поставлю просто условие при получении classname проверят имя файла.

:sample
PM MAIL ICQ   Вверх
p0s0l
Дата 21.10.2004, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 14
Всего: 112



1) Этот способ не работает в 9x:
Код

uses PsApi;

var
 PID : DWORD;
 hProcess, hSnap : THandle;

...
 GetWindowThreadProcessId (wnd, PID);
 hProcess := OpenProcess (PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, PID);
 GetModuleFileNameEx (hProcess, 0, Buff, SizeOf(Buff));
 CloseHandle(hProcess);
// в Buff - имя исполняемого файла

Этот способ должен работать везде:
Код

uses TlHelp32;

var
 PID : DWORD;
 me32 : TModuleEntry32;
 hSnap : THandle

...
 GetWindowThreadProcessId (wnd, PID);
 hSnap := CreateToolHelp32Snapshot (TH32CS_SNAPMODULE, PID);
 me32.dwSize := SizeOf(me32);
 Module32First (hSnap, me32);
 CloseHandle (hSnap);
// в me32.szExePath - имя исполняемого файла


2) Как убить процесс, зная имя .exe (из DRKB):
Код

uses  
 Tlhelp32, Windows, SysUtils;  

function KillTask(ExeFileName: string): integer;  
const  
 PROCESS_TERMINATE=$0001;  
var  
 ContinueLoop: BOOL;  
 FSnapshotHandle: THandle;  
 FProcessEntry32: TProcessEntry32;  
begin  
 result := 0;  

 FSnapshotHandle := CreateToolhelp32Snapshot  
                    (TH32CS_SNAPPROCESS, 0);  
 FProcessEntry32.dwSize := Sizeof(FProcessEntry32);  
 ContinueLoop := Process32First(FSnapshotHandle,  
                                FProcessEntry32);  

 while integer(ContinueLoop) <> 0 do  
 begin  
   if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =  
        UpperCase(ExeFileName))  
    or (UpperCase(FProcessEntry32.szExeFile) =  
        UpperCase(ExeFileName))) then  
     Result := Integer(TerminateProcess(OpenProcess(  
                       PROCESS_TERMINATE, BOOL(0),  
                       FProcessEntry32.th32ProcessID), 0));  
   ContinueLoop := Process32Next(FSnapshotHandle,  
                                 FProcessEntry32);  
 end;  

 CloseHandle(FSnapshotHandle);  
end;



--------------------
С уважением, г-н Посол.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0412 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.