记一次VS2010学写代码过程(一)

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

前几天看到XX老师编写的 编写Win32控制台程序 注入带窗口的DLL,的教程,闲来无事,也跟着视频教程自己动手写个,主要是代码简短,比起以往看的一些视频,代码都比较繁琐,好多都不懂,也懂得去找资料去一探究竟,本来新手一个,视频中用的VS2010.本人机器里XP只有很久之前留的一个VC6++;本以为都 一样,教程里也说装一个VC6,VC7,VC8,VC9,VC2010,VC2012,VC2013都一样,于是我就信了,就打开VC6++开始了,

>两个确定,然后插入资源>或者>>>,视频中是双击新建的窗体建立此窗体的类向导(将刚的窗体类化),而VC6++双击新建的资源窗体直接跳到代码区了,VC6++是在窗体上点右键或者点上面菜单>查看建立类向导,VS2010和VC6++出来的类向导界面也不一样,VS2010是直接输入一个类名就可以了,而VC6++>>,切找到,因为要使用这个类,先要包含这个头文件,即加上#include "MainDialogWnd.h",加上这个头文件后,主窗口的class CMainDialogWnd 这个就可以使用了,视频中MFC_DLL.cpp初化后面还有一个InitInstance()这个函数来着,可是VC6++MFC_DLL.cpp的代码到CMy_DllApp theApp;就没了,于是我就加一个函数

BOOL CMFC_DLLApp::InitInstance()

{

}

试运行,发现报错

意思大概是InitInstance:成员函数没有包括在 'CMy_DllApp',查看CMy_DllApp 声明,我想应该是视频中编译器版过高于我这个VC6++,少了好多东西,于是我就放弃了,下了2008,界面不一样,而且类化的时候发现报错,建不了类名,虽然问题解决了,但还是卸载了,又装了2012还有另一个版本,发现不支持32位,单位电脑XP,没有办法,只有找一个32位的VS2010,中间虽然有些小插曲,但也总是装好了,终于和视频中的一样了,在建立类向导的时候还是会报错,但可以用,重新开始了

>>>>>>>

这里会报错,看来是跟系统有关

不管错误,点是>>下面窗口点下一步>默认,点完成

把左下角的只留下这四个选项卡,多余的隐藏,没有的在菜单视图中先中,调整好四个选项卡的位置,保证和视频中一样,按视频一步步来,先左下角切换资源视图

>>>>>新建

左下角切换解决方案资源管理器,在刚建的窗口上点右键选添加类,或者双击报错不管,类名和视频中一样双击MFC_DLL.cpp终于能看到和视频中一样的代码不错,成功就是眼前了。先添加头文件#include "MainDialogWnd.h"继续

// MFC_DLL.cpp : 定义 DLL 的初始化例程。
//

#include "stdafx.h"
#include "MFC_DLL.h"
#include "MainDialogWnd.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif

//
//TODO: 如果此 DLL 相对于 MFC DLL 是动态链接的,
//		则从此 DLL 导出的任何调入
//		MFC 的函数必须将 AFX_MANAGE_STATE 宏添加到
//		该函数的最前面。
//
//		例如:
//
//		extern "C" BOOL PASCAL EXPORT ExportedFunction()
//		{
//			AFX_MANAGE_STATE(AfxGetStaticModuleState());
//			// 此处为普通函数体
//		}
//
//		此宏先于任何 MFC 调用
//		出现在每个函数中十分重要。这意味着
//		它必须作为函数中的第一个语句
//		出现,甚至先于所有对象变量声明,
//		这是因为它们的构造函数可能生成 MFC
//		DLL 调用。
//
//		有关其他详细信息,
//		请参阅 MFC 技术说明 33 和 58。
//

// CMFC_DLLApp

BEGIN_MESSAGE_MAP(CMFC_DLLApp, CWinApp)
END_MESSAGE_MAP()


// CMFC_DLLApp 构造

CMFC_DLLApp::CMFC_DLLApp()
{
	// TODO: 在此处添加构造代码,
	// 将所有重要的初始化放置在 InitInstance 中
}


// 唯一的一个 CMFC_DLLApp 对象

CMFC_DLLApp theApp;
CMainDialogWnd *PMainDialog;
DWORD WINAPI ShowDialog(LPARAM lpData)
{
	//添加显示窗口的代码
	PMainDialog = new CMainDialogWnd;
	PMainDialog->DoModal();//放到下面InitInstance()函数里会以阻塞的方式运行,就是卡住了
	//关闭此窗口后
	delete PMainDialog;//释放new分配的空间
	FreeLibraryAndExitThread(theApp.m_hInstance,1);//释放mfc_dll.dll
	return TRUE;
}
// CMFC_DLLApp 初始化
BOOL CMFC_DLLApp::InitInstance()
{
	CWinApp::InitInstance();
	::CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)ShowDialog,NULL,NULL,NULL);
	return TRUE;
}

完整的MFC_DLL.cpp代码。其间,少个括号,大写成小写,小写成大写,少个分号之类,编译一下嗯,不错,终于没有错误的编译成功。继续跟视频写代码,然后>>>>>>>>>>

然后还是会报错,不管然后直接点完成

>>>>>>>>>>>>>>>>

切换到  然后开始抄代码:

// InjectDll.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <windows.h>
#include<iostream>
using namespace std;
#define GameClassName "计算器"//定义窗口类名
#define DllName "MFC_DLL.dll"
//#define DllFullpath "D:\\我的文档\\Visual Studio 2010\\Projects\\MFC_DLL\\Debug\\MFC_DLL.dll"
void InjectDLL(HWND Gameh,const char* DllFullpath)
{
	DWORD pid = 0;
	DWORD byWriteSize;
	HANDLE hProcess = NULL;
	LPDWORD AddressDW = NULL;
	HANDLE threadHandle = NULL;//存放写入线程的句柄
	//查找窗口句柄
	
	if (Gameh != 0)
	{
		printf("进程句柄 =%d\n",Gameh);
		cout<<"进程句柄 ="<<Gameh<<endl;
		//获得线程句柄
		GetWindowThreadProcessId(Gameh,&pid);//获得线程句柄
		if (pid != 0)
		{
			printf("进程PID =%d\n",pid);//这里是为了查看错误
			cout<<"进程PID ="<<pid<<endl;//这里是为了查看错误
			//打开线程(权限,子进程继承,进程句柄)
			hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);

			if (hProcess != 0)
			{
				printf("进程hProcess =%d\n",hProcess);//这里是为了查看错误
				cout<<"进程hProcess ="<<hProcess<<endl;//这里是为了查看错误
				//在游戏线程分配一段空间
				//访问权限(线程句柄,分配起始地址,写入字节,内存标志,页面属性)
				AddressDW = (LPDWORD)VirtualAllocEx(hProcess,NULL,256,MEM_COMMIT,PAGE_READWRITE);

				if (AddressDW != NULL)
				{
					printf("进程AddressDW =%d\n",AddressDW);//这里是为了查看错误
					cout<<"进程AddressDW ="<<AddressDW<<endl;//这里是为了查看错误
					//写入内存(线程,起始地址,缓冲区,字节长度,具体写入字节)
					WriteProcessMemory(hProcess,AddressDW,DllFullpath,strlen(DllFullpath)+1,&byWriteSize);

					if (byWriteSize >= strlen(DllFullpath))
					{
						threadHandle = CreateRemoteThread(hProcess,NULL,NULL,(LPTHREAD_START_ROUTINE)LoadLibrary,AddressDW,NULL,NULL);
						//创建远线程(线程句柄,安全属性,初始大小,该线程函数起始地址,参数(路径),标志,返回值)
						WaitForSingleObject(threadHandle,0xffffffff);//等待注入DLL的线程挺无再进行下一步
						CloseHandle(threadHandle);//关闭写入线程句柄
						VirtualFreeEx(hProcess,AddressDW,256,MEM_DECOMMIT);//释放远程地址空间
						CloseHandle(hProcess);//关闭打开线程
					}else
					{
						printf ("与入DLL路径失败\r\n");
					}
				}else
				{
					printf("未找到AddressDW");
				}
			}else
			{
				printf("未找到hProcess");
			}
		}else
		{
			printf("未找到pid");
		}
	}else
	{
		printf("未找到Gameh");
	}
}
int _tmain(int argc, _TCHAR* argv[])
{
	char DirName[256] = "";
	char DllNamePath[256] = ";";
	HWND Gameh = FindWindow(NULL,GameClassName);//通过查找进程句柄,第一个参数类名,第二个参数标题名
	GetCurrentDirectoryA(sizeof(DirName),DirName);
	strcpy_s(DllNamePath,DirName);
	strcat_s(DllNamePath,"\\");
	strcat_s(DllNamePath,DllName);
	printf("%s \r\n",DirName);
	printf("%s \r\n",DllNamePath);
	//添加注入DLL代码
	printf("注入DLL\r\n");//输入一段打印信息,作为测试 
	InjectDLL(Gameh,DllNamePath);//调用InjectDll函数
	getchar();//防止控制台窗口一闪而过,只到输入回车,窗口才会结束
	return 0;
}

代码终于写完了,再   不然编译运行会报错,编译一下

激动人心的时刻到了,======未完待续======

一次VS2010代码过程(五)           剧情应该结束了,还要什么………………想想那个找不到hProcess还没有解决,于是我在家里用WIN10来用两种方式运行代码,都能够显示注入窗口,那问题应该还是出现在XP系统,或是XP系统的VS2010设置上,我就想既然VS2010对XP系统的兼容不是很好,那VC6++是完全32位系统的编译器,应该没有问题吧,况且视频的作者也说VC6VC7等等都可以,只是大同小异,那我还是用... 阅读详情

相关推荐

Win32习笔——安装VS2010,下载配套源代码

习Win32编程,我们需要款编译器。美国Windows编程大佬查尔斯·佩措尔德先生在他的《Windows程序设计第五版》中,采用的开发软件,是Visual C++ 6.0 软件。而在我们这里,我不打算采用Visual C++ 6.0。原因就是,这个软件,它太旧了。在Win7,Win10里面,Visual C++ 6.0 软件都存在着兼容性的问题,所以呢,我不考虑这个软件了。

jingxian1992的博客 1471

c2061 dword 语法错误_这个函数要什么头文件DWORD WINAPI ShowDialog(LPARAM,lpData)

#include#includeusing namespace std;class cpoint{public:cpoint(double xx=0,double yy=0){this->x=xx;this->y=yy;}cpoint(cpoint &p1,cpoint &p2){len=sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*...

weixin_39609407的博客 321

VS2010简介

今天参加微软组织的VS2010 Launch Event Train-The-Trainer Traning,Brian A. Randell同讲的眉飞色舞、demo的激情澎湃,我却听的懵懵懂懂:( 听听课,才发现自己的知识落伍太多了。还没研究过WPF到底是怎么回事儿,现在Silverlight已经大行其道。没做过Web方面的开发,现在Cloud又火得不行。SharePoint & Of

Thinking in ... 2万+

【C++的取经之路】(二)使用VisualStudio软件编代码保姆教程

本文围绕如何使用Microsoft Visual Studio软件编C++代码而展开介绍,参考《C++ Primer Plus》书中给出的代码示例,分别从VS软件新建项目的交互界面、建立cpp源文件和头文件的代码管理三个方面阐述代码流程。本篇文章中的代码均已测试通过。

Larissa的博客 2418

如何使用VS2019编C语言程序

步:打开VS2019。 第二步:点击“创建新项目”。 第三步:选择空项目,点击下步。 第四步:修改项目名称和位置,点击创建。 第五步:点击源文件,右键,添加,新建项。 第六步:选择C++文件,,把名称处改成 .c ,点击添加。 第七步:开始编代码,按 Ctrl+B 编译,点击播放键运行。 ...

荒唐的博客 1万+

郁金香商业辅助教程 2016 笔 1~5

、分析角色 HP/MP 地址 我们的目标是这个,热血江湖。我们要找出基本信息中,所有数据的地址。 我们要用到款工具,CE。打开之后点击左上角打开进程,会弹出进程列表,我们需要选择游戏的进程。 我们可以点击下面的“窗口列表”,然后从打开的窗口中搜索,这样可能比较好找。 由于 HP 数值变动较快,我们把扫描类型改为“两者之间的数值”,在上面把数值设置为 352 和 370(视具...

龙哥盟 4万+

一次VS2010代码过程(二)

接上集,编译没有错误那就运行了,满怀激动的心情点了菜单下面的绿色小三角图标然后期待的画面>>>>>>这是什么鬼,怎么会酱紫,注入的计算器就崩溃了,反复的行行的对照代码,没有错了,除了注释不样,是哪里出错了么,还是哪个步骤错了,删除所建的文件夹,再按视频步来,故障仍旧,找不出问题所在,继续删除文件夹再来一次,不行,我就想,是不是XP系统的问题,把文件打包...

hsoftk的博客 286

一次VS2010代码过程(三)

就酱紫懵圈三两天,之间也碰到些小插曲,比如在查找资料的时候用关键字搜vc6 dll注入只找到个CSDN的链接,为了能下下来,因为要积分才能下软件,找了好些工具,打回了自己CSDN的帐号,以为里面有积分,得以前注册的时候用软件刷过些积分,哪知道找回后帐号内积分为0,又求助了52PJ论坛坛友,还好,坛友比较热心,没多入就给我发了链接让我去下,我还以为能够解决这几天的困惑,谁知道那...

hsoftk的博客 197

VS2005的静态库到VS2010出错的处理

今天装了vs2010, 个test,调用了以前用vs2005个调试用的日志类,链接死活过不了,又是库冲突 ,又是无法解析外部符号。用错误内容及vs2005与vs2010搜了半天都没找到解决办法。后来找到说是string在旧版编译器中编译的结果在新版本里有区别,于是把库拿到vs2010重新编译,再拿到项目中,终于是通过了。       贴出错误:      1> AMobileDe

4573

VS2010下编译Python程序

最近因为想要习有关机器习的相关东西,发现《机器习实战》这本书不错,但是代码用的是Python,因为Python有强大的数值计算库,还能够包含opencv,真是牛气,幸亏之前实习时用过,上手还算容易。感谢微软对Python的兼容啊,对于用惯了VS的人来说真是太好了。 安装步骤: 1:下载VS2010,并安装(上网搜下注册码吧,忘了当时在哪里找的了)。 2:下载最新版本的Python,我

hdhfighting的专栏 1万+

VS 2010 打开 VS 2019 创建的程序项目文件

前言 最近运行Windows 8.1 有些卡,想用下 Windows XP(毕竟用Windows 8.1也不安装更新的),应该会流畅很多,但大家都知道Windows XP最多可以安装VS 2010VS 2013以上是安装不了的,可之前代码呢?是用VS 2017创建的,在偶然间看到了这篇文章,于是实践下,下。 开始尝试 既然是尝试,就肯定不会把Windows XP安装到实机上的,于是安装虚拟机(只分配了512MB的内存,居然运行的非常流畅),上面安装VS 2010过程就不用讲了) 接着打开

gfdgd xi 1万+

VS2010在使用过程中遇到的问题

VS2010在使用过程中遇到的问题

DongShanYuXiao的博客 4710

【Error】安装VS2012后VS2010工程失败

安装VS2012后遇到的问题 悲剧的种子是在上个月初种下的。。。9月份微软发布了Visual Studio2012(发布会),我是个对各种“新版本”极有偏好的人,看到新闻就立刻下载了VS2012 Pro版,花了几个小时安在原本装有VS08,VS10版本的电脑上。装下来之后体验还是挺不错的,启动速度感觉比10快了许多,而且代码的智能提示也很给力,不需要Visual Assist 之类的插件就能高

小魏的修行路 2万+

VS2010的MFC对话框程序中添加菜单栏的过程

VS2010的MFC对话框程序中添加菜单栏的过程最近在看个用MFC的界面的项目的代码,在代码和界面中直没有看到关于菜单控件是如何添加进对话框的,于是就百度了下。结果,与其它控件(Button等)添加的方式不样; VS2010的MFC对话框程序中添加菜单栏的过程大致分了这五步。、将Menu加入Resource视图中 在WorkSpace中的Resource视图下,在左边目录的任意位置上

wojiushimogui的博客 1万+

VS2010中安装MSDN

1.帮助中找“管理帮助设置” 2.第一次装msdn时让选择安装地点,要选个大点的盘安装,进入如下界面,选择从磁盘安装内容 3.选择msdn的位置,我的vs2010默认安装的f盘中,然后选择VS2010安装光盘下的ProductDocumentation\HelpContentSetup.msha文件,如果没有找的上述文件,可到下面云盘下载http://yunpa

Wang Bei的博客 6728

图解VS2010打包全过程

最近刚刚打包发布了用VS2010开发的个收费系统,借此讲讲打包过程,供大家参考。 首先打开已经完成的工程,如图: 下面开始制作安装程序包。 第步:[文件]——[新建]——[项目]——安装项目。 名称——可以自己根据要求修改。 位置——是指你要制作的安装文件存放在什么目录内,可以根据需要修改,笔者般是把它放在本工程的同个目录内。

一名系统架构师的征途 1万+

VS2010编译调试STL源代码

平台环境:windows 7 32位+VS2010+STL源代码

KangRoger的专栏 6571

VS2010 经常崩溃的一次解决办法

VS2010 经常崩溃的一次解决办法       今天在w

TRTK 6148
上一篇: MFC 华而不实的鼠标响应事件
下一篇: 记一次VS2010学写代码过程(二)
hsoftk
博客等级 码龄11年 18粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值