Windows API中的HANDLE和HWND之间的区别? [英] Difference between HANDLE and HWND in Windows API?

查看:320
本文介绍了Windows API中的HANDLE和HWND之间的区别?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用功能SetForegroundWindow(HWND hWnD).我有一些句柄,但不能作为上述函数的参数使用.我的句柄是一个线程,我想在前台运行它.

HWND和HANDLE有什么区别?

解决方案

它们只是抽象数据类型.

根据 MSDN HANDLEHWND定义为:

  • HANDLE是对象的句柄.
  • HWND是窗口的句柄.

因此,HWNDHANDLE,但并非所有HANDLE都是HWND.实际上:

typedef void *PVOID;
typedef PVOID HANDLE;
typedef HANDLE HWND;

示例

除非您知道自己在做什么,否则应该只将HWND传递给SetForegroundWindow.

HWND hWnd = FindWindow(NULL, "Calculator");
SetForegroundWindow(hWnd);

这首先使用FindWindow获取到名为计算器"的窗口的句柄,然后将该窗口置于前景.

I'm trying to use function SetForegroundWindow(HWND hWnD). I have some handles but it's not working as parameter of above function. My handle is a thread and I want to run it in foreground.

What are the differences between a HWND and a HANDLE?

解决方案

They are just abstract data types.

According to MSDN, HANDLE and HWND are defined as:

  • HANDLE is a handle to an object.
  • HWND is a handle to a window.

So, a HWND is a HANDLE, but not all HANDLEs are HWND. In fact:

typedef void *PVOID;
typedef PVOID HANDLE;
typedef HANDLE HWND;

Example

You should only pass HWND to SetForegroundWindow unless you know what you are doing.

HWND hWnd = FindWindow(NULL, "Calculator");
SetForegroundWindow(hWnd);

This first gets the handle to a window titled "Calculator" with FindWindow and then brings that window to foreground.

这篇关于Windows API中的HANDLE和HWND之间的区别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆