Windows是一个以虚拟内存为基础的操作系统,很多时候,进程的代码和数据并不全部装入内存, 进程的某一段装入内存后,还可能被换出到外存,当再次需要时,再装入内存。 两次装入的地址绝大多数情况下是不一样的。 也就是说,同一对象在内存中的地址会变化。 但是 有一个固定的地址(句柄),指向一个固定的位置(区域A),而区域A中的值可以动态地变化,它时刻记录着当前时刻对象在内存中的地址。 1.所谓“唯一”、“不变”是指在程序的一次运行中。如果本次运行完,关闭程序,再次启动程序运行,那么这次运行中,同一对象的句柄的值和上次运行时比较,一般是不一样的。
2.句柄是对象生成时系统指定的,属性是只读的,程序员不能修改句柄。
3.不同的系统中,句柄的大小(字节数)是不同的,可以使用sizeof()来计算句柄的大小。
4.通过句柄,程序员只能调用系统提供的服务(即API调用),不能像使用指针那样,做其它的事。
改变整体
system(color XX);
改变局部
void Color (int m)
{
HANDLE consolehwnd;/*创建句柄*/
consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE);/*实例化句柄*/
SetConsoleTextAttribute(consolehwnd, m); //颜色控制
}
#include <stdio.h>
#include <windows.h>
int main(void)
{
HANDLE consolehwnd;//创建句柄
consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE);//实例化句柄
SetConsoleTextAttribute(consolehwnd,FOREGROUND_RED);//设置字体颜色
printf("hello");
SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY | FOREGROUND_GREEN);
printf("world!\n");
getchar();
SetConsoleTextAttribute(consolehwnd,BACKGROUND_INTENSITY | BACKGROUND_BLUE);
printf("It is really beautiful!\n");
return 0;
}
键盘的上下左右是ASCII的扩展,解析为ASCII码是两个数字组合,上(224+72)下(224+80)左(224+75)右(224+77)
本文章使用limfx的vscode插件快速发布