Нужно по введённому дескриптору, имени или полному имени модуля получить два других параметра.
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);
//и теперь как по дескриптору получить имя или полное имя модуля?
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); // <--- вот так получаем полное имя модуля
Скажи пожалуйста, а можно по дескриптору получить просто имя модуля, без пути?
Ну, это придется разбивать на части полное имя... Либо http://msdn.microsoft.com/en-us/library/bb773589(VS.85).aspx, либо что-то типа fnsplit
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);
Проблема при линковке, линкер просто не может найти реализацию PathFindFileName.
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 указывает на первый символ имени файла ...
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 указывает на первый символ имени файла ...