附代码:
请教大家问题出在哪?
DLL:
#include "stdafx.h"
#define EXPORT _declspec(dllexport)
#pragma data_seg("shared")
HINSTANCE g_hInst=NULL;
HHOOK g_hKeyboardHook=NULL;
HWND hDlog;
UINT wMessage;
char szAscii[100]={0};
unsigned char szKeyState[256];
#pragma data_seg()
#pragma comment(linker, "/section:shared,rws")
EXPORT LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam);
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
g_hInst=(HINSTANCE)hModule;
default:
return TRUE;
}
}
extern "C" {
EXPORT BOOL HookAllApp(HWND hDlg,UINT message)
{
hDlog=hDlg;
wMessage=message;
if(g_hKeyboardHook!=NULL) return FALSE;
g_hKeyboardHook=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,g_hInst,NULL);
return (g_hKeyboardHook!=NULL);
}
EXPORT BOOL UnHookAllApp()
{
return UnhookWindowsHookEx(g_hKeyboardHook);
}
}
EXPORT LRESULT WINAPI KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{
GetKeyboardState(szKeyState);
lParam=lParam>>16;
ToAscii(wParam,lParam,szKeyState,(unsigned short*)szAscii,0);
PostMessage(hDlog,wMessage,(WPARAM)szAscii[0],NULL);
return CallNextHookEx(g_hKeyboardHook,nCode,wParam,lParam);
}
主程序对话框:
// hookapp.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#define ICO_MAIN 1000
#define DLG_MAIN 1001
#define IDC_TEXT 1002
#define WM_HOOK WM_USER+1
#pragma comment(lib,"hook.lib")
extern "C" BOOL HookAllApp(HWND hDlg,UINT message);
extern "C" UnHookAllApp();
extern "C" LRESULT WINAPI KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam);
HINSTANCE hInstance;
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
hInstance=GetModuleHandle(NULL);
DialogBox(hInstance,(LPCTSTR)DLG_MAIN, NULL, (DLGPROC)About);
ExitProcess(NULL);
return 0;
}
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
HookAllApp(hDlg,WM_HOOK);
return TRUE;
case WM_CLOSE:
UnHookAllApp();
EndDialog(hDlg,NULL);
return TRUE;
case WM_HOOK:
SetDlgItemText(hDlg,IDC_TEXT,(LPCTSTR)&wParam);
return TRUE;
default:
break;
}
return FALSE;
}
资源就是那个EDIT框 ID=IDC_TEXT。
请大家帮忙看看为什么转其他窗口时就不能HOOK了?
[课程]FART 脱壳王!加量不加价!FART作者讲授!