使用CreateProcess运行程序 + 使用命令行对html文件进行打印
来源:互联网 发布:青稞的网络意思 编辑:程序博客网 时间:2024/06/07 00:55
平时写程序时经常会遇到要执行一个外部程序实例或者某个命令行的情况,这可以使用CreateProcess来实现。
由于我们程序中通常只是将外部程序或者一个命令行运行起来,并不需要进行后续的控制,于是我将这个操作封装成了一个方便快速操作的函数CreateProcessQuick,一般情况下,应用程序名称不需要指定,我们只需指定后面的命令行参数。如果是运行notepad程序,则只需要指定lpCommandLine为"notepad"。
近期所做的一个功能是在程序中指定打印一个html文件,路径已知。使用processexplorer查看打印文件对话框的命令行为
"rundll32.exe" C:\Windows\system32\mshtml.dll,PrintHTML "C:\Users\cashey\Desktop\basicshow.tem.html"
注:即"rundll32.exe" C:\Windows\system32\mshtml.dll,PrintHTML "文件完整路径"
#include <windows.h>BOOL CreateProcessQuick(LPCTSTR lpApplicationName, LPTSTR lpCommandLine = NULL){ STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); ZeroMemory(&pi, sizeof(pi)); BOOL bRet = CreateProcess(lpApplicationName, lpCommandLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); return bRet; }int main(){ LPTSTR lpCommandLine = TEXT("\"rundll32.exe\" C:\\Windows\\system32\\mshtml.dll,PrintHTML \"C:\\Users\\cashey\\Desktop\\basicshow.tem.html\""); CreateProcessQuick(NULL, lpCommandLine); return 0;}
注意CreateProcessQuick代码中在调用CreateProcess之后调用了再次CloseHandle。这是为了防止内核对象泄漏,因为我们创建了这个进程之后并不需要在本进程中对其进行控制,所以线程和进程句柄都可以关闭掉。注意,这里CloseHandle只是关闭掉了句柄,并不会终止掉我们创建的进程,因为进程是进行“引用计数”的,只要进程句柄引用计数没有降为0,则不会将进程的内核对象清理掉。(参考《Windows核心编程》)
- 使用CreateProcess运行程序 + 使用命令行对html文件进行打印
- 使用CreateProcess执行命令行
- 使用CreateProcess函数运行其他程序
- 使用命令行对java程序的编译运行和打包
- 使用 CreateProcess 执行程序
- 使用git,在命令行窗口对文件进行编辑
- 使用SOOT命令行对APK文件进行解码及包装
- 使用命令行对apk文件进行二次签名
- C# C/S程序使用HTML文件作为打印模板
- 使用Runtime去运行命令行 CreateProcess error=193, %1 不是有效的 Win32 应用程序。
- 使用JNative对条码打印机进行打印
- 使用命令行生成签名文件并用其对apk文件进行签名
- 使用命令行运行程序的方式
- 如何使用命令行来运行程序
- 如何使用命令行编译运行java程序
- 使用命令行编译和运行java程序
- 使用记事本+命令行 编辑运行.java文件
- mysql如何使用命令行运行sql文件
- iBATIS与Spring整合
- How to encrypt a string/stream with bouncycastle pgp without starting with a file
- 通过web页面上的链接调用本地软件
- Ubuntu 安装 Qt 开发环境
- js 中的alert title 在 iOS 中如何消失
- 使用CreateProcess运行程序 + 使用命令行对html文件进行打印
- c语言中realloc()函数解析
- ov2656
- Android ListView分类/分组效果 - 第二种实现方式
- android 休眠唤醒
- MFC的CFile
- 黑马程序员--高新技术(2)
- redis持久化机制
- mac