钩子问题,请帮我看看这块代码。(100分)
这是我写的钩子程序,目的是让一些特定的程序不能运行。我是看了www.ccrun.com/上的一篇文章做出来的。(再次谢谢那位无私的高手!!!:)。现有一个问题,程序运行后可以起作用,能达到目的,但是,一旦按一次Ctrl+Alt+del,不点结束任务,直接取消,或结束了别的程序,我的钩子程序就没作用了。搞不明白这是什么回事,已经试了多种方法,请各位帮忙。
下面的代码我是放在.dll里面的。
//----------
extern "C" __declspec(dllexport) void sethook();
extern "C" __declspec(dllexport) void quithook();
LRESULT CALLBACK JournalLogProc(int iCode, WPARAM wParam, LPARAM lParam);
//static LRESULT CALLBACK JournalLogProc(int iCode,WPARAM wParam,LPARAM lParam);
//钩子变量
HHOOK g_hLogHook=NULL;
//记录上一次得到焦点的窗口句柄
//HWND g_hLastFocus=NULL;
//---------------------------------------
LRESULT CALLBACK JournalLogProc(int iCode,WPARAM wParam,LPARAM lParam)
{
if(iCode<0)
return CallNextHookEx(g_hLogHook,iCode,wParam,lParam);
//EVENTMSG* pEvt=(EVENTMSG*)lParam;
if(iCode==HC_ACTION)
{ int i;
HWND hFocus;//保存当前活动窗口句柄
char szTitle[256];//当前窗口名称
char szWinClass[256];
char szTime[128];//当前的日期和时间
char ch;
char str[10];
AnsiString sClass="CabinetWClass";
hFocus=GetActiveWindow();
GetWindowText(hFocus,szTitle,256);
GetClassName(hFocus,szWinClass,256);
TBinFile f;
f.FileName = TRelPath().Extension("cfg"); //与 .exe 同名的 .cfg 文件
f.OpenMode = TBinFile::omRead; //准备读文件
if(f.Exists) //如果文件存在
{
try
{
f.Active = true; //打开文件
char aLine[2048];
while(fgets(aLine,2000,f)) //读一行文本 (标准 C 函数)
{
if(strnicmp(aLine,"CLASS=",6)==0) //用类名识别
{
TBinFileFuncs::DeleteSpaces(aLine+6,1,1); //去除空格
if(stricmp(aLine+6,szWinClass)==0)
{
PostMessage(hFocus, WM_CLOSE, 0, 0); //关闭程序
// return false;
}
}
else if(strnicmp(aLine,"CAPTION=",8)==0) //用标题识别
{
TBinFileFuncs::DeleteSpaces(aLine+8,1,1); //去除空格
if(stricmp(aLine+8,szTitle)==0)
{
PostMessage(hFocus, WM_CLOSE, 0, 0); //关闭程序
// return false;
}
}
}
}
catch(Exception &e)
{
//忽略错误提示,
}
}
}
return CallNextHookEx(g_hLogHook,iCode,wParam,lParam);
}
//--------------------
extern "C" __declspec(dllexport) void sethook()
{
if(g_hLogHook==NULL)
//安装日志钩子
g_hLogHook=SetWindowsHookEx(WH_JOURNALRECORD,(HOOKPROC)JournalLogProc,HInstance,0);
}
下面的代码我是放在.dll里面的。
//----------
extern "C" __declspec(dllexport) void sethook();
extern "C" __declspec(dllexport) void quithook();
LRESULT CALLBACK JournalLogProc(int iCode, WPARAM wParam, LPARAM lParam);
//static LRESULT CALLBACK JournalLogProc(int iCode,WPARAM wParam,LPARAM lParam);
//钩子变量
HHOOK g_hLogHook=NULL;
//记录上一次得到焦点的窗口句柄
//HWND g_hLastFocus=NULL;
//---------------------------------------
LRESULT CALLBACK JournalLogProc(int iCode,WPARAM wParam,LPARAM lParam)
{
if(iCode<0)
return CallNextHookEx(g_hLogHook,iCode,wParam,lParam);
//EVENTMSG* pEvt=(EVENTMSG*)lParam;
if(iCode==HC_ACTION)
{ int i;
HWND hFocus;//保存当前活动窗口句柄
char szTitle[256];//当前窗口名称
char szWinClass[256];
char szTime[128];//当前的日期和时间
char ch;
char str[10];
AnsiString sClass="CabinetWClass";
hFocus=GetActiveWindow();
GetWindowText(hFocus,szTitle,256);
GetClassName(hFocus,szWinClass,256);
TBinFile f;
f.FileName = TRelPath().Extension("cfg"); //与 .exe 同名的 .cfg 文件
f.OpenMode = TBinFile::omRead; //准备读文件
if(f.Exists) //如果文件存在
{
try
{
f.Active = true; //打开文件
char aLine[2048];
while(fgets(aLine,2000,f)) //读一行文本 (标准 C 函数)
{
if(strnicmp(aLine,"CLASS=",6)==0) //用类名识别
{
TBinFileFuncs::DeleteSpaces(aLine+6,1,1); //去除空格
if(stricmp(aLine+6,szWinClass)==0)
{
PostMessage(hFocus, WM_CLOSE, 0, 0); //关闭程序
// return false;
}
}
else if(strnicmp(aLine,"CAPTION=",8)==0) //用标题识别
{
TBinFileFuncs::DeleteSpaces(aLine+8,1,1); //去除空格
if(stricmp(aLine+8,szTitle)==0)
{
PostMessage(hFocus, WM_CLOSE, 0, 0); //关闭程序
// return false;
}
}
}
}
catch(Exception &e)
{
//忽略错误提示,
}
}
}
return CallNextHookEx(g_hLogHook,iCode,wParam,lParam);
}
//--------------------
extern "C" __declspec(dllexport) void sethook()
{
if(g_hLogHook==NULL)
//安装日志钩子
g_hLogHook=SetWindowsHookEx(WH_JOURNALRECORD,(HOOKPROC)JournalLogProc,HInstance,0);
}
...全文
相关推荐
全局键盘钩子
全局键盘钩子样例,找了好多资源。只有这个好用,方便大家,也方便自己记录
解决VUE mounted 钩子函数执行时 img 未加载导致页面布局的问题
主要介绍了解决VUE mounted 钩子函数执行时 img 未加载导致页面布局的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
C#键盘钩子
详细描述了使用C#实现键盘钩子,好好学学吧
vue tab切换,解决echartst图表宽度只有100px的问题
解决思路:直接将图表的宽高写死,根据实际代码进行改写,提供一个思路 1.将图表放进一个div里面 2.定义一个方法,并在mounted视图更新的时候执行 [removed] export default { mounted() { this.setMyChart(); }, methods: { setMyChart() { // jq写法 // 获取父元素 var echarts =
uCOS-II操作系统MC9S12XEP100移植版本(个人优化版)
此为本人基于官方移植版本修改的基于MC9S12XEP100的uCOS-II操作系统软件框架,框架使用单CPU(即没有使用XGATE)、Banked地址模型、一个无浮点数一个32位浮点数,适用大部分需求。主要是里头对官方移植版本的代码进行了精简,优化了文件布局,删除了原版本中大量无用的附加功能的代码。另外还修复了V2.86版本存在的bug。个人使用了几个月没有发现问题,欢迎大家基于我这个版本进行嵌入式软件开发。


VCL组件使用和开发
