Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > проблема с GetModuleHandle


Автор: BattlePenguin 5.11.2008, 19:36
День добрый!
пишу небольшую программку, но одна функция работает неправильно:
Код

#include <windows.h>
#include <tlhelp32.h>
#include "cons.h"
#include "camera.h"

BOOL KillProcess(char *ProcName)
{
    DWORD LastError;
    HANDLE hHandle;

    hHandle = GetModuleHandle((LPCWSTR)ProcName);
    LastError = GetLastError();
    BOOL fOk = TerminateProcess(hHandle, 1);
    return fOk;
}

если быть развернуто: в функцию передается указатель на строку, содержащую имя ехе-модуля процесса, который надо закрыть. А проблема в том, что что бы я не передавал процедуре GetModuleHandle она постоянно возвращает NULL. С полным путем тоже передавал. GetLastError говорит о том, что программа просто не находит нужного модуля. Грешил на привилегии - выполнял с SE_TCB_NAME, ноль эмоций.
Так что я уже просто малость в замешательстве, что ж собственно делать.
Еще конечно может быть проблема с приведением char* к LPCWSTR, но как это сделать иначе - я не в курсе

Автор: REZiaMIX 5.11.2008, 20:07
Код

#include <psapi.h>
#include <tlhelp32.h>
const int LARGE_ENOUGH = 2048;  

void KillProcess(LPCTSTR szModuleName)
{
        HANDLE pSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
            bool bIsok = false;
            PROCESSENTRY32 ProcEntry;
            ProcEntry.dwSize = sizeof(ProcEntry);
            if(Process32First(pSnap, &ProcEntry))bIsok=true;
            while (bIsok)
            {
                if(!_strcmpi(ProcEntry.szExeFile,szModuleName)){
                     HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE, FALSE, ProcEntry.th32ProcessID);
                     ::TerminateProcess(hProcess, -1);
                }
                if(Process32Next(pSnap, &ProcEntry))bIsok=true;
                else bIsok = false;
            }
            CloseHandle(pSnap);
}


Ваш вариант нерабочий т.к. 
Цитата

GetModuleHandle Function
Retrieves a module handle for the specified module. The module must have been loaded by the calling process.
© MSDN

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)