【问题标题】:How to send double click on keyboard focused object from c++?如何从 C++ 发送双击键盘焦点对象?
【发布时间】:2011-07-13 01:03:24
【问题描述】:

问题是如何将双击发送到已经被键盘聚焦的对象?例如,假设我的鼠标位于屏幕右下角,如果我按 WIN+E 打开资源管理器,然后按 SPACE -> 我将获得焦点到磁盘(例如 c:\ 磁盘),所以我想知道可以向其发送双击的焦点在什么坐标上。 c++ 中有什么函数可以为我们做这件事吗?

【问题讨论】:

  • 你真正的目标是什么?在特定文件夹中打开资源管理器?

标签: c++ winapi keyboard focus send


【解决方案1】:
  mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); 
  Sleep(10); 
  mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); 
  Sleep(10); 
  // Click Two 
  mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); 
  Sleep(10); 
  mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); 

来自谷歌:

http://groups.google.com/group/borland.public.delphi.winapi/browse_thread/thread/f1380942baf5c1ae?pli=1

http://msdn.microsoft.com/en-us/library/ms646260(v=vs.85).aspx

【讨论】:

    【解决方案2】:

    我不确定这是否可行-在您的示例中,资源管理器窗口突出显示了驱动器对象-您需要某种方法来获取资源管理器窗口中对象的坐标(您无法控制,对吧? )

    双击窗口并不难——但窗口内发生的事情很难确定。

    【讨论】:

      【解决方案3】:

      您可以使用GetFocus 函数找到当前聚焦的窗口。但通常没有办法找到发送双击事件的位置。您可以使用GetWindowRect 函数轻松找出任何窗口的尺寸和屏幕坐标。您可以将该事件发送到窗口的中心或其任何角落或其他任何地方,在某些情况下就足够了。

      在您的示例中,您需要确定所选元素在屏幕上的位置,并且该元素不是窗口,其状态由父窗口维护,通常无法获取该信息。

      【讨论】:

      • “它的状态由父窗口维护,通常没有办法获取该信息,”是的,如果我们使用 getfocus 和 getwindowrect 方法,但我想也许还有其他方法可以发送双击之类的获取高亮对象的位置,以在监视器上寻找改变的颜色或类似的东西......
      • 没有通用的 API 来获取“突出显示的对象”。通常它是特定于应用程序的。对于资源管理器,可能可以调查其窗口层次结构并找出它正在使用的控件类型。之后,如果它们提供此类 API,则可以访问这些控件的内部。但这种技术一般不适用于任何应用程序。
      • 是的,thnx 建议,我认为没有这样的东西,...我将不得不找到其他方法..:)
      • 还没有,但我可能会看看一些在像素级别扫描颜色的函数,所以想法是获取活动窗口,而不是使用 getwindowrect 函数扫描该区域并在此之后保存颜色信息等待按键并在此之后重新扫描,然后查看更改值的颜色以及发送点击。理论上当然:)
      • 我的意思是你想完成什么?也许有另一种方法可以做到这一点。
      【解决方案4】:

      查看 MSDN 上的 MSAA 或 UIAutomation;这些 API 允许您访问低于 HWND 级别的元素信息。它们专为需要此信息的测试工具和可访问性工具而设计。例如,屏幕放大镜可以使用这些 API 来跟随键盘焦点,获取当前元素的位置,并确定要放大的正确坐标。

      MSAA/UIA 在 Windows 中得到广泛支持 - 所有系统控件(在资源管理器中使用)都支持它,IE、Firefox 和其他一些应用程序的内容也是如此。

      您可以使用 Windows SDK 中的 inspect.exe 工具来使用此功能。

      请注意,在单击目标之前,您应该检查该点处的元素是否是您期望的元素:如果有其他对话框挡在路上,则单击将转到该元素。

      【讨论】:

        猜你喜欢
        • 2018-08-30
        • 2020-11-03
        • 2011-01-12
        • 2016-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-15
        相关资源
        最近更新 更多