在delphi中,很多窗体和控件的鼠标事件里面已经将鼠标按键状态封装好传给响应事件的函数,所以这种情况直接使用就可以,但在某些时候,我们没有这些事件可以处理时,想判断鼠标按键是否按下的状态,就需要借助API或者消息了,使用API和消息可分别应对2种不同情形:

1)使用API: GetAsyncKeyState,适合实时检测,下面代码演示判断鼠标是否按下左键

function IsMouseLButtonDown():Boolean;
begin
   Result := (Windows.GetAsyncKeyState(VK_LBUTTON) and $FF00) > 0;
end;

注:GetAsyncKeyState也可以用于检测键盘各种按键的状态,如可以检测CTRL按键、F1按键等是否按下,具体查MSDN;

有时候判断鼠标的时机比较特殊,需要在用户按下鼠标后才去检测,这时候API是没法检测的,因为API是获取当前时刻的状态,用户按下后,鼠标按键已经被放开,这时候使用API去检测,只能检测到没有鼠标按键按下,这种情况下我们需要使用下面消息的方式。

2)使用消息,同样也是delphi代码,不过其他语言都是相通的,毕竟都是使用Windows的资源

在Application的OnMessage事件中处理(如果重载Form的WndProc窗口过程,将无法检测到控件或菜单等的消息)

.....

...

Application.OnMessage := MessageEvent;

.......

....

procedure TForm1.MessageEvent(var Msg: TMsg; var Handled: Boolean);
begin
 if Msg.message = WM_LBUTTONDOWN then
 begin
   //鼠标左键被按下,其他按键使用其他消息,如 WM_RBUTTONDOWN、WM_MBUTTONDOWN等
 end;
end;

【Windows】如何判断当前鼠标是否按下左键或右键的更多相关文章

  1. JavaScript经典代码【二】【javascript判断用户点了鼠标左键还是右键】

    IE 下 onMouseDown 事件有个 events.button 可以返回一个数值,根据数值判断取得用户按了那个鼠标键 events.button==0 默认.没有按任何按钮. events.b ...

  2. 【转】 js怎么区分出点击的是鼠标左键还是右键?

    IE 下 onMouseDown 事件有个 events.button 可以返回一个数值,根据数值判断取得用户按了那个鼠标键 events.button==0  默认.没有按任何按钮. events. ...

  3. Swing中如何比较好的判断鼠标左键双击

    import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; im ...

  4. win10 uwp 获取按钮鼠标左键按下

    我们可以使用PointerPressed获得鼠标右键按下,但是我们如何获得左键? 其实UWP已经没有MouseLeftButtonDown,于是我们可以使用一个简单方法去获取鼠标左键按下. 我们在xa ...

  5. 2018-2-13-win10-uwp-获取按钮鼠标左键按下

    title author date CreateTime categories win10 uwp 获取按钮鼠标左键按下 lindexi 2018-2-13 17:23:3 +0800 2018-2- ...

  6. DirectX11 With Windows SDK--05 键盘和鼠标输入

    前言 提供键鼠输入可以说是一个游戏的必备要素.在这里,我们不使用DirectInput,而是使用Windows的消息处理机制,不过要从头开始实现会让事情变得很复杂.DXTK提供了鼠标输入的Mouse. ...

  7. Windows 设置扩展投影鼠标移出方向

    1. 连接数据线,按下 “WINDOWS” + P 按钮,选择“扩展投影”: 2.更改鼠标移出屏幕的方向:桌面右键选择“屏幕分辨率” , 移动“更改显示器外观”中两个图的相对方向即可:

  8. C# 实现WinForm窗口最小化到系统托盘代码,并且判断左右鼠标的事件

    1.设置WinForm窗体属性showinTask=false 2.加notifyicon控件notifyIcon1,为控件notifyIcon1的属性Icon添加一个icon图标. 3.添加窗体最小 ...

  9. vc 判断哪个按键 被按下 消息 按键 状态

    测试Numlock 是否是亮的 环境控制台程序: #include "stdafx.h" #include <stdio.h> #include <conio.h ...

随机推荐

  1. Spark Standalone模式伪分布式环境搭建

    前提:安装好jdk1.7,hadoop 安装步骤: 1.安装scala 下载地址:http://www.scala-lang.org/download/ 配置环境变量: export SCALA_HO ...

  2. [转]用man查看命令帮助时, 括号中的数字表示的意思

    当提及如'rn(1)', 'ctime(3)'时,它们看上去像某种函数调用,但不是. 这些数字表示可在"Unix manual"中的哪一部分找到对应的文档. 数字对应的文档如下: ...

  3. unresolved external symbol "public: virtual __thiscall...错误

    今天自己在编写类模板的程序时,遇到了如下的错误:unresolved external symbol "public: virtual __thiscall...错误 调试修改了半天程序,还 ...

  4. Oozie JMS通知消息实现--根据作业ID来过滤消息

    一,介绍 本文使用Oozie的消息通知功能,并根据JMS规范中的消息选择器(Selector)实现 根据作业的ID来过滤消息. 首先搭建好JMS Provider(ActiveMQ) ,并进行相关配置 ...

  5. h5 吸顶效果 顶部悬浮

    window.onscroll = function(){ var scrollTop = document.documentElement.scrollTop || document.body.sc ...

  6. [转]回答--python django学的很迷茫怎么办?

    作者:王一链接:http://www.zhihu.com/question/26235428/answer/36568428来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处 ...

  7. win7和win8如何设置快速启动栏

    a.在任务栏上右键 -> 工具栏 -> 新建工具栏 -> 跳出选择文件夹对话框,在文件夹里面(光标山洞处)输入这个路径,然后按回车: %userprofile%\AppData\Ro ...

  8. 图解Windows Server 2012 桌面图标

    显示桌面图标.壁纸等   1 WIN键+R键,输入:  rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0 选择你需要的图标显示到桌面去,如下图所示 ...

  9. SQL Server 数据库基础编程

    Ø Go批处理语句 用于同时执行多个语句 Ø 使用.切换数据库 use master go     Ø 创建.删除数据库   方法1.   --判断是否存在该数据库,存在就删除 if (exists ...

  10. Loadrunner:error -86401 Failed to connceted xxx.xxx.xxx.xxx:25问题解决

    [转自:http://www.51testing.com/html/00/130600-3578408.html]windows 2003上安装的LoadRunner11做为负载机在SMTP协议压测时 ...