我想使用SendMessage / PostMessage将一些密钥发送到应用程序文本框。我使用Microsoft Spyxx获取此文本框的类名。现在我遇到的问题是这个应用程序中有几个文本框具有相同的类名(“WindowsForms10.EDIT.app.0.2e0c681”)和相同的Window名称。
如何获得正确的句柄?
PS:我用c#编写了#c#2008 express
答案 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 );