在Windows中全局检测双击[关闭]

Posted

技术标签:

【中文标题】在Windows中全局检测双击[关闭]【英文标题】:Detect Double Click Globally in Windows [closed] 【发布时间】:2012-10-02 19:02:39 【问题描述】:

我想编写一个在后台运行的 Windows 程序,并打印出下一次鼠标双击事件发生的确切时间(精确到毫秒)。具体来说,我想要双击桌面上某个 .exe 文件的确切时间。有没有办法做到这一点,如果有,能否提供一些简单的示例代码?

【问题讨论】:

必须是双击还是正在运行的程序?对于后者,我认为您可以使用某种外壳挂钩,但我从未使用过外壳挂钩。 打包exe会容易得多,创建自己的执行打印的exe并调用其他exe。 @chris - 我希望它是双击,因为我想要 CPU 收到指令后的时间。 @Guvante - 你的意思是编写一个 .exe 来打印它的打开时间吗? @JohnRoberts,如果你懒得等待程序初始化,我真的建议不要做一堆额外的工作来弄清楚双击了什么,而是等待那一刻就在外壳决定打开它之后。我相当肯定WH_SHELL 的某些方面会告诉您它何时决定运行文件,并且根据该信息进行检查会容易得多。 【参考方案1】:

制作 Windows 挂钩可能是最好的解决方案。 查看有关钩子的文档。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms632589%28v=vs.85%29.aspx

看看这个演示:

http://code.msdn.microsoft.com/windowsdesktop/CppWindowsHook-06957865

【讨论】:

【参考方案2】:

在某些情况下,例如 silverlight,您没有鼠标双击事件,因此您可以检查鼠标按下的时间和位置,并将其与下一次鼠标按下的时间和位置进行比较,以模拟双击动作。它是这样的:

    double mouseVerticalPosition;
    double mouseHorizontalPosition;        
    DateTime clickedTime;
    bool IsSecondClick = false;


    void button_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
       
           if(IsSecondClick)
           

             IsSecondClick = false;
             if ((y - mouseVerticalPosition == 0) & y - mouseHorizontalPosition == 0) &
             clickedTime - DateTime.Now < SOMETIME )
              
               // mouse double click happenes
             
           
           else
           
             IsSecondClick = true;
             clickedTime = DateTime.Now;
             mouseVerticalPosition = e.GetPosition(null).Y;
             mouseHorizontalPosition = e.GetPosition(null).X;               

           
       

【讨论】:

以上是关于在Windows中全局检测双击[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

WINDOS 远程桌面总被人暴力破解 如何限制登录次数

LINUX 如何开放端口和关闭端口

用优化大师检测到系统漏洞:补丁名称KB950582,补丁描述WINDOES XP更新程序。

制作windos后台服务进程类型nohup命令

windos下安装pgAdmin

Windows/C++:检测窗口之间焦点何时改变(全局)