今天给大家伙儿分享一下我最近折腾的 `shellexecute` 实践记录,一开始我对这个东西也是一头雾水,各种查资料,然后一点点摸索,总算是搞明白。
先说说我遇到的需求,就是想在程序里直接调用系统默认的程序打开指定的文件,比如说,我想用默认的图片查看器打开一张图片,或者用默认的浏览器打开一个网页。一开始我想到的是 `WinExec()`,但是发现它只能打开 `.exe` 文件,其他的就不行。
然后我就开始找别的办法,这才发现 `ShellExecute` 这个好东西。简单来说,它就是个“万能钥匙”, 啥都能打开,文本文件、图片、网页,甚至可以直接运行程序。
接下来就是具体的操作。我先是查 `ShellExecute` 的函数原型,发现要传好几个参数,当时有点懵。
c++
HINSTANCE ShellExecute(
HWND hwnd,
LPCSTR lpOperation,
LPCSTR lpFile,
LPCSTR lpParameters,
LPCSTR lpDirectory,
INT nShowCmd
`hwnd`:这个就是父窗口的句柄,一般传 `NULL` 就行。
`lpOperation`:这个是要执行的操作,比如 "open" 就是打开,"print" 就是打印,如果传 `NULL`,系统会自动判断。
`lpFile`:这个就是要打开的文件或者网址的路径。
`lpParameters`:这个是传递给程序的参数,如果打开的是文件,一般传 `NULL`。
`lpDirectory`:这个是程序的默认目录,一般传 `NULL`。
`nShowCmd`:这个是程序的显示方式,比如 `SW_SHOWNORMAL` 是正常显示,`SW_MAXIMIZE` 是最大化显示。
搞清楚这些参数之后,我就开始写代码。
c++
#include
int main() {
// 打开一个图片文件
ShellExecute(NULL, "open", "C:\\*", NULL, NULL, SW_SHOWNORMAL);
// 打开一个网页
ShellExecute(NULL, "open", "*", NULL, NULL, SW_SHOWNORMAL);
// 运行一个程序
ShellExecute(NULL, "open", "C:\\Windows\\System32\\*", NULL, NULL, SW_SHOWNORMAL);
return 0;
这段代码很简单,就是分别用 `ShellExecute` 打开一个图片文件、一个网页和一个计算器程序。
编译运行之后,发现都能正常打开,心里那个高兴!
在实际使用中,肯定会遇到各种各样的问题。比如,文件路径不对,程序找不到,等等。这个时候就要仔细检查代码,看看是不是哪里写错。
我还试用 `ShellExecute` 来打开目录,发现也很好用。
c++
ShellExecute(NULL, "explore", "C:\\", NULL, NULL, SW_SHOWNORMAL); //打开C盘
`ShellExecute` 是个非常实用的函数,可以让我们很方便地在程序里调用系统默认的程序来打开各种文件。学会它,感觉自己又掌握一项新的技能,以后遇到类似的需求就不用愁。
今天的分享就到这里,希望对大家有所帮助。下次再见!