代码之家  ›  专栏  ›  技术社区  ›  Steve Dunn supercat

Win32窗口上的自定义属性

  •  2
  • Steve Dunn supercat  · 技术社区  · 15 年前

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

    问题是,上面这篇文章的下载是在一个不让我进入的FTP服务器上。

    作为一点背景信息,我有一个.NET应用程序。注册主窗口以处理自定义窗口消息。从一个单独的应用程序,我需要向这个窗口发布消息。随着标题的变化,我找不到按标题显示的窗口。我不能通过window类找到它,因为window类对于该应用程序域中的所有表单都是相同的。

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

    干杯,

    史蒂夫

    2 回复  |  直到 14 年前
        1
  •  2
  •   Martin B    15 年前

    here 有关窗口属性的概述。基本上,您可以调用win32 api函数 SetProp 设置窗口属性和 GetProp 去找回它。还有一些函数用于枚举属性等,但听起来好像您只需要setprop和getprop。

        2
  •  2
  •   Steve Dunn supercat    15 年前

    正如马丁所说,答案是win32 apis 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" ) ;