2009-11-13 95 views
2

需要使用C#或VB.net使键盘的LED(大写锁定/数字锁定或滚动锁定LED)闪烁。 (有或没有使用interop很好)如何使用C#或VB.Net闪烁键盘的LED

+0

你的意思是<眨眼种类= “帽”>不这样做? :D – Jason 2009-11-13 00:34:31

+2

我正在回忆Cryptonomicon。你不会被困在菲利诺监狱吗? – cletus 2009-11-13 00:36:04

回答

10

This Microsoft Support article似乎是你在找什么。它说明了如何切换的Num Lock,Caps Lock和滚动锁定键在Visual Basic 6

+0

+1:很好找... – Jason 2009-11-13 00:45:14

+1

看起来它只是win32调用,所以你可以用PInvoke来管理它。 – 2009-11-13 00:58:59

+0

这是关闭我的答案。谢谢你。 – Andy 2009-11-13 06:34:52

1

这里的The C方式

#include <windows.h> 
#define err if (GetLastError() != 0) return GetLastError(); 

extern "C" __declspec(dllexport) int __stdcall TurnLed(int state) 
{ 
    DWORD tmp = 4; 
    DWORD buf = (2*GetKeyState(VK_NUMLOCK) + 4*GetKeyState(VK_CAPITAL) + state)<<16; 
    DefineDosDevice(DDD_RAW_TARGET_PATH, "Kbd", "\\Device\\KeyboardClass1"); err 
    HANDLE kbd = CreateFile("\\\\.\\Kbd", GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); err 
    DeviceIoControl(kbd, CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0002, METHOD_BUFFERED, FILE_ANY_ACCESS), &buf, sizeof(buf), 0, 0, &tmp, 0); err 
    DefineDosDevice(DDD_REMOVE_DEFINITION, "Kbd", 0); err 
    CloseHandle(kbd); err 
    return 0; 
} 
+0

您是否知道在“\\。\ Kbd”上执行ioctl需要什么权限?这是否可以从非管理员进程完成?我没有Windows机器来测试它。 – 2014-04-15 19:19:22