我正在尝试访问运行VBA / VB.NET的计算机上的当前NUM LOCK设置: - Windows 7的 - Visual Studio 2010 - Microsoft(Office)Excel 2010
以下是代码:
Public Const _GlobalDefinitions As String = "GlobalDefinitions"
Public Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer)
Public Const VK_NUMLOCK As Integer = &H90
Public Const KEYEVENTF_EXTENDEDKEY As Integer = &H1
Public Const KEYEVENTF_KEYUP As Integer = &H2
Public InitialNumLockState As Boolean
Public Sub CheckNumLockState(Optional mWriteback As SSWriteback = Nothing)
Try
If InitialNumLockState Then
If Not My.Computer.Keyboard.NumLock Then
keybd_event(VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0)
keybd_event(VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)
End If
End If
Catch ex As Exception
If Not mWriteback Is Nothing Then
AddToErrorLog(mWriteback, _GlobalDefinitions & ":" & System.Reflection.MethodBase.GetCurrentMethod.Name.ToString & "> " & ex.Message & ", " & ex.StackTrace, TraceEventType.Error)
End If
End Try
End Sub
InitialNumLockState变量在流程的前面设置如下:
InitialNumLockState = My.Computer.Keyboard.NumLock
My.Computer.KeyBoard.NumLock 的初始引用工作正常(我可以在运行时的Watch窗口中查询它)并初始化InitialNumLockState变量,例如,如果NUM LOCK键,则为True是ON。
然而,在对 My.Computer.KeyBoard.NumLock 的第二次引用中,我收到以下错误:
'计算机'模块中的声明之间存在模糊关系> GlbSoft.SWB.SS.My.MyProject'和' GlbSoft.SWB.SS.My.MyProject'。
请注意,错误消息显示引用不明确,因为它存在于具有相同名称的两个模块中。当然,这是不可能的。只涉及一个项目/命名空间(GSI_SWB_SS / GlbSoft.SWB.SS)。
是否有人对此错误有任何想法或见解,以及可以通过什么来解决它?
答案 0 :(得分:1)
我在申请时遇到了同样的问题。
我认为VS会在每个Computer
的每个My
中创建.dll
的实例。
我绕过了这个问题。
在我的应用程序中,我有一个基础架构层,我已经添加了
Namespace Infrastructure.MYLOCAL
<HideModuleName> _
Public Module MYLOCAL
Public MYComputer = My.Computer
End Module
End Namespace
当我的整个应用程序使用基础架构层时,它可以工作。
我使用MYComputer
代替my.Computer
。