MFC软件卸载代码

2024-06-14 23:18
文章标签 代码 软件 卸载 mfc

本文主要是介绍MFC软件卸载代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

// m_Software.cpp : 实现文件
//#include "stdafx.h"
#include "MFCApplication1.h"
#include "m_Software.h"
#include "afxdialogex.h"// m_Software 对话框
HANDLE hThread5;
m_Software *m_this;DWORD WINAPI ThreadPro5(LPVOID lpThreadParameter)
{CRect rt;m_this->MyList.GetClientRect(rt);m_this->MyList.SetExtendedStyle(LVS_EX_FULLROWSELECT);m_this->MyList.InsertColumn(0,_T("软件名"),0,rt.Width( ) / 4);m_this->MyList.InsertColumn(1,_T("厂商"),0,rt.Width( ) / 4);m_this->MyList.InsertColumn(2,_T("安装路径"),0,rt.Width( ) / 4);m_this->MyList.InsertColumn(3,_T("卸载路径"),0,rt.Width( ) / 4);struct _SoftInfo{// 软件名WCHAR m_strSoftName[50];// 软件版本号WCHAR m_strSoftVersion[50];// 软件安装目录WCHAR m_strInstallLocation[MAX_PATH];// 软件发布厂商WCHAR m_strPublisher[50];// 主程序所在完整路径WCHAR m_strMainProPath[MAX_PATH];// 卸载exe所在完整路径WCHAR m_strUninstallPth[MAX_PATH];}SoftInfo;// 主键HKEY RootKey; // 子键名称LPCTSTR lpSubKey;   // 将要打开键的句柄 HKEY hkResult;      // 记录读取注册表是否成功LONG lReturn;            CString strBuffer;CString strMidReg;int i = 0;DWORD index = 0;TCHAR szKeyName[255] = {0};        // 注册表项名称TCHAR szBuffer[255] = {0};DWORD dwKeyLen = 255;DWORD dwNameLen = 255;DWORD dwType = REG_BINARY | REG_DWORD | REG_EXPAND_SZ | REG_MULTI_SZ | REG_NONE | REG_SZ;CString *name = new CString;RootKey = HKEY_LOCAL_MACHINE;lpSubKey = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall");//lpSubKey = _T("SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall");bool isOK = false;lReturn = RegOpenKeyEx(RootKey,lpSubKey,0,KEY_ALL_ACCESS,&hkResult);DWORD dwIndex = 0;while(true){DWORD dwKeyLen = 255;WCHAR szNewKeyName[MAX_PATH] = {};LONG lReturn = RegEnumKeyEx(hkResult,dwIndex,szNewKeyName,&dwKeyLen,0,NULL,NULL,NULL);OutputDebugString(szNewKeyName);WCHAR strMidReg[MAX_PATH] = {};swprintf_s(strMidReg,L"%s%s%s",lpSubKey,L"\\",szNewKeyName);HKEY hkValueKey = 0;RegOpenKeyEx(RootKey,strMidReg,0,KEY_QUERY_VALUE,&hkValueKey);DWORD dwNameLen = 255;RegQueryValueEx(hkValueKey,L"DisplayName",0,&dwType,(LPBYTE)SoftInfo.m_strSoftName,&dwNameLen);dwNameLen = 255;if(SoftInfo.m_strSoftName == name[0])//去除重复{dwIndex++;continue;}name[0] = SoftInfo.m_strSoftName;m_this->MyList.InsertItem(i,NULL);m_this->MyList.SetItemText(i,0,SoftInfo.m_strSoftName);RegQueryValueEx(hkValueKey,L"Publisher",0,&dwType,(LPBYTE)SoftInfo.m_strPublisher,&dwNameLen);dwNameLen = 255;m_this->MyList.SetItemText(i,1,SoftInfo.m_strPublisher);RegQueryValueEx(hkValueKey,L"InstallLocation",0,&dwType,(LPBYTE)SoftInfo.m_strInstallLocation,&dwNameLen);dwNameLen = 255;m_this->MyList.SetItemText(i,2,SoftInfo.m_strInstallLocation);RegQueryValueEx(hkValueKey,L"UninstallString",0,&dwType,(LPBYTE)SoftInfo.m_strUninstallPth,&dwNameLen);dwNameLen = 255;m_this->MyList.SetItemText(i,3,SoftInfo.m_strUninstallPth);i++;dwIndex++;if(lReturn == ERROR_NO_MORE_ITEMS){break;}}return 0;
}IMPLEMENT_DYNAMIC(m_Software, CDialog)m_Software::m_Software(CWnd* pParent /*=NULL*/): CDialog(m_Software::IDD, pParent)
{}m_Software::~m_Software()
{
}void m_Software::DoDataExchange(CDataExchange* pDX)
{CDialog::DoDataExchange(pDX);DDX_Control(pDX,IDC_BUTTON1,m_XieZaii);DDX_Control(pDX,IDC_PROGRESS2,MyList);
}BEGIN_MESSAGE_MAP(m_Software, CDialog)ON_BN_CLICKED(IDCANCEL,&m_Software::OnBnClickedCancel)ON_BN_CLICKED(IDC_BUTTON1,&m_Software::OnBnClickedButton1)
END_MESSAGE_MAP( )// m_Software 消息处理程序//取消按钮
void m_Software::OnBnClickedCancel( )
{// TODO:  在此添加控件通知处理程序代码CDialog::OnCancel( );
}//卸载按钮
void m_Software::OnBnClickedButton1( )
{// TODO:  在此添加控件通知处理程序代码CString str1;int nId;POSITION pos = MyList.GetFirstSelectedItemPosition( );//找到位置nId = (int)MyList.GetNextSelectedItem(pos);//选择的是第几行str1 = MyList.GetItemText(nId,3);//获取内容,0代表第一列ShellExecute(NULL,NULL,_T("explorer"),str1,NULL,SW_SHOW);
}BOOL m_Software::OnInitDialog( )
{CDialog::OnInitDialog( );// TODO:  在此添加额外的初始化// 	CRect rc;
// 	::GetClientRect(AfxGetApp( )->m_pMainWnd->m_hWnd,rc);
// 	rc.DeflateRect(0,15,40,90);
// 	MoveWindow(rc);//显示出来m_this = this;hThread5 = CreateThread(NULL,NULL,ThreadPro5,(LPVOID)1,NULL,NULL);return TRUE;  // return TRUE unless you set the focus to a control// 异常:  OCX 属性页应返回 FALSE
}

这篇关于MFC软件卸载代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1061774

相关文章

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

软件设计师备考——计算机系统

学习内容源自「软件设计师」 上午题 #1 计算机系统_哔哩哔哩_bilibili 目录 1.1.1 计算机系统硬件基本组成 1.1.2 中央处理单元 1.CPU 的功能 1)运算器 2)控制器 RISC && CISC 流水线控制 存储器  Cache 中断 输入输出IO控制方式 程序查询方式 中断驱动方式 直接存储器方式(DMA)  ​编辑 总线 ​编辑

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

代码随想录冲冲冲 Day39 动态规划Part7

198. 打家劫舍 dp数组的意义是在第i位的时候偷的最大钱数是多少 如果nums的size为0 总价值当然就是0 如果nums的size为1 总价值是nums[0] 遍历顺序就是从小到大遍历 之后是递推公式 对于dp[i]的最大价值来说有两种可能 1.偷第i个 那么最大价值就是dp[i-2]+nums[i] 2.不偷第i个 那么价值就是dp[i-1] 之后取这两个的最大值就是d

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

D4代码AC集

贪心问题解决的步骤: (局部贪心能导致全局贪心)    1.确定贪心策略    2.验证贪心策略是否正确 排队接水 #include<bits/stdc++.h>using namespace std;int main(){int w,n,a[32000];cin>>w>>n;for(int i=1;i<=n;i++){cin>>a[i];}sort(a+1,a+n+1);int i=1

免费也能高质量!2024年免费录屏软件深度对比评测

我公司因为客户覆盖面广的原因经常会开远程会议,有时候说的内容比较广需要引用多份的数据,我记录起来有一定难度,所以一般都用录屏工具来记录会议内容。这次我们来一起探索有什么免费录屏工具可以提高我们的工作效率吧。 1.福晰录屏大师 链接直达:https://www.foxitsoftware.cn/REC/  录屏软件录屏功能就是本职,这款录屏工具在录屏模式上提供了多种选项,可以选择屏幕录制、窗口

HomeBank:开源免费的个人财务管理软件

在个人财务管理领域,找到一个既免费又开源的解决方案并非易事。HomeBank&nbsp;正是这样一个项目,它不仅提供了强大的功能,还拥有一个活跃的社区,不断推动其发展和完善。 开源免费:HomeBank 是一个完全开源的项目,用户可以自由地使用、修改和分发。用户友好的界面:提供直观的图形用户界面,使得非技术用户也能轻松上手。数据导入支持:支持从 Quicken、Microsoft Money