如何使用 WinApi/user32.dll 或类似的东西远程执行 ListBox 的 ListBox1_DoubleClick 事件?

Posted

技术标签:

【中文标题】如何使用 WinApi/user32.dll 或类似的东西远程执行 ListBox 的 ListBox1_DoubleClick 事件?【英文标题】:How can I remotely execute the ListBox1_DoubleClick event of a ListBox using WinApi/user32.dll or something similar? 【发布时间】:2019-12-29 01:50:52 【问题描述】:

我需要从另一个应用程序调用 ListBox1_DoubleClick 事件。

看看下面我认为应该是怎样的代码:

using System.Runtime.InteropServices;

public class RemoteControl

    [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
    private static extern IntPtr FindWindowByCaption(IntPtr zeroOnly, string lpWindowName);

    public void SendClickLB(string sWinTitle, int iChildHandler)
    
        var windowHWnd = FindWindowByCaption(IntPtr.Zero, windowTitle);
        var childWindows = GetChildWindows(windowHWnd);
        IntPtr hWnd = childWindows.ToArray()[index];

        const int WM_LBUTTONDBLCLK = 0x0203;

        SendMessage(hWnd, WM_LBUTTONDBLCLK, new IntPtr(0), new IntPtr(0));
    

【问题讨论】:

嗨@EdPlunkett,非常感谢您的帮助。我已经在使用 ListBox 处理程序,至于在参数 lParam 中发送坐标,我将看到如何做到这一点。但是使用 WM_LBUTTONDBLCLK 它还没有工作。 这可能不是很好的建议。使用 UI 自动化。 @EdPlunkett,我可以获取 ListBox 处理程序,我什至可以使用 LB_GETTEXT 获取 Item 的文本,但是 ListBox 事件我仍然不知道如何触发它们。 使用UI Automation。 谢谢,伙计们,我会尽快研究 UI 自动化并利用它来解决我的问题。非常感谢你。 【参考方案1】:

我能够使用 user32.dll 远程触发 ListBox 的 DbClick 事件。

我用来达到预期结果的步骤如下:

1 - 首先我必须使用 ClientToScreen (hWnd, ref point) 函数通过 Listbox 句柄获取 X、Y 坐标;

2 - 在我通过获得的坐标将鼠标移动到所需位置并使用函数 mouse_event (MouseEventFlag dwFlags, int dx, int dy, int cButtons, int dwExtraInfo) 发送 DoubleClick 之后;

非常感谢。

【讨论】:

以上是关于如何使用 WinApi/user32.dll 或类似的东西远程执行 ListBox 的 ListBox1_DoubleClick 事件?的主要内容,如果未能解决你的问题,请参考以下文章

如何包含我的非托管 dll 需要的 dll,例如 kernel32.dll

如何使用 Kernel32.dll 获取处理器 ID

如何在没有regsvr32的情况下注册glut32.dll?

如何从 javascript 调用 user32.dll 方法

如何在 Windows 中使用 rundll32.exe 删除文件?

使用 user32.dll 获取特定窗口的句柄