想弹出chm文件,用什么函数?ShellExecute 没有反应
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




