| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 954 人关注过本帖
标题:分享一下
取消只看楼主 加入收藏
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
结帖率:95.74%
收藏
已结贴  问题点数:100 回复次数:1 
分享一下
这几天学习控制台东西, 看MSDN  看的眼睛都花了。
看他关于东 Consle Window 的介绍。  一些控制台的概念的真的不是太清楚。
所以对一些函数使用老是不明白。
BOOL WINAPI ReadConsoleOutput(
  __in     HANDLE hConsoleOutput,
  __out    PCHAR_INFO lpBuffer,
  __in     COORD dwBufferSize,
  __in     COORD dwBufferCoord,
  __inout  PSMALL_RECT lpReadRegion
);
 
中的 __in     COORD dwBufferCoord, 这个参数老是弄不明白。
MSDN 的解析是这样的。
The coordinates of the upper-left cell in the lpBuffer parameter that receives the data read from the console screen buffer. The X member of the COORD structure is the column, and the Y member is the row.
但还是看不明白 到底具体指什么。。 可能英语水平不行吧。
我开始一直以为是指定在控制台某个点开始读。测试了好久感觉不对,百度了好久 发现一篇。
程序代码:
#include <windows.h>
#include <stdio.h>

#define BUFFCOLUMNCOUNT 4 //CARDISIAN x
#define BUFFROWCOUNT 3 // y


int main()
{

    //define Array of CHAR_INFO struct allowing for BUFFROWCOUNT*BUFFCOLUMNCOUNT chars to get in
    CHAR_INFO pci[BUFFROWCOUNT*BUFFCOLUMNCOUNT];

    //COORD struct indicating the array has a demension of BUFFCOLUMNCOUNT columns by BUFFROWCOUNT rows;
    COORD dwBufferSize={BUFFCOLUMNCOUNT,BUFFROWCOUNT}; //cx=BUFFCOLUMNCOUNT,cy=BUFFROWCOUNT

    //Read the Screen Buffer from (0,0)
    COORD dwBufferCoor={0,0};

    //The rectangular region to read
    SMALL_RECT srect;
    HANDLE hConOut;
    int i,j;

    printf("12345<-->I don't know why you are interested in this function\n");
    printf("ABCDE<-->But you may get help from this example\n");
    printf("~!@#$<-->This the end\n");

    hConOut=GetStdHandle(STD_OUTPUT_HANDLE);

    //Read screen buffer in the region with 
    //left-top point(0,0),right-bottom point(BUFFCOLUMNCOUNT,BUFFROWCOUNT);
    //Basically it read rectangular region of information
    srect.Left=0;
    srect.Top=0;
    srect.Right=BUFFCOLUMNCOUNT;
    srect.Bottom=BUFFROWCOUNT;

    ReadConsoleOutput(hConOut,pci,dwBufferSize,dwBufferCoor,&srect);

    printf("I get a scratch of what I put previously:\n");
    //print straightly from 0 to BUFFROWCOUNT*BUFFCOLUMNCOUNT-1
    //in fact you can use 
    /*
    for(i=0;i<BUFFROWCOUNT*BUFFCOLUMNCOUNT-1;i++)
        printf("%c",pci[i]);
    */
    //I use following form to add some ------------ separators
    for(i=0;i<BUFFROWCOUNT;i++)
    {
        for(j=0;j<BUFFCOLUMNCOUNT;j++)
            printf("%c",pci[i*BUFFCOLUMNCOUNT+j].Char);
        printf("\n--------------\n");
    }

    CloseHandle(hConOut);

    getch();

    return 0;
} 

 
可以知道了  
//Read the Screen Buffer from (0,0)
    COORD dwBufferCoor={0,0};
这里我怀疑是作者Screen Buffer 应该说的是CHAR_INFO pci[BUFFROWCOUNT*BUFFCOLUMNCOUNT];这个Buffer。
   //Read the Screen Buffer from  是根据这个来定义范围的 SMALL_RECT srect。来决定ReadConsoleOutput 从哪里的读取 dwSize 决定更加具体的范围。
要把CHAR_INFO pci[BUFFROWCOUNT*BUFFCOLUMNCOUNT] 看成一个二维数组。 比喻ReadConsoleOutput 如果dwBfferCoor={1,1};就是把读到的数据放到pci[1][1]为左顶点的二维数组中。不会从pci[0][0]开始放数据。  
相当于把(0,0)原点向下向右移动一个单元。更数学里面的坐标平移式一样的。
自己可以定义的数组 用memset();全部置为一个数字。 我用的是a 然后你读取指定范围的数据 。然后你打印全部数组你就可以验证这个说法。。
 
说的自己都头晕了。。。。。
 
今天无意间发现一个高手写的程序。
论坛灌水机,呵呵,貌似可以任何可以输入的地方,但QQ密码框不可以输入。但QQ游戏密码是可以输入,还没有验证。 我不知道这是不是腾讯的BUG 。反正以前知道QQ邮箱是可以暴力破解。
 
这个工具感觉蛮好玩 分享给大家。
发现这个高手写了好多有用的东西。。。 真的高手无处不在。。。
 
  
决定会收获不一样的东西。 呵呵。。
 
对了 问一下为什么又要选版主 不是才选不久吗??????????
 
闪了,继续学习去了。。笨鸟要多飞飞啊
搜索更多相关主题的帖子: 东西 函数 控制台 
2012-02-04 17:03
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:0 

用心做一件事情就这么简单
2012-02-04 17:03
快速回复:分享一下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026362 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved