Jiry |
Отправлено: 21.06.2003, 09:16 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 5
|
Подскажите, как можно узнать имя exe-шника внешнего приложения. С помощью EnumWindows я их перебираю, а как узнать по полученному хэндлу имя exe-файла? |
|
Admin |
Отправлено: 24.06.2003, 10:35 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
DWORD GetModuleFileName(
HMODULE hModule, // указатель на модуль
LPTSTR lpFilename, // буфер
DWORD nSize // размер буфера
);
Первый параметр функции GetModuleFileName — дескриптор модуля,
для которого требуется получить имя. Если в качестве первого
параметра указан hInstance программы или NULL, возвращается имя
выполняемой программы. Если же указать дескриптор загруженного
модля (DLL), который возвращается функциями LoadLibrary,
LoadLibraryEx или GetModuleHandle, возвращается имя этой DLL.
Кроме функции GetModuleFileName, существует функция
GetModuleFileNameEx, позволяющая получить имя модуля,
загруженного в адресное пространство другого процесса
CODE |
#include <winbase.h>
//---------------------------------------------------------------------------
bool __stdcall EnumProc(HWND hWnd,long k)
{
char buffer[100];
if(hWnd==NULL) return false;
GetWindowText(hWnd,buffer,sizeof(buffer));
if (buffer[0] && IsWindowVisible(hWnd) &&
GetWindowLong(hWnd,GWL_HWNDPARENT)==0) {
long LW=GetWindowLong(hWnd,GWL_HINSTANCE);
GetModuleFileName((HINSTANCE)LW,buffer,MAX_PATH);
Form1->Memo1->Lines->Add(String(buffer)); // выводим имя exe или
// WindowText
};
return true;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
EnumWindows((WNDENUMPROC)EnumProc,0);
}
//-----------------------------------------------------
|
Отредактировано Admin — 24 Jun 2003, 22:51
|
|
Георгий |
Отправлено: 25.06.2003, 18:18 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
я тоже самое хотел в DOS сделать, но у меня не получилось...
может и в нём можно так легко всё сделать? |
|
|