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

Вниз

Не понимаЮ. почему не работает GetModuleFileNameA   Найти похожие ветки 

 
@!!ex ©   (2008-07-30 23:13) [0]

Inst:=GetWindowLong(Wnd,GWL_HINSTANCE);
GetModuleFileNameA(Inst,PChar(Path),256);

Wnd - окно, чей экзешник надо найти.
Path ВСЕГДА содержит путь к программе, где этот код выполняется.
ПОЧЕМУ???


 
Loginov Dmitry ©   (2008-07-30 23:24) [1]

> Path ВСЕГДА содержит путь к программе, где этот код выполняется.
>
> ПОЧЕМУ???


HINSTANCE - это адрес модуля в адресном пространстве текущего процесса. Естественно, GetModuleFileNameA() ищет только там, откуда ее вызывали.


 
@!!ex ©   (2008-07-30 23:27) [2]

> [1] Loginov Dmitry ©   (30.07.08 23:24)

Хм. Понятно. А как тогда узнать путь к ехешке чужого процесса?


 
@!!ex ©   (2008-07-30 23:28) [3]

Мда... И как я пропустил, когда первый раз читал??
The GetModuleFileName function retrieves the fully-qualified path for the file that contains the specified module that the current process owns.

GetModuleFileName operates only on modules that the current process owns. To specify modules that belong to another process, use the GetModuleFileNameEx function.


 
Loginov Dmitry ©   (2008-07-30 23:28) [4]

То, что GetWindowLong() возвращает адрес модуля в чужом адресном пространстве - по сути бесполезно, если конечно не баловаться внедрением туда своей DLL.


 
@!!ex ©   (2008-07-30 23:39) [5]

Как я понимаю, должна помочь:
GetModuleFileNameEx

Но при ее использовании я получаю на выходе пустую строку..


 
@!!ex ©   (2008-07-30 23:49) [6]

GetModuleFileNameEx(Msg.wParam,0,PChar(Path),256);

В Msg.wParam - Хэндл процесса. Он в сообщении посылает свой хэндл. Поулчает его через GetCurrentProcessId();


 
Alucard   (2008-07-30 23:53) [7]

Можно использовать GetProcessImageFileName.
При получении строк из функций WinApi обычно требуется использовать уже выделенный буфер. Проще всего в данном случае использовать String в сочетании с SetLength и последующим приведением к PChar.


 
Loginov Dmitry ©   (2008-07-30 23:54) [8]

> В Msg.wParam - Хэндл процесса. Он в сообщении посылает свой
> хэндл. Поулчает его через GetCurrentProcessId();


Это сторонняя программа такое вытворяет? ;)


 
@!!ex ©   (2008-07-30 23:56) [9]

> [7] Alucard   (30.07.08 23:53)

Я в курсе про буффер.


> [8] Loginov Dmitry ©   (30.07.08 23:54)

Да. Обе проги я пишу.

Нашел код в инете. Сделал. Вроде работает.

GetWindowThreadProcessId(Msg.wParam, @dwID);
   hProcess := OpenProcess(PROCESS_ALL_ACCESS, false, dwID);
   GetModuleFileNameEx (hProcess, HMODULE($400000), PChar(Path),256);
   CloseHandle (hProcess);

wParam - Хэндл окна.


 
Loginov Dmitry ©   (2008-07-30 23:59) [10]

Тока $400000 замени на 0, так вернее будет (мало ли у кого какой baseaddress)

И размер буфера увеличь ;)


 
Leonid Troyanovsky ©   (2008-07-31 07:51) [11]


> @!!ex ©   (30.07.08 23:49) [6]

> В Msg.wParam - Хэндл процесса. Он в сообщении посылает свой
> хэндл. Поулчает его через GetCurrentProcessId();

Извращенец.
Во-первых, это не хендл.
Во-вторых, для передачи хендла необходима DuplicateHandle.
А, в-третьих, проще послать искомый путь WM_COPYDATA.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2008-07-31 07:57) [12]


> @!!ex ©   (30.07.08 23:56) [9]

> Нашел код в инете.

В печь его.

--
Regards, LVT.


 
@!!ex ©   (2008-07-31 08:33) [13]

> [12] Leonid Troyanovsky ©   (31.07.08 07:57)

Почему?


 
Leonid Troyanovsky ©   (2008-07-31 09:09) [14]


> @!!ex ©   (31.07.08 08:33) [13]

> Почему?

Во-первых, кривой.
Во-вторых, в нем нет нужды.

В-третьих, использование psapi для получения пути своего же
приложения, которое способно просто сообщить свой путь -
уподоблю батонокидательству.

--
Regards, LVT.


 
Игорь Шевченко ©   (2008-07-31 09:52) [15]

автор, тебе чего вообще надо ? :)


 
Leonid Troyanovsky ©   (2008-07-31 10:13) [16]


> Игорь Шевченко ©   (31.07.08 09:52) [15]

> автор, тебе чего вообще надо ? :)

Per aspera ad astra.

--
Regards, LVT.


 
Anatoly Podgoretsky ©   (2008-07-31 10:22) [17]


> Leonid Troyanovsky ©   (31.07.08 10:13) [16]

Ты про кактус?


 
Игорь Шевченко ©   (2008-07-31 10:27) [18]

Leonid Troyanovsky ©   (31.07.08 10:13) [16]


> Per aspera ad astra.


Скорее, per rectum


 
Leonid Troyanovsky ©   (2008-07-31 10:29) [19]


> Anatoly Podgoretsky ©   (31.07.08 10:22) [17]

> Ты про кактус?

Ага.

--
Regards, LVT.


 
@!!ex ©   (2008-07-31 10:31) [20]

> [15] Игорь Шевченко ©   (31.07.08 09:52)

http://delphimaster.net/view/2-1217424279/
Пост номер 15.


> В-третьих, использование psapi для получения пути своего
> же
> приложения, которое способно просто сообщить свой путь -
> уподоблю батонокидательству.

чем меньше делает отлаживаемое приложение - тем лучше.
В идеале оно вообще не должно знать ничего об отладке, но идел - не достижим.



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

Форум: "Начинающим";
Текущий архив: 2008.09.14;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.052 c
2-1217936762
abhtr
2008-08-05 15:46
2008.09.14
Проблемы с открытием таблицы Paradox


2-1217490630
Sergey2
2008-07-31 11:50
2008.09.14
проблема с Вистой


6-1193157498
Pacific
2007-10-23 20:38
2008.09.14
smtp


2-1217491691
Ilya2008
2008-07-31 12:08
2008.09.14
record / class / object — что будет лучше


2-1217337692
Kolan
2008-07-29 17:21
2008.09.14
Работа с веб-сервисом.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский