本文主要是介绍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软件卸载代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!