没办法只有再给100分啦,请大家给我一个可行的方案:)
新问题:
请问,怎样在windows下执行一条dos命令,使ms-dos窗口不出现
比如要执行这条怎么办?
masm fliename.asm;>result.txt
songhtao(三十年孤独) 回复于2001-6-10 16:25:00
用ShellExecute
加上SW_HIDE参数。
可是:!!!!!!!!!!!!!!!!!!!
flyingsouth(飞呀) 回复于2001-6-10 16:33:00
我用了ShellExecute但是不能执行??为什么
请给个详细的实例,救救我吧:(
41 个解决方案
#1
你是如何写的?
#2
用CreateProcess函数
将STARTUPINFO结构的.dwFlags设为1,这样就 不出现了
将STARTUPINFO结构的.dwFlags设为1,这样就 不出现了
#3
其实我就是想得到这条dos命令的执行输出结果,并把结果在windows下的窗体中显示(比如在listbox,或memo,执行时又不能有那个黑窗口闪过
我的最笨的而且有问题的方法是:我用system("masm filename.asm;>result.txt),得到结果保存在result.txt中,然后从result.txt中读到listbox,memo中。
有没有直接就可以的到dos命令执行输出结果并显示在windows窗口中的函数
或有其它方法可以实现吗?
请给位给个详细的实例可以吗?
我的最笨的而且有问题的方法是:我用system("masm filename.asm;>result.txt),得到结果保存在result.txt中,然后从result.txt中读到listbox,memo中。
有没有直接就可以的到dos命令执行输出结果并显示在windows窗口中的函数
或有其它方法可以实现吗?
请给位给个详细的实例可以吗?
#4
用创建管道的方法可以实现
#5
cdws222(赵卫)的方法最好!!不过较难!!
用winexec("命令",SW_HIDE);
用winexec("命令",SW_HIDE);
#6
大家试试ShellExecute(NULL, NULL, "ping www.csdn.net > aaa", NULL, NULL, SW_SHOW);
不能成功执行ping命令并重定位输出。
有什么办法可以解决这个问题呀?
用system可以成功,但不能隐藏dos窗口。
用winexec命令不进行重定向可以成功,但一旦重定向就失败。
不能成功执行ping命令并重定位输出。
有什么办法可以解决这个问题呀?
用system可以成功,但不能隐藏dos窗口。
用winexec命令不进行重定向可以成功,但一旦重定向就失败。
#7
救命,实例,实例!!!!
#8
不要用你自己想的这样的方法
直接用管道,可以获得另外一个进程的输出结果
xixi~~我想你的分应该拿来了:)
假设我先创建这么一个程序,名字叫test,生成test.exe,放在d盘下
#include <stdio.h>
#include <iostream.h>
#pragma hdrstop
#include <condefs.h>
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
int i;
for(i=0;i<10;i++)
{
printf("Logging %d\n",i);
cout<<"Output Line:"<<i<<endl;
cerr<<"Error Line:"<<i<<endl;
}
return 0;
}
//实际上什么也没有做,只是有输出
直接用管道,可以获得另外一个进程的输出结果
xixi~~我想你的分应该拿来了:)
假设我先创建这么一个程序,名字叫test,生成test.exe,放在d盘下
#include <stdio.h>
#include <iostream.h>
#pragma hdrstop
#include <condefs.h>
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
int i;
for(i=0;i<10;i++)
{
printf("Logging %d\n",i);
cout<<"Output Line:"<<i<<endl;
cerr<<"Error Line:"<<i<<endl;
}
return 0;
}
//实际上什么也没有做,只是有输出
#9
然后,我们这样做:)
(等一下,我在写代码,嘿嘿~~)
(等一下,我在写代码,嘿嘿~~)
#10
我等呢...期待中...
#11
TMD!!!!!!该死的BCB出问题了!!!!!!!!!!!!!!!!!!!
这段代码暂时没有办法验证,但是应该就是这样子了^_^
void __fastcall TForm1::Button1Click(TObject *Sender)
{
STARTUPINFO myStartup;
PROCESS_INFORMATION myInfo;
HANDLE hRead,hWrite,hTmp;
bool bReturn;
char readBuf[100];
DWORD bytesRead=0;
//创建匿名管道
if(CreatePipe(&hRead,&hWrite,NULL,0))//系统默认缓冲大小
ShowMessage("Pipe Created OK ");
else
ShowMessage("Pipe Creation Error");
//获取当前进程的标准输出
hTmp=GetStdHandle(STD_OUTPUT_HANDLE);
//把标准输出设置给管道
SetStdHandle(STD_OUTPUT_HANDLE,hWrite);
GetStartupInfo(&myStartup);
bReturn = CreateProcess("d:\\test.exe",NULL,NULL,NULL,true,
CREATE_NEW_CONSOLE,
NULL,NULL,&myStartup,&myInfo);
SetStdHandle(STD_OUTPUT_HANDLE,hTmp);
if(bReturn)
ShowMessage("Create Process OK");
else
ShowMessage("CreateProcess error:"+IntToStr(GetLastError()));
CloseHandle(hWrite);
Memo1->Text = "";
while(ReadFile(hRead,readBuf,100,&bytesRead,NULL)){
readBuf[bytesRead] = '\0';
Memo1->Text = Memo1->Text+ "Read " + IntToStr(bytesRead)
+ "bytes from pipe" + readBuf;
}
if(GetLastError()==ERROR_BROKEN_PIPE)
ShowMessage("Pipe closed by child process");
else
ShowMessage("Read error" + IntToStr(GetLastError()));
}
//---------------------------------------------------------------------------
这段代码暂时没有办法验证,但是应该就是这样子了^_^
void __fastcall TForm1::Button1Click(TObject *Sender)
{
STARTUPINFO myStartup;
PROCESS_INFORMATION myInfo;
HANDLE hRead,hWrite,hTmp;
bool bReturn;
char readBuf[100];
DWORD bytesRead=0;
//创建匿名管道
if(CreatePipe(&hRead,&hWrite,NULL,0))//系统默认缓冲大小
ShowMessage("Pipe Created OK ");
else
ShowMessage("Pipe Creation Error");
//获取当前进程的标准输出
hTmp=GetStdHandle(STD_OUTPUT_HANDLE);
//把标准输出设置给管道
SetStdHandle(STD_OUTPUT_HANDLE,hWrite);
GetStartupInfo(&myStartup);
bReturn = CreateProcess("d:\\test.exe",NULL,NULL,NULL,true,
CREATE_NEW_CONSOLE,
NULL,NULL,&myStartup,&myInfo);
SetStdHandle(STD_OUTPUT_HANDLE,hTmp);
if(bReturn)
ShowMessage("Create Process OK");
else
ShowMessage("CreateProcess error:"+IntToStr(GetLastError()));
CloseHandle(hWrite);
Memo1->Text = "";
while(ReadFile(hRead,readBuf,100,&bytesRead,NULL)){
readBuf[bytesRead] = '\0';
Memo1->Text = Memo1->Text+ "Read " + IntToStr(bytesRead)
+ "bytes from pipe" + readBuf;
}
if(GetLastError()==ERROR_BROKEN_PIPE)
ShowMessage("Pipe closed by child process");
else
ShowMessage("Read error" + IntToStr(GetLastError()));
}
//---------------------------------------------------------------------------
#12
不知道有没有问题,但是这样的解决方法一定可以!
我要吃饭去了,xixi~~~你慢慢看吧~~
我要吃饭去了,xixi~~~你慢慢看吧~~
#13
我才吃饭回来,呵呵rh(有花须酌酒)大概还才赏花酌酒吧!我现在开始看了
#14
使用匿名管道。
唉,喝了顿酒回来,丢了大堆的分哪。
唉,喝了顿酒回来,丢了大堆的分哪。
#15
rh(有花须酌酒),运行时还是有哪个窗口:(
#16
用CreateProcess函数
将STARTUPINFO结构的.dwFlags设为1,这样就不出现了
我的代码里是这样填充这个结构的
GetStartupInfo(&myStartup);
要隐藏的话,你要这样加:
GetStartupInfo(&myStartup);
myStartup.wShowWindow = SW_HIDE;//加这句!!!
bReturn = CreateProcess("d:\\test.exe",NULL,NULL,NULL,true,
CREATE_NEW_CONSOLE,
NULL,NULL,&myStartup,&myInfo);
将STARTUPINFO结构的.dwFlags设为1,这样就不出现了
我的代码里是这样填充这个结构的
GetStartupInfo(&myStartup);
要隐藏的话,你要这样加:
GetStartupInfo(&myStartup);
myStartup.wShowWindow = SW_HIDE;//加这句!!!
bReturn = CreateProcess("d:\\test.exe",NULL,NULL,NULL,true,
CREATE_NEW_CONSOLE,
NULL,NULL,&myStartup,&myInfo);
#17
嘿嘿~~拷贝失误,上面的话应该是:
用CreateProcess函数
将STARTUPINFO结构的.dwFlags设为1,这样就不出现了
有误,应该是设置wShowWindow
用CreateProcess函数
将STARTUPINFO结构的.dwFlags设为1,这样就不出现了
有误,应该是设置wShowWindow
#18
能得到结果吗
#19
还是的不到结果,运行完程序会停止响应:(
#20
黑窗是没有啦,但没结果
#21
把STARTUPINFO结构的.wShowWindow=SW_HIDE,这样就不出现了
#22
STARTUPINFO si;
SECURITY_ATTRIBUTES sa;
HANDLE hReadPipe;
HANDLE hWritePipe;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = true;
CreatePipe(&hReadPipe,&hWritePipe,&sa,2500000);
memset(&si,0,sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.hStdOutput = hWritePipe;
CreateProcess ( ... )
// read output from DOS app here
while (!done)
{
memset(buffer,0,4000);
PeekNamedPipe(hReadPipe,&buffer,sizeof(buffer),&bytes_read,&avail,&unread);
if (bytes_read)
{
ReadFile(hReadPipe,&buffer,sizeof(buffer),&bytes_read,NULL);
}
if (bytes_read < 4000)
done = true;
}
CloseHandle(hReadPipe);
CloseHandle(hWritePipe);
#23
ShellExecute(0,0,"command.com /c masm ",0,0,SW_HIDE);
SW_HIDE就不会出现窗口了
command.com /c 保证执行结束后进程能消失
SW_HIDE就不会出现窗口了
command.com /c 保证执行结束后进程能消失
#24
关注
#25
我也在想这样的问题,
#26
BCB(:))窗口没有了,但是不能的到运行结果的信息
#27
to songhtao(三十年孤独)
ShellExecute(Handle,NULl,"command ","/c ping HostName >aa.txt",NULL,SW_HIDE;
1. 该函数的命令和参数是分开写的
2. command /c 会让命令执行完结束
ShellExecute(Handle,NULl,"command ","/c ping HostName >aa.txt",NULL,SW_HIDE;
1. 该函数的命令和参数是分开写的
2. command /c 会让命令执行完结束
#28
rh(有花须酌酒)的方法还是没有程序执行结果信息
#29
我把ShellExecute的参数方式跟WinExec搞混了
LIUTAO2002(小刘)的对!
LIUTAO2002(小刘)的对!
#30
#include "stdafx.h"
#include <direct.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <process.h>
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
char command[]="a dos command";
WinExec(command,0);
}
#include <direct.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <process.h>
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
char command[]="a dos command";
WinExec(command,0);
}
#31
我现在正在重新安装BCB
慢点要去上课
等我放学回来,看看
使用管道,绝对是正解
我的程序不能得到结果
只是说明我水平不够
与“管道”的能力无关^_^
慢点要去上课
等我放学回来,看看
使用管道,绝对是正解
我的程序不能得到结果
只是说明我水平不够
与“管道”的能力无关^_^
#32
greentrees(真稀奇) 的也不行:(
#33
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
char command[]="c:\\mybat.bat";
WinExec(command,0);
在C盘根目录中存一个批文件mybat.bat
内容是:
masm fliename.asm;>result.txt
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
char command[]="c:\\mybat.bat";
WinExec(command,0);
在C盘根目录中存一个批文件mybat.bat
内容是:
masm fliename.asm;>result.txt
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
#34
救命啊
#35
哈哈哈哈~~~~给分来!!!!!!
以下代码,win2000下验证通过!
xixihahaheiheihehe~~~~~
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char readBuf[5000];
DWORD bytesRead=0;
HANDLE hReadPipe,hWritePipe;
PROCESS_INFORMATION pi;
LPPROCESS_INFORMATION lppi;
SECURITY_ATTRIBUTES lsa; //安全属性
STARTUPINFO myStartup;
lsa.nLength = sizeof(SECURITY_ATTRIBUTES);
lsa.lpSecurityDescriptor = NULL;
lsa.bInheritHandle = true;
lppi = π
//创建管道
if(CreatePipe(&hReadPipe,&hWritePipe,&lsa,0))
ShowMessage("Pipe Created OK .\n");
else{
ShowMessage("Pipe Creation Error");
return;
}
memset(&myStartup,0,sizeof(STARTUPINFO));
myStartup.cb = sizeof(STARTUPINFO);
myStartup.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
myStartup.wShowWindow = SW_HIDE;
myStartup.hStdOutput = hWritePipe;
if(!CreateProcess("d:\\test.exe",NULL,NULL,NULL,true,CREATE_NEW_CONSOLE,
NULL,NULL,&myStartup,&pi)){
ShowMessage("CreateProcess error:"+IntToStr(GetLastError()));
return;
}
while(true){
bytesRead = 0;
if(!PeekNamedPipe(hReadPipe,readBuf,1,&bytesRead,NULL,NULL))
break;
if(bytesRead){
if(!ReadFile(hReadPipe,readBuf,4096,&bytesRead,NULL))
break;
readBuf[bytesRead] = 0;
Memo1->Text = Memo1->Text+ "Read " + IntToStr(bytesRead)
+ "bytes from pipe" + readBuf;
}else{
if(WaitForSingleObject(pi.hProcess,0)==WAIT_OBJECT_0)
break;
Sleep(256);
}
}
CloseHandle(hReadPipe);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
CloseHandle(hWritePipe);
}
//---------------------------------------------------------------------------
以下代码,win2000下验证通过!
xixihahaheiheihehe~~~~~
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char readBuf[5000];
DWORD bytesRead=0;
HANDLE hReadPipe,hWritePipe;
PROCESS_INFORMATION pi;
LPPROCESS_INFORMATION lppi;
SECURITY_ATTRIBUTES lsa; //安全属性
STARTUPINFO myStartup;
lsa.nLength = sizeof(SECURITY_ATTRIBUTES);
lsa.lpSecurityDescriptor = NULL;
lsa.bInheritHandle = true;
lppi = π
//创建管道
if(CreatePipe(&hReadPipe,&hWritePipe,&lsa,0))
ShowMessage("Pipe Created OK .\n");
else{
ShowMessage("Pipe Creation Error");
return;
}
memset(&myStartup,0,sizeof(STARTUPINFO));
myStartup.cb = sizeof(STARTUPINFO);
myStartup.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
myStartup.wShowWindow = SW_HIDE;
myStartup.hStdOutput = hWritePipe;
if(!CreateProcess("d:\\test.exe",NULL,NULL,NULL,true,CREATE_NEW_CONSOLE,
NULL,NULL,&myStartup,&pi)){
ShowMessage("CreateProcess error:"+IntToStr(GetLastError()));
return;
}
while(true){
bytesRead = 0;
if(!PeekNamedPipe(hReadPipe,readBuf,1,&bytesRead,NULL,NULL))
break;
if(bytesRead){
if(!ReadFile(hReadPipe,readBuf,4096,&bytesRead,NULL))
break;
readBuf[bytesRead] = 0;
Memo1->Text = Memo1->Text+ "Read " + IntToStr(bytesRead)
+ "bytes from pipe" + readBuf;
}else{
if(WaitForSingleObject(pi.hProcess,0)==WAIT_OBJECT_0)
break;
Sleep(256);
}
}
CloseHandle(hReadPipe);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
CloseHandle(hWritePipe);
}
//---------------------------------------------------------------------------
#36
我的怎么不行?我就是这样用的好多年了
#37
是什么DOS命令?
#38
谢谢大家的回复!
#39
你的落后啦:)xixi~~~
#40
谢谢LIUTAO2002(小刘)终于成功了
#41
g
#1
你是如何写的?
#2
用CreateProcess函数
将STARTUPINFO结构的.dwFlags设为1,这样就 不出现了
将STARTUPINFO结构的.dwFlags设为1,这样就 不出现了
#3
其实我就是想得到这条dos命令的执行输出结果,并把结果在windows下的窗体中显示(比如在listbox,或memo,执行时又不能有那个黑窗口闪过
我的最笨的而且有问题的方法是:我用system("masm filename.asm;>result.txt),得到结果保存在result.txt中,然后从result.txt中读到listbox,memo中。
有没有直接就可以的到dos命令执行输出结果并显示在windows窗口中的函数
或有其它方法可以实现吗?
请给位给个详细的实例可以吗?
我的最笨的而且有问题的方法是:我用system("masm filename.asm;>result.txt),得到结果保存在result.txt中,然后从result.txt中读到listbox,memo中。
有没有直接就可以的到dos命令执行输出结果并显示在windows窗口中的函数
或有其它方法可以实现吗?
请给位给个详细的实例可以吗?
#4
用创建管道的方法可以实现
#5
cdws222(赵卫)的方法最好!!不过较难!!
用winexec("命令",SW_HIDE);
用winexec("命令",SW_HIDE);
#6
大家试试ShellExecute(NULL, NULL, "ping www.csdn.net > aaa", NULL, NULL, SW_SHOW);
不能成功执行ping命令并重定位输出。
有什么办法可以解决这个问题呀?
用system可以成功,但不能隐藏dos窗口。
用winexec命令不进行重定向可以成功,但一旦重定向就失败。
不能成功执行ping命令并重定位输出。
有什么办法可以解决这个问题呀?
用system可以成功,但不能隐藏dos窗口。
用winexec命令不进行重定向可以成功,但一旦重定向就失败。
#7
救命,实例,实例!!!!
#8
不要用你自己想的这样的方法
直接用管道,可以获得另外一个进程的输出结果
xixi~~我想你的分应该拿来了:)
假设我先创建这么一个程序,名字叫test,生成test.exe,放在d盘下
#include <stdio.h>
#include <iostream.h>
#pragma hdrstop
#include <condefs.h>
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
int i;
for(i=0;i<10;i++)
{
printf("Logging %d\n",i);
cout<<"Output Line:"<<i<<endl;
cerr<<"Error Line:"<<i<<endl;
}
return 0;
}
//实际上什么也没有做,只是有输出
直接用管道,可以获得另外一个进程的输出结果
xixi~~我想你的分应该拿来了:)
假设我先创建这么一个程序,名字叫test,生成test.exe,放在d盘下
#include <stdio.h>
#include <iostream.h>
#pragma hdrstop
#include <condefs.h>
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
int i;
for(i=0;i<10;i++)
{
printf("Logging %d\n",i);
cout<<"Output Line:"<<i<<endl;
cerr<<"Error Line:"<<i<<endl;
}
return 0;
}
//实际上什么也没有做,只是有输出
#9
然后,我们这样做:)
(等一下,我在写代码,嘿嘿~~)
(等一下,我在写代码,嘿嘿~~)
#10
我等呢...期待中...
#11
TMD!!!!!!该死的BCB出问题了!!!!!!!!!!!!!!!!!!!
这段代码暂时没有办法验证,但是应该就是这样子了^_^
void __fastcall TForm1::Button1Click(TObject *Sender)
{
STARTUPINFO myStartup;
PROCESS_INFORMATION myInfo;
HANDLE hRead,hWrite,hTmp;
bool bReturn;
char readBuf[100];
DWORD bytesRead=0;
//创建匿名管道
if(CreatePipe(&hRead,&hWrite,NULL,0))//系统默认缓冲大小
ShowMessage("Pipe Created OK ");
else
ShowMessage("Pipe Creation Error");
//获取当前进程的标准输出
hTmp=GetStdHandle(STD_OUTPUT_HANDLE);
//把标准输出设置给管道
SetStdHandle(STD_OUTPUT_HANDLE,hWrite);
GetStartupInfo(&myStartup);
bReturn = CreateProcess("d:\\test.exe",NULL,NULL,NULL,true,
CREATE_NEW_CONSOLE,
NULL,NULL,&myStartup,&myInfo);
SetStdHandle(STD_OUTPUT_HANDLE,hTmp);
if(bReturn)
ShowMessage("Create Process OK");
else
ShowMessage("CreateProcess error:"+IntToStr(GetLastError()));
CloseHandle(hWrite);
Memo1->Text = "";
while(ReadFile(hRead,readBuf,100,&bytesRead,NULL)){
readBuf[bytesRead] = '\0';
Memo1->Text = Memo1->Text+ "Read " + IntToStr(bytesRead)
+ "bytes from pipe" + readBuf;
}
if(GetLastError()==ERROR_BROKEN_PIPE)
ShowMessage("Pipe closed by child process");
else
ShowMessage("Read error" + IntToStr(GetLastError()));
}
//---------------------------------------------------------------------------
这段代码暂时没有办法验证,但是应该就是这样子了^_^
void __fastcall TForm1::Button1Click(TObject *Sender)
{
STARTUPINFO myStartup;
PROCESS_INFORMATION myInfo;
HANDLE hRead,hWrite,hTmp;
bool bReturn;
char readBuf[100];
DWORD bytesRead=0;
//创建匿名管道
if(CreatePipe(&hRead,&hWrite,NULL,0))//系统默认缓冲大小
ShowMessage("Pipe Created OK ");
else
ShowMessage("Pipe Creation Error");
//获取当前进程的标准输出
hTmp=GetStdHandle(STD_OUTPUT_HANDLE);
//把标准输出设置给管道
SetStdHandle(STD_OUTPUT_HANDLE,hWrite);
GetStartupInfo(&myStartup);
bReturn = CreateProcess("d:\\test.exe",NULL,NULL,NULL,true,
CREATE_NEW_CONSOLE,
NULL,NULL,&myStartup,&myInfo);
SetStdHandle(STD_OUTPUT_HANDLE,hTmp);
if(bReturn)
ShowMessage("Create Process OK");
else
ShowMessage("CreateProcess error:"+IntToStr(GetLastError()));
CloseHandle(hWrite);
Memo1->Text = "";
while(ReadFile(hRead,readBuf,100,&bytesRead,NULL)){
readBuf[bytesRead] = '\0';
Memo1->Text = Memo1->Text+ "Read " + IntToStr(bytesRead)
+ "bytes from pipe" + readBuf;
}
if(GetLastError()==ERROR_BROKEN_PIPE)
ShowMessage("Pipe closed by child process");
else
ShowMessage("Read error" + IntToStr(GetLastError()));
}
//---------------------------------------------------------------------------
#12
不知道有没有问题,但是这样的解决方法一定可以!
我要吃饭去了,xixi~~~你慢慢看吧~~
我要吃饭去了,xixi~~~你慢慢看吧~~
#13
我才吃饭回来,呵呵rh(有花须酌酒)大概还才赏花酌酒吧!我现在开始看了
#14
使用匿名管道。
唉,喝了顿酒回来,丢了大堆的分哪。
唉,喝了顿酒回来,丢了大堆的分哪。
#15
rh(有花须酌酒),运行时还是有哪个窗口:(
#16
用CreateProcess函数
将STARTUPINFO结构的.dwFlags设为1,这样就不出现了
我的代码里是这样填充这个结构的
GetStartupInfo(&myStartup);
要隐藏的话,你要这样加:
GetStartupInfo(&myStartup);
myStartup.wShowWindow = SW_HIDE;//加这句!!!
bReturn = CreateProcess("d:\\test.exe",NULL,NULL,NULL,true,
CREATE_NEW_CONSOLE,
NULL,NULL,&myStartup,&myInfo);
将STARTUPINFO结构的.dwFlags设为1,这样就不出现了
我的代码里是这样填充这个结构的
GetStartupInfo(&myStartup);
要隐藏的话,你要这样加:
GetStartupInfo(&myStartup);
myStartup.wShowWindow = SW_HIDE;//加这句!!!
bReturn = CreateProcess("d:\\test.exe",NULL,NULL,NULL,true,
CREATE_NEW_CONSOLE,
NULL,NULL,&myStartup,&myInfo);
#17
嘿嘿~~拷贝失误,上面的话应该是:
用CreateProcess函数
将STARTUPINFO结构的.dwFlags设为1,这样就不出现了
有误,应该是设置wShowWindow
用CreateProcess函数
将STARTUPINFO结构的.dwFlags设为1,这样就不出现了
有误,应该是设置wShowWindow
#18
能得到结果吗
#19
还是的不到结果,运行完程序会停止响应:(
#20
黑窗是没有啦,但没结果
#21
把STARTUPINFO结构的.wShowWindow=SW_HIDE,这样就不出现了
#22
STARTUPINFO si;
SECURITY_ATTRIBUTES sa;
HANDLE hReadPipe;
HANDLE hWritePipe;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = true;
CreatePipe(&hReadPipe,&hWritePipe,&sa,2500000);
memset(&si,0,sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.hStdOutput = hWritePipe;
CreateProcess ( ... )
// read output from DOS app here
while (!done)
{
memset(buffer,0,4000);
PeekNamedPipe(hReadPipe,&buffer,sizeof(buffer),&bytes_read,&avail,&unread);
if (bytes_read)
{
ReadFile(hReadPipe,&buffer,sizeof(buffer),&bytes_read,NULL);
}
if (bytes_read < 4000)
done = true;
}
CloseHandle(hReadPipe);
CloseHandle(hWritePipe);
#23
ShellExecute(0,0,"command.com /c masm ",0,0,SW_HIDE);
SW_HIDE就不会出现窗口了
command.com /c 保证执行结束后进程能消失
SW_HIDE就不会出现窗口了
command.com /c 保证执行结束后进程能消失
#24
关注
#25
我也在想这样的问题,
#26
BCB(:))窗口没有了,但是不能的到运行结果的信息
#27
to songhtao(三十年孤独)
ShellExecute(Handle,NULl,"command ","/c ping HostName >aa.txt",NULL,SW_HIDE;
1. 该函数的命令和参数是分开写的
2. command /c 会让命令执行完结束
ShellExecute(Handle,NULl,"command ","/c ping HostName >aa.txt",NULL,SW_HIDE;
1. 该函数的命令和参数是分开写的
2. command /c 会让命令执行完结束
#28
rh(有花须酌酒)的方法还是没有程序执行结果信息
#29
我把ShellExecute的参数方式跟WinExec搞混了
LIUTAO2002(小刘)的对!
LIUTAO2002(小刘)的对!
#30
#include "stdafx.h"
#include <direct.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <process.h>
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
char command[]="a dos command";
WinExec(command,0);
}
#include <direct.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <process.h>
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
char command[]="a dos command";
WinExec(command,0);
}
#31
我现在正在重新安装BCB
慢点要去上课
等我放学回来,看看
使用管道,绝对是正解
我的程序不能得到结果
只是说明我水平不够
与“管道”的能力无关^_^
慢点要去上课
等我放学回来,看看
使用管道,绝对是正解
我的程序不能得到结果
只是说明我水平不够
与“管道”的能力无关^_^
#32
greentrees(真稀奇) 的也不行:(
#33
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
char command[]="c:\\mybat.bat";
WinExec(command,0);
在C盘根目录中存一个批文件mybat.bat
内容是:
masm fliename.asm;>result.txt
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
char command[]="c:\\mybat.bat";
WinExec(command,0);
在C盘根目录中存一个批文件mybat.bat
内容是:
masm fliename.asm;>result.txt
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
这样就可以啦!加分加分加分啊!
#34
救命啊
#35
哈哈哈哈~~~~给分来!!!!!!
以下代码,win2000下验证通过!
xixihahaheiheihehe~~~~~
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char readBuf[5000];
DWORD bytesRead=0;
HANDLE hReadPipe,hWritePipe;
PROCESS_INFORMATION pi;
LPPROCESS_INFORMATION lppi;
SECURITY_ATTRIBUTES lsa; //安全属性
STARTUPINFO myStartup;
lsa.nLength = sizeof(SECURITY_ATTRIBUTES);
lsa.lpSecurityDescriptor = NULL;
lsa.bInheritHandle = true;
lppi = π
//创建管道
if(CreatePipe(&hReadPipe,&hWritePipe,&lsa,0))
ShowMessage("Pipe Created OK .\n");
else{
ShowMessage("Pipe Creation Error");
return;
}
memset(&myStartup,0,sizeof(STARTUPINFO));
myStartup.cb = sizeof(STARTUPINFO);
myStartup.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
myStartup.wShowWindow = SW_HIDE;
myStartup.hStdOutput = hWritePipe;
if(!CreateProcess("d:\\test.exe",NULL,NULL,NULL,true,CREATE_NEW_CONSOLE,
NULL,NULL,&myStartup,&pi)){
ShowMessage("CreateProcess error:"+IntToStr(GetLastError()));
return;
}
while(true){
bytesRead = 0;
if(!PeekNamedPipe(hReadPipe,readBuf,1,&bytesRead,NULL,NULL))
break;
if(bytesRead){
if(!ReadFile(hReadPipe,readBuf,4096,&bytesRead,NULL))
break;
readBuf[bytesRead] = 0;
Memo1->Text = Memo1->Text+ "Read " + IntToStr(bytesRead)
+ "bytes from pipe" + readBuf;
}else{
if(WaitForSingleObject(pi.hProcess,0)==WAIT_OBJECT_0)
break;
Sleep(256);
}
}
CloseHandle(hReadPipe);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
CloseHandle(hWritePipe);
}
//---------------------------------------------------------------------------
以下代码,win2000下验证通过!
xixihahaheiheihehe~~~~~
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char readBuf[5000];
DWORD bytesRead=0;
HANDLE hReadPipe,hWritePipe;
PROCESS_INFORMATION pi;
LPPROCESS_INFORMATION lppi;
SECURITY_ATTRIBUTES lsa; //安全属性
STARTUPINFO myStartup;
lsa.nLength = sizeof(SECURITY_ATTRIBUTES);
lsa.lpSecurityDescriptor = NULL;
lsa.bInheritHandle = true;
lppi = π
//创建管道
if(CreatePipe(&hReadPipe,&hWritePipe,&lsa,0))
ShowMessage("Pipe Created OK .\n");
else{
ShowMessage("Pipe Creation Error");
return;
}
memset(&myStartup,0,sizeof(STARTUPINFO));
myStartup.cb = sizeof(STARTUPINFO);
myStartup.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
myStartup.wShowWindow = SW_HIDE;
myStartup.hStdOutput = hWritePipe;
if(!CreateProcess("d:\\test.exe",NULL,NULL,NULL,true,CREATE_NEW_CONSOLE,
NULL,NULL,&myStartup,&pi)){
ShowMessage("CreateProcess error:"+IntToStr(GetLastError()));
return;
}
while(true){
bytesRead = 0;
if(!PeekNamedPipe(hReadPipe,readBuf,1,&bytesRead,NULL,NULL))
break;
if(bytesRead){
if(!ReadFile(hReadPipe,readBuf,4096,&bytesRead,NULL))
break;
readBuf[bytesRead] = 0;
Memo1->Text = Memo1->Text+ "Read " + IntToStr(bytesRead)
+ "bytes from pipe" + readBuf;
}else{
if(WaitForSingleObject(pi.hProcess,0)==WAIT_OBJECT_0)
break;
Sleep(256);
}
}
CloseHandle(hReadPipe);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
CloseHandle(hWritePipe);
}
//---------------------------------------------------------------------------
#36
我的怎么不行?我就是这样用的好多年了
#37
是什么DOS命令?
#38
谢谢大家的回复!
#39
你的落后啦:)xixi~~~
#40
谢谢LIUTAO2002(小刘)终于成功了
#41
g