1、ShellExecute(handle,"open","notepad.exe","c:\MyLog.log","",SW_SHOW );
2、ShellExecute(handle,"open","wordpad.exe","c:\MyLog.log","",SW_SHOW );
3、ShellExecute(handle,"open","c:\My.exe","c:\MyLog.log","",SW_SHOW );
在win2000 server中
执行命令(1)时,通过
执行命令(2)时,出现错误提示“找不到文件”XP下可以通过
执行命令(3)时,不能通过,也没有什么 提示
又特别地
第3句改为 ShellExecute(handle,"open","c:\My.exe","c:\My Log.log","",SW_SHOW );
“My Love.mp3”分开有空格怎么办???
来自:bluebridge, 时间:2003-4-26 2:48:00, ID:1803811
其实不用exe文件参数,windows会自动找到log文件关联的执行程序的。去掉试试。
来自:tt520, 时间:2003-4-26 2:54:00, ID:1803813
我执行这行代码的目的就是要避开“windows”系统的关联,让文件用我指定的程序打开,可是
XP下都可以通过,Windows 2000下(2)(3)都有问题。
还有就是文件名中间有空格怎么办呢,加“”也不行呀
来自:thx1180, 时间:2003-4-26 15:37:00, ID:1805201
关于ShellExecute函数:
在ShellAPI单元中,ShellExecute函数的定义为:
function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,
Directory: PChar; ShowCmd: Integer): HINST; stdcall;
作用:打开或打印一个指定的文件;
参数说明:
hWnd hwnd, //指向父窗口的句柄;
Operation: PChar, //指向一个null结尾的串以指明要执行的操作;
可以是"open","print","explore",NULL;
FileName: PChar, //指向文件名或文件夹名串;
Parameters: PChar, //指向一个null结尾的串以指明可执行文件的参数;
如果FileName参数为文档,此参数应为NULL;
Directory: PChar, //指向一个null结尾的串以指明默认目录;
ShowCmd: Integer //文件在打开时是否显示;
如果FileName参数为文档,此参数应为0;
来自:tt520, 时间:2003-4-28 9:30:00, ID:1808655
to thx1180 and 所有的高手:
1. ShellExecute(handle, 'open', 'notepad.exe', 'c:\My love.log', '', SW_SHOW);
此种情况下,的确都能通过
2. ShellExecute(handle, 'open', 'wordpad.exe', 'c:\My love.log', '', SW_SHOW);
此种情况下,运行出错,提示为:“无法找到该文件,请验证给出的文件名或路径是否正确”
如果我上述命令改为:
ShellExecute(handle, 'open', 'winamp.exe', 'c:\My love.mp3', '', SW_SHOW);
winamp的播放列表里出现:
My.mp3
love.mp3
即除了记事本以外,其它不支持文件名中有空格,怎么办,怎么办,怎么办???
经过试验发现,
FileName: PChar, //指向文件名或文件夹名串,中间可以包含空格;
Parameters: PChar, //指向一个null结尾的串以指明可执行文件的参数;
如果FileName参数为文档,此参数应为NULL;
无论是路径还是文件名,中间都不能包含空格(现
在只发现“记事本”可以例外)
如何才能让此处也可以包含空格呢??
来自:thx1180, 时间:2003-4-28 12:10:00, ID:1809403
以下调用方式可以通过:
ShellExecute(handle, 'open', 'wordpad.exe', '"c:\My love.log"', '', SW_SHOW);
ShellExecute(handle, 'open', 'C:\Program Files\WINAMP\Winamp.exe', '"D:\MEDIAS\da dao.mp3"', '', SW_SHOW);
即将Parameters部分的参数用双引号括起来。
其实这个问题的出现和应用程序如何处理命令行参数有关,
如果用ParamStr(1)获取第一个命令行参数,一般情况下是以空格
分隔多个参数,如果一个参数中本身含有空格,应该用双引号将这个
参数括起来。
来自:xlongbuilder, 时间:2003-7-21 11:52:00, ID:2046194
那要是这样怎么办?
cmd.exe
执行 attrib path +s
其中path是变量
怎么做!!
急!!!
来自:xlongbuilder, 时间:2003-7-21 14:07:00, ID:2046606
问题解决
d :='c:/4';
path:='/c attrib "'+d+'" +s';
ShellExecute(handle, 'open','cmd.exe', pchar(path),'', SW_SHOW);
我的问题来自于这样一个应用:
我要在程序中打开各种格式的文件,如打开.ppt、.pdf、.txt、.doc等等,但程序并不知道用什么应用程序打开,所以只能用ShellExecuteEx()这个SHELL函数,但这个函数却不能得到打开.pdf等文件格式的应用程序的进、线程ID,所以不能控制该应用程序。怎么办?
|
|
回复人: Delver(老农) ( ) 信誉:100 |
2002-06-11 21:40:49Z |
得分:0 |
|
|
| ? |
SHELLEXECUTEINFO的成员hProcess就是新创建的进程的句柄
|
| Top |
|
|
回复人: Delver(老农) ( ) 信誉:100 |
2002-06-11 21:42:21Z |
得分:0 |
|
|
| ? |
SHELLEXECUTEINFO的成员hProcess就是新创建进程的句柄
|
| Top |
|
|
回复人: jiangsheng(蒋晟.MSMVP2004Jan) ( ) 信誉:243 |
2002-06-11 23:13:27Z |
得分:0 |
|
|
| ? |
/* Compile options needed: none
*/
#include <windows.h>
#include <stdio.h>
void main(void)
{
PROCESS_INFORMATION pInfo;
STARTUPINFO sInfo;
DWORD exitCode;
sInfo.cb = sizeof(STARTUPINFO);
sInfo.lpReserved = NULL;
sInfo.lpReserved2 = NULL;
sInfo.cbReserved2 = 0;
sInfo.lpDesktop = NULL;
sInfo.lpTitle = NULL;
sInfo.dwFlags = 0;
sInfo.dwX = 0;
sInfo.dwY = 0;
sInfo.dwFillAttribute = 0;
sInfo.wShowWindow = SW_SHOW;
if (!CreateProcess(NULL,
"command.com /c dir c:\\*.bat",
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&sInfo,
&pInfo)) {
printf("ERROR: Cannot launch child process\n");
exit(1);
}
// Give the process time to execute and finish
WaitForSingleObject(pInfo.hProcess, 5000L);
if (GetExitCodeProcess(pInfo.hProcess, &exitCode))
{
switch(exitCode)
{
case STILL_ACTIVE: printf("Process is still active\n");
break;
default: printf("Exit code = %d\n", exitCode);
break;
}
}
else {
printf("GetExitCodeProcess() failed\n");
}
}
|
| Top |
|
|
回复人: deadhorse(死马) ( ) 信誉:91 |
2002-06-11 23:25:05Z |
得分:0 |
|
|
| ? |
对拉,不要shellexecute,用createprocess比较好
|
| Top |
|
|
回复人: polarisxu(北极星) ( ) 信誉:99 |
2003-02-10 16:37:44Z |
得分:0 |
|
|
| ? |
SHELLEXECUTEINFO ShExecInfo = {0};
要用下面的设置
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
bRet = ShellExecuteEx(&ShExecInfo);
则hProcess不会是零。
|
| Top |
|
|
回复人: wbj_song(小郎) ( ) 信誉:100 |
2003-02-12 11:20:18Z |
得分:0 |
|
|
| ? |
ZeroMemory(&NameServersei, sizeof(NameServersei));
NameServersei.cbSize = sizeof(NameServersei);
NameServersei.fMask = SEE_MASK_NOCLOSEPROCESS;
NameServersei.hwnd = NULL;
NameServersei.lpVerb = NULL;
NameServersei.lpFile = "文件名";//"1.ppt"
NameServersei.lpParameters ="文件运行参数.没有就为空";
NameServersei.lpDirectory ="文件目录";// "C:\Bin";
NameServersei.nShow = SW_HIDE;
NameServersei.hInstApp = NULL;
ShellExecuteEx(&NameServersei);
//*************************************************
TerminateProcess(NameServersei.hProcess, 0);//放在想结束线程的地方
| |