win32窗口上的自定义属性

时间:2010-02-01 13:28:54

标签: winforms winapi

我听说(好的,在http://www.ddj.com/windows/184416861阅读),可以在Win32窗口上设置自定义属性。

麻烦的是,上面文章的下载是在一个不允许我进入的ftp服务器上。

作为一些背景信息,我有一个.NET应用程序。注册主窗口以处理自定义窗口消息。从单独的应用程序,我需要将消息发布到此窗口。随着标题的变化,我无法通过标题找到窗口。我无法通过窗口类找到它,因为窗口类对于该app域中的所有窗体都是相同的。

理想情况下,我想在主窗体(Form1)的Win32窗口上设置一个自定义属性,即是,这是form1。然后,当我枚举这个应用程序的窗口时,我可以通过查看此自定义属性是否存在来判断这是必需的表单。

干杯,

史蒂夫

2 个答案:

答案 0 :(得分:2)

有关窗口属性的概述,请参阅here。基本上,您调用Win32 API函数SetProp来设置窗口属性,并调用GetProp来检索它。还有一些用于枚举属性等的函数,但听起来好像只需要SetProp和GetProp。

答案 1 :(得分:2)

正如Martin所说,答案是Win32 API GetProp和SetProp。

这是我在创建主窗体时现在所做的事情:

[DllImport("user32.dll", SetLastError=true)]
static extern bool SetProp(IntPtr hWnd, string lpString, IntPtr hData);

SetProp( this.Handle, @"foo", new IntPtr( 1 ) ) ;

现在,我可以在枚举窗口时检查此属性:

[DllImport("user32.dll")]
private static extern IntPtr GetProp(IntPtr hWnd, string lpString);

IntPtr result = GetProp( (IntPtr) hWnd, @"foo" ) ;