2016-03-23 5 views
1

Я пытаюсь проверить, существует ли ресурс в другом приложении Delphi, проблема в том, что он знает только, как это сделать локально, я имею в виду в самом приложении.Проверьте, существует ли ресурс в другом приложении в Delphi

Источник:

function exists_resource(name: string): boolean; 
begin 
    if (FindResource(HInstance, PChar(name), RT_RCDATA) <> 0) then 
    begin 
    Result := True; 
    end 
    else 
    begin 
    Result := False; 
    end; 
end; 

Как я могу проверить это в другом приложении?

ответ

4

Используйте LoadLibraryEx, чтобы загрузить внешний файл.

function exists_resource(const name, filename: string): boolean; 
var 
    HInst: THandle; 
begin 
    HInst:= LoadLibraryEx(PChar(Filename), 0, LOAD_LIBRARY_AS_DATAFILE or LOAD_LIBRARY_AS_IMAGE_RESOURCE); 
    //Win32Check(HInst); //Uncomment if you want to generate errors. 
    if HInst = 0 then exit(false); 
    try 
    Exit((FindResource(HInst, PChar(name), RT_RCDATA) <> 0)); 
    finally 
    FreeLibrary(Hinst); 
    end; {try} 
end; 

Обратите внимание, что использование LoadLibraryEx таким образом будет работать для загрузки как dll, так и exe.

+0

Блок исключений бессмысленен, FindResource не будет создавать исключение. –

+0

@SertacAkyuz, ты сейчас немного глуп. «Наконец» не существует, чтобы ловить исключения. Он должен поймать 'Exit'. – Johan

+0

Странно. Что случилось с 'Результатом: = FindResource ...' и не имеет tryf? –

Смежные вопросы