Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.16;
Скачать: CL | DM;

Вниз

Как по узнать запускаемый файл приложения по его Hinstance?   Найти похожие ветки 

 
vlv ©   (2002-09-03 11:06) [0]

???


 
Ученик ©   (2002-09-03 11:15) [1]

Окуда его (Hinstance) взяли ?


 
Виктор Щербаков ©   (2002-09-03 11:16) [2]

procedure TForm1.Button1Click(Sender: TObject);
var
P: PChar;
begin
GetMem(P, MAX_PATH);
try
GetModuleFileName(Hinstance, P, MAX_PATH);
Label1.Caption := P;
finally
Freemem(P, MAX_PATH);
end
end;


 
vlv ©   (2002-09-03 11:36) [3]

Спасибо.
Только GetModuleFileName работает с HModule.
А как мне его получить по handle окна приложения (Application.Handle)?


 
Виктор Щербаков ©   (2002-09-03 11:39) [4]

HInstance и HModule имеет тот же смысл - адрес модуля в АП процесса.


 
Виктор Щербаков ©   (2002-09-03 11:53) [5]


> Только GetModuleFileName работает с HModule.
> А как мне его получить по handle окна приложения (Application.Handle)?

А зачем тебе HModule или HInstance чужого процесса? Ведь в адресном пространстве твоего процесса они не имеют смысла.


 
vlv ©   (2002-09-03 11:57) [6]

> Виктор Щербаков
Ты неправ.
Хендлы действительны независимо от пространства.
Это НЕ УКАЗАТЕЛИ.

Я тоже думал, что HInstance и HModule имеет тот же смысл,
однако вызов GetModuleFileName(Application.Handle) результата не дает



 
Виктор Щербаков ©   (2002-09-03 12:00) [7]

Начнем с того, что Application.Handle и HInstance - вещи совершенно разные. Application.Handle - Handle главного окна приложения. HInstance - адрес спроецированного в АП exe-шника.
По-этому естественно, что вызов GetModuleFileName(Application.Handle) не дал результата.


 
Eugene ©   (2002-09-03 12:02) [8]



Function FssGetFileName(Const Handle: HWND): String;
Var
A : Array [0..512] of Char;
begin
Result:="";
if (GetClassLong(Handle,GCL_HMODULE) = 0) then Exit;
if (GetModuleFileName(Res,A,SizeOf(A)) = 0) then Exit;
SetString(Result,A,Res);
end;



 
Виктор Щербаков ©   (2002-09-03 12:16) [9]

Eugene © (03.09.02 12:02)
Даже если в твоем коде исправить ошибки (результат вызовов функций теряется), то всё равно, работать он будет только для своего процесса. Что, вобщем-то очевидно.


 
Alx2 ©   (2002-09-03 12:25) [10]

>Я тоже думал, что HInstance и HModule имеет тот же смысл,
>однако вызов GetModuleFileName(Application.Handle) результата
>не дает
Сначала попробовать DuplicateHandle?


 
Старый Паскалист   (2002-09-03 12:28) [11]

HInstance/HModule суть адреса загрузки кода exe- и dll-модулей в адресном пространстве процесса.

Они, естественно, процессо-зависимы, и, более того, очень велика вероятность того, что в разных процессах они будут одинаковые.

2vlv © (03.09.02 11:57)
>> Виктор Щербаков
>Ты неправ.
>Хендлы действительны независимо от пространства.
>Это НЕ УКАЗАТЕЛИ.

Хэндлы окон действительно процессонезависимы.
А хендлы объектов ядра (Thread, Process, и т.д.) - зависимы.


 
Alx2 ©   (2002-09-03 12:29) [12]

>Alx2 © (03.09.02 12:25)
Нет, скорее всего не получится.
Но если приспичило получить искомое именно по hInstance, то IMHO придется-таки внедрятся в интересующий процесс и оттуда звать GetModuleFileName.


 
Alx2 ©   (2002-09-03 12:34) [13]

Иии так :)
Var Str : array [char] of char;
begin
GetWindowModuleFileName(Application.Handle,Str,sizeof(str));


 
Bass1   (2002-09-03 12:58) [14]

function FileNameByInstance: string
var
lFileName: array[0..max_path] of char;
S: string;
begin
GetModuleFileName(HInstance, lFileName, SizeOf(lFileName));
S := lFileName;
Result := trim(S);
end;

HInstance есть у каждого процеса !!! будь то DLL или OCX. Если указать HInstance:=NULL то получите имя файла родительского процесса.


 
Alx2 ©   (2002-09-03 13:02) [15]

>Bass1 (03.09.02 12:58)
Это уже проехали.
Человек спрашивает немного другое (vlv © (03.09.02 11:36))



Страницы: 1 вся ветка

Текущий архив: 2002.09.16;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.013 c
3-50645
elektro
2002-08-26 14:58
2002.09.16
Запрос SQL


3-50577
RDA
2002-08-23 15:56
2002.09.16
Пара вопросов.


14-50960
paul_shmakov
2002-08-21 16:21
2002.09.16
Предложение к Merlin по работе с архивами форумов


6-50894
SemFLY
2002-07-12 13:52
2002.09.16
Помогите разобраться ! ;-)


1-50705
Andrew L
2002-09-05 11:45
2002.09.16
Небольшой вопрос по удалению папок (возможно ламерский, но всеже)