精华内容
下载资源
问答
  • 在创建direct 3D对象时需要一个窗口句柄,在命令行程序中又不想调用windows api创建窗口对象,所以尝试查找控制台下有无可用并且有效的窗口句柄。找了一下,函数原型如下: HWND WINAPI GetConsoleWindow(void); ...

    在创建direct 3D对象时需要一个窗口句柄,在命令行程序中又不想调用windows api创建窗口对象,所以尝试查找控制台下有无可用并且有效的窗口句柄。找了一下,函数原型如下:

    HWND WINAPI GetConsoleWindow(void);

    该函数调用成功则返回和控制台关联的窗口句柄,失败则返回NULL。

     

    有了这个句柄就可以用于创建direct 3d设备了,而且不需要额外的代码。

    展开全文
  • Windows中,句柄是一个系统内部数据结构的引用。比如当你操作一个窗体。或说是一个Delphi窗体时,系统会给你一个该窗体的句柄,系统会通知你:你正在操作142号窗体。就此你的应用程序就能要求系统对142号窗体进行...

    在Windows中,句柄是一个系统内部数据结构的引用。

    比如当你操作一个窗体。或说是一个Delphi窗体时,系统会给你一个该窗体的句柄,系统会通知你:你正在操作142号窗体。就此你的应用程序就能要求系统对142号窗体进行操作——移动窗体、改变窗体大小、把窗体极小化为图标等。

    实际上很多Windows API函数把句柄作为它的第一个參数,如GDI(图形设备接口)句柄、菜单句柄、实例句柄、位图句柄等。不只局限于窗体函数。

    换句话说,句柄是一种内部代码,通过它能引用受系统控制的特殊元素,如窗体、位图、图标、内存块、光标、字体、菜单等。

    控制台程序也有窗体句柄。而且他能够操作其它程序的窗体句柄。

    经常用法:

    HWND hw=FindWindow("ConsoleWindowClass",NULL);

    这不失为一个好方法。可是单从Class方面入手保险度不高。

    API函数FindWindow有两个參数,类名与窗体标题。当不提供窗体标题的时候,返回的句柄为同类窗体中Z序最高的窗体句柄。尽管说运行仅仅是一瞬间。可是保险起见,还是提供下标题窗体,更保险。

    char strTitle[255];

    GetConsoleTitle(strTitle, 255);

    HWND hw=FindWindow("ConsoleWindowClass",strTitle);

    当然,假设要精益求精,还有更保险的办法,用 Kernel32.dll 中部分未发布的API。在用 eXeScope 导出 Kernel32.dll 中控制台相关的API之后。发现有一个名为GetConsoleWindow的API。查找參考了部分资料后。提供例如以下代码,可以动态加载这个API并获得窗体句柄。

    首先须要全局声明:

    typedef HWND (WINAPI *PROCGETCONSOLEWINDOW)();

    PROCGETCONSOLEWINDOW GetConsoleWindow;

    然后再Main()函数开头中输入下面内容:

    HMODULE hKernel32 = GetModuleHandle("kernel32");

    GetConsoleWindow = (PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32,"GetConsoleWindow");

    完毕了动态加载API函数GetConsoleWindow的任务。须要使用时可例如以下:

    HWND cmd=GetConsoleWindow();

    个人觉得。使用API函数GetConsoleWindow是最安全,也是最好的方法。

    在更大的控制台编程中,可能随时须要用到AttachConsole来改变程序的宿主控制台,这个时候再用前两种方法就不够好了。虽然加载的代码非常长,可是通用性更高。

    

    展开全文
  • Windows中,句柄是一个系统内部数据结构的引用。比如当你操作一个窗体。或说是一个Delphi窗体时,系统会给你一个该窗体的句柄,系统会通知你:你正在操作142号窗体。就此你的应用程序就能要求系统对142号窗体进行...

    在Windows中,句柄是一个系统内部数据结构的引用。

    比如当你操作一个窗体。或说是一个Delphi窗体时,系统会给你一个该窗体的句柄,系统会通知你:你正在操作142号窗体。就此你的应用程序就能要求系统对142号窗体进行操作——移动窗体、改变窗体大小、把窗体极小化为图标等。

    实际上很多Windows API函数把句柄作为它的第一个參数,如GDI(图形设备接口)句柄、菜单句柄、实例句柄、位图句柄等。不只局限于窗体函数。

    换句话说,句柄是一种内部代码,通过它能引用受系统控制的特殊元素,如窗体、位图、图标、内存块、光标、字体、菜单等。

    控制台程序也有窗体句柄。而且他能够操作其它程序的窗体句柄。

    经常用法:

    HWND hw=FindWindow("ConsoleWindowClass",NULL);

    这不失为一个好方法。可是单从Class方面入手保险度不高。

    API函数FindWindow有两个參数,类名与窗体标题。当不提供窗体标题的时候,返回的句柄为同类窗体中Z序最高的窗体句柄。尽管说运行仅仅是一瞬间。可是保险起见,还是提供下标题窗体,更保险。

    char strTitle[255];
    GetConsoleTitle(strTitle, 255);
    HWND hw=FindWindow("ConsoleWindowClass",strTitle);
    

    当然,假设要精益求精,还有更保险的办法,用 Kernel32.dll 中部分未发布的API。在用 eXeScope 导出 Kernel32.dll 中控制台相关的API之后。发现有一个名为GetConsoleWindow的API。查找參考了部分资料后。提供例如以下代码,可以动态加载这个API并获得窗体句柄。

    首先须要全局声明:

    typedef HWND (WINAPI *PROCGETCONSOLEWINDOW)();
    PROCGETCONSOLEWINDOW GetConsoleWindow;
    

    然后再Main()函数开头中输入下面内容:

    HMODULE hKernel32 = GetModuleHandle("kernel32");
    GetConsoleWindow = (PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32,"GetConsoleWindow");
    

    完毕了动态加载API函数GetConsoleWindow的任务。须要使用时可例如以下:

    HWND cmd=GetConsoleWindow();
    

    个人觉得。使用API函数GetConsoleWindow是最安全,也是最好的方法。

    在更大的控制台编程中,可能随时须要用到AttachConsole来改变程序的宿主控制台,这个时候再用前两种方法就不够好了。虽然加载的代码非常长,可是通用性更高。

    
    展开全文
  • VC 获取控制台窗口的句柄(hWnd)

    千次阅读 2015-07-18 13:41:03
    例如当你操作一个窗口,或说是一个Delphi窗体时,系统会给你一个该窗口的句柄,系统会通知你:你正在操作142号窗口,就此你的应用程序就能要求系统对142号窗口进行操作——移动窗口、改变窗口大小、把窗口极小化为...

    在Windows中,句柄是一个系统内部数据结构的引用。例如当你操作一个窗口,或说是一个Delphi窗体时,系统会给你一个该窗口的句柄,系统会通知你:你正在操作142号窗口,就此你的应用程序就能要求系统对142号窗口进行操作——移动窗口、改变窗口大小、把窗口极小化为图标等。实际上许多Windows API函数把句柄作为它的第一个参数,如GDI(图形设备接口)句柄、菜单句柄、实例句柄、位图句柄等,不仅仅局限于窗口函数。换句话说,句柄是一种内部代码,通过它能引用受系统控制的特殊元素,如窗口、位图、图标、内存块、光标、字体、菜单等。控制台程序也有窗口句柄,并且他可以操作其他程序的窗口句柄。

    常用方法:

    HWND hw=FindWindow("ConsoleWindowClass",NULL);

    这不失为一个好方法,但是单从Class方面入手保险度不高。

    API函数FindWindow有两个参数,类名与窗口标题。当不提供窗口标题的时候,返回的句柄为同类窗口中Z序最高的窗口句柄。虽然说执行只是一瞬间,但是保险起见,还是提供下标题窗口,更保险。

    char strTitle[255];
    GetConsoleTitle(strTitle, 255);
    HWND hw=FindWindow("ConsoleWindowClass",strTitle);
    

    当然,如果要精益求精,还有更保险的办法,用 Kernel32.dll 中部分未公布的API。在用 eXeScope 导出 Kernel32.dll 中控制台相关的API之后,发现有一个名为GetConsoleWindow的API。查找参考了部分资料后,提供如下代码,能够动态载入这个API并获得窗口句柄。

    首先需要全局声明:

    typedef HWND (WINAPI *PROCGETCONSOLEWINDOW)();
    PROCGETCONSOLEWINDOW GetConsoleWindow;
    

    然后再Main()函数开头中输入以下内容:

    HMODULE hKernel32 = GetModuleHandle("kernel32");
    GetConsoleWindow = (PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32,"GetConsoleWindow");
    

    完成了动态载入API函数GetConsoleWindow的任务。需要使用时可如下:

    HWND cmd=GetConsoleWindow();
    

    个人认为,使用API函数GetConsoleWindow是最安全,也是最好的方法。在更大的控制台编程中,可能随时需要用到AttachConsole来改变程序的宿主控制台,这个时候再用前两种方法就不够好了。尽管载入的代码很长,但是通用性更高。

    
    展开全文
  • 你对控制台程序的第一感受是什么,是否觉得黑漆漆的,死气沉沉?那么就试着让它变的活泼一点吧,下面我们就动手改变下它的字体颜色,思路非常简单,首先获取到标准输出的句柄,然后设置下控制台的文本属性就可以了。...
  • // SpyDemo.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #define MAX_TEXT_LEN 255BOOL CALLBACK EnumChildProcess(HWND hwnd, LPARAM lParam){if (hwnd == NULL) {return FALSE;}BOOL ret;...
  • // SpyDemo.cpp : 定义控制台应用程序的入口点。 //#include "stdafx.h" #include <Windows.h>#define MAX_TEXT_LEN 255BOOL CALLBACK EnumChildProcess(HWND hwnd, LPARAM lParam) { if (hwnd == NULL) { return ...
  • //--------------------------------------- // 获取控制台窗口句柄 HWND hWnd = ::FindWindow("ConsoleWindowClass",NULL); //--------------------------------------- // 注册设备 LONG lUserID; ...
  • //获取环境句柄 cliRC = SQLAllocHandle( SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); //获取连接句柄 cliRC = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); cliRC = SQLSetConnectAttr...
  • windows进程间通信的方式很多,通过获取窗口句柄,就可以用消息机制进行进程间的通信。  控制台程序不使用窗口,但可以通过创建不可见的窗口来使用消息机制进行进程间通信。  需要接受消息的进程,使用...
  • windows GUI程序用printf打印

    千次阅读 2012-09-17 16:00:28
    #include #include #include void createPrintConsole(){ // 创建控制台窗口 ... // 获取控制台的标准文本输出句柄 HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); int hCrt = _open_osfhandl
  • 1.2.2 第一个控制台应用程序 3 1.2.3 API函数的调用方法 4 1.3 本书推荐的编程环境 5 1.4 代码的风格 6 1.4.1 变量的命名 6 1.4.2 代码的对齐方式 7 1.4.3 代码的注释 8 第2章 Win32程序运行原理 9 ...
  • GUI程序打开Console

    2011-03-22 16:54:00
    Windows GUI程序可能会有这样的需求: 看到程序运行时print输出的一些信息 1 AllocConsole();//打开控制台窗口以显示调试信息 2 SetConsoleTitleA("Debug Win");...//获取控制台输出句柄 4 INT hCrt = _open_o...
  • // 获取标准输入输出设备句柄 HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFO bInfo; INPUT_RECORD mouseRec; DWORD ...
  • 如何获取到cmd.exe中的消息

    千次阅读 2010-01-16 18:11:00
    比如点击鼠标右键弹出菜单的消息,我用spy++无法获取到cmd窗口,请高手帮忙谢谢A:DOS程序通过一个名为Winoldap的控制台程序来运行,而这个程序则是在32位Windows控制台窗口中运行。原理上,Winoldap利用x86的...
  • C语言如何检测鼠标的位置

    千次阅读 2019-10-30 21:54:58
    利用程序实现检测鼠标位置功能,事件... //定义变量:hStdin 本控制台程序句柄;cNumRead 获取消息数目;fdwMode用来设置控制台接收消息类型;irInBuf用来存储读取到的事件。 HANDLE hStdin; DWORD cNumRead,...
  • 心形图案

    2019-09-12 04:02:11
    #include<stdio.h> #include<math.h> #include<windows.h> // 获取控制台窗口句柄 微软官方网站的程序 直接拿来用了 HWND GetConsoleHwnd(void) { #define MY...
  • Microsoft Windows 系统错误代码简单分析:  0000 操作已成功完成。  0001 错误的函数。  0002 系统找不到指定的文件。  0003 系统找不到指定的路径。  0004 系统无法打开文件。  0005 拒绝访问。...
  • 升级加密狗驱动程序,增加了对 Windows 7, Vista 等操作系统的支持。 5. 操作系统界面功能支持库(shell.fne)中的“执行()”命令增加一个参数“窗口显示方式”,作用与核心库“运行()”命令的同名参数一致。 6. ...
  • //获取控制台句柄,值为-11 SetConsoleCursorPosition(handle, coord); //移动光标到x,y处 } void chess_board()//打印棋盘 { int i, j; for (i = 0; i ; i++) for (j = 0; j ; j += 4) { ...

空空如也

空空如也

1 2 3 4
收藏数 61
精华内容 24
关键字:

获取windows控制台程序句柄