现在的位置: 首页 > 综合 > 正文

打开文件的方法&SHELLEXECUTEINFO 结构

2013年08月24日 ⁄ 综合 ⁄ 共 3265字 ⁄ 字号 评论关闭

 打开文件的方法

 void   CMainFrame::ExecFile(CString   &strFile)  
  {  
  SHELLEXECUTEINFO   ShExecInfo   =   {0};  
   
  ShExecInfo.cbSize   =   sizeof(SHELLEXECUTEINFO);  
  ShExecInfo.fMask   =   SEE_MASK_NOCLOSEPROCESS;  
  ShExecInfo.hwnd   =   NULL;  
  ShExecInfo.lpVerb   =   NULL;  
  ShExecInfo.lpFile   =   (LPCSTR)strFile;  
  ShExecInfo.lpParameters   =   "";  
  ShExecInfo.lpDirectory   =   NULL;  
  ShExecInfo.nShow   =   SW_SHOW;  
  ShExecInfo.hInstApp   =   NULL;  
   
  ShellExecuteEx(&ShExecInfo);  
  }

以下是SHELLEXECUTEINFO 结构

http://kaweh.candy.blog.163.com/blog/static/36818772200827352870/

懒得整理了,见链接

SHELLEXECUTEINFO 结构 ShellExecuteEx 的参数。 在C++中其结构为 typedef struct _SHELLEXECUTEINFO {DWORD cbSize;ULONG fMask;HWND hwnd;LPCTSTR lpVerb;LPCTSTR lpFile;LPCTSTR lpParameters;LPCTSTR lpDirectory;int nShow;HINSTANCE hInstApp;LPVOID lpIDList;LPCTSTR lpClass;HKEY hkeyClass;DWORD dwHotKey;union {HANDLE hIcon;HANDLE hMonitor;} DUMMYUNIONNAME;HANDLE hProcess; } SHELLEXECUTEINFO, *LPSHELLEXECUTEINFO; 在C#中其结构为 public struct SHELLEXECUTEINFO //用于ShellExecuteEx{public int cbSize;public int fMask;public int hwnd;public string lpVerb; public string lpFile;public string lpParameters;public string lpDirectory;public int nShow;public int hInstApp;public int lpIDList;public string lpClass;public int hkeyClass;public int dwHotKey;public int hIcon;public int hProcess;} 参数详解: cbSize存储该结构的长度,以字节为单位。 fMask一个标志数组,用来设置其他成员的有效性SEE_MASK_CLASSKEY         0x3SEE_MASK_CLASSNAME         0x1SEE_MASK_CONNECTNETDRV     0x80SEE_MASK_DOENVSUBST         0x200SEE_MASK_FLAG_DDEWAIT     0x100SEE_MASK_FLAG_LOG_USAGE     0x4000000SEE_MASK_FLAG_NO_UI         0x400SEE_MASK_HMONITOR         0x200000SEE_MASK_HOTKEY         0x20SEE_MASK_ICON             0x10SEE_MASK_IDLIST         0x4SEE_MASK_INVOKEIDLIST     0xCSEE_MASK_NOASYNC         0x100000SEE_MASK_NOCLOSEPROCESS     0x40SEE_MASK_NOZONECHECKS     0x800000SEE_MASK_NO_CONSOLE         0x8000SEE_MASK_UNICODE         0x100000SEE_MASK_FILEANDURL         0x4000000 hwnd调用这个ShellExecuteEx的窗口句柄 lpVerb设定这个ShellExecuteEx的动作,包括:edit 打开编辑器编辑文档,如果 lpFile 不是一个文档,则这个函数会失败explore 以 lpFile 为路径打开资源管理器find 从指定目录开始搜索open根据 lpFile 打开对应文件,该文件可以为可执行文件、文档或者文件夹print根据 lpFile 打印文档,若lpFile不是一个文档则该函数会失败 properties 显示文件或文件夹的属性 lpFile以/0 结尾的字符串,指出 lpVerb 的操作对象的路径,被系统支持的操作包括文本的 open 、 print等,其中print要求必须有一个已经注册的打印机,而其他种类的文档会通过系统关联进行查询执行。若要设置一个空的namespace,则需要设置fMask的值为see_mask_invokeidlist。注意:若see_mask_invokeidlist已设置,则可以藉由lpFile或者lpIDList确定item的系统路径或者PIDL lpParameters运行/打开程序的参数,如果打开的是一个文档,则该项无效 lpDirectory指明工作目录的名字,成员没有说明,则默认为当前目录 nShow说明ShellExecuteEx打开的程序将以什么形式出现 hInstApp如果函数运行成功,该项的值将大于32,否则会是下列错误对应的值SE_ERR_FNF 没有找到文件 SE_ERR_PNF没有找到路径SE_ERR_ACCESSDENIED 拒绝访问SE_ERR_OOM 内存不足SE_ERR_DLLNOTFOUND 没有找到动态链接库SE_ERR_SHARE 不能操作一个以打开的文件SE_ERR_ASSOCINCOMPLETE 文件关联信息不完整SE_ERR_DDETIMEOUT DDE操作超时SE_ERR_DDEFAIL DDE操作失败SE_ERR_DDEBUSY DDE繁忙SE_ERR_NOASSOC 没有找到文件关联 lpIDList一个itemidlist结构的地址,用来存储成员的特别标识符,当fMask不包括see_mask_idlist或see_mask_invokeidlist时该项被忽略 lpClass用以指明文件类别的名字或GUID,当fMask不包括see_mask_classname时该项被忽略 hkeyClass获得已在系统注册的文件类型的Handle,当fMask不包括see_mask_classkey时该项被忽略 dwHotKey程序的热键关联,低位存储虚拟关键码(Key Code),高位存储修改标志位(HOTKEYF_),修改标志为(modifier flags)的详细列表请看wm_sethotkey消息的描述,当fmask不包括see_mask_hotkey时该项被忽略 DUMMYUNIONNAME hIcon 取得对应文件类型的图标的Handle,当fMask不包括SEE_MASK_ICON时该项被忽略 hMonitor 将文档显示在显示器上的Handle,当fMask不包括SEE_MASK_HMONITOR时该项被忽略 hProcess用于进行return操作的成员,若fMask不设为see_mask_nocloseprocess则该项值为null,即使fMask设为see_mask_nocloseprocess,若没有进程启动,该项值仍为null。即没有新的进程启动,则该项值一只为null

抱歉!评论已关闭.