Форум: "Начинающим";
Текущий архив: 2008.03.02;
Скачать: [xml.tar.bz2];
ВнизПолучить HANDLE незапущенного приложения Найти похожие ветки
← →
Artem (2008-02-04 01:39) [0]Подскажите, пожалуйста, как получить handle незапущенного приложения, зная полный путь к нему?
← →
Artem (2008-02-04 01:52) [1]Необходимо для того, чтобы извлечь из ее ресурса файл. Оба приложения мои.
← →
Германн © (2008-02-04 02:00) [2]
> Получить HANDLE незапущенного приложения [D6, XP]
>
> Artem (04.02.08 01:39)
>
> Подскажите, пожалуйста, как получить handle незапущенного
> приложения, зная полный путь к нему?
>
См. функцию GetModuleHandle в справке по WinAPI. Но не забудь прочитать и понять Remarks.
← →
Ins © (2008-02-04 11:50) [3]Если я правильно понял вопрос, то порядок следующий:
1. LoadLibraryEx с флагом LOAD_LIBRARY_AS_DATAFILE - загружаем приложение в свое адресное пространство. Функция возвращает дескриптор исполняемого модуля - сохраняем его.
2. Используя полученный дескриптор, загружаем данные из ресурсов
3. FreeLibrary
← →
ketmar © (2008-02-04 12:08) [4]где-то так, да.
← →
Ins © (2008-02-04 12:13) [5]
> Необходимо для того, чтобы извлечь из ее ресурса файл. Оба
> приложения мои.
Я тут вот что подумал... Если оба приложения ваши, то может завести Resourсe-only DLL, и скинуть необходимые ресурсы туда? И оба ваши приложения будут грузить их из этой библиотеки?! Думаю, это будет логичнее и рациональнее. А загружать библиотеку так же, как и описано в [3] (LoadLibraryEx с флагом LOAD_LIBRARY_AS_DATAFILE), работает гораздо быстрее чем просто LoadLibrary.
← →
{RASkov} © (2008-02-04 13:01) [6]> Получить HANDLE незапущенного приложения
Я что-то не в теме.... у него разве есть хэндл?)
Или Artem таки допустил неточности в вопросе...
← →
Skyle © (2008-02-04 13:08) [7]
> {RASkov} © (04.02.08 13:01) [6]
> > Получить HANDLE незапущенного приложения
>
> Я что-то не в теме.... у него разве есть хэндл?)
> Или Artem таки допустил неточности в вопросе...
Скорее > Германн © протелепатировал :)
← →
Ins © (2008-02-04 13:08) [8]
> у него разве есть хэндл?)
Вопрос сформулирован криво, но я так понимаю, имеется в виду не хэндл процесса, а дескриптор исполняемого модуля, необходимый для загрузки ресурсов. Учитывая, что этот дескриптор представляет собой адрес образа exe в памяти вызывающего процесса, абсолютно все равно, запущен ли exe или нет. Главное, чтобы он был загружен в АП вызывающего процесса.
← →
Ins © (2008-02-04 13:10) [9]
> Скорее > Германн © протелепатировал :)
Мне кажется - нет. GetModuleHandle не вернет дескриптор модуля, который не загружен данным процессом.
← →
Skyle © (2008-02-04 13:16) [10]
> Ins © (04.02.08 13:10) [9]
GetModuleHandle вернёт handle, пригодный для загрузки ресурсов, что вполне себе содержит слова из [0] и похоже по смыслу на [1] :)
← →
Ins © (2008-02-04 13:20) [11]
> что вполне себе содержит слова из [0]
Я думаю, только автор может прояснить ситуацию :) Но что касается GetModuleHandle, то это подразумевает, что образ чужого процесса уже загружен в адресное пространство нашего, подтверждение чего в словах автора я не увидел ;-)
← →
Artem (2008-02-07 23:15) [12]Господа, объясните, пожалуйста
function LoadLibraryEx(lpLibFileName: PChar; hFile: THandle; dwFlags: DWORD): HMODULE; stdcall;
hFile - чем здесь является?
← →
Artem (2008-02-07 23:22) [13]Помогите разобраться.
Есть функция: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 выдает. Что не правильно делаю?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.03.02;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.075 c