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

neco 2005-07-01 07:54:09
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下面就不出来。
...全文
292 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhoujiamurong 2006-04-18
  • 打赏
  • 举报
回复
mark
gooyan 2005-07-03
  • 打赏
  • 举报
回复
CString lpszHelper;
lpszHelper = 路径;
shellExecute(NULL, _T("open"),lpszHelper,NULL,NULL,SW_SHOW);
neco 2005-07-03
  • 打赏
  • 举报
回复
我运行exe的都没问题就是运行chm就不行啊。路径没问题的。我在用前还access了下的。
goodboyws 2005-07-02
  • 打赏
  • 举报
回复
shellexecute可以,我试过的
pizi198219 2005-07-02
  • 打赏
  • 举报
回复
WinExec ("\"cmd.exe\" /c hh.exe c:\\help.chm", SW_SHOWNORMAL);
一般用于系统目录,但是shellexecute();应该没问题阿。。我的也是xp的操作系统
flinming 2005-07-02
  • 打赏
  • 举报
回复
ShellExecute(this->m_hWnd,"open","calc.exe","","", SW_SHOW );

ShellExecute(this->m_hWnd,"open","notepad.exe",
"c:\\MyLog.log","",SW_SHOW );


不能打开,看看路径是否正确
y_cc 2005-07-02
  • 打赏
  • 举报
回复
绝对可以的

ShellExecute(NULL,NULL,_T("eye.chm"),NULL,_T(Patch), SW_MAXIMIZE);

Patch为地址
idAnts 2005-07-02
  • 打赏
  • 举报
回复
楼主是服务程序!
idAnts 2005-07-01
  • 打赏
  • 举报
回复
介个方法可以:
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");

//////测试没问题//////////////
goodhavens 2005-07-01
  • 打赏
  • 举报
回复
我上次用也是用winhelp成功实现的。
howyougen 2005-07-01
  • 打赏
  • 举报
回复
winhelp呢?
neco 2005-07-01
  • 打赏
  • 举报
回复
上面的几种办法都不出来。
VC++常用函数一应俱全 内容举例: 在状态栏中添加时间 1)在String Table中添加New String,在此定义为ID_INDICATOR_CLOCK, 将其Caption设为00:00:00(由于状态栏根据Caption确定时间窗格的缺 省宽度,使用此值将为时间的显示预留空间)。注 2)在MainFrm.cpp中indicators声明处添加ID_INDICATOR_CLOCK,代 码如下:   这一步中ID_INDICATOR_CLOCK的插入位置将影响时间窗格在状态栏中 的显示位置。   3)安装定时器:在MainFrm.cpp中OnCreate函数处添加代码如下:   int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)   { ……   SetTimer(1,1000,NULL);//安装定时器,并将其时间间隔设为1000毫秒   return 0;   }   4)编写时间处理函数:利用ClassWizard为CMainFrame类加入WM_TIMER 的消息处理函数OnTimer,并添加代码如下:   void CMainFrame::OnTimer(UINT nIDEvent)   {// TODO: Add your message handler code here and/or call default   CTime time;   time=CTime::GetCurrentTime();//得到当前时间   CString s=time.Format(″%H:%M:%S″);//转换时间格式,这里格式一定要大写   m_wndStatusBar.SetPaneText(m_wndStatusBar.CommandToIn-   dex(ID_INDICATOR_CLOCK),s); //显示时钟   CFrameWnd::OnTimer(nIDEvent);}   5)销毁定时器:利用ClassWizard为CMainFrame类加入WM_CLOSE的消息处理   函数OnClose,并添加代码如下:   void CMainFrame::OnClose()   {// TODO: Add your message handler code here and/or call default   KillTimer(1);//销毁定时器

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧