VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1145|回复: 8

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

[复制链接]

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-2-7 00:00:01 | 显示全部楼层 |阅读模式
targetHandle := GetWinHandle('ConsoleWindowClass',nil);
SendMessage(targetHandle, WM_GETTEXT, SizeOf(s), Integer(@s));

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

help me!
回复

使用道具 举报

0

主题

34

帖子

21.00

积分

新手上路

Rank: 1

积分
21.00
发表于 2020-3-31 21:30:01 | 显示全部楼层
绑架Windows控制台,嘎嘎~~
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-4-1 13:15:01 | 显示全部楼层
SendMessage,postmessage
回复

使用道具 举报

0

主题

14

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-4-6 12:15:02 | 显示全部楼层
你可以dos输出到文本文件,然后memo刷新文本文件.
如:
用api的shellexecute 执行dos命令 dir >c:\aa.txt;
memo1.SaveToFile('c:\aa.txt')
就可以了
回复

使用道具 举报

0

主题

8

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-5-17 10:30:01 | 显示全部楼层
//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;
}
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-5-19 23:15:01 | 显示全部楼层
使用管道。。。
回复

使用道具 举报

0

主题

12

帖子

12.00

积分

新手上路

Rank: 1

积分
12.00
发表于 2020-5-31 23:30:01 | 显示全部楼层
有免费的控件。StdIORedirect
回复

使用道具 举报

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-6-4 17:30:01 | 显示全部楼层
我试用管道,

可用CreateProcess启动后,
si: STARTUPINFO;
pi: PROCESS_INFORMATION;
CreateProcess( nil, fname, nil, nil, true, 0, nil, nil, si, pi)

用【pi.dwProcessId】居然取不到结果了,难道都跑到「管道」里了?
回复

使用道具 举报

0

主题

8

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-8-1 18:00:01 | 显示全部楼层
Pipe方法
有很多例子的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表