首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在 Win32 上,如何使用 Perl、Python 或 Ruby(或 C)检测是否按下了 Left Shift 或 Right ALT?

在 Win32 上,您可以使用以下方法分别检测 Left Shift 和 Right ALT 是否被按下:

  1. Perl
代码语言:perl
复制
use Win32::API;

my $GetKeyState = Win32::API->new('user32', 'GetKeyState', 'I', 'I');

sub is_key_pressed {
    my $key_code = shift;
    return (($GetKeyState->Call($key_code) >> 15) & 1) == 1;
}

sub left_shift_pressed {
    return is_key_pressed(0x10);
}

sub right_alt_pressed {
    return is_key_pressed(0x12);
}

print "Left Shift Pressed: " . (left_shift_pressed() ? "Yes" : "No") . "\n";
print "Right ALT Pressed: " . (right_alt_pressed() ? "Yes" : "No") . "\n";
  1. Python
代码语言:python
代码运行次数:0
复制
import ctypes

GetKeyState = ctypes.windll.user32.GetKeyState

def is_key_pressed(key_code):
    return (GetKeyState(key_code) >> 15) & 1 == 1

def left_shift_pressed():
    return is_key_pressed(0x10)

def right_alt_pressed():
    return is_key_pressed(0x12)

print("Left Shift Pressed: Yes" if left_shift_pressed() else "No")
print("Right ALT Pressed: Yes" if right_alt_pressed() else "No")
  1. Ruby
代码语言:ruby
复制
require 'fiddle'

GetKeyState = Fiddle::Function.new(Fiddle::Handle['user32'], 'GetKeyState', [Fiddle::TYPE_INT], Fiddle::TYPE_INT)

def is_key_pressed(key_code)
    (GetKeyState.call(key_code) >> 15) & 1 == 1
end

def left_shift_pressed
    is_key_pressed(0x10)
end

def right_alt_pressed
    is_key_pressed(0x12)
end

puts "Left Shift Pressed: Yes" if left_shift_pressed
puts "Right ALT Pressed: Yes" if right_alt_pressed
  1. C
代码语言:c
复制
#include<windows.h>
#include<stdio.h>

int is_key_pressed(int key_code) {
    return (GetKeyState(key_code) >> 15) & 1 == 1;
}

int left_shift_pressed() {
    return is_key_pressed(0x10);
}

int right_alt_pressed() {
    return is_key_pressed(0x12);
}

int main() {
    printf("Left Shift Pressed: %s\n", left_shift_pressed() ? "Yes" : "No");
    printf("Right ALT Pressed: %s\n", right_alt_pressed() ? "Yes" : "No");
    return 0;
}

请注意,这些示例代码仅适用于 Windows 平台。如果您需要在其他平台上检测按键状态,请考虑使用其他库或方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

QT5静态编译教程,主要针对vs2012

QT5,VS2012静态编译,所有的库准备充分的话qwebkit也可以静态编译通过,但是我编译的版本使用中如果用了QWEBVIEW控件在连接时会出错。 注:我自己编译的环境是:win server 2012 dc版 , vs2012 with update1,qt-everywhere-opensource-src-5.0.2,perl和rupy都是在qt官方给的地址下的最新的X64的,python是2.7 X64的、、、 本文主要针对qt 5.X版本,qt4.X的依赖没那么多,可以酌情参考下,但是好像用途不大、、 编译器主要针对VS2012,vs2010和mingw的就编译时参数换一个就行了,文中会有简单提起、、、 编译主要是静态编译,但是静态编译的话问题很多,我虽然不报错编译完成,但是使用没测试,已知的是我编译的版本qtwebkit使用时 QWEBVIEW控件在连接时会出错。如果您要是动态编译的话在编译依赖库(icu,openssl)时动态编译就行了,在configure时不要-static选项即可。 虽然我编译通过了,但是还是借鉴了网上很多教程,先发借鉴的链接,尊重版权: http://www.ktao.net/archives/125  //这个编译好像只编译了qtbase,qtwebkit那块原来我准备的连接库不足,没成功,就没再测试。 http://www.cnblogs.com/wader/archive/2013/01/19/qt5_vc2012.html //这个是说动态连接的,但是很对。 http://qt-project.org/wiki/Building_Qt_5_from_Git  //官方的编译方法 1、准备编译需要的环境   1.1准备编译器       这个不需要多说了吧?就是安装vs或者mingw、、、       vs系列可以去:http://msdn.itellyou.cn/ 下载,vs2012或者2010别用太低的版本,qt5要用c++11,只有这俩部分支持、、、       mingw您可以用qt官方mingw版的,自带的版本,您也可以自己去下,用tdm-gcc安装方便点:http://tdm-gcc.tdragon.net/download,您也可以自己搜、、    1.2准备其他需要的工具     qt5还需要perl,pyhon,rupy、、    Get Perl from: http://www.activestate.com/activeperl/downloads [activestate.com]    Get Python from: http://www.python.org/download/releases/ [python.org] //有说需要用2.7版版本的。3.3的不行,我是用的2.7,没试试3.3的    Get Ruby from: http://www.rubyinstaller.org/ [rubyinstaller.org] 2.准备源码     这个我啥也不用说了吧、、、去官网下载,http://releases.qt-project.org/digia/ 这儿可以下载最新的、、、或者用git下载(这个我也不会用)、、、   2.x配置源码:如果需要静态编译就需要了,动态编译请跳过:     先说vs的:修改 源码目录\qtbase\mkspecs\win32-msvc*\qmake.conf   //win32-msvc*,*是您用的vs版本、、、       找到这几句;                       QMAKE_CFLAGS_WARN_OFF   = -W0                        QMAKE_CFLAGS_RELEASE    = -O2 -MD                      QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi                     QMAKE_CFLAGS_DEBUG      = -Zi -MDd     把MD和MDT改成MT和MTD,如下: //因为md是动态连接运行时库,MT是把运行时库包含到程序里                       QMAKE_CFLAGS_WARN_OFF   = -W0                        QMAKE_CFLAGS_RELEASE    = -O2 -MT                      QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi                     QMAKE_CFLAG

03

键帽高度尺寸图及USB协议中HID设备描述符和键值表

鼠标发送给PC的数据每次4个字节 BYTE1 BYTE2 BYTE3 BYTE4 定义分别是: BYTE1 -- |--bit7: 1 表示 Y 坐标的变化量超出-256 ~ 255的范围,0表示没有溢出 |--bit6: 1 表示 X 坐标的变化量超出-256 ~ 255的范围,0表示没有溢出 |--bit5: Y 坐标变化的符号位,1表示负数,即鼠标向下移动 |--bit4: X 坐标变化的符号位,1表示负数,即鼠标向左移动 |--bit3: 恒为1 |--bit2: 1表示中键按下 |--bit1: 1表示右键按下 |--bit0: 1表示左键按下 BYTE2 -- X坐标变化量,与byte的bit4组成9位符号数,负数表示向左移,正数表右移。用补码表示变化量 BYTE3 -- Y坐标变化量,与byte的bit5组成9位符号数,负数表示向下移,正数表上移。用补码表示变化量 BYTE4 -- 滚轮变化。 由于手上没有USB鼠标,对BYTE1的4-7位没有测试,对于BYTE2 BYTE3做个测试,BYTE1的4-7全为0的时候,BYTE2 BYTE3的正负表示鼠标移动方向

03
领券