激活状态栏中的Num Lock指示器

时间:2012-04-11 10:24:21

标签: c# excel-vba vsto vba excel

如何检测Num锁定指示器在Excel中是否有效...

或在状态栏中启用num lock指示符

3 个答案:

答案 0 :(得分:2)

约翰,据我所知(我可能错了)但是Application.Statusbar没有给你选择以你想要的方式与它互动。

我也不知道任何可以达到你想要的API。所以,直到其他人来并发布方法(如果有的话),你的问题的答案是

“它无法完成”

HTH

答案 1 :(得分:1)

您将问题标记为C#,因此我认为您正在开发一个C#应用 在其中你可以使用

if (Control.IsKeyLocked(Keys.NumLock))

检测NumLock是否打开。

要设置Num-Lock,您可以使用

[DllImport("user32.dll")]
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);
private void PressKb(Keys keyCode)
{
    const int KEYEVENTF_EXTENDEDKEY = 0x1;
    const int KEYEVENTF_KEYUP = 0x2;

    keybd_event((byte)keyCode, 0x45, KEYEVENTF_EXTENDEDKEY, 0);
    keybd_event((byte)keyCode, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
} 

和它一起

PressKb(Keys.NumLock);

答案 2 :(得分:0)

您可以看到num-lock是否处于活动状态,因为该指标只会显示它何时处于活动状态。如果您需要在VBA中执行此操作(解决方案取自here)。

'put these declarations at the top of the module
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long)
As Integer
Private Const kNumlock = 144

您需要的地方:

Public Function NumLock() As Boolean
NumLock = KeyState(kNumlock)
End Function

Private Function KeyState(lKey As Long) As Boolean
KeyState = CBool(GetKeyState(lKey))
End Function