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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2011, 11:41   #1
Nikz
 
Аватар для Nikz
 
Регистрация: 28.07.2011
Сообщений: 3
По умолчанию Хуки и проблемы с ними

Доброго времени, товарищи!
Столкнулся с необходимостью перехвата нажатий клавиш. Для сего решено использовать глобальную ловушку. Так как раньше с хуками не сталкивался, то решил попрактиковаться на отлове сообщений от мыши. Но проблема в том, что GetProcAddress упорно не находит MouseHook, а GetLastError возвращает 127(ERROR_PROC_NOT_FOUND)

код dll:
Код:
#include <windows.h>

MOUSEHOOKSTRUCT* psMouseHook;

extern "C" __declspec(dllexport) LRESULT CALLBACK MouseHook(int,WPARAM,LPARAM);
extern "C" __declspec(dllexport) int DllTest();

int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
	if(reason==DLL_PROCESS_ATTACH)
	{
		MessageBox(0,"Attached","hook.dll",MB_OK);
	}
	return 1;
}

int DllTest()
{
	MessageBox(0,"DLL","OK",MB_ICONERROR);
	return 0;
}


LRESULT CALLBACK MouseHook(int nCode,WPARAM wParam,LPARAM lParam)
{
	if(wParam==WM_MOUSEMOVE || wParam==WM_NCMOUSEMOVE)
	{
		psMouseHook=(MOUSEHOOKSTRUCT*)(lParam);
		if(psMouseHook->pt.x==0 && psMouseHook->pt.y==0)
			MessageBox(0,"Top left conor","hook",MB_OK);
	}
	return 0;
}
Объявления в main.h (C++Builder)
Код:
typedef LRESULT CALLBACK (__stdcall *pMouseHookType) (int,WPARAM,LPARAM);
typedef int (*DllTestType)();

HINSTANCE hLib;
HHOOK hMouseHook;

pMouseHookType pMHook;
DllTestType DllTest;
Собственно, проецирование dll и получение адресов функций в main.cpp
Код:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
	int errcode;
	hLib = LoadLibrary(L"C:\\Hook2.dll");
	if( hLib == NULL)
		ShowMessage("Can't load DLL");
	pMHook = (pMouseHookType) GetProcAddress(hLib,"MouseHook");
	errcode = GetLastError();
	if (pMHook == NULL)
	{
		ShowMessage("Can't get process address of MouseHook");
		char buff[32];
		itoa(errcode,buff,10);
		ShowMessage(buff);
	}
	DllTest = (DllTestType) GetProcAddress(hLib,"DllTest");
	if (DllTest == NULL)
		ShowMessage("Can't get address of DllTest");
}
Вот тут-то и вылетает 127-я ошибка из первого GetLastError. Причем адрес DllTest получаем без проблем.
Опыту у меня мало, не могу понять в чем проблема. Поможите люди добрые, кто чем сможет. Спасибо!
----------------------------------------------
С/C++/Java/asm
начинающий...
Nikz вне форума Ответить с цитированием
Старый 28.07.2011, 11:58   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а вы посмотрите любым PE-анализатором, какое имя получила функция MouseHook.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.07.2011, 12:16   #3
Nikz
 
Аватар для Nikz
 
Регистрация: 28.07.2011
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
а вы посмотрите любым PE-анализатором, какое имя получила функция MouseHook.
Точно! Большое спасибо!
_MouseHook@12 имя. Помню, давно-давно-давно знал, почему имя экспортируемое меняется. Сейчас забыл уже. Мож кто напомнит мимо ходом в трех словах.
----------------------------------------------
С/C++/Java/asm
начинающий...
Nikz вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
хуки Dimarik Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 27 09.08.2011 09:50
Сетевые функции, хуки Igoressicus Помощь студентам 1 05.11.2010 14:03
Хуки в Windows JeyKip Win Api 11 09.05.2010 00:33
ListView и хуки 7KByte Win Api 0 10.07.2009 22:21
Глобальные хуки Zeraim Win Api 2 24.05.2008 16:00