[TP] Ledjes Num- Caps- en Scroll lock aansturen

Pagina: 1
Acties:

  • TheLunatic
  • Registratie: April 2001
  • Laatst online: 09-07 16:41

TheLunatic

Ouwe boxen.

Topicstarter
Hoe kun je vanuit pascal in je proggie de lampjes van de num caps en scrollock aan en uit maken ?

Mother, will they like this song?


  • Onno
  • Registratie: Juni 1999
  • Niet online
Bekijk dit kleine programmaatje eens: http://www.dickmann.org/pascal/misc/leds.zip

  • TheLunatic
  • Registratie: April 2001
  • Laatst online: 09-07 16:41

TheLunatic

Ouwe boxen.

Topicstarter
Ik heb het vermoeden dat dit niet werkt (ligt het misschien aan het feit dat ik in Windows zit, kan daar niet uit vanwege XP).

Wel krijg ik een compleet verkrachte toetsenbordindeling zolang ik nog in Pascal zit.

Is er iemand die een andere oplossing voor mijn probleem heeft?

Mother, will they like this song?


Verwijderd

Ik heb niet echt verstand van pascal, maar poort 60h ontvangt volgens mij alle keystrokes. Ik dacht dat je daarmee ook de LEDjes aan en uit kunt zetten. Ik weet helaas niet precies hoe.

  • Onno
  • Registratie: Juni 1999
  • Niet online
Dat is mogelijk ja. Maar ik vraag me of hoe goed dat gaat werken onder XP.

Voorbeeldje:
code:
1
2
3
4
5
6
7
8
9
10
proc set_leds uses ax, leds:byte
  out  60h, 0edh   ; geef opdracht om leds opnieuw in te stellen
lusje:       ; wacht tot databyte geschreven kan worden...
  in   al, 64h
  test al, 02h
  jnz  lusje
  mov  al, [leds]  ; ...en doe dat
  out  60h, al
  ret
endp set_leds

Waarbij de parameter leds zo in elkaar zit:

bit 0: scroll lock
bit 1: num lock
bit 2: caps lock

(dit is assembly, weet niet precies hoe je poorten benadert in Pascal)

Verwijderd

Volgens mij werkt het wel onder XP. Ik heb namelijk ook een functie geschreven (in C++) die de keyboardhandler van de BIOS vervangt (interrupt 9), zodat ik in mijn progjes volledige controle heb over mijn toetsenbord. Dit werkt prima onder DOS. Zelfs [CTRL]+[ALT]+[DEL] werkte niet meer. Onder XP kan ik de toetsen ook nog herkennen maar XP staat boven deze interrupt functies want de windows toetsen blijven werken ([ALT]+[TAB] en zo).

  • Onno
  • Registratie: Juni 1999
  • Niet online
Op dinsdag 20 november 2001 15:34 schreef Melkor het volgende:
Volgens mij werkt het wel onder XP. Ik heb namelijk ook een functie geschreven (in C++) die de keyboardhandler van de BIOS vervangt (interrupt 9),
Maar dat zegt niet alles. Dat je zelf interrupthandlers kunt schrijven betekent niet meteen dat XP je ook directe I/O laat uitvoeren. :)

Verwijderd

Uit de MSDK help
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void SetNumLock( BOOL bState )
{
   BYTE keyState[256];

   GetKeyboardState((LPBYTE)&keyState);
   if( (bState && !(keyState[VK_NUMLOCK] & 1)) ||
     (!bState && (keyState[VK_NUMLOCK] & 1)) )
   {
   // Simulate a key press
    keybd_event( VK_NUMLOCK,
             0x45,
             KEYEVENTF_EXTENDEDKEY | 0,
             0 );

   // Simulate a key release
    keybd_event( VK_NUMLOCK,
             0x45,

             KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
             0);
   }
}

void main()
{
   SetNumLock( TRUE );
}

Maar mij denkt dat dit niet de bedoeling is.

asm out en asm in werken niet (EPrivilege error, alleen kernelmodus uitvoerbaar.)

  • Onno
  • Registratie: Juni 1999
  • Niet online
Op dinsdag 20 november 2001 16:18 schreef robh het volgende:
Uit de MSDK help

*knip*
Het gaat hier niet om een Win32 programma.

Verwijderd

Nou, dan werkt het wel.
Pagina: 1