您的位置:程序门 -> delphi -> windows sdk/api



如何得到dos程序运行显示的信息,添加到memo控件中?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


如何得到dos程序运行显示的信息,添加到memo控件中?[已结贴,结贴人:uranas]
发表于:2007-01-04 15:11:00 楼主
targethandle   :=   getwinhandle( 'consolewindowclass ',nil);
sendmessage(targethandle,   wm_gettext,   sizeof(s),   integer(@s));

现在用此方法只能得到题目,可我想要dos显示的信息内容。

help   me!
发表于:2007-01-04 15:55:001楼 得分:5
绑架windows控制台,嘎嘎~~
发表于:2007-01-04 15:59:152楼 得分:10
sendmessage,postmessage
发表于:2007-01-04 16:49:053楼 得分:16
你可以dos输出到文本文件,然后memo刷新文本文件.
如:
用api的shellEXECute   执行dos命令   dir   > c:\aa.txt;
memo1.savetofile( 'c:\aa.txt ')
就可以了
发表于:2007-01-05 11:27:574楼 得分:15
//c++
bool   runcmd(string   cmd,tstringlist*   stringlist)
{
        tmemorystream   *memstream=new   tmemorystream();
        process_information   proc;
        startupinfo   start;
        security_attributes   sa;
        long   ret;
        unsigned   long   lngbytesread;
        handle   hreadpipe,hwritepipe;
        char   *strbuff=   new   char[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;
        delete   strbuff;
        stringlist-> loadfromstream(memstream);
        memstream-> clear();
        delete   memstream;
        return   true;
}
发表于:2007-01-05 11:51:515楼 得分:5
使用管道。。。
发表于:2007-01-05 14:24:316楼 得分:5
有免费的控件。stdioredirect
发表于:2007-01-05 15:04:087楼 得分:0
我试用管道,

可用createprocess启动后,
si:   startupinfo;
pi:   process_information;
createprocess(   nil,   fname,   nil,   nil,   true,   0,   nil,   nil,   si,   pi)

用【pi.dwprocessid】居然取不到结果了,难道都跑到「管道」里了?
发表于:2007-01-09 14:58:438楼 得分:5
pipe方法
有很多例子的
发表于:2007-01-15 18:21:189楼 得分:5
盒子www.2ccc.com里以及超级猛料里,都有现成的代码可用,

楼主去查看一下


快速检索

最新资讯
热门点击