关于句柄的使用--------------------

lucbesson 2004-10-09 04:52:17

a 句柄是什么 句柄有什么作用?


b api 函数[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern int MessageBox
(
int hWnd,
string text,
string caption,
uint type);
为什么hwnd设置为可以 设置为(int)button1.Handle也可以呢 ?
两者有什么区别吗 ?
使用(int)button1.Handle能解释一下吗 ?
经过调试
MessageBox((int)button1.Handle, "Hello World", "Platform Invoke Sample", 0);



MessageBox(0, "Hello World", "Platform Invoke Sample", 0);
效果是一样的




请高手朋友指点吧!
...全文
176 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
BearRui 2004-10-10
  • 打赏
  • 举报
回复
findwindow or findwindowex
lucbesson 2004-10-10
  • 打赏
  • 举报
回复
返回某一指定的应用程序的句柄 如何做到呢 ?
GetActiveWindow 只能获得应用程序本身的handle!

jinbingg 2004-10-10
  • 打赏
  • 举报
回复
不错的问题 我也上了一课 thank 搂住
lucbesson 2004-10-10
  • 打赏
  • 举报
回复
谢谢 非常的感谢。

现在终于明白了 !
BearRui 2004-10-10
  • 打赏
  • 举报
回复
睡觉了,明天还要上课,楼主慢慢研究。

在下也不是什么高手,不过要是帮的上忙,一定知无不言!!!

晚安!!!
BearRui 2004-10-10
  • 打赏
  • 举报
回复
为什么hwnd设置为0可以。

不是每个API函数都设置为0就行的,你先搞清楚MessageBox这个API的hWnd参数是什么意思:

这个参数可以指定你生成的MessageBox的拥有者,如果用0或null,

就代表这个MessageBox没有拥有者,但仍然会产生MessageBox!!!
BearRui 2004-10-10
  • 打赏
  • 举报
回复
你问如何枚举出 所有控件的handle啊?

不知道要达到什么目的,一般都没这个必要。

一般是窗口的都会有handle这个属性的。

如果一定枚举的话,就用EnumWindows和EnumChildWindows 这2个API。

不过看你好象是刚刚学API,还是先学习基础的,然后再来用这2个函数吧!!!
lucbesson 2004-10-10
  • 打赏
  • 举报
回复
为什么hwnd设置为0可以, 设置为(int)button1.Handle也可以呢
请讲一下吧。
BearRui 2004-10-10
  • 打赏
  • 举报
回复
为什么hwnd设置为可以 设置为(int)button1.Handle也可以呢 ?
两者有什么区别吗 ?

楼主是不是少打了什么啊。

hwnd必须设置为窗口的句柄,一个button也是一个窗口!!!
BearRui 2004-10-10
  • 打赏
  • 举报
回复
在调用 DLL 函数前必须理解的另外一个重要概念是句柄。句柄是一个 32 位的正整数,Microsoft® Windows® 用它来识别窗体或其他对象,例如字体或位图。

在 Windows 中,窗口可以有许多种。窗口可以是屏幕上的一块矩形封闭区域,比如您熟悉的应用程序窗口。窗体上的控件(例如列表框或滚动条)也可以是窗口,但并不是所有类型的控件都是窗口。桌面上的图标和桌面本身也是窗口。

因为所有这些类型的对象都是窗口,所以 Windows 可以用类似的方式处理它们。Windows 给每个窗口一个唯一的句柄,通过句柄操纵该窗口。许多 API 函数可返回句柄或者接受句柄作参数。

创建窗口时,Windows 给它指派一个句柄,窗口消失后句柄被释放。虽然句柄在窗口的整个生存期内保持不变,但不能保证某窗口在被损坏并重新创建后还使用原来的句柄。所以,如果在变量中存储了一个句柄,请记住窗口损坏后句柄就失效了。

例如 GetActiveWindow 函数就可以返回窗口的句柄,这里的窗口是一个当前活动的应用程序窗口。GetWindowText 函数接受窗口的句柄,如果该窗口有标题,则返回标题。下面的过程用 GetActiveWindow 返回活动窗口的句柄,用 GetWindowText 返回该窗口的标题
lucbesson 2004-10-09
  • 打赏
  • 举报
回复
句柄:

在计算机中,所有的数据都是由一系列二进制数值所表示的,像窗口,文件,图片等大型的作为一个整体的数据,系统自动赋予一个名字来命名它,这个名字就是句柄。窗口句柄就是窗口在系统中的名字

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧