在 XP环境下
下面是我作的 代码 把SendMessage放到了 dll中DLL代码#include <windows.h>
HHOOK g_hKeyborad=NULL;
HWND m_hwnd=NULL;LRESULT CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{ if(VK_F2==wParam)
{
::SendMessage(m_hwnd,WM_CLOSE,0,0);
UnhookWindowsHookEx(g_hKeyborad); }
return 1;
}
void SetHook(HWND hwnd)
{
m_hwnd=hwnd; g_hKeyborad=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("Hook"),0);
}以下是MFC中OnInitDialog的 代码
_declspec(dllimport) void SetHook(HWND hwnd);BOOL CHookDlg::OnInitDialog()
{
CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
} // Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
g_hWnd=m_hWnd;
// g_hMouse=SetWindowsHookEx(WH_MOUSE,MouseProc,NULL,GetCurrentThreadId());
// g_hKeyborad=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,GetCurrentThreadId());
SetHook(m_hWnd); return TRUE; // return TRUE unless you set the focus to a control
}
F2是后门键,这个能屏蔽enter和spare键 但是不能屏蔽
ctrl+Esc和Win键 以及atl+tab
下面是我作的 代码 把SendMessage放到了 dll中DLL代码#include <windows.h>
HHOOK g_hKeyborad=NULL;
HWND m_hwnd=NULL;LRESULT CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{ if(VK_F2==wParam)
{
::SendMessage(m_hwnd,WM_CLOSE,0,0);
UnhookWindowsHookEx(g_hKeyborad); }
return 1;
}
void SetHook(HWND hwnd)
{
m_hwnd=hwnd; g_hKeyborad=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("Hook"),0);
}以下是MFC中OnInitDialog的 代码
_declspec(dllimport) void SetHook(HWND hwnd);BOOL CHookDlg::OnInitDialog()
{
CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
} // Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
g_hWnd=m_hWnd;
// g_hMouse=SetWindowsHookEx(WH_MOUSE,MouseProc,NULL,GetCurrentThreadId());
// g_hKeyborad=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,GetCurrentThreadId());
SetHook(m_hWnd); return TRUE; // return TRUE unless you set the focus to a control
}
F2是后门键,这个能屏蔽enter和spare键 但是不能屏蔽
ctrl+Esc和Win键 以及atl+tab
http://www.xiaozhou.net/cooldog/article.asp?id=30
void CDZSZDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
if ((nID & 0xFFF0) == SC_CLOSE)
{
if (AfxMessageBox("是否确定退出系统?",MB_YESNO) == IDYES)
{
SendMessage(WM_EXIT_SYS,0,0);
}
else
{
return;
}
}
CDialog::OnSysCommand(nID, lParam);
}
}