目录

1、弹出“打开方式->选择程序...”对话框

2、打开Windows照片查看器

3、打开设备管理器窗口

4、打开系统扬声器设备窗口

5、打开系统麦克风设备窗口


C++软件异常排查从入门到精通系列教程(核心精品专栏,订阅量已达8000多个,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/125529931C/C++实战专栏(重点专栏,专栏文章已更新500多篇,订阅量已达6000多个,欢迎订阅,持续更新中...)https://blog.csdn.net/chenlycly/article/details/140824370C++ 软件开发从入门到实战(重点专栏,专栏文章已更新300多篇,欢迎订阅,持续更新中...)https://blog.csdn.net/chenlycly/category_12695902.htmlVC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/124272585C++软件分析工具从入门到精通案例集锦(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/article/details/131405795开源组件及数据库技术(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/category_12458859.html网络编程与网络问题分享(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/category_2276111.html       有时软件运行过程中遇到或检测一些问题时,需要打开Windows系统的一些窗口,以供用户去查看或者去做设置。本文大概地讲述一下如何通过C++代码去打开一些Windows系统中的窗口。

1、弹出“打开方式->选择程序...”对话框

       在一些下载软件中,当目标文件下载完成后,提供“打开文件”和“打开文件所在文件夹”的功能。当用户点击“打开文件”按钮时,会调用ShellExecute去实现文件的打开操作,系统会去找默认的程序去打开该文件。如果系统中没有打开该类型文件的默认程序,则ShellExecute会返回SE_ERR_NOASSOC错误码,如下所示:

strFilePathParam.Format( _T("\"%s\""), strFilePath ); // 加上双引号以防路径中有空格导致ShellExecute参数解析错误,2012/05/18
int nRet = (int)ShellExecute( NULL, _T("open"), strFilePathParam, NULL, NULL, SW_SHOWNORMAL );
if ( SE_ERR_NOASSOC == nRet ) // 没有相关的程序能够打开该文件
{
	// 返回SE_ERR_NOASSOC错误码,表示找不到打开当前文件的关联程序,
	// 此时就需要弹出“打开方式->选择程序...”对话框,让用户自己选
	// 择用哪个程序打开了
}

此时就需要自动弹出“打开方式->选择程序...”对话框,让用户去选择使用哪个程序去打开目标文件,如下:

除了下载软件中有“打开文件”和“打开文件所在文件夹”的功能,在IM软件中,在接收完别人发过来的文件时,也要提供这两个功能。

       我们可以使用如下的代码打开“打开方式->选择程序...”对话框:(调用rundll32.exe程序,传入"shell32, OpenAs_RunDLL  %s"参数

// 打开“打开方式->选择程序...”对话框
CString strCmd;
strCmd.Format( _T("shell32, OpenAs_RunDLL  %s"), strFilePath.GetData() );
ShellExecute( NULL, _T("open"), _T("rundll32.exe"), strCmd, NULL, SW_SHOWNORMAL );

2、打开Windows照片查看器

       当我们使用Windows默认程序打不开某个图片时,可以尝试使用Windows照片查看器去打开图片:

如何通过代码指定用Windows照片查看器去打开图片文件呢?其实很简单,代码如下:(调用rundll32.exe程序,传入"shimgvw.dll imageview_fullscreen %s"参数

	// 使用系统默认的工具打开图片失败
	int nRet = (int)ShellExecute( NULL, _T("open"), strImagePath, NULL, NULL, SW_SHOWNORMAL );
	if ( nRet <= 32 )
	{
		WriteLog( _T("[CRichEditUINotify::ViewPic]启动系统默认图片查看工具失败,尝试启动系统自带的图片查看器来打开!") );

		CString strTemp;
		strTemp.Format( _T("shimgvw.dll imageview_fullscreen %s"), strImagePath );
		ShellExecute( NULL, _T("open"), _T("rundll32.exe"), 
			strTemp, NULL, SW_SHOWNORMAL );
	}

3、打开设备管理器窗口

       当程序中检测到系统中有设备有问题,或者设备的驱动有问题时,可以弹出系统的设备管理器窗口,供用户查看设备管理器窗口如下:

打开设备管理器的代码如下:(通过在命令行窗口cmd.exe中执行命令打开窗口)

WinExec( "cmd.exe /c hdwwiz.cpl",SW_HIDE );

通过调用WinExec去执行,其中SW_HIDE参数,是让cmd.exe命令行窗口不弹出来(掩藏起来)。


       在这里,给大家重点推荐一下我的几个热门畅销专栏,欢迎订阅:(博客主页还有其他专栏,可以去查看)

专栏1:【C++软件异常与异常排查从入门到精通系列教程】该精品技术专栏的订阅量已达到10000多个,专栏中包含大量项目实战分析案例,有很强的实战参考价值,广受好评!专栏文章持续更新中,已经更新到200篇以上!欢迎订阅!)

C++软件调试与异常排查从入门到精通系列文章汇总https://blog.csdn.net/chenlycly/article/details/125529931

本专栏根据多年C++软件异常排查的项目实践,系统地总结了引发C++软件异常的常见原因以及排查C++软件异常的常用思路与方法详细讲述了C++软件的调试方法与手段详细介绍分析C++软件问题的常用分析工具,以图文并茂的方式给出具体的项目问题实战分析实例(详细讲述分析排查过程,很有实战参考价值),带领大家逐步掌握C++软件调试与异常排查的相关技术,适合基础进阶和想做技术提升的相关C++开发人员!

考察一个开发人员的水平,一是看其编码及设计能力,二是要看其软件调试能力!所以软件调试能力(排查软件异常的能力)很重要,必须重视起来!能解决一般人解决不了的问题,既能提升个人能力及价值,也能体现对团队及公司的贡献!

专栏中的文章都是通过项目实战总结出来的,包含大量项目问题实战分析案例,有很强的实战参考价值!专栏文章还在持续更新中,预计文章篇数能更新到200篇以上!

专栏2:【C/C++实战进阶】(该专栏涵盖了C++多方面的内容,是当前重点打造的专栏,订阅量已达8000多个,专栏文章已经更新到500多篇,持续更新中...)

C/C++实战进阶(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/category_11931267.html

以多年的开发实战为基础,总结并讲解一些的C/C++基础与项目实战进阶内容,以图文并茂的方式对相关知识点进行详细地展开与阐述!专栏涉及了C/C++领域多个方面的内容,包括C++基础及编程要点(模版泛型编程、STL容器及算法函数的使用等)、数据结构与算法C++11及以上新特性(开源代码中可能会用到很多新特性(比如WebRTC开源库),日常编码中也会用到部分新特性,面试时也会频繁地涉及到,学习新特性很有必要)、常用C++开源库的介绍与使用(比如SQLite、libcurl、libwebsockets、libevent、jsoncpp/RapidJson、Redis、RabbitMQ、MongoDB、MQTT、ZooKeeper、OpenCV、FFmpeg、SDL、GStreamer、Live555、ReactOS等)、代码分享(调用系统API、使用开源库)、常用编程技术(动态库、多线程、多进程、数据库及网络编程等)、软件UI编程(Win32/duilib/QT/MFC)、C++软件调试技术(引发C++软件异常的常见原因分析与总结、排查C++软件异常的手段与方法、分析C++软件异常的基础知识、使用常用软件分析工具分析C++软件问题、多个项目实战问题分析案例分享等)、设计模式(单例模式、工厂模式、观察者模式、状态模式等)、网络基础知识与网络问题分析进阶内容(实战问题分析实例分享)等。本专栏的内容都是建立在项目实践的基础上,来源于项目实战,服务于项目实战,很有实战参考价值!

专栏3:【分析C++软件问题的实用软件与高效工具实战案例集锦】

C++常用软件分析工具从入门到精通案例集锦汇总(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/article/details/131405795

在C++软件开发与维护的过程中,常用的C++软件辅助分析工具有SPY++、PE工具、Dependency Walker、GDIView、Process Explorer、Process Monitor、API Monitor、Clumsy、Windbg、IDA Pro以及内存泄漏检测工具等,本专栏详细介绍如何使用这些工具去巧妙地分析和解决日常工作中遇到的问题,很有实战参考价值!

专栏4:【VC++常用功能代码封装】

VC++常用功能开发汇总(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/article/details/124272585

将10多年C++开发实践中常用的功能,以高质量的代码展现出来。这些常用的高质量规范代码,可以直接拿到项目中使用,能有效地解决软件开发过程中遇到的问题。

专栏5:【C/C++软件开发从入门到实战】(本专栏涵盖了C++多方面的内容,是当前重点打造的专栏,专栏文章已经更新到300多篇,持续更新中!欢迎订阅!) 

C++ 软件开发从入门到精通(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/category_12695902.html

根据多年C++软件开发实践,详细地总结了C/C++软件开发相关技术实现细节,分享了大量的实战案例,很有实战参考价值。


4、打开系统扬声器设备窗口

      当程序中检测到扬声器设备异常时,可以弹出系统扬声器设备窗口以供用户查看,如下:

打开上述窗口的代码如下:(通过在命令行窗口cmd.exe中执行命令打开窗口)

WinExec( "cmd.exe /c rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,0",SW_HIDE );

        关于窗口相关问题的实战分析案例,可以查看我之前写的多篇基于项目实战的总结文章
C++Win32界面编程中的窗口风格要点总结(附源码)https://blog.csdn.net/chenlycly/article/details/121572701https://blog.csdn.net/chenlycly/article/details/121572701对窗口调用SetParent后改变了窗口的诸多行为和特性说明与总结https://blog.csdn.net/chenlycly/article/details/148627449https://blog.csdn.net/chenlycly/article/details/148627449C++处理Windows窗口的常用API函数及窗口处理经验总结(附源码)https://blog.csdn.net/chenlycly/article/details/139592691https://blog.csdn.net/chenlycly/article/details/139592691C++如何通过代码打开Windows系统中的一些窗口【选择程序对话框 | 照片查看器 | 设备管理器窗口 | 系统扬声器设备窗口 | 系统麦克风设备窗口】(附完整源码)https://blog.csdn.net/chenlycly/article/details/140296394https://blog.csdn.net/chenlycly/article/details/140296394C++两万字总结Windows系统中的Layered分层窗口技术(附源码)https://blog.csdn.net/chenlycly/article/details/120960399https://blog.csdn.net/chenlycly/article/details/120960399【开发实例分享】使用Layered分层窗口实现视频会议中的桌面区域共享(使用分层窗口将部分区域透掉,鼠标可穿透)https://blog.csdn.net/chenlycly/article/details/140733610https://blog.csdn.net/chenlycly/article/details/140733610C++程序调用SetWindowsHookEx全局拦截键盘按键消息和窗口消息的Hook实例分享https://blog.csdn.net/chenlycly/article/details/140636727https://blog.csdn.net/chenlycly/article/details/140636727C++使用SDL开源库中SDL定时器替代Windows窗口定时器消息(附源码)https://blog.csdn.net/chenlycly/article/details/139592979https://blog.csdn.net/chenlycly/article/details/139592979WM_TIMER定时器消息优先级低,可能会被系统丢弃,导致定时任务无法正常执行https://blog.csdn.net/chenlycly/article/details/147922173 https://blog.csdn.net/chenlycly/article/details/147922173%C2%A0


5、打开系统麦克风设备窗口

      当程序中检测到麦克风设备异常时,可以弹出系统麦克风设备窗口以供用户查看,如下:

 打开上述窗口的代码如下:(通过在命令行窗口cmd.exe中执行命令打开窗口,和打开扬声器设备的参数唯一的区别在于最后的索引号:0和1

WinExec( "cmd.exe /c rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,1",SW_HIDE );

其实,麦克风设备列表和扬声器设备列表是在同一个窗口的不同tab页下面的,对应的命令中差异仅仅是0和1的索引值,如果要打开后面两个tab页,使用2和3索引值即可。

Logo

葡萄城是专业的软件开发技术和低代码平台提供商,聚焦软件开发技术,以“赋能开发者”为使命,致力于通过表格控件、低代码和BI等各类软件开发工具和服务

更多推荐