学习笔记

1.首先要建立mfc的动态链接库。在def文件中放入要导出的函数名。

2.添加函数如下

//安装钩子
//HHOOK SetWindowsHookEx(
// int idHook,//钩子的类型WH_KEYBOARD键盘钩子
// HOOKPROC lpfn,//钩子的回调函数,钩子类型不同回调函数不同
// HINSTANCE hwnd,//dll动态链接库的句柄
// DWORD dwthreadid//游戏主进程的id 是GetWindowThreadProcessId的返回值
// )
//键盘钩子对应的回调函数
LRESULT CALLBACK GameProc(
int code,
WPARAM wParam,//按键代码,例如f12=VK_F12
LPARAM lParam//按键相关的信息。具体百度
)
{
//用到mfc中的api就得加上这句宏!!!!
AFX_MANAGE_STATE(AfxGetStaticModuleState());
//还可以添加按键被按下之后执行的逻辑
if((wParam==VK_F12)&&(lParam&(<<)==))//取出lparam的第31位0则是被按下
{
AfxMessageBox(L"按下F12");
}
return CallNextHookEx(,code,wParam,lParam);
}
#define gamename L"YB_OnlineClient"//宏定义窗口名称
void SetHook()
{
//用到mfc中的api就得加上这句宏!!!!
AFX_MANAGE_STATE(AfxGetStaticModuleState());
//获取窗口句柄
HWND gameh=::FindWindowW(NULL,gamename);
//获取线程id
DWORD gameid=GetWindowThreadProcessId(gameh,NULL);
//线程钩子第三个参数不能为0,第四个参数为0 则是全局钩子。
//::GetModuleHandleA("mydll.dll")获取动态链接库的句柄
::SetWindowsHookExW(WH_KEYBOARD,&GameProc,::GetModuleHandleA("mydll.dll"),gameid);
}
3.新建窗口程序添加钩子。
3.1把动态链接库生成的dll和lib文件复制到窗口程序的release文件下或者根目录下或者debug下
3.2添加程序如下
#pragma comment(lib,"mydll.lib")//引入dll的链接库
_declspec(dllimport) void SetHook();//导入函数的声明
//vs2008以后可以不这样来加载和导入函数的声明。
//在窗体类顶部加上
//typedef HHOOK TSetHook(void); //定义变量别名
//TSetHook *SetHook;//定义函数指针
//在消息处理程序中加上
//HMODULE hdd=LoadLibrary(L"mydll.dll");//加载链接库
//SetHook=(TSetHook*)::GetProcAddress(hdd,"SetHook");//获取函数地址
void CrxjhcDlg::OnBnClickedButtonsethook()
{
// TODO: 在此添加控件通知处理程序代码
SetHook();
}

 

2.添加键盘钩子。向进程中注入dll的更多相关文章

  1. 使用ptrace向已运行进程中注入.so并执行相关函数

    这个总结的很好,从前一个项目也用到这中技术 转自:http://blog.csdn.net/myarrow/article/details/9630377 1. 简介 使用ptrace向已运行进程中注 ...

  2. 使用ptrace向已运行进程中注入.so并执行相关函数(转)

    1. 简介 使用ptrace向已运行进程中注入.so并执行相关函数,其中的“注入”二字的真正含义为:此.so被link到已运行进程(以下简称为:目标进程)空间中,从而.so中的函数在目标进程空间中有对 ...

  3. Wow64(32位进程)注入DLL到64位进程

    转载自: https://blog.poxiao.me/p/wow64-process-inject-dll-into-x64-process/ 向其他进程注入DLL通常的做法是通过调用CreateR ...

  4. 【旧文章搬运】再谈隐藏进程中的DLL模块

    原文发表于百度空间,2009-09-17========================================================================== 相当老的话 ...

  5. 如何在 C# 程序中注入恶意 DLL?

    一:背景 前段时间在训练营上课的时候就有朋友提到一个问题,为什么 Windbg 附加到 C# 程序后,程序就处于中断状态了?它到底是如何实现的? 其实简而言之就是线程的远程注入,这一篇就展开说一下. ...

  6. 远程线程注入DLL突破session 0 隔离

    远程线程注入DLL突破session 0 隔离 0x00 前言 补充上篇的远程线程注入,突破系统SESSION 0 隔离,向系统服务进程中注入DLL. 0x01 介绍 通过CreateRemoteTh ...

  7. 如何创建DLL,以及注入DLL

    为了防止忘记,特记下 DLL的创建,在VS2017中选择dll的创建 // dllmain.cpp : Defines the entry point for the DLL application. ...

  8. 将dll文件注入到其他进程中的一种新方法

    http://www.45it.com/windowszh/201212/33946.htm http://www.hx95.cn/Article/OS/201212/65095.html 我们知道将 ...

  9. 钩子编程(HOOK) 安装进程内键盘钩子 (1)

    摘要:钩子能够监视系统或进程中的各种事件消息.截获发往目标窗体的消息并进行处理.这样,我们就能够在系统中安装自己定义的钩子,监视系统中特定事件的发生.完毕特定的功能,比方截获键盘.鼠标的输入.屏幕取词 ...

随机推荐

  1. 【产品体验】echo回声

    本人产品新人,学习中,希望大家用过该产品的给点意见,不吝赐教哦~~ 先来两张echo的界面图镇楼——        echo简介: “echo”是一款做声音社交的APP,在这里,你可以感受到声音无限的 ...

  2. [BZOJ 1218] [HNOI2003] 激光炸弹 【n logn 做法 - 扫描线 + 线段树】

    题目链接:BZOJ - 1218 题目分析 可以覆盖一个边长为 R 的正方形,但是不能包括边界,所以等价于一个边长为 R - 1 的正方形. 坐标范围 <= 5000 ,直接 n^2 的二维前缀 ...

  3. angularjs编码实践

    AngularJS 是制作 SPA(单页面应用程序)和其它动态Web应用最广泛使用的框架之一.我认为程序员在使用AngularJS编码时有一个大的列表点应该记住,它会以这样或那样的方式帮助到你.下面是 ...

  4. 【POJ2699】The Maximum Number of Strong Kings(网络流)

    Description A tournament can be represented by a complete graph in which each vertex denotes a playe ...

  5. 【POJ2773】Happy 2006 欧几里德

    题目描述: 分析: 根据欧几里德,我们有gcd(b×t+a,b)=gcd(a,b) 则如果a与b互质,则b×t+a与b也一定互质,如果a与b不互质,则b×t+a与b也一定不互质. 所以与m互质的数对m ...

  6. Apache OFBiz

    Apache OFBiz® Apache OFBiz offers a great deal of functionality, including: advanced e-commerce cata ...

  7. 如何在jasperreport自动生成序号

    在导出报表时,有时候我们需要显示序号,有两种方法: 1.就是再加一个字段,就是说将序号也当做是要导出的字段来处理,然后用程序给这个字段赋值,这方面有点傻,就不说了. 2.利用jasperreport提 ...

  8. 【HDOJ】3696 Farm Game

    SPFA求最短路径.见图的时候注意逆向建图. /* 3696 */ #include <iostream> #include <queue> #include <vect ...

  9. [待解决问题] 启动不了Android工程

    在使用 AudioInputStream sample = AudioSystem.getAudioInputStream(voiceSampleFile); 调用javax.sound.sample ...

  10. second blog编程之美------控制cpu曲线

    先贴程序: 以前看过这个算法, 不过没什么印象,大概记得它利用while循环来控制cpu利用率 #include int main(int argc,char*argv[]) {         wh ...