|
| Læse fra keyboardet Fra : Mkjaer |
Dato : 15-11-02 17:53 |
|
Jeg er nybegynder i c# og jeg har brug for at aflæse tastaturet direkte uden
brug af brugergrænseflade. (Jeg er ikke nybegynder i programmering, god til
java). Jeg vil lave et program til at styre musen med piletasterne, det skal
kunne køre selvom der ikke er en aktiv GUI. Hvordan gør jeg det??
| |
Glinsvad (18-11-2002)
| Kommentar Fra : Glinsvad |
Dato : 18-11-02 23:10 |
| | |
John Doe (30-11-2002)
| Kommentar Fra : John Doe |
Dato : 30-11-02 18:34 |
|
Nedenfor er en lille rutine som jeg selv benytter til tastatur input i
interaktive programmer hvor der normalt tale om fuldscreens programmer
beregnet til at køre alene. Eksemplet vil fange alle tastatur aktiveringer
uanset hvilket program der er i focus og du bør derfor kunne benytte det til
det du er ude efter.
Btw: Næsten alt i Windows kræver at der findes et tilsluttet vindue, dvs. at
man skal have en window handle, men vinduet kan godt være skjult.
==========================================
#include "stdafx.h" // Benyttes her kun til pre-compiled headers.
#include <windows.h> // Gennerelle Windows ting
#include <time.h> // For brug af time()
#define ESC 0x1b /* Escape tast definition */
#define MIN_STEP_RATE 1 /* Mindste xy-tilvækst */
#define MAX_STEP_RATE 10 /* Højste xy-tilvækst */
#define STEP_RATE 0.1f /* xy tilvækst for acceleration*/
// Vi skal bruge dette bibliotet til "timeGetTime"
#pragma comment(lib, "winmm.lib")
unsigned long g_dwLastTime = timeGetTime();
float g_fAcc = MIN_STEP_RATE;
void CheckMovement()
{
POINT pt;
bool bKeyDown = false;
// Hvis vi udførte denne rutine for tit blev systemet
// sløvet urimiligt ned og musemarkøren ville få turbo på.
// Hent "nuværende" tidspunkt i millisekunder
unsigned long dwCurrentTime = timeGetTime();
// Sammelign med sidst indlæste tidspunkt.
if ((dwCurrentTime - g_dwLastTime) < 1)
// Hvis ikke der er der gået mindst 1 millisekund så returner
return;
// Reset variabel for tidssammenligning.
g_dwLastTime = dwCurrentTime;
if (GetKeyState(VK_ESCAPE) & 0x80)
PostMessage(NULL, WM_QUIT, 0, 0);
// Hent musens nuværende position i skærm koordinater
GetCursorPos(&pt);
// Check om pil op tasten er aktiveret
if (GetKeyState(VK_UP) & 0x80)
{
bKeyDown = true;
pt.y -= (int)g_fAcc;
}
// Check om pil ned tasten er aktiveret
else if (GetKeyState(VK_DOWN) & 0x80)
{
bKeyDown = true;
pt.y += (int)g_fAcc;
}
// Check om pil til venstre tasten er aktiveret
if (GetKeyState(VK_LEFT) & 0x80)
{
bKeyDown = true;
pt.x -= (int)g_fAcc;
}
// Check om pil til højre tasten er aktiveret
else if (GetKeyState(VK_RIGHT) & 0x80)
{
bKeyDown = true;
pt.x += (int)g_fAcc;
}
if (bKeyDown)
{
if (g_fAcc < MAX_STEP_RATE)
g_fAcc += STEP_RATE;
}
else
g_fAcc = MIN_STEP_RATE;
// Hent ny position for musemarkør
SetCursorPos(pt.x, pt.y);
}
// Test skidtet
int main(int argc, char* argv[])
{
MSG msg;
while (1) // Uendeligt loop
{ // Nogen beskeder?
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT) // Er det en WM_QUIT
break;
TranslateMessage(&msg); // Oversæt beskeden
DispatchMessage(&msg); // Udfør beskeden
}
else // Ingen beskeder at håndterer...
{
CheckMovement(); // ... så kig efter "tastatur-til-mus"
bevægelser"
}
}
return (msg.wParam); // Return from the program
}
==========================================
Mvh. alias John Doe
"Mkjaer" <a1@a.as> wrote in message
news:ar38m3$18i2$1@jarjarbinks.mobilixnet.dk...
> Jeg er nybegynder i c# og jeg har brug for at aflæse tastaturet direkte
uden
> brug af brugergrænseflade. (Jeg er ikke nybegynder i programmering, god
til
> java). Jeg vil lave et program til at styre musen med piletasterne, det
skal
> kunne køre selvom der ikke er en aktiv GUI. Hvordan gør jeg det??
>
>
| |
|
|