Добрый день
Делаю первые шаги в VC++ (до этого, давно-давно, в институте, програмил на C++ под DOS)
Поставил себе первую задачу, и, в рамках этой моей первой задачи, понадобилась глобальная переменная с каталогом экзешника.
На форумах нашел для этого дела пример, и сделал из него такую процедуру
void GetMainExeName(PTCHAR ExeName, HWND hWnd)
{
DWORD ProcessId;
HANDLE hProcess;
HMODULE hModule;
DWORD cbNeeded;
GetWindowThreadProcessId(hWnd, &ProcessId);
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ, FALSE, ProcessId);
EnumProcessModules(hProcess, &hModule, sizeof(hModule), &cbNeeded);
GetModuleFileNameEx(hProcess, hModule, ExeName, sizeof(ExeName));
CloseHandle(hProcess);
}
Задумывалось, что сия процедура будет вызываться в _tWinMain(...) и инициализировать, значит, мою глобальную переменную.
Сразу возникли вопросы.
Вопрос №1. Неужели чтобы получить хэндл процесса, никак не обойтись без hWnd? При чем здесь окно, ведь процесс как таковой вообще не обязан иметь окна
Вопрос №2. Чем отличается идентификатор процесса (который GetWindowThreadProcessId) от хэндла процесса (который OpenProcess)?
Сразу скажу, что задача не в том, чтобы получить каталог, а чтобы разобраться с попутно возникшими вопросами
Заранее спасибо за ответы