thomas1972
Goto Top

Call befehl öffnet Makro auswahl

Hallo,

ich habe ein Modul, welches den Num-Look an/ausschalten kann.

Rufe ich per CALL Befehl den aus/an Befehl auf funktioniert dieses.

Modul
Öffne ich dieses in einem Formular erscheint die Marko Auswahl

Private Declare Function GetKeyboardState Lib "user32" _  
      (pbKeyState As Byte) As Long

Private Declare Function GetKeyState Lib "user32" _  
      (ByVal nVirtKey As Long) As Integer

Private Declare Function GetVersionEx Lib "kernel32" _  
      Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long  

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, _  
      ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Private Declare Function SetKeyboardState Lib "user32" (lppbKeyState As Byte) As Long  

Private Const VER_PLATFORM_WIN32_NT = 2
Private Const VER_PLATFORM_WIN32_WINDOWS = 1
Private Const KEYEVENTF_EXTENDEDKEY = &H1
Private Const KEYEVENTF_KEYUP = &H2
   
Private Const VK_CAPS = &H14
Private Const VK_NUM = &H90
Private Const VK_SCROLL = &H91

Private keys(0 To 255) As Byte

Private Type OSVERSIONINFO
    dwOSVersionInfoSize As Long
    dwMajorVersion As Long
    dwMinorVersion As Long
    dwBuildNumber As Long
    dwPlatformId As Long
    szCSDVersion As String * 128
End Type

Private oSv As OSVERSIONINFO

Private Function KeyStatus(Taste) As Boolean
    Dim bInsertKeyState As Boolean
    oSv.dwOSVersionInfoSize = Len(oSv)
    GetVersionEx oSv
    GetKeyboardState keys(0)
    KeyStatus = keys(Taste)
End Function

Private Sub Switch(Taste, AnAus As Boolean)
    If (KeyStatus(Taste) <> AnAus) Then
        If (oSv.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS) Then
            keys(Taste) = 1
            SetKeyboardState keys(0)
        ElseIf (oSv.dwPlatformId = VER_PLATFORM_WIN32_NT) Then
            keybd_event Taste, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
            keybd_event Taste, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
        End If
    End If
End Sub

Private Sub An()
    Switch VK_NUM, 0
    Switch VK_CAPS, 0
    Switch VK_SCROLL, 0
End Sub

Private Sub Aus()
    Switch VK_NUM, 1
    Switch VK_CAPS, 0
    Switch VK_SCROLL, 0
End Sub

Private Sub Status()
    MsgBox "Num : " & KeyStatus(VK_NUM) & vbNewLine & _  
           "Caps: " & KeyStatus(VK_CAPS) & vbNewLine & _  
           "Scroll: " & KeyStatus(VK_SCROLL), _  
           vbExclamation, "Tastenstatus"  
End Sub

Sind die Werte in dem Modul falsch als Private/Public deklariert?

Content-Key: 262782

Url: https://administrator.de/contentid/262782

Printed on: April 19, 2024 at 21:04 o'clock

Mitglied: 114757
114757 Feb 08, 2015 at 14:45:00 (UTC)
Goto Top
Sind die Werte in dem Modul falsch als Private/Public deklariert?
Yup ...

Gruß jodel32
Member: thomas1972
thomas1972 Feb 08, 2015 at 14:46:08 (UTC)
Goto Top
hmm dann stell ich die Frage anders,
Wie/welche sind fall/ muss ich diese entsprechend anpassen, damit ich Sie auch per call ausführen kann?
Mitglied: 114757
114757 Feb 08, 2015 updated at 16:37:31 (UTC)
Goto Top
Pack alles in ein Klassen-Modul und mach die Prozeduren An und Aus Public, wenn du die Status-Funktion ebenfalls benötigst, ebenfalls als Public definieren.
Dann erstellst du dort wo du die Funktionen anwenden willst eine Instanz der Klasse, und rufst die Funktionen damit auf:
Dim myclass as new NamedesKlassenmoduls
myclass.An

p.s. API Aufrufe wie Private Declare Function müssen immer in ein Modul, und gehen nicht wenn sie in ein Formular eingefügt werden !