Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.09.16;
Скачать: [xml.tar.bz2];

Вниз

Как по узнать запускаемый файл приложения по его 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.007 c
1-50824
Bill
2002-09-04 09:33
2002.09.16
Подскажите


1-50704
Kent
2002-09-04 16:33
2002.09.16
У меня возникает ошибка при вызове процедуры из DLL внутри потока


3-50591
denimas
2002-08-24 15:17
2002.09.16
InterClient


3-50618
sergey32
2002-08-22 17:30
2002.09.16
параметры хранимой процедуры


1-50792
Ekaterina
2002-09-03 10:10
2002.09.16
Frame в dll





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский