从Process.MainWindowHandle

时间:2015-08-13 14:39:09

标签: c# .net winapi pinvoke findwindow

我想从进程名称获取文本框句柄。我用Spy ++检查了它(这是一个在互联网上发现的exe,所以没什么特别的):

enter image description here

现在我想得到这个TEdit,但它总是返回NULL。我做错了什么?

[DllImport("user32.dll", SetLastError = true)]
private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string className, string lpszWindow);

private static void Main(string[] args)
{
    var processes = Process.GetProcesses();
    var proc = Array.Find(processes, x => string.Equals(x.MainWindowTitle, "ExeLock", StringComparison.OrdinalIgnoreCase));
    var handle = proc.MainWindowHandle;


    //IntPtr edit = FindWindowEx(handle, IntPtr.Zero, "TEdit", null);

    IntPtr hwndparent = handle, hwndchild = IntPtr.Zero;
    do
    {
        hwndchild = FindWindowEx(hwndparent, hwndchild, null, null);
    } while (hwndchild != IntPtr.Zero);
}

1 个答案:

答案 0 :(得分:0)

我没有找到它,因为它创建了多个窗口,其中一些是隐藏的(包括“主窗口”)。这是截图:

enter image description here

所以我只是枚举一个进程的每个窗口,找到ProcessDataService,然后一切正常。这是我的代码:

TFormPassDialog