Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  14 928
Hei!

Som topic sier; hvordan kan jeg med C++ finne ut om feks kombinasjonen ALT+K+T osv bli trykket?


På forhånd takk!
med fruktkjøtt.
Tias's Avatar
Crew
Vel, du må vel ha en lytter (Actionlistener i Java verdenen) av et slag som lytter etter handlinger, og en handler (eventhandler i java) som gjør noe basert på hvilke actions som blir fanget opp. Nå vet jeg ikke om pakkene heter det samme i c++, noe jeg tviler litt på, men det hjelper deg kanskje bittelitt på vei allikevel :P

http://en.wikipedia.org/wiki/Event-driven_programming
Sist endret av Tias; 8. mars 2007 kl. 20:15.
Eller du kan jo bruke Qt C++ med signals of slots, ganske enkelt faktisk (konseptet med signals og slots, i hele tatt å få en knapp til å gjøre noe osv.)
Trådstarter
21 0
Hei! Takk for svar. Fant en pakke for C++ via den linken.. Det som er problemet nå er at jeg ikke har holdt på så alt for mye med dette, og er veldig usikker på hvordan jeg skal legge inn denne pakken i programmet jeg bruker.. Koder i Dev-C++. Noen som kan fortelle meg/vise meg en tutorial hvor jeg kan se hvordan jeg legger den inn?

Her er pakken jeg fant via linken: http://libsigc.sourceforge.net/


EDIT: Googler på Qt C++ nå.. Mulig jeg får til det litt bedre...
m0b
m0b's Avatar
DonorAdministrator
Gjelder dette internt i applikasjonet ditt, eller er det generelt overalt i oset? og er det Windows?
Du kan legge til en kompilator opsjon ..dvs peke til hvor kompilatoren finner disse funksjonene, feks. skal du kunne kompilere et program som bruker dette rammeverket skal du kunne kompilere med denne kommandoen:
g++ example1.cc -o eg1 `pkg-config --cflags --libs sigc++-2.0`

hvor "--cflags" spesifiserer rammeverket (vanligvis da filstien hvor dette ligger). Eller du kan legge den inn en en PATH variabel sikkert, så slipper du skrive den i heletatt når du kompilerer.

Sjekk denne siden feks:
http://libsigc.sourceforge.net/libsi...html/ch02.html
Sist endret av icebyte; 8. mars 2007 kl. 20:40.
Trådstarter
21 0
Sitat av |d13m0b
Gjelder dette internt i applikasjonet ditt, eller er det generelt overalt i oset? og er det Windows?
Vis hele sitatet...
Er windows. Gjelder hele OS'et. Programmet skal ligge i bakrunden og når de tastekombinasjonene blir trykket så kommer programmet opp igjen..

Icebyte: Takk! Skal se på det nå..
m0b
m0b's Avatar
DonorAdministrator
Da kan du faktisk bruke user32.dll og benytte funksjonen GetAsyncKeyState for å sjekke hvilke knapper som blir trykket på.
Trådstarter
21 0
Sitat av |d13m0b
Da kan du faktisk bruke user32.dll og benytte funksjonen GetAsyncKeyState for å sjekke hvilke knapper som blir trykket på.
Vis hele sitatet...

Tusen takk! Dette ser ut til å fungere! Bare en liten ting;
Hvis man ser på listen til MS med hva man skal skrive for å hente de forskjellige tingene så mangler det jo på alle bokstaver og tall..:S

http://msdn.microsoft.com/library/de...alKeyCodes.asp
m0b
m0b's Avatar
DonorAdministrator
Trenger du den da? Funksjonen returnerer vel en integer som representerer en gitt byte fra en ASCII tabell. Er jo bare å oversette i henhold til det.
Trådstarter
21 0
Hm.. Hvordan gjør jeg det da? Hva skal jeg sette i funksjonen GetAsyncKeyState()?
m0b
m0b's Avatar
DonorAdministrator
Konsultér gitt byte med www.asciitable.com mener i alle fall at det er dette som blir returnert - men det finner du jo kjapt ut. Dessuten tror jeg egentlig det finnes oppslag på dette i en eller annen header fil fra før. Lenge siden jeg har skrevet C eller C++ så jeg husker ikke eksakt.

Men jeg skrev i alle fall en liten dll-hook i C# for et par dager siden og det virket smertefritt. Du må bare loope igjennom alle taster som kan være trykket på til et gitt tidspunkt, og deretter sjekke hvilke dette var. Kan være greit med et delay på, tja - 10ms så bruker du ikke så altfor mye ressurser, og du får det rimelig nøyaktig. Jeg mistet i alle fall ikke noen spesielle tegn.

Edit: Leste spørsmålet feil, finnes en del svar på nett hvordan du kan bruke funksjonen - er veldig enkelt. Kort og greit, loop igjennom 256 forskjellige verdier som du bruker som argument i funksjonen. Dersom den returnerer true så er denne gitte knappen nede. Er denne true så kan du si hvilken knapp som faktisk er trykket ned.
Sist endret av m0b; 8. mars 2007 kl. 23:13.
Trigonoceps occipita
vidarlo's Avatar
Donor
Sitat av |d13m0b
Konsultér gitt byte med www.asciitable.com mener i alle fall at det er dette som blir returnert - men det finner du jo kjapt ut. Dessuten tror jeg egentlig det finnes oppslag på dette i en eller annen header fil fra før. Lenge siden jeg har skrevet C eller C++ så jeg husker ikke eksakt.
Vis hele sitatet...
Sikker på at den ikkje gir ut scankode fra tastaturet? Det er jo ingen ascii-kode for caps-lock, shift, ctrl, alt o.l...
m0b
m0b's Avatar
DonorAdministrator
Hm, det er jeg faktisk ikke sikker på. I C# Benytter jeg enumen System.Windows.Forms.Keys for å sammenligne men det er mulig du har rett. Uansett kan man spesifisere litt slikt når man hooker opp til dllen.
Trådstarter
21 0
Tusen takk for hjelp! Fikk det til nå! Feilen jeg gjorde var at jeg satte verdien rett i funksjonen, noe som bare resulterte i en feil melding, men når jeg satte verdien i en variabel også satte variabelen inne i funksjonen så funket det.. Tusen takk igjen!

EDIT:
Sitat av vidarlo
Sikker på at den ikkje gir ut scankode fra tastaturet? Det er jo ingen ascii-kode for caps-lock, shift, ctrl, alt o.l...
Vis hele sitatet...
Det er sikkert dette som er grunnen til at det er kun slike taster som her listet her:
http://msdn.microsoft.com/library/de...alKeyCodes.asp
Sist endret av krabben; 8. mars 2007 kl. 23:26.