Keyboard Ledek villogtatasa Win alol
2002-10-28T20:15:12+01:00
2002-10-31T20:23:41+01:00
2022-07-27T21:43:21+02:00
  • Akkor az említett bájt a memóriában:
    0000:417h

    Ebbe kell belerakni egy bájtos számot. Az egyes bitek jelentései:

    0.bit - Jobb shift lenyomva
    1.bit - Bal shift lenyomva
    2.bit - Ctrl lenyomva
    3.bit - Alt lenyomva
    4.bit - Scroll Lock aktív
    5.bit - NumLlock aktív
    6.bit - Caps Lock aktív
    7.bit - Insert bill. aktív

    Szóval ha te bemozgatsz egy 40h ebbe a bájtba akkor a CapsLock billenyű világítani fog, a tobbi meg lealszi. Ha nem hiszed tedd át 2-es számrendszerbe a 40h-t





    Mutasd a teljes hozzászólást!
  • én egyszer vb-ben írtam egy programot karácsonyra, ami programozható ütemben és patternel villogtatja a kis LEDeket. a fő rutin így néz ki:



    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 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 GetKeyboardState Lib "user32" (pbKeyState As Byte) As Long
    Private Declare Function SetKeyboardState Lib "user32" (lppbKeyState As Byte) As Long

    Const VK_NUMLOCK = &H90
    Const VK_SCROLL = &H91
    Const VK_CAPITAL = &H14
    Const KEYEVENTF_EXTENDEDKEY = &H1
    Const KEYEVENTF_KEYUP = &H2
    Const VER_PLATFORM_WIN32_NT = 2
    Const VER_PLATFORM_WIN32_WINDOWS = 1

    Private Sub LockKey(Key, Value As Boolean)
    Dim o As OSVERSIONINFO
    Dim LockState As Boolean
    Dim Key_ID

    Select Case Key
    Case 0
    Key_ID = VK_NUMLOCK
    Case 1
    Key_ID = VK_CAPITAL
    Case 2
    Key_ID = VK_SCROLL
    End Select

    o.dwOSVersionInfoSize = Len(o)
    GetVersionEx o
    Dim keys(0 To 255) As Byte
    GetKeyboardState keys(0)

    LockState = keys(Key_ID)
    If LockState <> Value Then
    If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then '===== Win95
    keys(Key_ID) = 1
    SetKeyboardState keys(0)
    ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then '===== WinNT
    keybd_event Key_ID, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
    keybd_event Key_ID, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
    End If
    End If
    End Sub




    Tehát a GetKeyboardState és a SetKeyboardState és főleg a keybd_event API hívásokat használja. Az operndszerekben van egy kis eltérés ezeknél a hívásoknál, ezért kell a verziót megállapítani és aeszerent szétválasztani.

    A LockKey ruinban a Key értékei:
    - 0: NumLock-ot állítja
    - 1: CapsLockot
    - 2: ScrollLockot
    Asszem a Value értékei egyértelműek (false: világít, true: nem)

    ha gondolod, elküldhetem az egész forráskódot.
    Mutasd a teljes hozzászólást!
  • A valós módú megoldást mondanám.(védettet nem tudom)
    A memóriában van egy bájt aminek egyes bitjei jelentik ezeknek a bekapcsolt kikapcsolt állapotát. Ha a bit 0 akkor ki van kapcsolva. Írtam már ilyen progit. Majd leírom ha otthon leszek. Most a bájt címe sem jut az eszembe.Amúgy Win alatt is megy.
    Mutasd a teljes hozzászólást!
  • Tud valaki segiteni, hogy lehet Win alol a billentyuzeten levo Num, Caps es Scroll Lock LEDeket kigyujtani es eloltani? Tudom, hogy lehetseges, de eddig nem jottem ra, hogyan. Volt itt valahol az oldalon egy DOS-os program ra, de az meg abszolut cimeleressel mukodik, es sajnos, win alatt ilyen csunyasagot nem lehet csinalni.
    Mutasd a teljes hozzászólást!
abcd