设置钩子时失败,SetWindowsHookEx函数返回空值,不知哪里出了问题,恳请那位高手指导一下。
LRESULT CALLBACK JournalRecordProc(int nCode,WPARAM wParam,LPARAM lParam) {
......... return CallNextHookEx(hHook,nCode,wParam,lParam);
}
void CHookDlg::OnButton1()
{
// TODO:Add your control notification handler code here
HINSTANCE hinstance=AfxGetApp()->m_hInstance;
hHook=::SetWindowsHookEx(WH_JOURNALRECORD,JournalRecordProc,hinstance,0);
}
LRESULT CALLBACK JournalRecordProc(int nCode,WPARAM wParam,LPARAM lParam) {
......... return CallNextHookEx(hHook,nCode,wParam,lParam);
}
void CHookDlg::OnButton1()
{
// TODO:Add your control notification handler code here
HINSTANCE hinstance=AfxGetApp()->m_hInstance;
hHook=::SetWindowsHookEx(WH_JOURNALRECORD,JournalRecordProc,hinstance,0);
}
解决方案 »
- 哪位达人能帮我解释一下下面的程序,尽量详细些
- 关于WSAAsyncSelect模型的一些疑问
- :“/MT”和“/clr:pure”命令行选项不兼容
- 去掉CHtmlView边框的问题,看了很多资料自己弄了结果还是无效?
- 我在视类定义了一个public函数f()。在框架类CMainFrm这样访问,为何访问不到?
- 在线急:我想在一个窗口中的某个矩形区创建一个小窗口,这个矩形区由一个Static定位,但我创建的窗口却在父窗口之外,请帮忙
- 很奇怪,连接怎么做?
- CreateOleObject("Word.Basic")为何不能运行?
- 得到一段木马隐藏的代码,但不起作用,请帮忙看一下谢谢!
- 数据库的vc+sql server 的问题
- 请教《Windows程序设计(第五版)》中的一行代码
- VC这玩意儿,,,害死我了,朋友帮帮我吧!
WH_JOURNALRECORD Global only
MSDN上都说它只能为全局钩子的了,所以必须做成DLL才可以。
HHOOK g_hLogHook=NULL; //钩子变量
HWND g_hLastFocus=NULL;
//记录上一次得到焦点的窗口句柄
const int KeyPressMask=0x80000000; //键盘掩码常量
char g_PrvChar; //保存上一次按键值3.在Button1的OnClick事件中输入:void CHookDlg::Button1Click()
{
if (g_hLogHook==NULL)
g_hLogHook = SetWindowsHookEx
(WH_JOURNALRECORD,
(HOOKPROC)JournalLogProc,
HInstance,0); //安装日志钩子
}4.在Button2的OnClick事件中输入:void CHookDlg::Button2Click()
{
if (g_hLogHook!=NULL)
{UnhookWindowsHookEx(g_hLogHook);
g_hLogHook=NULL;
} //卸载日志钩子
}5.输入钩子回调函数:
HOOKPROC JournalLogProc(int iCode,
WPARAM wParam, LPARAM lParam)
{
if (iCode<0) return (HOOKPROC)CallNextHookEx (g_hLogHook,iCode,wParam,lParam); if (iCode="=HC_ACTION)" {EVENTMSG *pEvt="(EVENTMSG" *)lParam; int i; HWND hFocus; //保存当前活动窗口句柄 char szTitle[256]; //当前窗口名称 char szTime[128]; //保存当前的日期和时间 FILE *stream="fopen(“c:\\logfile.txt”,"a+t");" if (pEvt->message==WM_KEYDOWN)
{int vKey=LOBYTE(pEvt- >paramL); // 取得虚拟键值
char ch;
char str[10];
hFocus=GetActiveWindow();
//取得当前活动窗口句柄
if(g_hLastFocus!=hFocus)
//当前活动窗口是否改变
{GetWindowText(hFocus,szTitle,256);
g_hLastFocus=hFocus;
strcpy(szTime,DateTimeToStr(Now())
.c_str()); //得到当前的日期时间
fprintf(stream,"%c%s%c%c%s",
10,szTime,32,32,szTitle); //写入文件
fprintf(stream,"%c%c",32,32);
}
fclose(stream);
return (HOOKPROC)CallNextHookEx
(g_hLogHook,iCode,wParam,lParam);
}
http://baizhuang.d2g.com/software.asp有一个键盘录放机,用的就是日至钩子