MFC 批量转换文件方案

本文介绍了使用MFC开发的一款批量转换.NC为.MPF文件的程序。项目涉及界面设计、文件选择、转换逻辑、注册功能及配置文件的写入。通过选择文件夹,遍历文件并逐次进行转换,同时支持注册码验证和配置文件记录转换软件路径。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

日常工作的过程中,大量的.NC文件需要转换为.MPF文件,厂家仅仅提供了一款每次转换一个文件的程序,转换的速度特别的慢,需要设计一款批量准换的文件。方案的实现使用mfc。该项目比较简单,但是涉及了注册码,注册机,配置文件等比较独立的内容,特总结,既是增加自己的记忆,也是与大家分享学习!


提示:以下是本篇文章正文内容,下面案例可供参考

1、项目的设计方案

1.1界面设计

选择使用MFC进行窗口设计,比较方便,容易实现。包含注册界面、选择文件界面。

1.1.1注册界面

选择使用CPU序列号生成注册码。

1.1.2选择文件夹和转换界面


未注册可直接点击注册,弹出注册界面。输入cpu序列号和注册码即可完成注册。注册码由注册机生成。

1.2程序设计

程序设计的过程以主功能为主,辅助功能次之的方式进行总结,主功能包括识别文件和批量转换,辅助功能包含配置文件的设置和注册码的设置。项目实现的的方式是注册码检测,配置文件的检测,文件识别和转换。

1.2.1选择文件,将文件夹内的所有文件按照顺序逐次打开

1.2.1.1选择文件夹,将文件夹的路径赋值给变量LuJing
TCHAR   szPath[MAX_PATH] = { 0 };//文件路径的内存地址
	LPITEMIDLIST   pitem;
	BROWSEINFO   info;//创建结构体
	::ZeroMemory(&info, sizeof(info));
	info.hwndOwner = this->m_hWnd;
	info.lpszTitle = _T("请选择路径: ");
	info.pszDisplayName = szPath;
	if (pitem = ::SHBrowseForFolder(&info))
	{
		::SHGetPathFromIDList(pitem, szPath);//项目制列表转换为路径
		LuJing = szPath;
		UpdateData(FALSE);
	}	
	//原文链接:https ://blog.csdn.net/weixin_42899088/article/details/103673493
1.2.1.2遍历文件,并将文件名放入到vector容器内,使用FOR循环,逐一的将文件的路径赋值给变量WenJian。
/*创建容器*/
	vector<CString> FileName_List;//遍历文件名,创建容器,准备装文件路径和文件名
	GetFileFromDir(LuJing, FileName_List);//调用函数,将路径指定的文件夹内的文件名装入容器vector
	for (int i = 0; i < FileName_List.size(); i++)//按照文件的数量进行循环
	{     
	      CString WenJian;//创建变量,
		  WenJian = LuJing +"\\"+ FileName_List[i];//处理字符串,将文件路径和文件名整合到一个一个字符串
		  }

###1.2.2打开转换软件(.exe)

CString A = _T("Xchange.exe");//要查看的程序的名称**********
	int b = IsProccessRunning(A);//调用函数检查该程序有没有运行,声明为全局函数
	if (b == 0)//确认某个程序已经打开,如果打开(打开b==1)则直接加载,如果没有则打开该程序。
	{
		
		ShellExecute(NULL, _T("runas"),str2, NULL, NULL, SW_SHOWNORMAL);//运行指定的exe文件
		Sleep(2000);
	}

IsProccessRunning(A)的程序,在头文件进行声明。

int CALLXchangDlg::IsProccessRunning(CString strProccess)//定义函数为int型
{

	BOOL BRunning = FALSE;
	PROCESSENTRY32 processEntry32;
	HANDLE toolHelp32Snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	if (((int)toolHelp32Snapshot) != -1)
	{
		processEntry32.dwSize = sizeof(processEntry32);
		if (Process32First(toolHelp32Snapshot, &processEntry32))
		{
			do
			{

				CString str(L"");
				str = processEntry32.szExeFile;
				if (str == strProccess)
				{
					BRunning = TRUE;
					//AfxMessageBox(L"程序正在运行");//不用弹出对话框
					break;
				}
			}

			while (Process32Next(toolHelp32Snapshot, &processEntry32));
		}
		CloseHandle(toolHelp32Snapshot);
	}
	return BRunning;
}

1.2.3查找窗口、控件句柄,传递数据

CString str = _T("MainWindow");
	CWnd* pWnd = FindWindow(NULL, str);//获取程序运行窗口句柄
	HWND hWnd = pWnd->GetSafeHwnd();//利用指针取值
	SwitchToThisWindow(hWnd, TRUE);//激活对应句柄的窗口,如果已经最小化,则前端显示,且最大化
	Sleep(100);

因为运行的转换软件的控件没有句柄,只能更换方案,通过模拟鼠标响应,实现点击。

RECT r1 = {
    0,0,0,0 };//创建窗口的坐标的指针
    //寻找xchang的坐标
    ::GetWindowRect(hWnd, &r1);//获取窗口的坐标                      
    SetCursorPos(r1.left+750, r1.top+135);//移动到某点坐标 
    mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);//点下左键

使用剪切板,复制和粘贴变量

    CString WenJian;//创建变量,
		  WenJian = LuJing +"\\"+ FileName_List[i];//处理字符串,将文件路径和文件名整合到一个一个字符串
		  /*通过剪切板进行文件名的复制*/
		  if (this->OpenClipboard()) //如果能打开剪贴板
		  {
   
			  ::EmptyClipboard(); //清空剪贴板,使该窗口成为剪贴板的拥有者
			 //CString str("www.qzze.com");//将文本放置到系统剪贴板中
			  HGLOBAL hClip;
			  hClip = ::GlobalAlloc(GMEM_MOVEABLE, (WenJian.GetLength() * 2) + 2); //判断要是文本数据,分配内存时多分配一个字符
			  TCHAR* pBuf;
			  pBuf = (TCHAR*)::GlobalLock(hClip);//锁定剪贴板
			  lstrcpy(pBuf, WenJian);//把CString转换
			  ::GlobalUnlock(hClip);//解除锁定剪贴板
			  ::SetClipboardData(CF_UNICODETEXT, hClip);//把文本数据发送到剪贴板 CF_UNICODETEXT为Unicode编码
			  ::CloseClipboard();//关闭剪贴板
		  }
		  /*粘贴注:本操作把剪贴板中数据读入数据类型为CString的fromclipboard变量中;*/
		  char* buffer = NULL; 
		  CString   fromClipboard;
		  if (OpenClipboard())
		  {
   
			  HANDLE   hData = GetClipboardData(CF_TEXT
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值