1.我有一个应用程序,我试图从另一个表单中查找所有按钮。我正在使用接下来的 3 个 API 函数:
[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string className, string windowTitle);
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);
在我的程序中,我检查我要检查的应用程序是否正在运行,如果是,我执行以下操作:
Process[] uWebCam = Process.GetProcessesByName("asd.vshost");
if (uWebCam.Length != 0)
{
IntPtr ptr = uWebCam[0].MainWindowHandle;
IntPtr x = FindWindowByIndex(ptr, 0);
const int BM_CLICK = 0x00F5;
SendMessage(x, BM_CLICK, IntPtr.Zero, IntPtr.Zero);
}
这是我试图通过索引 (0, 1, ...) 找出按钮的功能:
static IntPtr FindWindowByIndex(IntPtr hWndParent, int index)
{
if (index == 0)
return hWndParent;
else
{
int ct = 0;
IntPtr result = IntPtr.Zero;
do
{
result = FindWindowEx(hWndParent, result, "Button", null);
if (result != IntPtr.Zero)
++ct;
}
while (ct < index && result != IntPtr.Zero);
return result;
}
}
但是程序没有按下另一种形式的第一个按钮(索引 0 按钮)
2.是否有任何程序可以从正在运行的进程中找到所有按钮名称?我试过 Spy++ 但我没有发现任何有用的东西......