1

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

如何获得正确的手柄?

PS:我用 Visual c# 2008 express 在 c# 中编码

4

2 回答 2

0

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

于 2010-02-21T22:24:11.127 回答
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 );
于 2010-02-22T23:45:12.397 回答