Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何读取或捕获Ctrl+;某些键或Alt+;C中的一些键?_C_Windows_Keyboard Shortcuts - Fatal编程技术网

如何读取或捕获Ctrl+;某些键或Alt+;C中的一些键?

如何读取或捕获Ctrl+;某些键或Alt+;C中的一些键?,c,windows,keyboard-shortcuts,C,Windows,Keyboard Shortcuts,例如,我想在按下Ctrl键和其他键的组合(或者可能是Alt键)时做一些事情。然后从标准输入中,如何在C程序中读取该组合键作为输入。 我尝试使用simplegetchar()来了解这些组合的ASCII值。但对于某些键组合,它是1到25,以及其他一些值。是否有任何标准的库函数来读取它们。别问我你为什么要那样做。 编辑:我的平台是Windows上的Turbo C。简短回答:以特定于平台的方式 答案很长:C的输入/输出概念是streams标准输出和标准输入的概念。上面提到的getchar()函数只是从标

例如,我想在按下Ctrl键和其他键的组合(或者可能是Alt键)时做一些事情。然后从标准输入中,如何在C程序中读取该组合键作为输入。 我尝试使用simple
getchar()
来了解这些组合的ASCII值。但对于某些键组合,它是1到25,以及其他一些值。是否有任何标准的库函数来读取它们。别问我你为什么要那样做。
编辑:我的平台是Windows上的Turbo C。

简短回答:以特定于平台的方式

答案很长:C的输入/输出概念是streams标准输出和标准输入的概念。上面提到的getchar()函数只是从标准输入流中读取。C没有任何键盘的概念,尽管键盘是一种常见的输入方法。在键盘和在C程序中传递到标准输入的内容之间通常有几个抽象层。实现这一点的机制是由实现定义的,而不是C语言的一部分。您提到了ASCII,但是C不需要ASCII,尽管它非常常见

一些库试图提供便携式键盘输入设备,如和

另请参见系统依赖项,特别是19.5。

以下是窗口--您的程序可以使用这些窗口。

//以下是将图形o/p保存到bmp的程序
#包括
#包括
#包括
#包括
int SaveBMP16(char[]);
typedef无符号字符字节;
typedef无符号整数字;
typedef无符号长双字;
void main()
{
/*请求自动检测*/
内河;
int gmode,错误代码;
检测图(&gdriver,&gmode);
/*初始化图形和局部变量*/
initgraph(&gdriver,&gmode,“c:\\tc\\bgi”);
errorcode=graphresult();
如果(errorcode!=grOk)/*发生错误*/
出口(1);
int midx,midy,半径=100;
midx=getmaxx()/2;
midy=getmaxy()/2;
setcolor(getmaxcolor());
/*画圆圈*/
圆(中点、中点、半径);
/*清理*/
SaveBMP16(“Circle.Bmp”);
}
结构BMP
{
//位图文件头
字节bfType[2];/*1 2必须始终设置为“BM”才能声明这是一个.bmp文件*/
dword bfSize;/*3 4以字节为单位指定文件的大小*/
字bfReserved1;//7 2必须始终设置为零*/
字bfReserved2;//9 2必须始终设置为零。
dword bfOffset;//11 4指定从文件开头到位图数据的偏移量。
//位图图像头
dword biSize;//15 4指定位图头结构的大小,以字节为单位。
dword biWidth;//19 4指定图像的宽度,以像素为单位。
dword biHeight;//23 4指定图像的高度,以像素为单位。
word biPlanes;//27 2指定目标设备的平面数,必须设置为0
字bibibitcount;//29 2指定每个像素的位数。
dword biCompression;//31 4指定压缩类型,通常设置为0-无压缩
dword BISIZEMAGE;//35 4指定图像数据的大小,以字节为单位。如果没有压缩,则将此成员设置为零是有效的。
dword biXPelsPerMeter;//39 4指定指定目标设备上每米的水平像素数,通常设置为零。
dword biYPelsPerMeter;//43 4指定指定目标设备上每米的垂直像素数,通常设置为零
dword BICLRUSE;//47 4指定位图中使用的颜色数,如果设置为0,则使用biBitCount成员计算颜色数。
dword BICLREMENT;//51 4指定位图中“重要”的颜色数,如果设置为零,则所有颜色都是重要的。
};
int SaveBMP16(字符文件[])
{
int i=0,j=0,r,g,b;
文件*fp;
BMP*BMP;
bmp=(bmp*)malloc(54);
bmp->bfType[0]='B';
bmp->bfType[1]='M';
bmp->bfSize=153718;
bmp->bfReserved1=0;
bmp->bfReserved2=0;
bmp->bfOffset=118;
bmp->biSize=40;
bmp->biWidth=640;
bmp->biHeight=480;
bmp->biplane=1;
bmp->bibibitcount=4;
bmp->biCompression=0;
bmp->biSizeImage=153600;//固定大小?
bmp->biXPelsPerMeter=0;
bmp->biYPelsPerMeter=0;
bmp->biClrUsed=0;
bmp->biclr=0;
fp=fopen(文件“wb”);
如果(fp==NULL)
{
printf(“文件无法打开”);
getch();
返回1;
}
fwrite(bmp,54,1,fp);
fseek(fp,54L,SEEK_SET);
//到这里还可以。
//问题1.接下来的16x4线路做什么?
fputc(0x0,fp);
fputc(0x0,fp);
fputc(0x0,fp);
fputc(0x0,fp);
fputc(127,fp);
fputc(0x0,fp);
fputc(0x0,fp);
fputc(0x0,fp);
fputc(0x0,fp);
fputc(127,fp);
fputc(0x0,fp);
fputc(0x0,fp);
fputc(127,fp);
fputc(127,fp);
fputc(0x0,fp);
fputc(0x0,fp);
fputc(0x0,fp);
fputc(0x0,fp);
fputc(127,fp);
fputc(0x0,fp);
fputc(127,fp);
fputc(0x0,fp);
fputc(127,fp);
fputc(0x0,fp);
fputc(0x0,fp);
fputc(192,fp);
fputc(192,fp);
fputc(0x0,fp);
fputc(192,fp);
fputc(192,fp);
fputc(192,fp);
fputc(0x0,fp);
fputc(128,fp);
fputc(128,fp);
fputc(128,fp);
fputc(0x0,fp);
fputc(255,fp);
fputc(0x0,fp);
fputc(0x0,fp);
fputc(0x0,fp);
fputc(0x0,fp);
fputc(255,fp);
fputc(0x0,fp);
fputc(0x0,fp);
fputc(255,fp);
fputc(255,fp);
fputc(0x0,fp);
fputc(0x0,fp);
fputc(0x0,fp);
fputc(0x0,fp);
fputc(255,fp);
fputc(0x0,fp);
fputc(255,fp);
fputc(0x0,fp);
fputc(255,fp);
fputc(0x0,fp);
fputc(0x0,fp);
fputc(255,fp);
fputc(255,fp);
fputc(0x0,fp);
fputc(255,fp);
fputc(255,fp);
fputc(255
//Here is a program to save a graphical o/p to bmp
#include<graphics.h>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>

int SaveBMP16(char []);
typedef unsigned char byte;
typedef unsigned int word;
typedef unsigned long dword;
void main()
{
    /* request auto detection */
    int gdriver;
    int gmode, errorcode;
    detectgraph(&gdriver,&gmode);
    /* initialize graphics and local variables */
    initgraph(&gdriver, &gmode, "c:\\tc\\bgi");

    errorcode = graphresult();
    if (errorcode != grOk)  /* an error occurred */
       exit(1);


    int midx, midy,radius = 100;

    midx = getmaxx() / 2;
    midy = getmaxy() / 2;

    setcolor(getmaxcolor());

    /* draw the circle */
    circle(midx, midy, radius);

    /* clean up */
    SaveBMP16("Circle.Bmp");
}

struct BMP
{

// BitMap File Header
    byte bfType[2]; /* 1 2 must always be set to 'BM' to declare that this is a .bmp file.*/
    dword bfSize;  /* 3 4   specifies the size of the file in bytes.*/
    word bfReserved1;// 7 2 must always set to zero.                  */
    word bfReserved2;// 9 2 must always be set to zero.
    dword bfOffset; // 11 4 specifies the offset from the beginning of the file to bitmap data.

// BitMap Image Header
    dword biSize;   // 15 4 specifies the size of the BitMap Header structure, in bytes.
    dword biWidth;  // 19 4 specifies the width of image, in pixels.
    dword biHeight; // 23 4 specifies the height of image, in pixels.
    word biPlanes;  // 27 2 specifies the number of planes of the target device,must be set to 0
    word biBitCount; // 29 2  specifies the number of bits per pixel.
    dword biCompression; //31 4 Specifies the type of compression, usually set to 0 - No Compres
    dword biSizeImage;  // 35 4 specifies the size of the image data, in bytes. If                  there is no compression, it is valid to set this member to zero.
    dword biXPelsPerMeter; //39 4 specifies the the horizontal pixels per meter on the                  designated targer device, usually set to zero.
    dword biYPelsPerMeter;  // 43 4 specifies the the vertical pixels per meter on the                  designated targer device, usually set to zero
    dword biClrUsed;    // 47 4 specifies the number of colors used in bitmap, if set to 0                  number of colors is calculated using the biBitCount member.
    dword biClrImportant;   // 51 4 specifies the number of color that are 'important' for                  the bitmap, if set to zero, all colors are important.
};


int SaveBMP16(char file[])
{
    int i=0, j=0, r, g, b;

    FILE *fp;
    BMP *bmp;

    bmp=(BMP *)malloc(54);

    bmp->bfType[0]='B';
    bmp->bfType[1]='M';
    bmp->bfSize=153718;
    bmp->bfReserved1=0;
    bmp->bfReserved2=0;
    bmp->bfOffset=118;
    bmp->biSize=40;
    bmp->biWidth=640;
    bmp->biHeight=480;
    bmp->biPlanes=1;
    bmp->biBitCount=4;
    bmp->biCompression=0;
    bmp->biSizeImage=153600;   //Fixed Size ?
    bmp->biXPelsPerMeter=0;
    bmp->biYPelsPerMeter=0;
    bmp->biClrUsed=0;
    bmp->biClrImportant=0;

    fp=fopen(file, "wb");
    if(fp == NULL)
    {
        printf("File can't be open");
        getch();
        return 1;
    }


    fwrite(bmp, 54, 1, fp);
    fseek(fp, 54L, SEEK_SET);

    // Upto Here its OK.


    // Question 1. What do next 16x4 Lines do ?

    fputc(0x0, fp);
    fputc(0x0, fp);
    fputc(0x0, fp);
    fputc(0x0, fp);

    fputc(127, fp);
    fputc(0x0, fp);
    fputc(0x0, fp);
    fputc(0x0, fp);

    fputc(0x0, fp);
    fputc(127, fp);
    fputc(0x0, fp);
    fputc(0x0, fp);

    fputc(127, fp);
    fputc(127, fp);
    fputc(0x0, fp);
    fputc(0x0, fp);

    fputc(0x0, fp);
    fputc(0x0, fp);
    fputc(127, fp);
    fputc(0x0, fp);

    fputc(127, fp);
    fputc(0x0, fp);
    fputc(127, fp);
    fputc(0x0, fp);

    fputc(0x0, fp);
    fputc(192, fp);
    fputc(192, fp);
    fputc(0x0, fp);

    fputc(192, fp);
    fputc(192, fp);
    fputc(192, fp);
    fputc(0x0, fp);

    fputc(128, fp);
    fputc(128, fp);
    fputc(128, fp);
    fputc(0x0, fp);

    fputc(255, fp);
    fputc(0x0, fp);
    fputc(0x0, fp);
    fputc(0x0, fp);

    fputc(0x0, fp);
    fputc(255, fp);
    fputc(0x0, fp);
    fputc(0x0, fp);

    fputc(255, fp);
    fputc(255, fp);
    fputc(0x0, fp);
    fputc(0x0, fp);

    fputc(0x0, fp);
    fputc(0x0, fp);
    fputc(255, fp);
    fputc(0x0, fp);

    fputc(255, fp);
    fputc(0x0, fp);
    fputc(255, fp);
    fputc(0x0, fp);

    fputc(0x0, fp);
    fputc(255, fp);
    fputc(255, fp);
    fputc(0x0, fp);

    fputc(255, fp);
    fputc(255, fp);
    fputc(255, fp);
    fputc(0x0, fp);

    i=0;
    j=479;

    fseek(fp, 118, SEEK_SET);

    while(j>=0)
    {
        i=0;
        while(i<640)
        {
            fputc((getpixel(i, j)<<4) | getpixel(i+1, j), fp); //Que 2. What does this do ? Why Left Shift 4 times and why Bit wise ORing of two pixles.  
            i+=2;
        }
        j--;
    }
    free(bmp);
    fclose(fp);
    return 0;
}