/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
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


"Mkjaer" <a1@a.as> skrev i en meddelelse 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??

Se din dokumentation til SetWindowsHookEx(...). Funktionen gør dig i stand til at lave en system-hook der kan gennemse alle windows-beskeder til samtlige åbne programmer (herved kan du fx lytte efter WM_KEYDOWN). Husk at globale system-hooks skal være lokaliseret i en DLL, ellers forårsager du alverdens win32-fejl og -craches!!!

En lidt anden approach kunne være at registrere Alt+Ctrl+<Piletast> som hotkeys, vist nok med SetHotkey(...).
Denne metode er nok MEGET bedre egnet til begyndere, for selv efter 5 års programmering i C++ mestrer jeg stadig ikke system-hooks under win32 fuldstændigt!

Dokumentation på MSDN:

SetWindowsHookEx(...)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/Windowing/Hooks/HookReference/HookFunctions/SetWindowsHookEx.asp

SetHotkey(...)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/ifaces/ishelllink/SetHotkey.asp



Glinsvad

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



Søg
Reklame
Statistik
Spørgsmål : 177500
Tips : 31968
Nyheder : 719565
Indlæg : 6408509
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste