FindWindowEx - 如果有多个具有相同类名的文本框,请选择文本框

时间:2010-02-01 12:53:30

标签: c# findwindow

我想使用SendMessage / PostMessage将一些密钥发送到应用程序文本框。我使用Microsoft Spyxx获取此文本框的类名。现在我遇到的问题是这个应用程序中有几个文本框具有相同的类名(“WindowsForms10.EDIT.app.0.2e0c681”)和相同的Window名称。

如何获得正确的句柄?

PS:我用c#编写了#c#2008 express

2 个答案:

答案 0 :(得分:0)

嗯,你必须知道你可以使用的文本框:例如,你可以搜索一个具有特定所有者的文本框,并检查前面的子窗口是什么...如果控件有一个标签,您可以先找到标签,然后找到位于其右侧的控件。

答案 1 :(得分:0)

如果不同的hWnd值返回API函数的相同结果

[DllImport( "user32.dll" )]
public static extern int GetClassNameW( HandleRef hWnd, [MarshalAs( UnmanagedType.LPWStr )] StringBuilder className, int nMaxCount );

[DllImport( "user32.dll" )]
public static extern int GetWindowTextLength( HandleRef hWnd );

[DllImport( "user32.dll" )]
public static extern int GetWindowTextW( HandleRef hWnd, [MarshalAs( UnmanagedType.LPWStr )] StringBuilder text, int maximum );

您可能不得不根据对象在表单上的位置进行编辑

public struct WindowPlacement {
  public int length;
  public int flags;
  public int showCmd;
  public Point minPosition;
  public Point maxPosition;
  public Rectangle normalPosition;
}

[DllImport( "user32.dll" )]
public static extern bool GetWindowPlacement( HandleRef hWnd, ref WindowPlacement position );