社区
网络及通讯开发
帖子详情
请问:如果我在程序中调用了一个比如说dir的命令会出现一个dos窗口,如何不让出现dos窗口而把信息给传到我程序中的memo控件当中呢
firestars
2003-12-01 03:52:26
rt多谢
...全文
76
12
打赏
收藏
请问:如果我在程序中调用了一个比如说dir的命令会出现一个dos窗口,如何不让出现dos窗口而把信息给传到我程序中的memo控件当中呢
rt多谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
myy
2003-12-02
打赏
举报
回复
启动 Windows 2000 命令解释器一个新的实例
CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]
[[/S] [/C | /K] string]
/C 执行字符串指定的命令然后终断
/K 执行字符串指定的命令但保留
/S 在 /C 或 /K 后修改字符串处理(见下)
/Q 关闭回应
/D 从注册表中停用执行 AutoRun 命令(见下)
/A 使向内部管道或文件命令的输出成为 ANSI
/U 使向内部管道或文件命令的输出成为 Unicode
/T:fg 设置前景/背景颜色(详细信息,请见 COLOR /?)
/E:ON 启用命令扩展(见下)
/E:OFF 停用命令扩展(见下)
/F:ON 启用文件和目录名称完成字符 (见下)
/F:OFF 停用文件和目录名称完成字符(见下)
/V:ON 将 c 作为定界符启动延缓环境变量扩展。如: /V:ON 会
允许 !var! 在执行时允许 !var! 扩展变量 var。var 语法
在输入时扩展变量,这与在一个 FOR 循环内不同。
/V:OFF 停用延缓的环境扩展。
请注意,如果字符串有引号,可以接受用命令分隔符 '&&' 隔开
的多个命令。并且,由于兼容原因,/X 与 /E:ON 相同,/Y 与
/E:OFF 相同,并且 /R 与 /C 相同。忽略任何其它命令选项。
如果指定了 /C 或 /K,命令选项后的命令行其余部分将作为命令行处
理;在这种情况下,会使用下列逻辑处理引号字符("):
1. 如果符合下列所有条件,那么在命令行上的引号字符将被
保留:
- 不带 /S 命令选项
- 整整两个引号字符
- 在两个引号字符之间没有特殊字符,特殊字符为下列中的
一个: <>()@^|
- 在两个引号字符之间有至少一个空白字符
- 在两个引号字符之间有至少一个可执行文件的名称。
2. 否则,老办法是,看第一个字符是否是一个引号字符,如果
是,舍去开头的字符并删除命令行上 的最后一个引号字符,
保留最后一个引号字符之后的文字。
如果 /D 未在命令行上被指定,当 CMD.EXE 开始时,它会寻找
以下 REG_SZ/REG_EXPAND_SZ 注册表变量。如果其中一个或
两个都存在,这两个变量会先被执行。
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun
和/或
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun
命令扩展是按默认值启用的。您也可以使用 /E:OFF,为某一
特定调用而停用扩展。您可以在机器上和/或用户登录会话上
启用或停用 CMD.EXE 所有调用的扩展,这要通过设置使用
REGEDT32.EXE 的注册表中的一个或两个 REG_DWORD 值:
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions
和/或
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\EnableExtensions
到 0x1 或 0x0。 用户特定设置比机器设置有优先权。命令行
命令选项比注册表设置有优先权。
命令行扩展包括对下列命令所做的更改和/或添加:
DEL 或 ERASE
COLOR
CD 或 CHDIR
MD 或 MKDIR
PROMPT
PUSHD
POPD
SET
SETLOCAL
ENDLOCAL
IF
FOR
CALL
SHIFT
GOTO
START (同时包括对外部命令调用所做的更改)
ASSOC
FTYPE
有关详细信息,请键入 HELP 命令名。
延迟变量环境扩展不按默认值启用。您可以用/V:ON或 /V:OFF
命令选项,为 CMD.EXE 的某个调用而启用或停用延迟环境变量扩充。
您可以在机器上和/或用户登录会话上启用或停用 CMD.EXE 所有
调用的完成,这要通过设置使用 REGEDT32.EXE 的注册表中的
一个或两个 REG_DWORD 值:
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion
和/或
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion
到 0x1 或 0x0。 用户特定设置比机器设置有优先权。命令行命令选项
比注册表设置有优先权。
如果延迟环境变量扩充被启用,惊叹号字符可在执行时间,被用来
代替一个环境变量的数值。
文件和目录名完成不按默认值启用。您可以用 /F:ON 或 /F:OFF
命令选项,为 CMD.EXE 的某个调用而启用或停用文件名完成。 您可以
在机器上和/或用户登录会话上启用或停用 CMD.EXE 所有调用的
完成,这要通过设置使用 REGEDT32.EXE 的注册表中的一个或两个
REG_DWORD 值:
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\CompletionChar
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\PathCompletionChar
和/或
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\CompletionChar
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\PathCompletionChar
由一个控制字符的十六进制值作为一个特定参数(例如,0x4 是
Ctrl-D,0x6 是 Ctrl-F)。 用户特定设置优先于机器设置。命令行
命令选项优先于注册表设置。
如果完成是用 /F:ON 命令选项启用的,两个要使用的控制符是: 目录名
字完成用 Ctrl-D, 文件名完成用 Ctrl-F。 要停用注册表中的某个
字符,请用空格 (0x20) 的数值,因为此字符不是控制字符。
如果键入两个控制字符中的一个,完成会被调用。完成功能将
路径字符长带到光标的左边,如果没有通配符,将通配符附加
到左边,并建立相符的路径列表。然后,显示第一个相符的路
径。如果没有相符的路径,则发出嘟嘟声,不影响显示。之后,
重复按同一个控制字符会循环显示相符路径的列表。将 Shift 键
跟控制字符同时按下,会倒着显示列表。如果对该行进行了任
何编辑,并再次按下控制字符,保存的相符路径的列表会被丢弃,
新的会被生成。如果在文件和目录名完成之间命令选项,会发生
同样现象。两个控制字符之间的唯一区别是文件完成字符符合
文件和目录名,而目录完成字符只符合目录名。如果文件完成
被用于内置式目录命令(CD, MD 或 RD),就会使用目录完成。
将引号将相符路径括起来,完成代码可以正确处理含有空格
或其它特殊字符的文件名。同时,如果备份,然后从行内调用
文件完成,完成被调用是位于光标右方的文字会被丢弃。
ccrun.com
2003-12-02
打赏
举报
回复
嘿嘿,跟着pp616又学一招。
penu
2003-12-02
打赏
举报
回复
哈,我从来都是用类似dir>xxx.txt然后读xxx.txt的方法,又简单又好用。
warton
2003-12-02
打赏
举报
回复
嗯,好贴子,记得加入FAQ哦!
pp616
2003-12-01
打赏
举报
回复
哦。学到了。原来是用cmd 的参数/c
TStringList *StrList=new TStringList;
AnsiString strcmd="cmd.exe /c dir";
RunCmd(strcmd,StrList);
这就好了。
叶子哟
2003-12-01
打赏
举报
回复
看看vc写:
*
* 通过管道技术,将dir /?的帮助信息输入到MFC应用程序的一个CEdit控件中。
* VC++6.0 + WinXP 通过
*
* detrox, 2003
*/
void CPipeDlg::OnButton1()
{
SECURITY_ATTRIBUTES sa;
HANDLE hRead,hWrite;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if (!CreatePipe(&hRead,&hWrite,&sa,0))
{
MessageBox("Error On CreatePipe()");
return;
}
STARTUPINFO si;
PROCESS_INFORMATION pi;
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWrite;
si.hStdOutput = hWrite;
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
if (!CreateProcess(NULL,"c:\\windows\\system32\\cmd.exe/c dir /?" ,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))
{
MessageBox("Error on CreateProcess()");
return;
}
CloseHandle(hWrite);
char buffer[4096] = {0};
DWORD bytesRead;
while (true)
{
if (ReadFile(hRead,buffer,4095,&bytesRead,NULL) == NULL)
break;
m_Edit1 += buffer;
UpdateData(false);
Sleep(200);
}
}
pp616
2003-12-01
打赏
举报
回复
那需要一个临时文件啊。要是用管道就不需要用临时文件了。
叶子哟
2003-12-01
打赏
举报
回复
执行: dir >your.txt就行了
结果在your.txt文件中
pp616
2003-12-01
打赏
举报
回复
ms 的内部命令好象不能用CreateProcess来创建啊。
不过dir命令可以用FindFirstFile FindNextFile FindClose来做。
pp616
2003-12-01
打赏
举报
回复
嘻嘻。是我写的哎。
warton
2003-12-01
打赏
举报
回复
好!
对了,像dir这样的命令,运行:dir/cmd dir/cmd dir c:好像都不行?命令行该怎么写?
ccrun.com
2003-12-01
打赏
举报
回复
CBuilder中使用管道技术实例 pp616(原作)
关键字 管道
废话不多说,大家来看代码
bool __fastcall TForm1::RunCmd(AnsiString cmd,TStringList *stringlist)
{
TMemoryStream *memstream=new TMemoryStream();
AnsiString rn="\\r\\n";
PROCESS_INFORMATION proc;
STARTUPINFO start;
SECURITY_ATTRIBUTES sa;
long ret;
unsigned long lngBytesread;
HANDLE hReadPipe,hWritePipe;
char *strBuff=(char *)malloc(256);
if(strBuff==NULL)
{
return false;
}
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle=true;
sa.lpSecurityDescriptor=NULL;
ret=CreatePipe(&hReadPipe,&hWritePipe,&sa,0);
if(ret==0)
{
//创建管道失败
return false;
}
memset(&start,0x00,sizeof(STARTUPINFO));
start.cb=sizeof(STARTUPINFO);
start.dwFlags=STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
start.hStdOutput=hWritePipe;
start.hStdError=hWritePipe;
bool retc=CreateProcess(NULL,cmd.c_str(),NULL,NULL,true, 0, 0, NULL, &start, &proc);
if(!retc)
{
return false;
}
CloseHandle(hWritePipe);
unsigned long len;
memstream->Position=0;
while(true)
{
memset(strBuff,0x00,256);
GetFileSize(hReadPipe,&len);
ret = ReadFile(hReadPipe, strBuff, 256, &lngBytesread,NULL);
if(ret==0)
{
break;
}
else
{
memstream->Write(strBuff,lngBytesread);
}
}
CloseHandle(proc.hProcess);
CloseHandle(proc.hThread);
CloseHandle(hReadPipe);
memstream->Position=0;
free(strBuff);
stringlist->LoadFromStream(memstream);
memstream->Clear();
delete memstream;
return true;
}
以上为一个使用管道获取命令行模式的程序的运行结果的函数。
使用代码
TStringList *StrList=new TStringList;
AnsiString strcmd;
RunCmd(strcmd,StrList);
结果保留再StrList中。
入门学习Linux常用必
会
60个
命令
实例详解doc/txt
因为Linux与Windows不同,其后台运行着许多进程,所以强制关机可能
会
导致进程的数据丢失,使系统处于不稳定的状态,甚至在有的系统
中
会
损坏硬件设备(硬盘)。在系统关机前使用 shutdown
命令
,系统管理员
会
通知所有...
C++
中
隐藏
DOS
调用
的
命令
行
窗口
我演示了一下在MFC
程序
中
怎么应用
DOS
的
dir
的
命令
,可是我们遇到了需要解决的问题,首先就是文件
dir
.txt的残留问题,其实这个问题很简单,我们也可以用
dos
的del
命令
在操作后将
dir
.txt文件删除,这样的结果就是
程序
会
...
【批处理
DOS
-CMD
命令
-汇总和小结】-应用
程序
启动和
调用
、服务和进程操作
命令
(start、call、)
start
命令
一般用来打开
一个
文件(通常是可执行
程序
)或文件夹。先用start /?
命令
大致了解帮助
信息
。(1)打开某
一个
文件夹。start
dir
,这个
dir
既可以是磁盘根目录,也可以是磁盘内的子目录。如果不加min或max参数,...
VB打造
DOS
命令
行模拟
程序
简介:在Visual Basic
中
,开发者能够构建
一个
应用
程序
,该
程序
通过用户界面模拟
DOS
命令
行的输出,这对于教学和测试特定功能十分有用。该
程序
由两个文本框和
一个
按钮组成,使用户可以输入
DOS
命令
并查看模拟执行的...
基本
DOS
命令
及批处理编写
文章目录·
DOS
命令
及批处理编写一、基本
DOS
命令
1.
调用
方法2.
DOS
的内部
命令
二、批处理编写1.1、批处理作用1.2、如何创建批处理1.3、批处理基本语法 ·
DOS
命令
及批处理编写 一、基本
DOS
命令
Dos
命令
,是磁盘操作...
网络及通讯开发
1,317
社区成员
8,874
社区内容
发帖
与我相关
我的任务
网络及通讯开发
C++ Builder 网络及通讯开发
复制链接
扫一扫
分享
社区描述
C++ Builder 网络及通讯开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章