社区
网络及通讯开发
帖子详情
请问:如果我在程序中调用了一个比如说dir的命令会出现一个dos窗口,如何不让出现dos窗口而把信息给传到我程序中的memo控件当中呢
firestars
2003-12-01 03:52:26
rt多谢
...全文
116
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中。
OSG(OpenSceneGraph)介绍
核心特性场景图结构:OSG使用场景图(Scene Graph)来组织和管理3D场景
中
的对象。场景图是一种树状结构,节点可以是变换节点、几何节点、光照节点等。高性能:通过状态排序、裁剪(culling)和细节层次(LOD)等技术优化渲染性能。跨平台:支持Windows、Linux、macOS等多种操作系统。支持多种数据格式:可以导入和导出多种3D文件格式,如.osg, .obj, .3ds, .dae (Collada), .fbx等。功能丰富。
OSG( OpenSceneGraph)
一:编译问题论坛上编译好的库文件也是FLMN人为编译的文件,与自己用CMAKE编译的没有什么不同,说到自己编译,总结一下主要有几个方面的错误:首先来说,直接下了源码,没有下载第三方库与data数据文件,首先源码是不必说了,必备的。源码的下载地址是:http://www.openscenegraph.org/projects/osg/wiki/Downloads/CurrentRelease这里要注
osg自学笔记1——《OpenSceneGraph 快速入门指导》
这里写自定义目录标题《OpenSceneGraph Quick Start Guide》学习笔记1、 1.3 运行 osgviewer2、1.5 场景图形初步3、 1.6 OpenSceneGraph 概览4、2.1 内存管理5、2.2 叶节点(Geode)和几何
信息
1、osg::Vec2,osg::Vec2Array,osg::Vec3Array2、Drawables 类 《OpenSceneGraph Quick Start Guide》学习笔记 《OpenSceneGraph Quick Start
【OSG】OSG环境部署 OSG3.6.5+vs2017+win10_x64(超详细)
最近开始了OSG的学习,开始搭建OSG开发环境,期间遇到了很多问题,也查阅了很多资料,最终搭建成功。OSG本来就是开源的,不应该敝帚自珍,应该多交流多分享,所以再此记录一下环境搭建的过程,方便以后查阅。
VS2019 编译最新版 OSG+ OSGEarth + OSGQt 详细教程
以下主要包涵了我编译全流程查询过的部分核心文档,还有部分可能有涉及但未深入因此未提名。VS2019编译OSG3.7.0+OSGEarth3.3+OSGQt_vs2019配置osg-CSDN博客windows下VS2019编译GDAL、PROJ全教程_pkg编译gdal proj库-CSDN博客OsgEarth嵌入qt开发学习笔记(1)-使用vs2022编译OSG、OSGEASRTH、OSGQT_osgearth qt-CSDN博客。
网络及通讯开发
1,317
社区成员
8,874
社区内容
发帖
与我相关
我的任务
网络及通讯开发
C++ Builder 网络及通讯开发
复制链接
扫一扫
分享
社区描述
C++ Builder 网络及通讯开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章