Avatar billede nubi19 Nybegynder
31. marts 2003 - 19:15 Der er 15 kommentarer og
1 løsning

Bliver der trykket på en tast ?

Hvordan aflæser jeg keyboardet så jeg kan se hver gang der trykkes på en tast ? (Programmet skal ikke vente på en tast, men derimod blot observere når der bliver indtastet).

Jeg bruger BCB 4.0 hvis det har noget at sige.

Derudover tænkte jeg på om man kan aflæse musens knapper ligeså ?
Avatar billede driis Nybegynder
31. marts 2003 - 19:20 #1
#include <conio.h>

char c = 0 ;
if ( _kbhit() )  // Hvis der er trykket på en tast
    c = getch() ; // Så læg værdien af tasten i variabel c.
Avatar billede nubi19 Nybegynder
31. marts 2003 - 19:26 #2
driis > Det virker ikke under Windows NT, har ik tjekket 9x men tror problematikken vil være den samme der, specielt idet der står ved kbhit: "Do not use this in Win32" eller noget ala det.
Avatar billede driis Nybegynder
31. marts 2003 - 19:30 #3
Jeg bruger det ellers under Windows XP, og det giver ingen problemer. Jeg valgte _kbhit() og getch() fordi det er simple funktioner, og fordi de kan bruges både i Windows og DOS. Jeg kan lige prøve at stykke et Windows - specifikt eksempel sammen, 2 sekunder.
Avatar billede arne_v Ekspert
31. marts 2003 - 19:30 #4
Er det en console mode app eller en windows app.

Hvis det er en console app burde kbhit virke uanset hvilken windows
version.
Avatar billede arne_v Ekspert
31. marts 2003 - 19:31 #5
PS: Jeg ville neten bruge _kbhit og _getch eller kbhit og getch for
    at være konsistent.
Avatar billede driis Nybegynder
31. marts 2003 - 19:38 #6
Hvis det er Windows - specifikt, kan du bruge det her eksempel i stedet - det ser efter, om der er trykket på 'M', og afslutter når du trykker på Enter.

#include <windows.h>
#include <iostream>

using namespace std ;

int main()
{
    char c = 0 ;

    while ( !(GetAsyncKeyState(VK_RETURN) & 0x8000) )
    {
        if ( GetAsyncKeyState('M') & 0x8000 )
            cout << "M er trykket.\n" ;
    }
}
Avatar billede nubi19 Nybegynder
31. marts 2003 - 19:46 #7
Well min ide var at lave en slags timer eller noget i den stil, der tjekkede hele tiden om der blev trykket på en tast og hvis der gjorde skulle den tælle en variabel 1 op.
Dvs. det er lige meget hvilken tast der trykkes på.
Programmet skal være et windows program og jeg regner med at den skulle kunne ligge i systray.
Dvs. der bliver ingen main() i programmet.
Avatar billede nubi19 Nybegynder
31. marts 2003 - 19:47 #8
Nåja og det skal helst kunne bruges både i win 9x og NT (dvs. 95, 98, me, 2000, xp, nt4 evt. osv.)
Avatar billede arne_v Ekspert
31. marts 2003 - 19:52 #9
Øh.

Uanset om du bruger kbhit eller GetAsynchKeyState, så vil du vel
kun få det hvis programmet har fokus !?
Avatar billede nubi19 Nybegynder
31. marts 2003 - 20:05 #10
Tror jeg også, min tanke var faktisk at få noget asm på bordet, til at aflæse keyb. porten.
Avatar billede arne_v Ekspert
31. marts 2003 - 20:07 #11
Så vi er nærmest ovre i device-driver ?

[nu er jeg ikke Windows device-driver specialist, men mit gæt er at
NT/2000/XP og 95/98/ME er meget forskellige]
Avatar billede nubi19 Nybegynder
31. marts 2003 - 20:15 #12
Aah device-driver mon dog. Der er noget med at int 60h snupper den tast man trykker på (mener jeg at kunne huske) så er det jo blot noget med at lave noget hokus pokus med den. Og ja jeg tror også at NT og 9x er forskellige, men det er stadigvæk windows så helt forskellige er de næppe.
Avatar billede hsloth Novice
31. marts 2003 - 21:52 #13
Det er ikke nødvendigt at lave assembler - der er mulighed i Windows for at lave et såkaldt dll-hook ved hjælp af funktionen SetWindowHookEx - der er en forklaring her : http://www.developer.com/net/vb/article.php/1502401 på hvordan du får fat i tastetryk.
Avatar billede hsloth Novice
31. marts 2003 - 21:55 #14
Det var vist et VB link jeg havde givet dig - sorry - her er et C++ link http://www.codeproject.com/dll/keyboardhook.asp
Avatar billede nubi19 Nybegynder
07. maj 2003 - 11:52 #16
Det med hooks var det jeg skulle bruge - takker :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester