C\C++真桌面贪吃蛇,桌面操控,有音乐音效“详解”
1. 桌面图标贪吃蛇!采用HOOK技术HOOK桌面,可以以桌面为焦点运行贪吃蛇。有背景音乐和音效,采用管道技术,实现音乐音效混响。
2. 试验环境,64位WIN10系统 VS2017调试。运行时,需要关闭图标的自动排序与网格对齐,专业版系统需要右键以管理员身份运行。注入程序、子程序、DLL、音乐包需要同时放在桌面上。
(1)运行效果如下图:

(2)身体长了速度会变快,如下图:

(3)撞到自己会死,如下图:

(4)可以按后方向随时停止,撞到墙壁也会停止,如下图:

(5)按大键盘数字1键随时重新开始,如下图:

(6)按大键盘数字3键随时可以杀死音乐子进程,如下图:

3. 程序运行流程图如下

4. 要去掉DOS窗口,以桌面为焦点运行,需要HOOK桌面。桌面窗口是explorer.exe的子程序,所以我直接将DLL注入到了explorer.exe里面。
(1)注入程序采用的是远程线程注入(突破SESSION 0隔离机制),远程线程代码都是固定的,没什么技术含量。代码在末尾发链接。
(2)WIN10_X64系统中,注入程序、DLL需要是64位的程序,音乐子程序可以是32位的。
5. 代码功能讲解。
(0)提醒大家一下,现在写c++的代码,定义任何变量,一定要初始化,否则WIN10的检查机制总有不会放过你的时候。
(1)注意,游戏都在DLL文件里面,写游戏代码的时候最好先在EXE程序中调试好了以后,再放在DLL文件里面进行细微修改。否则很难调试。毕竟调试explorer.exe需要win10_x64的符号文件,我没有符号文件!调试不了。我用的是DbgView程序来测试错误的。 我用过钩子,但是技术不到家,钩不住桌面的键盘消息,所以我就改用了拦截窗口回调函数的方法。
(2)dll文件中的HOOK关键API一之:SetWindowLongPtr
LONG_PTR
WINAPI
SetWindowLongPtr(
_In_ HWND hWnd, //要更改的窗口的句柄
_In_ int nIndex, //索引
_In_ LONG_PTR dwNewLong); //设置窗口回调函数
/*
这个函数是SetWindowLong进阶版,可以设置窗口回调,
而且兼容64位和32系统,推荐用这个。用法如下
*/
//设置窗口回调 得到旧的窗口回调句柄
g_OldProc = (WNDPROC)SetWindowLongPtr(
g_hWin, // 桌面窗口的句柄
GWLP_WNDPROC, // 这个宏用于设置窗口回调
(LONG_PTR)MyDefWindowProc