首页
社区
课程
招聘
[旧帖] [原创][申请邀请码]简陋的窗口控制台 0.00雪花
发表于: 2011-3-31 22:48 1292

[旧帖] [原创][申请邀请码]简陋的窗口控制台 0.00雪花

2011-3-31 22:48
1292
匿名管道的应用:首先在主程序中以主程序的读、写句柄建立一个匿名管道,然后在主程序中建立一个命令行进程,把命令行进程的写句柄给主程序,最后通过主程序的一个多线程函数从匿名管道中取出数据显示在主程序中。这样可以得到一个简陋的cmd程序的窗口版本。

以主程序的读、写句柄建立一个匿名管道:
    SECURITY_ATTRIBUTES sa = {0} ;
        sa.bInheritHandle = TRUE ;
        sa.lpSecurityDescriptor = NULL ;
        sa.nLength = sizeof(SECURITY_ATTRIBUTES) ;

        if (!CreatePipe(&m_hRead, &m_hWrite, &sa, 0))
        {
                return ;
        }

建立一个命令行进程:
    PROCESS_INFORMATION pi = {0} ;
        STARTUPINFO si = {0} ;
        si.cb = sizeof(STARTUPINFO) ;
        si.dwFlags=STARTF_USESTDHANDLES|          STARTF_USESHOWWINDOW ;
        si.hStdError = si.hStdOutput = m_hWrite ;
        si.wShowWindow = SW_HIDE ;
       
        TCHAR szCmdLine[500] = {0} ;
        ZeroMemory(szCmdLine, 500) ;
        GetSystemDirectory(szCmdLine, 500) ;
        lstrcat(szCmdLine, TEXT("\\cmd.exe /c ")) ;
        lstrcat(szCmdLine, szCmdBuf) ;

        CloseHandle(m_PreProcHandle) ;
        TerminateProcess(m_PreProcHandle, 0) ;
        if(!CreateProcess(NULL, szCmdLine, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi))
        {
                MessageBox(TEXT("创建进程失败!")) ;
        }

创建一个多线程函数从匿名管道中取出数据显示在主程序中
        m_ThreadHandle = CreateThread(NULL, 0, ShowCmdOutput, (LPVOID)pNode, 0, NULL) ;
do
        {
                bRet = PeekNamedPipe(hRead, NULL, 0, NULL, &dwTotalAvail, NULL) ;
                if (bRet && dwTotalAvail > 0)
                {
                        bReturn = ReadFile(hRead, szbuf, 4096, &dwReadLen, NULL) ;

                        if (bReturn && dwReadLen > 0)
                        {
                                lstrcat(szbufTemp, szbuf) ;
                                ::SetWindowText(hwnd, szbufTemp) ;
                        }
                }
               
                Sleep(50) ;
               
        }while(TRUE) ;

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 43
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这个是干什么的啊?
2011-4-1 15:53
0
雪    币: 156
活跃值: (26)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
LZ说明下程序的用途吧
2011-4-1 16:10
0
雪    币: 195
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
网上抄的吧...GUI CMD中的一段 还只是一段...
你可以做个完整的 远程反向GUICMD 这还算 有点意思
2011-4-1 16:44
0
雪    币: 63
活跃值: (40)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
凭什么说我是抄的,我还一大堆自己写的远程代码 要不要  
2011-4-2 14:09
0
雪    币: 46
活跃值: (58)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
看看我知道有多少K了
2011-4-2 15:47
0
游客
登录 | 注册 方可回帖
返回
//