| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 954 人关注过本帖
标题:分享一下
只看楼主 加入收藏
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
结帖率:95.74%
收藏
已结贴  问题点数:100 回复次数:13 
分享一下
这几天学习控制台东西, 看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
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:9 
这么快就回来了

总有那身价贱的人给作业贴回复完整的代码
2012-02-04 17:24
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:9 
..............

梅尚程荀
马谭杨奚







                                                       
2012-02-04 17:31
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:9 
不要滚水坝

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2012-02-04 18:14
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
收藏
得分:9 
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.
lpBuffer参数接收从控制台屏幕缓冲区左上角单元格的坐标读到的数据,就是读buffer的起始坐标咯.
结构体COORD的X成员是列,Y成员是行.

技术问题,请不要以短消息方式提问
2012-02-04 18:22
吴小君
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:198
注 册:2012-1-2
收藏
得分:9 
呵呵,到一下

小弟学习C语言刚入门,请大侠们多多指教,不吝赐解!
2012-02-04 20:08
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:9 
C这边真热闹,一来这么多百分帖。
2012-02-04 21:28
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:9 
回复 楼主 小鱼儿c
注意最后那个参数是什么东西,inout参数,明白就没问题了。

授人以渔,不授人以鱼。
2012-02-04 22:31
小赵q1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:492
专家分:777
注 册:2011-8-26
收藏
得分:9 
能把自己的心得分享给大家可以让大家少走弯路。谢谢了,版主是每一个月选一次,每个月的1号到6号为投票时间。
2012-02-05 00:09
快速回复:分享一下
数据加载中...
 
   



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

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