作用: 用來擷取
WM_PSD_ENVSTAMPRECT 這個得lparm值 來當作監控第三方的軟體應用
監控第三方軟體的滑軌的位置數值 實測代碼已可用 !!
// hookps.cpp : Custom DLL's exported function application.
//
#include <windows.h>
#include "stdafx.h"
#include "hookps.h"
#include <stdlib.h>
//------------------------------------
#define WINAPI_stdcall
#define WM_PSD_ENVSTAMPRECT (WM_USER+5)
#define WM_USER 0x0400
//----------------------------------------
// Shared variable
# pragma data_seg (".shared")
HWND g_myhwnd=0;
//HINSTANCE hmod=::LoadLibraryA("hookps.dll");
// save the hook handle
//static UINT_PTR CALLBACK PaintHookProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
//int GetWindowTextRemote(HWND hwnd,LPSTR lpString);
//int ReleaseHook();
# pragma data_seg ()
# pragma comment (linker, "/section:.shared,RWS")
HHOOK hThisHook1=0;
HHOOK hThisHook2=0,hThisHook3;
//-----------------------------------------------------
// LRESULT CALLBACK MessageProc(int code,WPARAM wParam,LPARAM lParam);//
HMODULE base;
BOOL WINAPI DllMain(
HMODULE hinstDLL,
DWORD fdwReason,
LPVOID lpvReserved
)
{
if(fdwReason==1)base=hinstDLL;
return 1;
}
LRESULT CALLBACK CallWndProc(
int nCode,
WPARAM wParam,
PCWPSTRUCT lParam
)
{
if(lParam->hwnd!=g_myhwnd)
if(lParam->message==WM_PSD_ENVSTAMPRECT)
{
PostMessageW(g_myhwnd,0x405,(WPARAM)lParam->hwnd,lParam->lParam);
}
return CallNextHookEx(0,nCode,wParam,(LPARAM)lParam);
}
LRESULT CALLBACK GetMsgProc(
int nCode,
WPARAM wParam,
PMSG lParam
)
{
if(lParam->hwnd!=g_myhwnd)
if(lParam->message==WM_PSD_ENVSTAMPRECT)
{
PostMessageW(g_myhwnd,0x405,(WPARAM)lParam->hwnd,lParam->lParam);
}
return CallNextHookEx(0,nCode,wParam,(LPARAM)lParam);
}
LRESULT CALLBACK SysMsgProc(
int nCode,
WPARAM wParam,
PMSG lParam
)
{
if(lParam->hwnd!=g_myhwnd)
if(lParam->message==WM_PSD_ENVSTAMPRECT)
{
PostMessageW(g_myhwnd,0x405,(WPARAM)lParam->hwnd,lParam->lParam);
}
return CallNextHookEx(0,nCode,wParam,(LPARAM)lParam);
}
// Set the mount hook
void __stdcall SetHook(HWND myhwnd)
{
g_myhwnd=myhwnd;
hThisHook1=SetWindowsHookExW(WH_CALLWNDPROC,(HOOKPROC)CallWndProc,base,0);
hThisHook2=SetWindowsHookExW(WH_GETMESSAGE,(HOOKPROC)GetMsgProc,base,0);
hThisHook3=SetWindowsHookExW(WH_SYSMSGFILTER,(HOOKPROC)SysMsgProc,base,0);
};
void __stdcall ReleaseHook(void) // <<<<<<Off the hook
{
UnhookWindowsHookEx(hThisHook1);
UnhookWindowsHookEx(hThisHook2);
UnhookWindowsHookEx(hThisHook3);
};