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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Откуда запустили? Откуда? 
:(
    Опции темы
Mikel
Дата 11.5.2002, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 882
Регистрация: 30.3.2002
Где: Саратов

Репутация: 1
Всего: 2



Есть handle запущенного PE файла. Как определить откуда он был запущен?


--------------------
...so remember, it's better to burn out than to fade away
PM MAIL ICQ   Вверх
TAPAKAH
Дата 11.5.2002, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



GetModuleFileName
PM MAIL   Вверх
Mikel
Дата 12.5.2002, 07:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 882
Регистрация: 30.3.2002
Где: Саратов

Репутация: 1
Всего: 2



Уже пробовал. Не получилось. Поподробнее плз.


--------------------
...so remember, it's better to burn out than to fade away
PM MAIL ICQ   Вверх
TAPAKAH
Дата 12.5.2002, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Слушай .. а что именно не получилось то ???

function GetModuleName(Module: HMODULE): string;
var
 ModName: array[0..MAX_PATH] of Char;
begin
 SetString(Result, ModName, Windows.GetModuleFileName(Module, ModName, SizeOf(ModName)));
end;
PM MAIL   Вверх
Mikel
Дата 14.5.2002, 07:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 882
Регистрация: 30.3.2002
Где: Саратов

Репутация: 1
Всего: 2



Код
VAR  Wnd : hWnd;
buff,name: ARRAY [0..127] OF Char;
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));
    if getmodulefilename(GetWindowLong(wnd,GWL_HINSTANCE),name,sizeof(name))=0
       then name:='Null';
    StringGrid1.Cells[0,StringGrid1.RowCount-1]:=StrPas(buff);
    StringGrid1.Cells[1,StringGrid1.RowCount-1]:=StrPas(name);
    StringGrid1.RowCount:=StringGrid1.RowCount+1;
    END;
Wnd := GetWindow(Wnd, gw_hWndNext);
END;
StringGrid1.RowCount:=StringGrid1.RowCount-1;
end;

Она пишет или адресс к моему файлу или к библиотекам OLE. А остальное нет.


--------------------
...so remember, it's better to burn out than to fade away
PM MAIL ICQ   Вверх
TAPAKAH
Дата 14.5.2002, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ну в общем я взял .. потестировал...
Я так предполагаю что эта функция ..
getmodulefilename как и GetModuleHandle
работает в рамках только своего процесса.

А решить твою задачу .. можно так :
Тут парочка моих любимых функций :)

uses
 tlhelp32;

type
 TModuleArray = array of TModuleEntry32;

// Возвращает список описаний (TModuleEntry32) модулей по идентификатору процесса    
function GetModulesListByProcessId(ProcessId : Cardinal) : TModuleArray;

implementation

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;

Исходный код  
VAR  Wnd : hWnd;
buff: ARRAY [0..127] OF Char;
//------------------------------------
 Pid : Cardinal;
 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));

//    if getmodulefilename(GetWindowLong(wnd,GWL_HINSTANCE),name,sizeof(name))=0
//       then name:='Null';
//-----------------------------------------
 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(name);
   StringGrid1.RowCount:=StringGrid1.RowCount+1;
   END;
Wnd := GetWindow(Wnd, gw_hWndNext);
END;
StringGrid1.RowCount:=StringGrid1.RowCount-1;
end;
PM MAIL   Вверх
Mikel
Дата 15.5.2002, 06:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 882
Регистрация: 30.3.2002
Где: Саратов

Репутация: 1
Всего: 2



Большое спасибо :p


--------------------
...so remember, it's better to burn out than to fade away
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

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

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

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


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

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


 




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


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

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