[ toxi_programer @ 09.08.2007. 11:29 ] @
Hi all,

Potrebno mi je da iz koda uključim one lampice na tasturi, odnosno da uključim/isključim num lock, caps lock i scroll lock a ne znam kako to da uradim. Jel ima neko ideju?

C++, C#, VB...
[ prog @ 09.08.2007. 12:27 ] @
http://www.webtropy.com/articles/art9-1.asp?f=SetKeyboardState
[ BezPanike @ 09.08.2007. 17:07 ] @
Code:
Imports System.Runtime.InteropServices

Public Class Form1

    Private WithEvents bNum, bCaps, bScroll As New Button

    Sub New()
        InitializeComponent()
        bNum = New Button
        bNum.Location = New Point(10, 40)
        bNum.Text = "NumLock"

        bCaps = New Button
        bCaps.Location = New Point(10, 65)
        bCaps.Text = "CapsLock"

        bScroll = New Button
        bScroll.Location = New Point(10, 90)
        bScroll.Text = "ScrollLock"

        Me.Controls.Add(bNum)
        Me.Controls.Add(bCaps)
        Me.Controls.Add(bScroll)
    End Sub

    Private Sub DoKeyBoard(ByVal flags As NativeMethods.KEYEVENTF, ByVal key As Keys)
        Dim input As New NativeMethods.INPUT
        input.dwType = NativeMethods.InputType.Keyboard
        input.wVk = Convert.ToInt16(key)
        input.wScan = 0
        input.time = 0
        input.dwFlags = flags
        input.dwExtraInfo = IntPtr.Zero
        Dim cbSize As Integer = Marshal.SizeOf(GetType(NativeMethods.INPUT))
        Dim result As Integer = NativeMethods.SendInput(1, input, cbSize)
        If result = 0 Then Debug.WriteLine(Marshal.GetLastWin32Error)
    End Sub

    Private Sub bNum_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles bNum.Click
        DoKeyBoard(0, Keys.NumLock)
        DoKeyBoard(NativeMethods.KEYEVENTF.KEYUP, Keys.NumLock)
    End Sub

    Private Sub bCaps_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles bCaps.Click
        DoKeyBoard(0, Keys.CapsLock)
        DoKeyBoard(NativeMethods.KEYEVENTF.KEYUP, Keys.CapsLock)
    End Sub

    Private Sub bScroll_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles bScroll.Click
        DoKeyBoard(0, Keys.Scroll)
        DoKeyBoard(NativeMethods.KEYEVENTF.KEYUP, Keys.Scroll)
    End Sub
End Class

Public Class NativeMethods

    <DllImport("user32.dll", SetLastError:=True)> Friend Shared Function SendInput(ByVal cInputs As Int32, ByRef pInputs As INPUT, ByVal cbSize As Int32) As Int32
    End Function

    <StructLayout(LayoutKind.Sequential, pack:=1, Size:=28)> Friend Structure INPUT
        Public dwType As InputType
        Public wVk As Int16
        Public wScan As Int16
        Public dwFlags As KEYEVENTF
        Public time As Int32
        Public dwExtraInfo As IntPtr
    End Structure

    Friend Enum InputType As Integer
        Mouse = 0
        Keyboard = 1
        Hardware = 2
    End Enum

    <Flags()> _
    Friend Enum KEYEVENTF As Integer
        EXTENDEDKEY = 1
        KEYUP = 2
        UNICODE = 4
        SCANCODE = 8
    End Enum

End Class
[ toxi_programer @ 09.08.2007. 21:56 ] @
Eh... nisam uspeo ništa da uradim :(
Što se tiče primera koda koji ste dali, ja ne znam kako da ga prevedem u C# pošto nekih od elemenata koji se spominju "nema" u .NET. Ili ja ne znam gde su...

A onaj sajt, to sam i ranije bio našao. Ali fora je u tome što preko funkcije GetKeyboardState() uzmem onih 255 byte-ove i sad ne znam kako da ih podesim da bi se uključilo/isključilo sijanje lampice na tastaturi. Probao sam da ih sve postavim na nulu a onda da pozove SetKeyboardState() ali lampica i dalje ostane uključena. Mislim, nikakvo efekta nema - idalje mi radi kucanje brojeva pomoću onih tastera na desnoj strani tastature, na primer...
[ Boško @ 10.08.2007. 01:12 ] @
A zna li neko kako ovo primeniti na eksterne (usb) tastature?
Konkretno, interesuje me kako da uključim NUMLOCK na maloj numeričkoj USB tastaturi koju koristim uz NoteBook.
[ BezPanike @ 10.08.2007. 09:26 ] @
Kod jeste .NET, ali VB.NET... A ja nisam prava osoba da ti ga prevedem.

A što se tiče USB tatsature, meni radi. Tastatura je tastatura.
[ Boško @ 10.08.2007. 15:21 ] @
Citat:
BezPanike
A što se tiče USB tatsature, meni radi. Tastatura je tastatura.


Ne znam da li si me dobro razumeo. USB tastatura je priključena kao dodatna (druga) tastatura. Tvoj kod radi OK i na "glavnoj" tastaturi pali i gasi tastere, ali na ovoj dodatnoj neće.