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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2012, 19:41   #1
Mihanches
Пользователь
 
Регистрация: 14.09.2010
Сообщений: 89
Лампочка DLL грузится в один процесс

В DLL библиотеке перехватывается клик мыши, но при загрузке библиотеки через LoadLibrary() она грузится только в мой процесс (а хучить нужно во всех процессах с окном). Как быть?
P.S. В моей программе нет формы. Может, поэтому?
Mihanches вне форума Ответить с цитированием
Старый 08.05.2012, 19:49   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

смотрим тему хуки.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.05.2012, 19:52   #3
Mihanches
Пользователь
 
Регистрация: 14.09.2010
Сообщений: 89
По умолчанию

Может, дело не в хуках? Я пробовал заменить в дллке хук на простой вывод мессбокса - выводится только один раз.
Кто-нибудь тоже попробуйте пожалуйста, вдруг у меня какие-то проблемы просто...

Последний раз редактировалось Mihanches; 08.05.2012 в 20:11.
Mihanches вне форума Ответить с цитированием
Старый 08.05.2012, 20:12   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

глобальный хук+правильная процедура хука.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.05.2012, 20:27   #5
Mihanches
Пользователь
 
Регистрация: 14.09.2010
Сообщений: 89
По умолчанию

Код:
#include <windows.h>
#include <iostream>

using namespace std;

HHOOK mHook;

LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam) 
{
	//if(nCode > 0)
	//{
		// Ни разу не видел этого сообщения
		MessageBoxA(0, "HOOK", "", 0);
	//}
	return CallNextHookEx(mHook, nCode, wParam, lParam); 
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
    switch (ul_reason_for_call)
    {
	case DLL_PROCESS_ATTACH:
		{
			mHook = SetWindowsHookEx(WH_MOUSE, MouseProc, GetModuleHandle(NULL), 0);
			//MessageBoxA(0, "afs", "fff", 0);	
			break;
		}
	case DLL_THREAD_ATTACH: break;
	case DLL_THREAD_DETACH: break;
	case DLL_PROCESS_DETACH: break;
	}
	return TRUE;
}
Mihanches вне форума Ответить с цитированием
Старый 08.05.2012, 20:29   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

у вас не ставится хук.
читайте описание процедуры GetModuleHandle.

и хук вы ставите не правильно.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.05.2012, 20:38   #7
Mihanches
Пользователь
 
Регистрация: 14.09.2010
Сообщений: 89
По умолчанию

Хорошо, GetModuleHandle(NULL) заменил на hModule. А с самим хуком что тогда?
Mihanches вне форума Ответить с цитированием
Старый 08.05.2012, 21:32   #8
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

MessageBox в мышином хуке .... это жесть.

Все вроде должно работать...
Загружаем LoadLibrary, выгружаем FreeLibrary
Код:
#include <windows.h>

#pragma comment(linker, "/SECTION:.shared,RWS") 

#	pragma data_seg(".shared")
	HHOOK hhook = NULL;
	int cnt = 0;
#	pragma data_seg()



LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam) 
{
	if(nCode == HC_ACTION)
	{
		LPMOUSEHOOKSTRUCT  pms = (LPMOUSEHOOKSTRUCT) lParam;
		TCHAR coord[100]= "                                  ";
		HDC hdc = GetWindowDC(0);
		TextOut(hdc,0,0, coord, lstrlen(coord));
		wsprintf(coord, TEXT("x = %u , y = %u"), pms->pt.x, pms->pt.y);
		TextOut(hdc,0,0, coord, lstrlen(coord));
		ReleaseDC(0, hdc);
	}
	return CallNextHookEx(hhook, nCode, wParam, lParam); 
}
  

BOOL APIENTRY DllMain( HANDLE hModule,   DWORD  ul_reason_for_call, LPVOID lpReserved)
{
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
		if (!cnt++)
			hhook = SetWindowsHookEx(WH_MOUSE, MouseProc, (HINSTANCE) hModule, 0);
		break;
	case DLL_PROCESS_DETACH:
		if (!--cnt)
			UnhookWindowsHookEx(hhook);
		break;	
	}
	return TRUE;
}

Последний раз редактировалось EUGY; 08.05.2012 в 21:35. Причина: поправил параметр
EUGY вне форума Ответить с цитированием
Старый 09.05.2012, 00:28   #9
Mihanches
Пользователь
 
Регистрация: 14.09.2010
Сообщений: 89
По умолчанию

За код хука спасибо!
Все, понял. Глобализации нет из-за того, что библиотека грузится в приложении без формы. Т.е. что делать, если точка входа в программу такова:
Код:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
Mihanches вне форума Ответить с цитированием
Старый 09.05.2012, 00:45   #10
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Как вариант:
Код:
LoadLibrary(...
Sleep(INFINITE);
EUGY вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вставить диапазоны ячеек из разных файлов в один, но так чтобы они шли один ниже другого? Squarded Microsoft Office Excel 4 24.07.2011 19:24
Запустить чужую программу со своей dll библиотекой или внедрить в уже существующий процесс Человек_Борща Общие вопросы Delphi 5 23.01.2011 21:20
Процесс из DLL. Maks1978 Общие вопросы C/C++ 2 12.01.2010 00:03
Вернуть несколько значений из MDI формы которая грузится из DLL ? spamer Общие вопросы Delphi 8 06.11.2009 00:14
Как загрузить свою DLL в атакуемый процесс, который не знает о ее существовании - Создание хуков KleoY Win Api 18 30.03.2009 14:31