Помощь - Поиск - Пользователи - Календарь
Полная версия: Дескриптор и имя модуля
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
18192123
Нужно по введённому дескриптору, имени или полному имени модуля получить два других параметра.


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
Цитата
как по дескриптору получить имя или полное имя модуля?
Вот так:
  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
Скажи пожалуйста, а можно по дескриптору получить просто имя модуля, без пути?
volvo
Ну, это придется разбивать на части полное имя... Либо PathFindFileName, либо что-то типа fnsplit
18192123
Цитата(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
Проблема при линковке, линкер просто не может найти реализацию 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
Цитата(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. Спасибо за альтернативный вариант!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.