Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Дескриптор и имя модуля

Автор: 18192123 22.10.2008 2:46

Нужно по введённому дескриптору, имени или полному имени модуля получить два других параметра.


TCHAR lpProcName[256]=TEXT("");
wchar_t pszStrPID[16];
// вводим имя модуля - получаем дескриптор
GetWindowText(hEditNMod,(LPWSTR)lpProcName,30);
wsprintf(pszStrPID,_T("%d"),GetModuleHandle(lpProcName));//(TEXT("MSCTF.dll")));
SendMessage(hEditDMod,WM_SETTEXT, 0, (LPARAM)(LPCSTR)pszStrPID);

//и теперь как по дескриптору получить имя или полное имя модуля?


Автор: volvo 22.10.2008 4:06

Цитата
как по дескриптору получить имя или полное имя модуля?
Вот так:
  HMODULE hModule; // Это - чтоб потом не конвертировать обратно строку в HMODULE

// вводим имя модуля - получаем дескриптор
GetWindowText(hEditNMod,(LPWSTR)lpProcName,30);
wsprintf(pszStrPID,_T("%d"),(hModule = GetModuleHandle(lpProcName))); // запоминаем hModule
SendMessage(hEditDMod,WM_SETTEXT, 0, (LPARAM)(LPCSTR)pszStrPID);

GetModuleFileNameW(hModule, lpProcName, 256); // <--- вот так получаем полное имя модуля

Автор: 18192123 23.10.2008 5:25

Скажи пожалуйста, а можно по дескриптору получить просто имя модуля, без пути?

Автор: volvo 23.10.2008 6:31

Ну, это придется разбивать на части полное имя... Либо http://msdn.microsoft.com/en-us/library/bb773589(VS.85).aspx, либо что-то типа fnsplit

Автор: 18192123 23.10.2008 18:29

Цитата(volvo @ 23.10.2008 3:31) *

....PathFindFileName

Снова что-то напутала....Ошибка:
1>main.obj : error LNK2019: unresolved external symbol __imp__PathFindFileNameW@4 referenced in function "void __cdecl OnClickTerminateJob(struct HWND__ *)" (?OnClickTerminateJob@@YAXPAUHWND__@@@Z)


GetWindowText(hEditPathMod,(LPWSTR)lpProcName,256);//по полному имени всё остальное
wsprintf(pszStrPID,_T("%d"),(hModule = GetModuleHandle(lpProcName))); // запоминаем hModule
SendMessage(hEditDMod,WM_SETTEXT, 0, (LPARAM)(LPCSTR)pszStrPID);
wsprintf(pszStrPID,_T("%d"), (PathFindFileName(lpProcName)));
SendMessage(hEditNMod,WM_SETTEXT, 0, (LPARAM)(LPCWSTR)pszStrPID);


Автор: volvo 23.10.2008 18:43

Проблема при линковке, линкер просто не может найти реализацию PathFindFileName.

Цитата(MSDN)
Import library shlwapi.lib
Подключила эту библиотеку?

Добавлено через 10 мин.
Хотя можно сделать и совсем просто:
	wchar_t s[200];

// здесь получила в s полное имя модуля...

wchar_t *just_name = s + wcslen(s) - 1;
for(; *just_name != (wchar_t)92; --just_name); // ну, или сравниваем с '\\'
just_name += 1;

// just_name указывает на первый символ имени файла ...

Автор: 18192123 23.10.2008 19:06

Цитата(volvo @ 23.10.2008 15:43) *

Проблема при линковке, линкер просто не может найти реализацию PathFindFileName.
Подключила эту библиотеку?

Добавлено через 10 мин.
Хотя можно сделать и совсем просто:
	wchar_t s[200];

// здесь получила в s полное имя модуля...

wchar_t *just_name = s + wcslen(s) - 1;
for(; *just_name != (wchar_t)92; --just_name); // ну, или сравниваем с '\\'
just_name += 1;

// just_name указывает на первый символ имени файла ...


Я добавила #include "Shlwapi.h"...
p.s. Спасибо за альтернативный вариант!