CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

想弹出chm文件,用什么函数?ShellExecute 没有反应

楼主neco(neco)2005-07-01 19:54:09 在 VC/MFC / 基础类 提问

HtmlHelp   (this->m_hWnd,   "c:\\Help.chm",   HH_DISPLAY_TOPIC,   0);  
  ShellExecute   (this->m_hWnd,   "open",   "c:\\Help.chm",   NULL,   NULL,   SW_SHOWNORMAL);  
  WinExec   ("\"cmd.exe\"   /c   hh.exe   c:\\help.chm",   SW_SHOWNORMAL);  
  ShellExecute   (this->m_hWnd,   "open",   "hh.exe",   "c:\\help.chm",   NULL,   SW_SHOWNORMAL);  
   
  为什么我的help就是不弹出来啊。我的程序是个可以桌面交换的服务程序。  
  在win2k下help可以出来,但xp下面就不出来。  
  问题点数:100、回复次数:12Top

1 楼neco(neco)回复于 2005-07-01 19:54:36 得分 0

上面的几种办法都不出来。Top

2 楼howyougen(夫孝,德之本也,教之所由生也)回复于 2005-07-01 21:11:34 得分 0

winhelp呢?Top

3 楼goodhavens(黑门)回复于 2005-07-01 21:19:10 得分 0

我上次用也是用winhelp成功实现的。Top

4 楼idAnts(此广告位招租)回复于 2005-07-01 23:46:44 得分 100

介个方法可以:  
  BOOL   GetTokenByName(HANDLE   &hToken,LPSTR   lpName)  
  {  
  if(!lpName)  
  {  
  return   FALSE;  
  }  
  HANDLE                   hProcessSnap   =   NULL;    
          BOOL                       bRet             =   FALSE;    
          PROCESSENTRY32   pe32             =   {0};    
   
          hProcessSnap   =   CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,   0);  
          if   (hProcessSnap   ==   INVALID_HANDLE_VALUE)    
                  return   (FALSE);    
   
          pe32.dwSize   =   sizeof(PROCESSENTRY32);    
   
          if   (Process32First(hProcessSnap,   &pe32))    
          {  
                  do    
                  {  
  if(!strcmp(_strupr(pe32.szExeFile),_strupr(lpName)))  
  {  
  HANDLE   hProcess   =   OpenProcess(PROCESS_QUERY_INFORMATION,  
  FALSE,pe32.th32ProcessID);  
  bRet   =   OpenProcessToken(hProcess,TOKEN_ALL_ACCESS,&hToken);  
  CloseHandle   (hProcessSnap);    
  return   (bRet);  
  }  
                  }    
                  while   (Process32Next(hProcessSnap,   &pe32));    
                  bRet   =   TRUE;    
          }    
          else    
                  bRet   =   FALSE;  
   
          CloseHandle   (hProcessSnap);    
          return   (bRet);  
  }  
   
  BOOL   RunProcessByCommandLine(LPCSTR   lpImage)  
  {  
  if(!lpImage)  
  {  
  return   FALSE;  
  }  
  HANDLE   hToken;  
  if(!GetTokenByName(hToken,"EXPLORER.EXE"))  
  {  
  return   FALSE;  
  }  
  STARTUPINFO   si;  
  PROCESS_INFORMATION   pi;  
   
  ZeroMemory(&si,   sizeof(STARTUPINFO));  
  si.cb=   sizeof(STARTUPINFO);  
  si.lpDesktop   =   TEXT("winsta0\\default");  
   
  BOOL   bResult   =   CreateProcessAsUser(hToken,NULL,lpImage,NULL,NULL,  
  FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi);  
  CloseHandle(hToken);  
  if(bResult)  
  {  
  OutputDebugString("CreateProcessAsUser   ok!\r\n");  
  }  
  else  
  {  
  OutputDebugString("CreateProcessAsUser   false!\r\n");  
  }  
  return   bResult;  
  }  
   
  /////////////调用/////////////////  
  RunProcessByCommandLine("C:\\windows\\hh.exe   D:\\Doc\\insideatl.chm");  
   
  //////测试没问题//////////////Top

5 楼pizi198219(笨鸟先飞)回复于 2005-07-02 00:12:24 得分 0

WinExec   ("\"cmd.exe\"   /c   hh.exe   c:\\help.chm",   SW_SHOWNORMAL);  
  一般用于系统目录,但是shellexecute();应该没问题阿。。我的也是xp的操作系统Top

6 楼goodboyws(深夜不眠者(VCMVP))回复于 2005-07-02 00:27:28 得分 0

shellexecute可以,我试过的Top

7 楼idAnts(此广告位招租)回复于 2005-07-02 01:37:53 得分 0

楼主是服务程序!Top

8 楼y_cc(允许的空间, 时间内)回复于 2005-07-02 11:09:33 得分 0

绝对可以的  
   
  ShellExecute(NULL,NULL,_T("eye.chm"),NULL,_T(Patch),   SW_MAXIMIZE);  
   
  Patch为地址Top

9 楼flinming(flinming)回复于 2005-07-02 11:35:45 得分 0

ShellExecute(this->m_hWnd,"open","calc.exe","","",   SW_SHOW   );  
  或  
  ShellExecute(this->m_hWnd,"open","notepad.exe",  
          "c:\\MyLog.log","",SW_SHOW   );  
   
   
  不能打开,看看路径是否正确Top

10 楼neco(neco)回复于 2005-07-03 00:45:50 得分 0

我运行exe的都没问题就是运行chm就不行啊。路径没问题的。我在用前还access了下的。Top

11 楼gooyan(超级替补)回复于 2005-07-03 00:50:40 得分 0

CString   lpszHelper;  
  lpszHelper   =   路径;  
  shellExecute(NULL,   _T("open"),lpszHelper,NULL,NULL,SW_SHOW);Top

12 楼zhoujiamurong(有分俺就不要,俺要知识)回复于 2006-04-18 14:09:58 得分 0

markTop

相关问题

  • 关于ShellExecute ()函数;
  • 有什么函数可以弹出CDRom?
  • 弹出窗口函数的问题
  • 怎么用ShellExecute函数?
  • 如何用shellexecute函数
  • 如何获得这样的一个HANDLE:用API函数SHELLEXECUTE打开一个文件时,所弹出来的第一个窗口的HANDLE。
  • 弹出“选择数据源”窗口是什么函数?
  • 获取弹出子窗体句柄的API函数?
  • window.showModalDialog窗口,用javascript函数,总是给我弹出新窗口
  • messagedlg函数弹出的提示框问题

关键词

  • null
  • shellexecute
  • hprocesssnap
  • chm
  • bret
  • lpszhelper
  • sw
  • htoken
  • shownormal
  • lpname

得分解答快速导航

  • 帖主:neco
  • idAnts

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo