再问有关外部程序的调用?

billfranck 2004-07-29 03:55:36
HANDLE hProcess;
STARTUPINFO startInfo;
ZeroMemory(&startInfo,sizeof(startInfo));
startInfo.cb = sizeof(STARTUPINFO);
startInfo.lpReserved = NULL;
startInfo.lpTitle = NULL;
startInfo.lpDesktop = NULL;
startInfo.dwX = 0;
startInfo.dwY = 0;
startInfo.dwXSize = 0;
startInfo.dwYSize = 0;
startInfo.dwXCountChars = 0;
startInfo.dwYCountChars = 0;
startInfo.dwFlags = STARTF_USESTDHANDLES;
startInfo.wShowWindow = 0;
startInfo.lpReserved2 = NULL;
startInfo.cbReserved2 = 0;
startInfo.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
startInfo.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
startInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE);
int soundserve;
PROCESS_INFORMATION procinfoserve;
ZeroMemory(&procinfoserve,sizeof(procinfoserve));
soundserve=CreateProcess(NULL,"..\..\CCIR\EPDM.EXE",NULL,NULL,TRUE,0,NULL,NULL,&startInfo,&procinfoserve);
if (soundserve>0)
{
DWORD dPids = procinfoserve.dwProcessId;
hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dPids);
}
方法一(上)


方法二(下)



//ShellExecute(NULL, "open", "你的文件,带路径", NULL, NULL, SW_NORMAL);
//ShellExecute("open", NULL, "EPDM.EXE", NULL, "..\..\CCIR", SW_SHOWNORMAL);
*/
ShellExecute(NULL, "open", "D:\PROGRAM\CCIR\EPDM.EXE", NULL, NULL, SW_SHOWNORMAL);

}


为什么都没有反应??

...全文
143 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
solares1 2004-09-07
  • 打赏
  • 举报
回复
关注
constantine 2004-07-30
  • 打赏
  • 举报
回复
hserveProcess =OpenProcess(PROCESS_ALL_ACCESS,FALSE,dPids);
改为hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,dPids);
定义全局变量HANDLE hProcess;//这样你才能关闭啊

if(FileExists("..\\..\\CCIR\\EPDM.EXE"))
ShowMessage("EPDM.EXE");
CreateProcess(.........)
看看,是不是真的有你的文件存在,我这里一直都没有问题,我还是认为你的路进可能有问题
1和2我这样写都没有看过,3不用理了,你没有用到hProcess变量而已,如果你有

if(hProcess>0)
TerminateProcess(hserveProcess,0);

这样关闭你打开的exe文件的话就不会出现了,可以在onclose中写


constantine 2004-07-30
  • 打赏
  • 举报
回复
STARTUPINFO startInfo;
ZeroMemory(&startInfo,sizeof(startInfo));
startInfo.cb = sizeof(STARTUPINFO);
startInfo.lpReserved = NULL;
startInfo.lpTitle = NULL;
startInfo.lpDesktop = NULL;
startInfo.dwX = 0;
startInfo.dwY = 0;
startInfo.dwXSize = 0;
startInfo.dwYSize = 0;
startInfo.dwXCountChars = 0;
startInfo.dwYCountChars = 0;
startInfo.dwFlags = STARTF_USESTDHANDLES;
startInfo.wShowWindow = 0;
startInfo.lpReserved2 = NULL;
startInfo.cbReserved2 = 0;
startInfo.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
startInfo.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
startInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE);
int soundserve;
PROCESS_INFORMATION procinfoserve;
ZeroMemory(&procinfoserve,sizeof(procinfoserve));
soundserve=CreateProcess(NULL,"..\\..\\CCIR\\EPDM.EXE",NULL,NULL,TRUE,0,NULL,NULL,&startInfo,&procinfoserve);
if (soundserve>0)
{
DWORD dPids = procinfoserve.dwProcessId;
hserveProcess =OpenProcess(PROCESS_ALL_ACCESS,FALSE,dPids);
}

试试看,
billfranck 2004-07-29
  • 打赏
  • 举报
回复
HANDLE hProcess;
STARTUPINFO startInfo;
ZeroMemory(&startInfo,sizeof(startInfo));
startInfo.cb = sizeof(STARTUPINFO);
startInfo.lpReserved = NULL;
startInfo.lpTitle = NULL;
startInfo.lpDesktop = NULL;
startInfo.dwX = 0;
startInfo.dwY = 0;
startInfo.dwXSize = 0;
startInfo.dwYSize = 0;
startInfo.dwXCountChars = 0;
startInfo.dwYCountChars = 0;
startInfo.dwFlags = STARTF_USESTDHANDLES;
startInfo.wShowWindow = 0;
startInfo.lpReserved2 = NULL;
startInfo.cbReserved2 = 0;
startInfo.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
startInfo.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
startInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE);
int soundserve;
PROCESS_INFORMATION procinfoserve;
ZeroMemory(&procinfoserve,sizeof(procinfoserve));
soundserve=CreateProcess(NULL,"..\\..\\CCIR\\EPDM.EXE","EPDM",NULL,TRUE,0,NULL,"..\\..\\CCIR",&startInfo,&procinfoserve);

if (soundserve>0)
{
DWORD dPids = procinfoserve.dwProcessId;
hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dPids);
}



提示:1. cannot convert 'char *' to '_SECURITY_ATTRIBUTES"
2.type mismatch in parameter 'lpProcessAttibutes' (wanted '_SECURITY_ATTRIBUTES *' got 'char *')
3.'hProcess' is assigned a value that is never used


请指教
billfranck 2004-07-29
  • 打赏
  • 举报
回复
AnsiString PathName;
PathName = ExtractFileDir(Application->ExeName); ///得到本可执行文件 的路径
PathName = PathName + "..\..\CCIR\EPDM.EXE";
HINSTANCE hInst = ShellExecute(GetDesktopWindow(),
"open",
PathName.c_str(),
NULL,
NULL,
SW_SHOWNORMAL);
if (hInst <= (HINSTANCE)32)
Application->MessageBox("程序打开失败!","错误",MB_OK);


为什么总是“程序打开失败”
我的可执行文件就是EPDM.EXE 路径也对为什么还是动行不起来
3996906 2004-07-29
  • 打赏
  • 举报
回复
我靠
怎么就没注意他写的单“\”呢?
Maconel 2004-07-29
  • 打赏
  • 举报
回复
很正常啊,就是路径里应该是
“D:\\PROGRAM\\CCIR\\EPDM.EXE”
要用\\来代替\
wenyongjie 2004-07-29
  • 打赏
  • 举报
回复
String addpath=ExtractFilePath(Application->ExeName)+filename;//打开指定路径的文件名
ShellExecute(Application->Handle,"Open",addpath.c_str(),NULL,NULL,SW_SHOW);
constantine 2004-07-29
  • 打赏
  • 举报
回复
怎么看都是我的代码,哈哈!我这里可以,你那里有问题??

有个可能,你的路进有错误,你加多一句判断,看看你要打开的文件在不在
铖邑 2004-07-29
  • 打赏
  • 举报
回复
CreateProcess(NULL,"..\..\CCIR\EPDM.EXE","EPDM",NULL,TRUE,0,NULL,"..\..\CCIR",&startInfo,&procinfoserve);
int64 2004-07-29
  • 打赏
  • 举报
回复
Look:

AnsiString PathName;
PathName = ExtractFileDir(Application->ExeName); ///得到本可执行文件 的路径
PathName = PathName + "\\FFSL.exe";
HINSTANCE hInst = ShellExecute(GetDesktopWindow(),
"open",
PathName.c_str(),
NULL,
NULL,
SW_SHOWNORMAL);
if (hInst <= (HINSTANCE)32)
Application->MessageBox("程序打开失败!","错误",MB_OK);
3996906 2004-07-29
  • 打赏
  • 举报
回复
代码实在看不出来问题~~~~~~~~~~~
Lonelywolf1899 2004-07-29
  • 打赏
  • 举报
回复
方法2比较简单,"D:\PROGRAM\CCIR\EPDM.EXE", 换成你要执行的程序的路径就好了。
也可以用WinExec(),参数和ShellExecute差不多的。
billfranck 2004-07-29
  • 打赏
  • 举报
回复
以上方法都是热心人提供可我太笨了,不知怎么用?
嵌入我的程序都没有反应?
不知为何请指教!

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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