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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2010, 14:42   #1
JeyKip
Форумчанин
 
Регистрация: 18.09.2009
Сообщений: 133
Лампочка Хуки в Windows

Добрый день, уважаемы программисты!! Подскажите пожалуйста, можно ли установить глобальные хуки (не только от клавиатуры и мыши) без использования DLL? И как это сделать? Благодарен за любую полезную информацию...!
JeyKip вне форума Ответить с цитированием
Старый 01.05.2010, 17:09   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Нельзя .
BOBAH13 вне форума Ответить с цитированием
Старый 01.05.2010, 19:41   #3
JeyKip
Форумчанин
 
Регистрация: 18.09.2009
Сообщений: 133
По умолчанию

при запуске проекта DLL у меня выскочило окно с двумя полями: связать с exe-файлом и что-то связано с URL...что с ним делать, зачем это нужно? (понимаю, что для тех, кто в курсе, вопрос покажется тупейшим)...))
JeyKip вне форума Ответить с цитированием
Старый 01.05.2010, 21:20   #4
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Блин, видимо сегодня праздник и экстрасенсы отдыхают. А я не оплатил экстрасенсорные способности на май, поэтому не могу догадаться где, как, что и когда у вас вылетает там. Вообще можете написать на чем пишете, где пишите да и вообще.
p.s. что за люди, что лень почитать в сети как работать с тем то и там то, как будто вы единственный с таким вопросом в мире. Ну что малые дети, честное слово.
BOBAH13 вне форума Ответить с цитированием
Старый 02.05.2010, 03:27   #5
JeyKip
Форумчанин
 
Регистрация: 18.09.2009
Сообщений: 133
По умолчанию

Не стоит кипятиться...человеческая тупость безгранична, и, к сожалению, я стал на этот раз ее жертвой, т.к. первый раз столкнулся с DLL...)) в сети на этот счет я найти ничего не смог (иначе сюда не обратился бы)...пишу на C++, Visual Studio 2008...
JeyKip вне форума Ответить с цитированием
Старый 02.05.2010, 09:44   #6
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

http://www.google.com.ua/search?q=C%2B%2B+hooks+Windows точно искали ? Вопрос очень обширный и чтобы он то не рассматривался в сети - да не верю.
BOBAH13 вне форума Ответить с цитированием
Старый 03.05.2010, 20:33   #7
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от JeyKip Посмотреть сообщение
Подскажите пожалуйста, можно ли установить глобальные хуки (не только от клавиатуры и мыши) без использования DLL? И как это сделать?
теоретически возможно... на практике не пробовал.
надо поставить в заголовке твоего exe-файла, что он ещё является DLL файлом (поле Characteristics в PE заголовке), а при создании хука указать вместо хендла DLL хендл exe файла. и после этого твой exe файл будет загружаться во все процессы и хук будет глобальным. Главная проблема после того как устанавливаешь "флаг DLL" (устанавливал через LordPE) программа перестаёт работать с ошибкой "Программа не является Win32 приложением";
rpy3uH вне форума Ответить с цитированием
Старый 04.05.2010, 03:01   #8
JeyKip
Форумчанин
 
Регистрация: 18.09.2009
Сообщений: 133
По умолчанию

C DLL разобрался, клаву отлавливает нормально...но возникла еще одна проблема при обработке WH_CBT...когда я выбираю в пункте меню этот фильтр и щелкая мышкой на другое окно - студию вместе с моим приложением моментально вырубает...если клацнуть по панели задач - виснет все...и на экране не отображается...в чем может быть проблема?
Функция по обработке хука:

Код:
LRESULT CALLBACK CBTProc(int nCode,WPARAM wParam, LPARAM lParam)
{
		FILE *f=fopen("Put i imya fayla","a");
		LPSTR ActName=new CHAR[];

if(nCode<0)
	return CallNextHookEx(hHook,nCode,wParam,lParam);
 
	switch (nCode)
	{
	case HCBT_ACTIVATE:
		if (((tagCBTACTIVATESTRUCT*)lParam)->fMouse==TRUE){
		GetWindowTextA((HWND)wParam,ActName,20);
		fprintf(f,"%1.20s\n",ActName);
		fclose(f);
		delete [] ActName;
		
	}
	}
	return TRUE;
		}
JeyKip вне форума Ответить с цитированием
Старый 08.05.2010, 20:48   #9
JeyKip
Форумчанин
 
Регистрация: 18.09.2009
Сообщений: 133
По умолчанию

кто может подсказать, что не правильно я делаю в реализации JournalRecordProc? Здесь рассмотрен вариант только для мышки...описано в самом приложении, а не DLL...если делать в DLL, то мышь полностью блокируется...

Код:
LRESULT CALLBACK JournalRecordProc(int nCode,WPARAM wParam,LPARAM lParam)
{
	wchar_t msg[10];
	wchar_t ActWnd[400];
	UINT evmsg=((EVENTMSG*)lParam)->message;

		if (nCode<0)
	{
		return (CallNextHookEx(hHook,nCode,wParam,lParam));
	}
		switch (nCode){
			case HC_ACTION:
		switch (evmsg)
	{
	case WM_LBUTTONDOWN:
	case WM_RBUTTONDOWN:
	case WM_LBUTTONDBLCLK:
	case WM_MBUTTONDOWN:
	
	UINT x=((EVENTMSG*)lParam)->paramL;
	UINT y=((EVENTMSG*)lParam)->paramH;
	DWORD time=((EVENTMSG*)lParam)->time;
	HWND hWnd=((EVENTMSG*)lParam)->hwnd;
	if (hWnd!=0)
	{MessageBox(hWnd,L"Pizdec",L"---",MB_OK);
	return 0;}

		if (evmsg==WM_LBUTTONDOWN)
			strcpy((char*)ActWnd,"_Нажатие левой кнопки мыши_");
		else if (evmsg==WM_RBUTTONDOWN)
			strcpy((char*)ActWnd,"_Нажатие правой кнопки мыши_");
		else if (evmsg==WM_LBUTTONDBLCLK)
			strcpy((char*)ActWnd,"_Двойное нажатие левой кнопки мыши_");
		else if (evmsg==WM_MBUTTONDOWN)
			strcpy((char*)ActWnd,"_Нажатие средней кнопки мыши_");

		sprintf((char*)msg,"%d",x);
		strcat((char*)ActWnd,(const char*)msg);
		strcat((char*)ActWnd,",");
		sprintf((char*)msg,"%d",y);
		strcat((char*)ActWnd,(const char*)msg);
		strcat((char*)ActWnd,",");
		sprintf((char*)msg,"%d",time);
		strcat((char*)ActWnd,(const char*)msg);
		FILE *f=fopen("C:\\Shpion.txt","a");
		fprintf(f,"%s\n",ActWnd);
		fclose(f);
	break;
		}
		break;
		}
	return (CallNextHookEx(hHook,nCode,wParam,lParam));
		

}

Последний раз редактировалось JeyKip; 08.05.2010 в 20:52.
JeyKip вне форума Ответить с цитированием
Старый 08.05.2010, 23:21   #10
liljon
Форумчанин
 
Регистрация: 03.01.2010
Сообщений: 229
По умолчанию

Цитата:
Код:
	if (hWnd!=0)
	{MessageBox(hWnd,L"Pizdec",L"---",MB_OK);
	return 0;}
я хз чо такое hWnd и откуда взялось, но стоит вызывать CallNextHookEx(hHook,nCode,wParam,l Param) перед возвратом из функции

Цитата:

C DLL разобрался, клаву отлавливает нормально...но возникла еще одна проблема при обработке WH_CBT...когда я выбираю в пункте меню этот фильтр и щелкая мышкой на другое окно - студию вместе с моим приложением моментально вырубает...если клацнуть по панели задач - виснет все...и на экране не отображается...в чем может быть проблема?
Функция по обработке хука:
ну так вы для указателя ActName памяти мало выделили

Код:
LRESULT CALLBACK CBTProc(int nCode,WPARAM wParam, LPARAM lParam)
{
MSG msg = *(MSG*)lParam;
HWND hWnd = msg.hwnd;


		FILE *f=fopen("Put i imya fayla","a");

if(nCode<0)
	return CallNextHookEx(hHook,nCode,wParam,lParam);
 
	switch (nCode)
	{
	case HCBT_ACTIVATE:
		if (((tagCBTACTIVATESTRUCT*)lParam)->fMouse==TRUE){

                int len = GetWindowTextLengthA(hWnd);
                LPSTR ActName=(char*)calloc(len+1,1);
		GetWindowTextA(hWnd,ActName,len);
		fprintf(f,"%1.20s\n",ActName);
		fclose(f);
		free( ActName);
		
	}
	}
	return TRUE;
		}
подпись

Последний раз редактировалось liljon; 08.05.2010 в 23:24.
liljon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обновление в блоге - Хуки в Windows. Часть третья. Оконные функции Pblog Обсуждение статей 1 04.01.2010 13:20
ListView и хуки 7KByte Win Api 0 10.07.2009 22:21
обновление в блоге - Хуки в Windows. Часть вторая. Работа с окнами Pblog Обсуждение статей 0 24.04.2009 20:50
обновление в блоге - Хуки в Windows. Часть первая. Основы Pblog Обсуждение статей 1 14.01.2009 17:29
Глобальные хуки Zeraim Win Api 2 24.05.2008 16:00