日志钩子怎么传递数值给我自己的主程序,该怎么做?
源程序如下:
日志钩子无法给TForm1的变量置值。
//---------------------------------------------------------------------------
#include <vcl.h>
#include <windows.h>
#include <fstream.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
HHOOK g_hLogHook = NULL; //钩子变量
HWND g_hLastFocus = NULL;//记录上一次得到焦点的窗口句柄
const int KeyPressMask = 0x80000000; //键盘掩码常量
char g_PrvChar; //保存上一次按键值
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; //保存当前活动窗口句柄
if ( pEvt->message == WM_KEYDOWN )
{
int vKey = LOBYTE( pEvt->paramL ); // 取得虚拟键值
int iShift = GetKeyState( 0x10 );
//测试SHIFT,CAPTION,NUMLOCK等键是否按下
bool bShift = ( iShift & KeyPressMask ) == KeyPressMask;
//按下?的时候置值
if ( vKey==191 &&bShift)
{
x=1;
y=2;
}
}
return ( HOOKPROC )CallNextHookEx( g_hLogHook, iCode, wParam, lParam );
}
}
TForm1 * Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1( TComponent * Owner ) : TForm( Owner )
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click( TObject * Sender )
{
if ( g_hLogHook == NULL )
g_hLogHook = SetWindowsHookEx( WH_JOURNALRECORD, ( HOOKPROC )JournalLogProc, HInstance, 0 ); //安装日志钩子
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click( TObject * Sender )
{
if ( g_hLogHook != NULL )
{
UnhookWindowsHookEx( g_hLogHook );
g_hLogHook = NULL;
} //卸载日志钩子
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Edit1->Text=y;
}
//---------------------------------------------------------------------------