C# 有没有办法检查窗体是否有窗体边框?(按手柄)

C# 有没有办法检查窗体是否有窗体边框?(按手柄),c#,winforms,handle,formborderstyle,C#,Winforms,Handle,Formborderstyle,我想通过句柄检查窗体是否有窗体边框。 并且,句柄来自另一个应用程序 我该怎么办? 请帮帮我。。谢谢 控件本身实际上没有句柄。实际返回父窗口的.Handle 发件人: 获取控件绑定到的窗口句柄 如果查看用于控制的反编译源代码,您将看到: internal IntPtr HandleInternal { get { return this.window.Handle; } } 编辑 我上面说的完全不正确。为了历史的缘故,我要离开这里 通过在表单上放置一个按钮并查看它们的IntP

我想通过句柄检查窗体是否有窗体边框。 并且,句柄来自另一个应用程序

我该怎么办? 请帮帮我。。谢谢

控件本身实际上没有句柄。实际返回父窗口的.Handle

发件人:

获取控件绑定到的窗口句柄

如果查看用于控制的反编译源代码,您将看到:

internal IntPtr HandleInternal
{
  get
  {
    return this.window.Handle;
  }
}
编辑

我上面说的完全不正确。为了历史的缘故,我要离开这里


通过在表单上放置一个按钮并查看它们的IntPtr句柄值,可以很容易地证明这一点。它们是不同的。

Windows窗体?本机Win32?还有别的吗请注意,作为一种语言,C对句柄和窗口等一无所知,所以您的问题必须是关于特定的UI框架。请贴上相应的标签。Win32甚至不区分windows和控件。从技术上讲,它们都是窗口,尽管属性不同。。我只是想知道它是否有一个FormBorder。句柄来自另一个应用程序。@jn4kim:那么这应该是您的问题。正如斯塔克斯所说,控件本身就是窗口。@jn4kim:我的问题仍然存在。你好像在说Winforms。但如果另一个应用程序是本机代码或WPF呢?FormBorder的概念对于这些可能毫无意义…嗯,发布反编译的框架代码是一个好主意/合法吗。。。?我不想骗你,但这可能值得一想。PS:如果没有更多关于这个窗口的知识,反编译的代码几乎毫无意义。谢谢你的回答,但这不是我想知道的,我想我没有写这个问题correctly@stakx我认为很明显,控件本身没有句柄,而是返回父窗口的句柄。正如MSDN文本所描述的那样。@Jonathon:-1。我相信你的回答是不正确的,我相信控制也有一个把柄。您的回答实际上支持这一点:按照Win32 API的说法,控件在技术上也是windows,而Winforms是基于Win32的,所以我认为您错误地认为窗口句柄意味着父窗口句柄。相反,Control.Handle窗口句柄引用控件的内部HWND。@stakx您完全正确。我刚刚做了一个快速测试,事实上,表单和表单上的按钮的IntPtr Handle值是不同的。在使用Spy++100次之前,我应该想到这一点。如果使用IntPtr,不应该是GetWindowLongPtr吗?如果使用Int32,是否使用GetWindowLong?或者:为什么要进行.ToInt64转换?@stakx是的。我不记得如何把我头顶上的窗户样式去掉,然后从做错事的人那里粘贴下来。我已经更正了它。GetWindowLongPtr是不必要的,因为WS_BORDER和WS_THICKFRAME位都在前32位之内。
[DllImport("user32.dll")]
extern static int GetWindowLong(IntPtr hWnd, int nIndex);

const int GWL_STYLE = -16;
const int WS_BORDER = 0x00800000;  // thin border
const int WS_THICKFRAME = 0x00040000;  // sizing (thick) border

public static bool NativeWindowHasBorder(IntPtr hWnd)
{
     return (GetWindowLong(hWnd, GWL_STYLE) & (WS_BORDER | WS_THICKFRAME)) != 0;
}