如何从c ++发送双击键盘对象?

时间:2011-03-10 20:36:27

标签: c++ winapi keyboard focus send

问题是如何将双击发送到已经被键盘聚焦的对象?例如,假设我的鼠标位于屏幕右下方位置,如果我按下WIN + E打开资源管理器,然后按SPACE - >我将焦点转移到磁盘(例如c:\ disk),所以我想知道哪个坐标是可以发送双击的焦点。 c ++中是否有任何功能可以帮助我们?

4 个答案:

答案 0 :(得分:2)

  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

答案 1 :(得分:0)

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

向窗口发送双击并不困难 - 但窗口内发生的事情很难确定。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

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

您可以使用作为Windows SDK一部分的inspect.exe工具来使用此功能。

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