Gå til innhold

Sjekke om Caps Lock er aktivert[C++]


Gjest Slettet+142

Anbefalte innlegg

Gjest Slettet+142
Skrevet (endret)

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
Videoannonse
Annonse
Gjest Slettet+142
Skrevet

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? :)

Skrevet

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.

Gjest Slettet+142
Skrevet
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 :)

Gjest Slettet+142
Skrevet

Hmm. Takk :)

Det som mangler nå, er å endre // capslock aktiv til kode som deaktivere Caps Lock.. :hm:

Gjest Slettet+142
Skrevet

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:

Gjest Slettet+142
Skrevet

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()

Skrevet

har aldri prøvd dette selv heller så skulle gjerne sett et eksempel på det.

 

 

Forresten, har du testet om capslock er av eller på ? siden lyset på tastaturet påvirkes ikke av metoden du linker til. (hvis jeg forsto det rett)

Gjest Slettet+142
Skrevet (endret)

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
Gjest Slettet+142
Skrevet
Bare litt optimisering av koden:

 

  if( (tast & 1) )

hvor du ikke trenger 2 paranteser :)

9227992[/snapback]

Blæ.

Har ingenting å si da :innocent:

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...