我想使用 SendMessage/PostMessage 将一些键发送到应用程序文本框。我使用 Microsoft Spyxx 来获取此文本框的类名。现在我的问题是这个应用程序中有几个文本框具有相同的类名(“WindowsForms10.EDIT.app.0.2e0c681”)和相同的窗口名。
如何获得正确的手柄?
PS:我用 Visual c# 2008 express 在 c# 中编码
我想使用 SendMessage/PostMessage 将一些键发送到应用程序文本框。我使用 Microsoft Spyxx 来获取此文本框的类名。现在我的问题是这个应用程序中有几个文本框具有相同的类名(“WindowsForms10.EDIT.app.0.2e0c681”)和相同的窗口名。
如何获得正确的手柄?
PS:我用 Visual c# 2008 express 在 c# 中编码
好吧,对于可以使用的文本框,您一定知道一些事情:例如,您可以搜索具有特定所有者的文本框,并检查前面的子窗口是什么...如果控件有标签,您可以首先找到标签,然后找到位于其右侧的控件。
如果不同的 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 );