鱼C论坛

 找回密码
 立即注册
查看: 3375|回复: 4

一段代码求助

[复制链接]
发表于 2013-6-1 13:27:56 | 显示全部楼层 |阅读模式
5鱼币
本帖最后由 杞人 于 2013-6-1 13:28 编辑



今天写了一段CMD回显的程序,是用C语言写的也就是控制台程序,苦逼的是只能显示

Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp

D:\桌面数据\TEST程序\EXE\EXE\Debug>


然后无论我打什么命令都是
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp

D:\桌面数据\TEST程序\EXE\EXE\Debug>


好痛苦啊调试了一早上,代码改的乱七八糟
自能来这里求助了
  1. #include <stdio.h>
  2. #include <windows.h>
  3. #define nops _asm nop

  4. void main()
  5. {
  6.         while (1)
  7.         {
  8.         HANDLE m_hReadPipeHandle;    //度管道句柄
  9.         HANDLE m_hWritePipeHandle;         //写管道句柄

  10.         HANDLE m_hReadPipeShell;
  11.         HANDLE m_hWritePipeShell;

  12.         SECURITY_ATTRIBUTES  sa = {0};
  13.         sa.nLength = sizeof(sa);
  14.         sa.lpSecurityDescriptor = NULL;
  15.         sa.bInheritHandle = TRUE;
  16.         //创建管道
  17.         if(!CreatePipe(&m_hReadPipeHandle, &m_hWritePipeShell, &sa, 0))
  18.         {
  19.                 if(m_hReadPipeHandle != NULL)        CloseHandle(m_hReadPipeHandle);
  20.                 if(m_hWritePipeShell != NULL)        CloseHandle(m_hWritePipeShell);
  21.                 return;
  22.         }

  23.         if(!CreatePipe(&m_hReadPipeShell, &m_hWritePipeHandle, &sa, 0))
  24.         {
  25.                 if(m_hWritePipeHandle != NULL)        CloseHandle(m_hWritePipeHandle);
  26.                 if(m_hReadPipeShell != NULL)        CloseHandle(m_hReadPipeShell);
  27.                 return;
  28.         }

  29.         STARTUPINFO si = {0};
  30.         GetStartupInfo(&si);
  31.         si.cb = sizeof(STARTUPINFO);
  32.         si.wShowWindow = SW_HIDE;
  33.         si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
  34.         si.hStdInput  = m_hReadPipeShell;       //这里指定cmd的输出管道
  35.         si.hStdOutput = si.hStdError = m_hWritePipeShell;   //这里指定cmd输入管道

  36.         char strShellPath[MAX_PATH];
  37.         ZeroMemory(strShellPath,MAX_PATH);
  38.         GetSystemDirectory(strShellPath,MAX_PATH);
  39.         strcat(strShellPath,"\\cmd.exe");//如果是一个\cmd.exe,会错误

  40.         HANDLE m_hProcessHandle;        //进程句柄
  41.         PROCESS_INFORMATION  pi = {0};
  42.         memset((void *)&pi, 0, sizeof(pi));
  43.         //用si  参数创建进程  就是说指定了他的输入输出
  44.         if (!CreateProcess(strShellPath, NULL, NULL, NULL, TRUE,
  45.                 NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi))
  46.         {
  47.                 CloseHandle(m_hReadPipeShell);
  48.                 CloseHandle(m_hWritePipeShell);
  49.                 return;
  50.         }
  51.         m_hProcessHandle = pi.hProcess;
  52.         //CreateProcess()


  53.         char m_strCmd[MAX_PATH]={0,0};
  54.         DWORD dword=0;
  55.         OVERLAPPED a;
  56.         a.Internal=0;
  57.         a.InternalHigh=0;
  58.         a.Offset=0;
  59.         a.OffsetHigh=0;
  60.         a.hEvent=0;

  61.         scanf("%s",&m_strCmd);
  62.         WriteFile(m_hWritePipeHandle,m_strCmd,sizeof(m_strCmd)-1,&dword,&a);
  63.         //写人管道

  64.         //=======读==========================
  65.         unsigned long   BytesRead = 0;
  66.         char        ReadBuff[1024];
  67.         DWORD        TotalBytesAvail;
  68.         //管道缓冲区是否有数据
  69.         PeekNamedPipe(m_hReadPipeHandle, ReadBuff, sizeof(ReadBuff), &BytesRead, &TotalBytesAvail, NULL);
  70.                 memset(ReadBuff, 0, sizeof(ReadBuff));
  71.                 //分配空间
  72.                 LPBYTE lpBuffer = (LPBYTE)LocalAlloc(LPTR, TotalBytesAvail+1);
  73.                 ZeroMemory(lpBuffer,TotalBytesAvail+1);

  74.                 //读取缓冲空间的数据
  75.                 ReadFile(m_hReadPipeHandle, lpBuffer, TotalBytesAvail, &BytesRead, NULL);
  76.                 // 发送数据
  77.                 printf("%s",(char*)lpBuffer);

  78.                 ZeroMemory(m_strCmd,MAX_PATH);
  79.                 ZeroMemory(lpBuffer,TotalBytesAvail+1);

  80.         }
  81. }
复制代码

1.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-6-1 13:30:43 | 显示全部楼层
求顶起啊。。。。。。。。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-6-3 17:49:04 | 显示全部楼层
路过。。。打酱油
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-6-3 20:58:36 | 显示全部楼层
{:7_154:}刚学,不是很懂~~支持支持~~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-6-6 12:46:59 | 显示全部楼层
一点都看不懂
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-27 10:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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