使用 user32.dll 获取特定窗口的句柄

Posted

技术标签:

【中文标题】使用 user32.dll 获取特定窗口的句柄【英文标题】:Get handle of a specific window using user32.dll 【发布时间】:2011-08-08 10:45:51 【问题描述】:

如何?

谁能给我一个简短的例子?

【问题讨论】:

【参考方案1】:

尝试以下方法:

// For Windows Mobile, replace user32.dll with coredll.dll
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

// Find window by Caption only. Note you must pass IntPtr.Zero as the first parameter.

[DllImport("user32.dll", EntryPoint="FindWindow", SetLastError = true)]
static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName);

// You can also call FindWindow(default(string), lpWindowName) or FindWindow((string)null, lpWindowName)

您可以按如下方式使用这些声明

// Find window by Caption
public static IntPtr FindWindow(string windowName)

    var hWnd = FindWindow(windowName, null); 
    return hWnd;

这是代码的简洁版本:

public class WindowFinder

    // For Windows Mobile, replace user32.dll with coredll.dll
    [DllImport("user32.dll", SetLastError = true)]
    static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
    
    public static IntPtr FindWindow(string caption)
    
        return FindWindow(String.Empty, caption);
    

【讨论】:

我如何从主要访问这些方法? 我把这个方法称为:例如 FindWindow("notepad")? 我怎么知道处理程序被激活了?谢谢 如何获取 windowText 和 className?因为目前我没有这个元素。 我不得不使用FindWindow(null, caption); 而不是FindWindow(String.Empty, caption);

以上是关于使用 user32.dll 获取特定窗口的句柄的主要内容,如果未能解决你的问题,请参考以下文章

C# 获取窗体的句柄和获取窗体中的空间

Winform API "user32.dll"中的函数

无法获得窗口句柄?

获取鼠标句柄

Unity3D 获取主窗口句柄

c# 获得一个程序的窗口句柄,并且修改它的标题