/ Forside/ Teknologi / Udvikling / C/C++ / Spørgsmål
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
Bech_bb 500
kyllekylle 500
jdjespers.. 500
gibson 300
scootergr.. 300
molokyle 287
10  strarup 270
Få fat i caps lock og num lock??
Fra : DKSH
Vist : 391 gange
40 point
Dato : 26-03-04 01:49

Hej!!

Jeg ville lige høre om der ikke er nogen der ved hvordan jeg får fat i caps lock og num lock på tastaturet.
Havde tænkt noget i stil med:

int tast =getch();
cout<<"tasten var(acii): "<<tast;

Men virker ikke for caps lock og num lock...

 
 
Kommentar
Fra : molokyle


Dato : 26-03-04 10:36
Kommentar
Fra : BertelBrander


Dato : 26-03-04 21:08

Så vidt jeg ved kan man ikke umidelbart få fat i caps lock og num lock som en almindelig tast i en konsole applikation.
Man kan godt lave en message loop og få fat i tasten som ved en Windows app, jeg kan godt forsøge at lave et eksempel senere.

Man kan læse om tasten er on eller off med:

#include <stdio.h>
#include <windows.h>

int main(void)
{
unsigned char State[256];
GetKeyboardState(State);
if(State[VK_NUMLOCK] & 1)
printf("NumLock is on\n");
else
printf("NumLock is off\n");

if(State[VK_SCROLL] & 1)
printf("ScrollLock is on\n");
else
printf("ScrollLock is off\n");

if(State[VK_CAPITAL] & 1)
printf("CapsLock is on\n");
else
printf("CapsLock is off\n");

return 0;
}

Accepteret svar
Fra : BertelBrander

Modtaget 40 point
Dato : 27-03-04 00:42

#include <windows.h>
#include <stdio.h>
#include <ctype.h>

int main(void)
{
unsigned char Ch = 0;
DWORD NumRead;
INPUT_RECORD InputRecord;
BOOL WasKey = TRUE;
do
{
if(WasKey)
{
printf("Tryk på en tast, q for at afslutte: ");
fflush(stdout);
}
ReadConsoleInput(GetStdHandle(STD_INPUT_HANDLE), &InputRecord, 1, &NumRead);

if(InputRecord.EventType == KEY_EVENT && InputRecord.Event.KeyEvent.bKeyDown)
{
WasKey = TRUE;
switch(InputRecord.Event.KeyEvent.wVirtualKeyCode)
{
case VK_NUMLOCK:
printf("NUM-LOCK\n");
break;
case VK_SCROLL:
printf("SCROLL-LOCK\n");
break;
case VK_CAPITAL:
printf("CAPS-LOCK\n");
break;
default:
Ch = InputRecord.Event.KeyEvent.uChar.AsciiChar;
printf("Key: %3d %c\n", Ch, isprint(Ch) ? Ch : '.');
break;
}
}
else
WasKey = FALSE;
}
while(Ch != 'q');

return 0;
}


Godkendelse af svar
Fra : DKSH


Dato : 27-03-04 14:25

Tak for svaret BertelBrander.
                        

Du har følgende muligheder
Eftersom du ikke er logget ind i systemet, kan du ikke skrive et indlæg til dette spørgsmål.

Hvis du ikke allerede er registreret, kan du gratis blive medlem, ved at trykke på "Bliv medlem" ude i menuen.
Søg
Reklame
Statistik
Spørgsmål : 177414
Tips : 31962
Nyheder : 719565
Indlæg : 6407849
Brugere : 218876

Månedens bedste
Årets bedste
Sidste års bedste