概述
今天测试了几个在程序调用其它应用程序的函数
system(const char*_Command)
HINSTANCE ShellExecute(
HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile, LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nShowCmd );
UINT WinExec( LPCSTR lpCmdLine, UINT uCmdShow );
以及BOOL CreateProcess(
LPCTSTR lpApplicationName,
LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);
system函数MS不能支持中文,这个应该是Shell命令的特点,在不支持中文的DOS下应该就是不能支持中文,而且有一个问题,就是会出现一个DOS框,一直在程序执行过程中
WinExec不会出现Dos框,但是因为WinExec的第一个参数要求是LPCSTR,一个8位的ANSI字符串指针,所以如果使用Char* 是不会有什么问题的,但是在MFC下面使用CString,特别是是Unicode编码的情况下就一定要先转换,我采用的转化方法是使用
WideCharToMultiByte(CP_ACP,
WC_COMPOSITECHECK,
m_path.GetBuffer(),//wchat_t *
-1,//以0X00结尾
path,//目标字符串
1024,
NULL,NULL);//自己参看MSDN
然后再使用WinExec
在ShellExecute不会有这么麻烦,它直接支持LPCTSTR字符串,默认的就是Unicode编码格式,很方便,同样也不会有Dos框出现
最后CreateProcess(...),这个函数,哈哈,真是功能强大
基本用法CreateProcess(NULL,m_path.GetBuffer(),NULL,NULL,false,0,NULL,NULL,&si,&pi)
//其中si是STARTUPINFO,pi是PROCESS_INFORMATION类型的2个变量,因为他们的存在所以操作被调用的程序变得很容易
同样使用的是LPWSTR,可以直接使用CString::GetBuffer(),也是Unicode编码格式
当CreateProcess成功调用后,pi
typedef struct _PROCESS_INFORMATION {
HANDLE hProcess
HANDLE hThread;
DWORD dwProcessId;
DWORD dwThreadId; } PROCESS_INFORMATION;
里面就记录下了该程序的运行状态,我们可以使用诸如TerminateProcess等等的函数来使用这些参数,还可以使用WaitForSingleObject来阻塞父进程,一直到子进程退出
最后如果不进行任何操作可以使用CloseHandle来释放pi中的HANDLE
基本操作代码:
WideCharToMultiByte(CP_ACP,WC_COMPOSITECHECK,m_path.GetBuffer(), - 1 ,path, 1024 ,NULL,NULL);
LPCSTR s = (LPCSTR)path;
int i = WinExec(s,SW_SHOW);
system(path);
if (CreateProcess(NULL,m_path.GetBuffer(),NULL,NULL, false , 0 ,NULL,NULL, & si, & pi))
... {
WaitForSingleObject( pi.hProcess, INFINITE );
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
UINT res = 0 ;
TerminateProcess(pi.hProcess,res);
最后
以上就是落寞长颈鹿为你收集整理的Windows环境下调用其他Application的方法的全部内容,希望文章能够帮你解决Windows环境下调用其他Application的方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复