我是靠谱客的博主 落寞长颈鹿,最近开发中收集的这篇文章主要介绍Windows环境下调用其他Application的方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

今天测试了几个在程序调用其它应用程序的函数

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

基本操作代码:

 

ShellExecute(NULL,_T( " open " ),(LPCTSTR)m_path.GetBuffer(),NULL,NULL,SW_SHOW);
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的方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(82)

评论列表共有 0 条评论

立即
投稿
返回
顶部