Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Получить HANDLE незапущенного приложения [D6, XP]


Artem ©   (2008-02-04 01:39:00) 

Подскажите, пожалуйста, как получить handle незапущенного приложения, зная полный путь к нему?


Artem   (2008-02-07 23:22:00) [1]

Помогите разобраться.
Есть функция:

function ExtractRes2(What:THandle;ResType, ResName, ResNewName: string): Boolean;
var
 Res: TResourceStream;
begin
 Result := False;
 Res := TResourceStream.Create(What, Resname, PChar(ResType));
 try
   Res.SavetoFile(ResNewName);
   Result := True;
 finally
   Res.Free;
 end;
end;


Пользуюсь так:

izd:=LoadLibraryEx(PChar(edit1.text),h,LOAD_LIBRARY_AS_DATAFILE);
if ExtractRes2(izd,'DATA','storage', pathTOstg+'\storage.smp');


Вроде все работает, но потом Access violation выдает. Что не правильно делаю?


Artem   (2008-02-07 23:15:00) [2]

Господа, объясните, пожалуйста
function LoadLibraryEx(lpLibFileName: PChar; hFile: THandle; dwFlags: DWORD): HMODULE; stdcall;

hFile - чем здесь является?


Ins   (2008-02-04 13:20:00) [3]


> что вполне себе содержит слова из [0]


Я думаю, только автор может прояснить ситуацию :) Но что касается GetModuleHandle, то это подразумевает, что образ чужого процесса уже загруженв адресное пространство нашего, подтверждение чего в словах автора я не увидел ;-)


Skyle   (2008-02-04 13:16:00) [4]


> Ins ©   (04.02.08 13:10) [9]

GetModuleHandle вернёт handle, пригодный для загрузки ресурсов, что вполне себе содержит слова из [0] и похоже по смыслу на [1] :)


Ins   (2008-02-04 13:10:00) [5]


> Скорее > Германн © протелепатировал :)

Мне кажется - нет. GetModuleHandle не вернет дескриптор модуля, который не загружен данным процессом.


Skyle   (2008-02-04 13:08:00) [6]


> {RASkov} ©   (04.02.08 13:01) [6]
> > Получить HANDLE незапущенного приложения
>
> Я что-то не в теме.... у него разве есть хэндл?)
> Или Artem таки допустил неточности в вопросе...

Скорее > Германн ©протелепатировал :)


Ins   (2008-02-04 13:08:00) [7]


> у него разве есть хэндл?)

Вопрос сформулирован криво, но я так понимаю, имеется в виду не хэндл процесса, а дескриптор исполняемого модуля, необходимый для загрузки ресурсов. Учитывая, что этот дескриптор представляет собой адрес образа exe в памяти вызывающего процесса, абсолютно все равно, запущен ли exe или нет. Главное, чтобы он был загружен в АП вызывающего процесса.


{RASkov}   (2008-02-04 13:01:00) [8]

> Получить HANDLE незапущенного приложения

Я что-то не в теме.... у него разве есть хэндл?)
Или Artem таки допустил неточности в вопросе...


Ins   (2008-02-04 12:13:00) [9]


> Необходимо для того, чтобы извлечь из ее ресурса файл. Оба
> приложения мои.

Я тут вот что подумал... Если оба приложения ваши, то может завести Resourсe-only DLL, и скинуть необходимые ресурсы туда? И оба ваши приложения будут грузить их из этой библиотеки?! Думаю, это будет логичнее и рациональнее. А загружать библиотеку так же, как и описано в [3] (LoadLibraryEx с флагом LOAD_LIBRARY_AS_DATAFILE), работает гораздо быстрее чем просто LoadLibrary.


ketmar   (2008-02-04 12:08:00) [10]

где-то так, да.


Ins   (2008-02-04 11:50:00) [11]

Если я правильно понял вопрос, то порядок следующий:
1. LoadLibraryEx с флагом LOAD_LIBRARY_AS_DATAFILE - загружаем приложение в свое адресное пространство. Функция возвращает дескриптор исполняемого модуля - сохраняем его.
2. Используя полученный дескриптор, загружаем данные из ресурсов
3. FreeLibrary


Германн   (2008-02-04 02:00:00) [12]


> Получить HANDLE незапущенного приложения [D6, XP]
>
> Artem   (04.02.08 01:39)
>
> Подскажите, пожалуйста, как получить handle незапущенного
> приложения, зная полный путь к нему?
>

См. функцию GetModuleHandle в справке по WinAPI. Но не забудь прочитать и понять Remarks.


Artem   (2008-02-04 01:52:00) [13]

Необходимо для того, чтобы извлечь из ее ресурса файл. Оба приложения мои.


Наверх

Титульная страница Поиск, карта сайта Написать письмо