Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2008, 19:20   #1
Боевой Пингвин
 
Регистрация: 05.11.2008
Сообщений: 3
По умолчанию Проблема с получением хэндла модуля

День добрый!
пишу небольшую программку, но одна функция работает неправильно:
Код:
#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, но как это сделать иначе - я не в курсе
Боевой Пингвин вне форума Ответить с цитированием
Старый 05.11.2008, 19:52   #2
vvviperrr
Тупой студент
Форумчанин
 
Аватар для vvviperrr
 
Регистрация: 12.05.2007
Сообщений: 614
По умолчанию

2Боевой Пингвин покажи, как полный путь к ехешнику передаешь. в доке написано, используйте обратные слеши.

а блин, я тоже ступил. GetModuleHandle возвращает адрес процесса в том случае, если этот процесс был загружен твоим приложением)

Цитата:
The GetModuleHandle function retrieves a module handle for the specified module if the file has been mapped into the address space of the calling process.
вводят блин тут всякие, не читающие справку народ в заблуждение)

Последний раз редактировалось vvviperrr; 05.11.2008 в 20:07.
vvviperrr вне форума Ответить с цитированием
Старый 09.11.2008, 16:15   #3
Боевой Пингвин
 
Регистрация: 05.11.2008
Сообщений: 3
По умолчанию

хм. То бишь как понял после чтения справки, для успешного прекращения процесса нам нужен код примерно вот такого свойства:

Код:
#include <windows.h>
#include <psapi.h>
#include <shlwapi.h>
#include <tlhelp32.h>

inline BOOL KillProcess(char *ProcName)
{
	//DWORD LastError;
	BOOL fOk = false;
	BOOL pEx;
	HANDLE hSnapHandle;

	hSnapHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
	PROCESSENTRY32 pe = { sizeof(pe) };
	pEx = Process32First(hSnapHandle, &pe);
	while(pEx)
	{
		if(!StrCmpI((LPCWSTR)pe.szExeFile,(LPCWSTR)ProcName))
		{
			HANDLE hProcess = OpenProcess(DELETE, FALSE, pe.th32ProcessID);
			fOk = TerminateProcess(hProcess,-1);
		}
		else
		{
			pEx = Process32Next(hSnapHandle, &pe);
		}
	}
	CloseHandle(hSnapHandle);
	
	return fOk;
}
спрашиваю не потому что оно не работает, а потому что у меня линковщик кого-то черта ругается на StrCmpI, говорит:
Код:
error LNK2019: unresolved external symbol __imp__StrCmpIW@8 referenced in function "int __cdecl KillProcess(char *)" (?KillProcess@@YAHPAD@Z)
я так понимаю, что он не может разрешить имя __imp__StrCmpIW@8, вот только вопрос - почему?? нужный header подключен, иначе бы просто не компилировалось
Боевой Пингвин вне форума Ответить с цитированием
Старый 09.11.2008, 17:06   #4
Боевой Пингвин
 
Регистрация: 05.11.2008
Сообщений: 3
По умолчанию

ы ) разобрался ) надо внимательнее читать документацию ))
Боевой Пингвин вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение хэндла дочернего контрола Lich Win Api 7 01.07.2008 10:58
Создание модуля в Си JET_FLASH Общие вопросы C/C++ 16 11.01.2008 17:12
Помогите с получением TStream в CGI boades Работа с сетью в Delphi 0 25.10.2007 10:25
Создание модуля голосования AlekFirst PHP 1 18.10.2007 11:54
Вызов Метода из др. модуля Mickle Общие вопросы Delphi 2 10.05.2007 23:41