WinAPI: จะรับสถานะ caps lock ได้อย่างไร

จะทราบได้อย่างไรว่าเปิดหรือปิด Caps Lock? ฉันพยายามค้นหามัน แต่สิ่งที่ฉันพบก็แค่สลับหรือเปิด/ปิดมัน ซึ่งตรงกันข้ามกับสิ่งที่ฉันกำลังมองหาเลย

ฉันกำลังพยายามทำสิ่งนั้นทั้งใน C++ และ Delphi
กรุณาช่วย


person SmRndGuy    schedule 16.12.2012    source แหล่งที่มา


คำตอบ (3)


คุณต้องการฟังก์ชัน GetKeyState():

http://msdn.microsoft.com/en-us/library/ms646301(VS.85).aspx

ด้วยรหัสคีย์ VK_CAPITAL รหัสคีย์เสมือนที่เหลืออยู่ที่นี่:

http://technet.microsoft.com/en-us/subscriptions/index/dd375731(v=vs.85).aspx

person HerrJoebob    schedule 16.12.2012
comment
นั่นไม่ได้รับสถานะของกุญแจเหรอ? โดยปกติแล้ว Caps lock จะใช้เป็นตัวสลับ สิ่งนี้ทำให้คุณมีสถานะสลับสำหรับทั้งเครื่องจริงหรือ? - person ; 22.12.2014
comment
ใช่แล้ว มันทำให้คุณมีสถานะสลับได้จริงๆ วิธีนี้ไม่ได้ใช้งานง่ายนักที่วิธีนี้จะให้การกดปุ่มโดยผู้ใช้ตลอดจนสถานะการสลับปุ่มโดยรวม - person Jan Feldmann; 27.08.2016
comment
สถานะคีย์ที่ส่งคืนจากฟังก์ชันนี้จะเปลี่ยนเมื่อเธรดอ่านข้อความคีย์จากคิวข้อความ สถานะไม่สะท้อนถึงสถานะระดับขัดจังหวะที่เกี่ยวข้องกับฮาร์ดแวร์ ใช้ฟังก์ชันGetAsyncKeyStateเพื่อดึงข้อมูลนั้น --msdn - person Orwellophile; 11.01.2017

ฉันพบลิงก์ และข้อมูลโค้ดด้านล่างที่อาจช่วยคุณได้

if ((GetKeyState(VK_CAPITAL) & 0x0001)!=0)
  AfxMessageBox("Caps Lock ON!");
else
  AfxMessageBox("Caps Lock OFF!");
person Mattias Josefsson    schedule 16.12.2012
comment
ใช้งานได้กับ VK_SCROLL สำหรับ Scroll Lock และ VK_NUMLOCK สำหรับ Num Lock - person Jan Feldmann; 27.08.2016
comment
ส่วนสำคัญของสิ่งนี้คือ & 0x0001 เนื่องจากข้อมูลจะถูกส่งกลับเป็นบิตที่มีลำดับต่ำ - person wrecks; 23.01.2021

ใช้ GetAsyncKeyState กับ VK_CAPITAL (0x14)

person Bernd Elkemann    schedule 16.12.2012
comment
หากฟังก์ชันสำเร็จ ค่าที่ส่งคืนจะระบุว่ามีการกดปุ่มตั้งแต่การเรียก GetAsyncKeyState ครั้งล่าสุด และขณะนี้คีย์ขึ้นหรือลง หากมีการตั้งค่าบิตที่สำคัญที่สุด คีย์จะหยุดทำงาน และหากมีการตั้งค่าบิตที่สำคัญที่สุด คีย์จะถูกกดหลังจากการเรียก GetAsyncKeyState ครั้งก่อน อย่างไรก็ตาม คุณไม่ควรพึ่งพาพฤติกรรมสุดท้ายนี้ สำหรับข้อมูลเพิ่มเติม โปรดดูหมายเหตุ - person Orwellophile; 11.01.2017