Re[3]: Глобальный Хук?
От: Plutonia Experiment Беларусь http://blogs.rsdn.org/ikemefula
Дата: 07.04.03 07:57
Оценка: 3 (1)
Здравствуйте, Аноним, Вы писали:

Vin>>>Ставлю хук WH_SHELL. Всё как положено, сообщения моя программа получает (PostMessage'м посылаю) , но вот остальные программы не отображаются на таскбаре.


HHOOK тоже должен быть расшарен !

А>#pragma data_seg("Shared")
А>HWND hWndServer = NULL;
А>HHOOK hHookKB = NULL, hHookWM = NULL;
А>#pragma data_seg()
А>// Сообщаем компановщику, что раздел Shared, должен быть общим и доступным для
А>// чтения/записи
А>#pragma comment(linker,"/section:Shared,rws")
Глобальный Хук?
От: Vin  
Дата: 03.04.03 13:15
Оценка:

Народ!!!!
Подскажите кто зает!
Ставлю хук WH_SHELL. Всё как положено, сообщения моя программа получает (PostMessage'м посылаю) , но вот остальные программы не отображаются на таскбаре.
Что за ...?
Re: Глобальный Хук?
От: Plutonia Experiment Беларусь http://blogs.rsdn.org/ikemefula
Дата: 04.04.03 07:05
Оценка:
Здравствуйте, Vin, Вы писали:

Vin>Народ!!!!

Vin>Подскажите кто зает!
Vin>Ставлю хук WH_SHELL. Всё как положено, сообщения моя программа получает (PostMessage'м посылаю) , но вот остальные программы не отображаются на таскбаре.

Покажи, как ты хук написал этот
Re[2]: Глобальный Хук?
От: Аноним  
Дата: 07.04.03 01:08
Оценка:
Здравствуйте, Plutonia Experiment, Вы писали:

PE>Здравствуйте, Vin, Вы писали:


Vin>>Народ!!!!

Vin>>Подскажите кто зает!
Vin>>Ставлю хук WH_SHELL. Всё как положено, сообщения моя программа получает (PostMessage'м посылаю) , но вот остальные программы не отображаются на таскбаре.

PE>Покажи, как ты хук написал этот

// dll.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include "dll.h"

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <commctrl.h>

// Требуем от компилятора разместить переменную hWndServer в отдельном разделе
// данных Shared, а компановщику, сообщаем,
// что данные из этого раздела должны быть доступны всем экземплярам приложения
#pragma data_seg("Shared")
HWND hWndServer = NULL;
#pragma data_seg()
// Сообщаем компановщику, что раздел Shared, должен быть общим и доступным для
// чтения/записи
#pragma comment(linker,"/section:Shared,rws")

HINSTANCE hmodHookKB,hmodHookWM;
HHOOK hHookKB = NULL, hHookWM = NULL;
LPCREATESTRUCT lpcs;
int bf=0;
char *szBuf=" ";

BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved)
{
hmodHookKB = (HINSTANCE)hModule;
hmodHookWM = (HINSTANCE)hModule;

switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{

}break;
case DLL_PROCESS_DETACH:
{
if(hWndServer!=NULL)return true;

}break;
default:break;
}
return TRUE;
}


///////////////////////////////////////////////////// Функция установки системной ловушки
////////////////////////////////////
DLL_API BOOL SetHook(BOOL flagSet, HWND hWnd)
{
if (flagSet)
{
if(hWndServer!=NULL)
{ //MessageBox(NULL,"hWndServer!=NULL","Ошибка",MB_OK);
return FALSE;}
if(!GetProcAddress((HINSTANCE)hmodHookKB,"KBHookProc"))
{ //MessageBox(NULL,"Точка входа в процедуру 'KBHookProc' не получена !","Ошибка",MB_OK);
hHookKB = SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)GetProcAddress((HINSTANCE)hmodHookKB,"KBHookProc"),(HINSTANCE)hmodHookKB,0);
//hHookWM = SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)GetProcAddress((HINSTANCE)hmodHookWM,"WMHookProc"),(HINSTANCE)hmodHookWM,0);
hHookWM = SetWindowsHookEx(WH_SHELL,(HOOKPROC)GetProcAddress((HINSTANCE)hmodHookWM,"WMHookProc"),(HINSTANCE)hmodHookWM,0);
if(hHookKB && hHookWM)
//if(hHookKB)
{
hWndServer=hWnd;
// MessageBox(NULL,"Хук поставлен !","Хорошо",MB_OK);
}
else
{ MessageBox(NULL,"Хук не поставлен !","Ошибка",MB_OK);
return FALSE;}

}
else
{
//MessageBox(NULL,"Хук убит !","Как надо",MB_OK);
UnhookWindowsHookEx(hHookKB);
UnhookWindowsHookEx(hHookWM);
hHookKB = NULL;
hHookWM = NULL;
}
return TRUE;
}
///////////////////////////////////////////////

////////////////////////////////////
// Функция обработки хука KBHookProc /////////////////////////////////
DLL_API LRESULT CALLBACK KBHookProc(int code,WPARAM wParam,LPARAM lParam)
/* code — Код Хука(Тип)
* wParam — Флаг удаления сообщения
* lParam — Указатель на структуру tagMSG */
{
// Если code<0, просто передаём сообщение дальше и возвращаем 0
// Этого требует спецификация обработчиков хуков
if(code<0)
{CallNextHookEx(hHookKB,code,wParam,lParam); return 0;}

PostMessage(hWndServer,WM_NULL,wParam,lParam);
//Вызываем следующую фильтр-функцию из очереди:
return (CallNextHookEx(hHookKB,code,wParam,lParam));
}/////////////////////////////// конец KBHookProc

////////////////////////////////////
// Функция обработки хука WMHookProc
////////////////////////////////////
DLL_API LRESULT CALLBACK WMHookProc(int code,WPARAM wParam,LPARAM lParam)
// code — Код Хука(Тип)
// wParam — Флаг удаления сообщения
// lParam — Указатель на структуру tagCWPSTRUCT
{
// Если code<0, просто передаём сообщение дальше и возвращаем 0
// Этого требует спецификация обработчиков хуков
if(code<0)
{CallNextHookEx(hHookWM,code,wParam,lParam); return 0;}

// Указатель на сообщение в lParam.
//LPMSG mess = (LPMSG)lParam;
LPCWPSTRUCT cwp = (LPCWPSTRUCT)lParam;

//MessageBox(NULL,"WM_CREATE","Тест",MB_OK);

//if(cwp->message==WM_CREATE && cwp->lParam!=NULL)
if(code==HSHELL_WINDOWCREATED) //&& cwp->lParam!=NULL)
{PostMessage(hWndServer,WM_USER,wParam,lParam);}//MessageBox(NULL,"WM_CREATE","Тест",MB_OK);}
else
if(code==HSHELL_WINDOWDESTROYED)
{PostMessage(hWndServer,WM_USER,wParam,lParam);}

code=0;
//Вызываем следующую фильтр-функцию из очереди:
return (CallNextHookEx(hHookWM,code,wParam,lParam));
}/////////////////////////////// конец KBHookProc
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.