Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вижу тема давнишняя, но наверняка сюда заходят.
Была аналогичная проблема с получением хендла длл в чужом процессе.
Честно говоря был удивлен не найдя простой функции для этого.
Пришлось делать через тулхелп32.
В юзес подключаем Tlhelp32 и перечисляем модули в конкретном процессе(или если не ошибаюсь во всех когда вместо PId передаётся 0):
{Code}
// HLibrary := GetModuleHandle(PWideChar('ИмяМодуля.Dll')); Вот так разумеется не проканывает
// HLibrary разумеется глобальная переменная

procedure TForm1.Button2Click(Sender: TObject);
var
SnapModule: CARDINAL;
ModuleEntry: ModuleEntry32;
NextModule: BOOL;
begin
HLibrary := 0;
SnapModule := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, PId); // Не забываем предварительно получить пид
ModuleEntry.dwSize := SizeOf(ModuleEntry);
NextModule := Module32First(SnapModule, ModuleEntry);
while NextModule do
begin
if ModuleEntry.szModule = 'ИмяМодуля.Dll' then
begin
HLibrary := ModuleEntry.hModule;
Exit;
end;
NextModule := Module32Next(SnapModule, ModuleEntry);
end;
CloseHandle(SnapModule);
end;
{/Code}

Ну там можно поиграть структурой ModuleEntry под свои потребности. Там много интересных полей.

Отправлено: 16:08, 08-04-2012 | #17