用hook实现鼠标自动按下后抬起

继前篇hook(笔记)_yjx23332的博客-CSDN博客后,我们尝试写一个脚本对全局进行影响。

本文实现鼠标不断按下(位置为鼠标当前位置),3秒后松开,再次按下。

Hook代码

KeyHook.h

#pragma once
#include<windows.h>
#include<stdio.h>
#include <thread>

extern "C" _declspec(dllexport) bool installHook();//安装钩子
extern "C" _declspec(dllexport) bool unInstallHook();//卸载钩子


HHOOK hHook;
LRESULT CALLBACK hookProc(int code, WPARAM wParam, LPARAM  lParam);
bool installHook();
bool unInstallHook();

 KeyHook.h

#include "KeyHook.h"

static bool flag = false;
HANDLE handle = NULL;
unsigned int CALLBACK Thread(void* args) {
	while (flag) {
        //鼠标事件,按下,dx,dy,x,y
		mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
        //等待3秒
		Sleep(3000);
        //松开
		mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
	}
	return 0;
}
LRESULT CALLBACK hookProc(int code, WPARAM wParam, LPARAM  lParam) {
	HWND hWnd = ::GetActiveWindow();
	if (code < 0 || code == HC_NOREMOVE) {
		return CallNextHookEx(hHook, code, wParam, lParam);
	}
	if (lParam & 0x40000000) {
		return CallNextHookEx(hHook, code, wParam, lParam);
	}
	char keyTextBuff[256];
	GetKeyNameTextA(lParam, keyTextBuff, 255);
	if (keyTextBuff[0] == 'O') {
		if (!flag) {
			flag = true;
			MessageBox(NULL, L"即将开始", L"提示", NULL);
			handle = (HANDLE)_beginthreadex(NULL, 0, Thread, NULL, 0, NULL);
		}
		else {
			MessageBox(NULL, L"脚本正在执行", L"提示", NULL);
		}
	}
	else if (keyTextBuff[0] == 'P') {
		if (flag){
			flag = false;
			MessageBox(NULL, L"即将结束", L"提示", NULL);
		}
		else {
			MessageBox(NULL, L"没有执行的脚本", L"提示", NULL);
		}
	}
	return CallNextHookEx(hHook, code, wParam, lParam);;
}


bool installHook() {//安装钩子
	//SetWindowsHook只能适用32位,Ex位升级版
		hHook = SetWindowsHookEx(
		WH_KEYBOARD,//钩子种类,此处我们埋下键盘消息钩子
		hookProc,//设置钩子的处理函数,以回调的形式
		GetModuleHandle(L"KeyHook"),
		NULL//线程ID,NULL自动分配
	);
	if (hHook == NULL) 
		return false;
	MessageBox(NULL, L"钩子已安装", L"提示", NULL);
	return true;
}
bool unInstallHook() {
	UnhookWindowsHookEx(hHook);
	return true;
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: C 注入word后hook鼠标是指在使用C语言编写程序时,将代码注入到Word软件中,并且通过hook技术来监控和控制鼠标的行为。 注入指的是将自己编写的代码注入到目标程序中,以便在目标程序运行时执行自定义的操作。Word软件作为一个常用的办公工具,很多时候需要对鼠标行为进行控制或追踪,因此在Word中注入代码来hook鼠标就非常有实际意义。 使用hook技术可以拦截和修改目标程序的消息循环,从而对鼠标的行为进行监控和控制。在C语言中,可以使用Windows API函数来实现hook鼠标的功能。具体步骤如下: 1. 创建一个DLL(动态链接库)项目,在DLL中实现hook的相关代码。 2. 在代码中使用SetWindowsHookEx函数来设置鼠标hook,并指定回调函数。 3. 回调函数会在收到鼠标消息时被触发,可以根据需要对鼠标的行为进行处理。 4. 在代码中使用LoadLibrary函数将DLL注入到Word进程空间中,使其生效。 需要注意的是,hook鼠标时需要有相应的权限,因此需要以管理员身份运行程序。 通过注入代码并hook鼠标,在Word软件中可以实现一些自定义的功能,比如对鼠标事件进行截获、拦截、修改、统计等操作,从而满足一些特定的需求,提高用户的使用体验和工作效率。 总之,C 注入word后hook鼠标是一种在编程中利用hook技术对Word软件中的鼠标行为进行监控和控制的方法。这样的技术可以帮助我们实现一些自定义的功能,从而提高工作效率和用户体验。 ### 回答2: 在C语言中,要实现将注入到Word中的代码进行鼠标hook操作,可以按照以下步骤进行: 1. 首先,我们需要创建一个动态链接库(DLL)来包含我们的Hook代码。我们可以使用C语言编写该DLL,并将其编译为一个被注入到Word进程中的可执行文件。 2. 在DLL中,我们可以使用Windows API函数来实现鼠标hook操作。我们可以使用SetWindowsHookEx函数来安装一个鼠标的低级钩子(LLMouseHook)。这个函数允许我们指定回调函数来处理鼠标事件。 3. 在回调函数中,我们可以捕获和处理鼠标事件,例如鼠标按下、释放、移动等。我们可以根据我们的需求,对这些事件进行逻辑处理。 4. 为了以DLL形式注入到Word中,我们可以使用一些注入工具,例如通过CreateRemoteThread函数在Word进程中创建一个远程线程,然后在该线程中加载并执行我们的DLL。 总结起来,我们可以通过编写一个DLL来实现将代码注入到Word中,并利用Windows API函数来在DLL中hook鼠标。然后,我们可以对鼠标事件进行逻辑处理。通过远程线程注入DLL到Word进程中,我们可以实现在Word应用程序中完成鼠标hook操作。 ### 回答3: 在C语言中,我们可以使用Windows API来实现在Word中hook鼠标的功能。具体步骤如下: 1. 引入Windows.h头文件,该头文件包含了Windows API所需要的函数和常量的定义。 2. 定义一个全局的MouseHook变量,用于存储鼠标钩子的句柄。 3. 在程序的入口函数中,在调用Word的相关函数之前,通过调用SetWindowsHookEx函数来安装鼠标钩子。该函数的第一个参数是鼠标钩子类型,我们需要使用WH_MOUSE来监视所有鼠标消息。第二个参数是鼠标钩子回调函数的地址,可以定义一个自定义的回调函数来处理鼠标消息。第三个参数是传递给回调函数的参数,可以为NULL。最后一个参数为0,表示鼠标钩子与所有的线程共享。 4. 自定义的鼠标钩子回调函数需要接收三个参数:鼠标事件类型、鼠标坐标、鼠标消息的额外信息。我们可以在回调函数中对鼠标事件进行处理,例如输出相关信息或者做一些其他处理。 5. 在程序退出前,通过调用UnhookWindowsHookEx函数来卸载鼠标钩子。 需要注意的是,为了确保鼠标钩子的正常运行,通常需要以管理员权限运行程序。 总之,在C语言中可以使用Windows API来实现在Word中hook鼠标的功能。通过安装一个鼠标钩子,我们可以监视和处理鼠标消息,实现所需的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值