控制台句柄
来源:互联网 发布:淘宝哪家杂货铺好 编辑:程序博客网 时间:2024/05/23 23:47
http://m.blog.csdn.net/blog/fa6507/8456099
控制台程序通过句柄访问控制台的输入缓冲区及屏幕缓冲区。程序可以通过GetStdHandle, CreateFile, 或者 CreateConsoleScreenBuffer 函数打开所需的句柄。
GetStdHandle 函数提供了获取该程序所关联的标准输入(STDIN)、标准输出(STDOUT)及标准错误(STDERR)的句柄的机制,控制台创建时,系统创建了这些句柄。开始,STDIN是控制台输入缓冲区句柄,STDOUT及STDERR是控制台当前屏幕缓冲区。但通过SetStdHandle函数可以重设这些标准句柄。由于父程序的标准句柄会被任意子程序继承,在调用GetStdHandle后即可返回被重设的句柄。因此,GetStdHandle返回的句柄可能不是控制台I/O。例如,创建子程序前,父程序可以通过SetStdHandle设置管道句柄为子程序的STDIN句柄,子程序调用GetStdHandle就会得到该管道句柄。这意味着父程序可以控制子程序的标准句柄。如果SetStdHandle没有对标准句柄设置更少的访问的话,GetStdHHandle返回的句柄应该包含GENERIC_READ|GENERIC_WRITE权限。
GetStdHandle返回的句柄值不会是0、1和2,所以Stdio.h中的标准预定义常量(STDIN,STDOUT及STDERR)不能在需要控制台句柄的函数中使用。
CreateFile 函数可以得到一个程序的控制台的输入缓冲区及当前屏幕缓冲区,即便STDIN及STDOUT重定位了也是如此。要打开到控制台输入缓冲区的句柄,只需在调用CreateFile时指定CONIN$值即可,而指定CONOUT$即打开控制台当前屏幕缓冲区的句柄。CreateFile 可让你指定返回句柄的读/写权限。
CreateConsoleScreenBuffer 函数创建一个新的屏幕缓冲区并返回其句柄。该句柄可以用在任意需要控制台输入的函数中。新的屏幕缓冲区不会激活,除非调用了SetConsoleActiveScreenBuffer函数. 注意:变更当前屏幕缓冲区不会影响GetStdHandle的返回值;同样,SetStdHandle 变更了STDOUT句柄的话也不会影响当前屏幕缓冲区。
CreateFile及CreateConsoleScreenBuffer 的返回值可以被任意需要访问输入缓冲区及屏幕缓冲区的函数使用。GetStdHandle 的返回值只有非重定位的I/O时才有效。如果标准句柄被重定位到一个文件或管道,那这个句柄只能通过ReadFile及WriteFile函数来使用。
程序可以通过DuplicateHandle 函数创建一个控制台句柄副本,以进行不同的访问或继承原始句柄。注意:尽管如此,程序只能为自己使用方便而创建一个控制台句柄副本。这与其他句柄类型不同(如文件,管道或者互斥类),那些类型的句柄通过DuplicateHandle 创建的副本可以被不同程序有效使用。
要关闭一个控制台句柄,可以调用CloseHandle 函数。
- 控制台句柄
- 控制台句柄
- 控制台句柄
- 控制台句柄
- 控制台句柄
- 得到控制台窗口句柄
- 认识控制台-控制台句柄、附着到控制台、关闭控制台
- [转]认识控制台-控制台句柄、附着到控制台、关闭控制台
- 认识控制台-控制台句柄、附着到控制台、关闭控制台
- 认识控制台-控制台句柄、附着到控制台、关闭控制台
- 获取控制台窗口的句柄
- 控制台窗口句柄获取方法
- 获取控制台窗口的句柄
- 获取控制台窗口的句柄
- 获取控制台的窗口句柄
- 得到控制台窗口的句柄
- 得到控制台窗口的句柄
- C#获取控制台句柄的方法
- 同时运行多个 tomcat 修改端口
- 欢迎使用CSDN-markdown编辑器
- Android自动填充短信验证码
- Java NIO原理图文分析及代码实现
- js中的document.write
- 控制台句柄
- 详说 Cookie, LocalStorage 与 SessionStorage
- redis是个单线程的程序,为什么会这么快呢?
- Linux下amr转mp3方法
- 游戏应用快速审核上架
- 如何允许 WinXP 和 Win7 自动创建 dump 文件
- WebApp中input限制金额输入
- jquery获取选中radio的值
- Android 事件分发机制