15,471
社区成员
发帖
与我相关
我的任务
分享
#include <Windows.h>
#include <tchar.h>
HHOOK g_HHook=NULL;//钩子句柄
HINSTANCE g_hInst=NULL;//DLL模块句柄
//导出函数
extern "C" _declspec(dllexport) VOID SetHookOn();
extern "C" _declspec(dllexport) VOID SetHookOff();
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
g_hInst=hinstDLL;
break;
}
return (TRUE);
}
LRESULT CALLBACK KeyBoardProc(int code,WPARAM wParam,LPARAM lParam)
{
if (code<0)
{
return CallNextHookEx(g_HHook,code,wParam,lParam);
}
if(code==HC_ACTION && lParam>0)
{
TCHAR szBuf[MAXBYTE]={0};
GetKeyNameText(lParam,szBuf,MAXBYTE);
MessageBox(NULL,szBuf,NULL,MB_OK);
}
return CallNextHookEx(g_HHook,code,wParam,lParam);
}
VOID SetHookOn()
{
g_HHook=SetWindowsHookEx(WH_KEYBOARD,KeyBoardProc,g_hInst,0);
}
VOID SetHookOff()
{
UnhookWindowsHookEx(g_HHook);
}
//接收Dll中导出函数的函数指针
typedef VOID (*SETHOOKON)();
typedef VOID (*SETHOOKOFF)();
HMODULE m_hInst;//DLL的模块句柄
void CInjectTheDllDlg::OnBnClickedStart()
{
// TODO: 在此添加控件通知处理程序代码
m_hInst=LoadLibrary(_T("firstdll.dll"));
SETHOOKON SetHookOn=(SETHOOKON)GetProcAddress(m_hInst,"SetHookOn");
SetHookOn();
FreeLibrary(m_hInst);
}
void CInjectTheDllDlg::OnBnClickedStop()
{
// TODO: 在此添加控件通知处理程序代码
m_hInst=LoadLibrary(_T("firstdll.dll"));
SETHOOKOFF SetHookOff=(SETHOOKOFF)GetProcAddress(m_hInst,"SetHookOff");
SetHookOff();
FreeLibrary(m_hInst);
}
//接收Dll中导出函数的函数指针
typedef VOID (*SETHOOKON)();
typedef VOID (*SETHOOKOFF)();
//DLL的模块句柄
HMODULE m_hInst;
//构造函数中打开Dll句柄
CInjectTheDllDlg::CInjectTheDllDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CInjectTheDllDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_hInst=LoadLibrary(_T("firstdll.dll"));
}
//析构函数中释放Dll句柄
CInjectTheDllDlg::~CInjectTheDllDlg()
{
FreeLibrary(m_hInst);
}
//Start Hook
void CInjectTheDllDlg::OnBnClickedButton1()
{
SETHOOKON SetHookOn=(SETHOOKON)GetProcAddress(m_hInst,"SetHookOn");
SetHookOn();
}
//Stop Hook
void CInjectTheDllDlg::OnBnClickedButton2()
{
SETHOOKOFF SetHookOff=(SETHOOKOFF)GetProcAddress(m_hInst,"SetHookOff");
SetHookOff();
}
//构造函数中打开Dll句柄
CInjectTheDllDlg::CInjectTheDllDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CInjectTheDllDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_hInst=LoadLibrary(_T("firstdll.dll"));
}
//析构函数中释放Dll句柄
CInjectTheDllDlg::~CInjectTheDllDlg()
{
FreeLibrary(m_hInst);
}
//Start Hook
void CInjectTheDllDlg::OnBnClickedButton1()
{
SETHOOKON SetHookOn=(SETHOOKON)GetProcAddress(m_hInst,"SetHookOn");
SetHookOn();
}
//Stop Hook
void CInjectTheDllDlg::OnBnClickedButton2()
{
SETHOOKOFF SetHookOff=(SETHOOKOFF)GetProcAddress(m_hInst,"SetHookOff");
SetHookOff();
}