Mother, will they like this song?
Bekijk dit kleine programmaatje eens: http://www.dickmann.org/pascal/misc/leds.zip
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?
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.
Dat is mogelijk ja. Maar ik vraag me of hoe goed dat gaat werken onder XP.
Voorbeeldje:
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)
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).
Maar dat zegt niet alles. Dat je zelf interrupthandlers kunt schrijven betekent niet meteen dat XP je ook directe I/O laat uitvoeren.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),
Verwijderd
Uit de MSDK help
Maar mij denkt dat dit niet de bedoeling is.
asm out en asm in werken niet (EPrivilege error, alleen kernelmodus uitvoerbaar.)
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.)
Het gaat hier niet om een Win32 programma.Op dinsdag 20 november 2001 16:18 schreef robh het volgende:
Uit de MSDK help
*knip*
Pagina: 1