Gå til innhold

Sjekke om Caps Lock er aktivert[C++]


Gjest Slettet+142

Anbefalte innlegg

Gjest Slettet+142

Hei!

 

Noen som kan hjelpe meg med å kunne lage et program som sjekker om Caps Lock er på, og deaktivere den?

 

Har selvfølgelig prøvd googe, men det å søke etter "c++" på google resulterer jo bare i alle treff på "c", så "c++ how to check if caps lock is activated" hjelper jo temmelig lite :/

 

Operativsystem er Windows XP.

 

Takk for hjelp :)

- Mariyo

 

Edit: Problemet er løst!

Løsning

Endret av Slettet+142
Lenke til kommentar
Videoannonse
Annonse
Gjest Slettet+142

Joa, men altså.

Når man søker på "C", finner den alle ord som har en bokstav C i seg.. Du kan f.eks prøve å søke etter det jeg nevnte i førstepost.. Det er håpløst :hm:

 

Så.. Igjen. Noen som kan lage en kjapp kode for meg, linke til en tutorial for behandlig og tilgang til tastatur-event(s) eller noe lignende? :)

Lenke til kommentar
Gjest Slettet+142
Hva med å søke opp sider der det står hjelp til c++ og søke på dem etter hvordan du skal gjøre det istedenfor å søke på alt om hvordan du skal gjøre det.

9221660[/snapback]

Hvis du kunne linket til et søk som gir noen resultater på det, hadde det vært kjempe flott :)

Lenke til kommentar
Gjest Slettet+142

Ok, nå føler jeg nesten at jeg har kommet et stykke her.

Eneste jeg mangler, er biten hvor deaktiveringen skjer..

 

 

#include <windows.h>
#include <stdio.h>
#include <iostream>
using namespace std;
     
int sjekkCaps(bool &lstats);


int main()
{
       FreeConsole();
       SHORT status = GetKeyState (VK_CAPITAL);
       bool lstats = (status & 0x0001);
       while(TRUE){
           if(sjekkCaps(lstats)==3) return 0;
           Sleep(20);
       }
   return 0;
}

int sjekkCaps(bool &lstats)
{
   
   for(int nKey = 0; nKey < 255; nKey++){
       if((unsigned short)GetAsyncKeyState(nKey) == 0x8001){
           if(nKey==20){
                    if(!lstats){
                             lstats = true;
                             
                             // Deactivate Caps Lock
                             
                             break;
                    }else{
                             lstats = false;
                             break;
                    }
           }
       }
   }
   return 0;
}

 

:ermm:

Lenke til kommentar
Gjest Slettet+142

Var det jeg fikk vite på IRC også, men ingen som vil gi meg et eksempel på det :p

 

Fikk også vite denne, som visstnok skulle være bedre..

 

Men jeg får det ikke til å virke. Kompilering går fint, men Caps Lock blir ikke slått av :(

 

http://cpp.sourceforge.net/?show=39088

 

Ellers skjønner jeg meg ikke på syntaxen til SendInput()

Lenke til kommentar
Gjest Slettet+142

Problemet er løst! :)

Fant denne siden, hvor det var lagt ut kode av en funksjon :)

 

Endelig kode ble til:

#include <windows.h>
#include <iostream>
using namespace std;

void SetCapsLock( );


int main()
{
       FreeConsole();
       bool lstats = false;
       while(TRUE){
           SetCapsLock( );
           Sleep(50);
       }
   return 0;
}


void SetCapsLock( )
  {

     SHORT tast = GetKeyState(VK_CAPITAL);
     if( (tast & 1) )
     {
     // Simulate a key press
        keybd_event( VK_CAPITAL,
                     0x45,
                     KEYEVENTF_EXTENDEDKEY | 0,
                     0 );
     // Simulate a key release
        keybd_event( VK_CAPITAL,
                     0x45,
                     KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
                     0);
     }
  }

 

Tusen takk for hjelp folkens :thumbup:

Endret av Slettet+142
Lenke til kommentar
Gjest Slettet+142
Bare litt optimisering av koden:

 

  if( (tast & 1) )

hvor du ikke trenger 2 paranteser :)

9227992[/snapback]

Blæ.

Har ingenting å si da :innocent:

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...