/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Tænd/Sluk (Caps, Scroll og Numlock)
Fra : Søren Aaholm Møller


Dato : 16-10-01 21:50

Hejsa - jeg har fundet følgende funktion som gerne skulle henholdsvis tænde
og slukke for Numlock. (VK_NUMLOCK skulle kunne udskiftes med VK_SCROLLLOCK
og VK_CAPSLOCK efter behov - men jeg synes ikke det funker... I starten
erklærer jeg :

> procedure NumLockOn;
> procedure NumLockOn;

Og længere nede har vi funktionerne :

> procedure TmainFrm.NumLockOn;
> var KeyState:TKeyboardState;
> begin
> GetKeyboardState(KeyState);
> KeyState[VK_NUMLOCK]:=$01 ;
> SetKeyboardState(KeyState);
> end;

> procedure TmainFrm.NumLockOff;
> var KeyState:TKeyboardState;
> begin
> GetKeyboardState(KeyState);
> KeyState[VK_NUMLOCK]:=$00 ;
> SetKeyboardState(KeyState);
> end;

Jeg kalder dem med :

> procedure TmainFrm.Button1Click(Sender: TObject);
> begin
>
> NumLockOff;
>
> end;

Hvorfor funker det ikke? Anyone??

Koden er fra URL : http://www.ykwong.com/lkonoff.html

Håber på en hjælpende hånd...

Pfh. Tak

// Søren



 
 
Henrik Christian Gro~ (17-10-2001)
Kommentar
Fra : Henrik Christian Gro~


Dato : 17-10-01 10:12

"Søren Aaholm Møller" <swdata@image.dk> writes:

> > procedure NumLockOn;
> > procedure NumLockOn;

Jeg håber du selv kan se havd der er galt her.

> Hvorfor funker det ikke? Anyone??

Det ligner pascal (Delphi er også pascal) så spørg i
dk.edb.programmering.pascal, hvis det altså ikke hjælper at rette den
fejl jeg påpegede ovenfor.

..Henrik

--
"Det er fundamentalt noget humanistisk vås, at der er noget,
der hedder blød matematik."
--- citat Henrik Jeppesen, dekan for det naturvidenskabelige fakultet

Casper A. Hansen (17-10-2001)
Kommentar
Fra : Casper A. Hansen


Dato : 17-10-01 15:58

"S?en Aaholm M?ler" <swdata@image.dk> wrote in message news:<c41z7.1516$YP6.240342@news000.worldonline.dk>...
> Hejsa - jeg har fundet følgende funktion som gerne skulle henholdsvis tænde
> og slukke for Numlock. (VK_NUMLOCK skulle kunne udskiftes med VK_SCROLLLOCK
> og VK_CAPSLOCK efter behov - men jeg synes ikke det funker... I starten
> erklærer jeg :
>
> > procedure NumLockOn;
> > procedure NumLockOn;
>
> Og længere nede har vi funktionerne :
>
> > procedure TmainFrm.NumLockOn;
> > var KeyState:TKeyboardState;
> > begin
> > GetKeyboardState(KeyState);
> > KeyState[VK_NUMLOCK]:=$01 ;
> > SetKeyboardState(KeyState);
> > end;
>
> > procedure TmainFrm.NumLockOff;
> > var KeyState:TKeyboardState;
> > begin
> > GetKeyboardState(KeyState);
> > KeyState[VK_NUMLOCK]:=$00 ;
> > SetKeyboardState(KeyState);
> > end;
>
> Jeg kalder dem med :
>
> > procedure TmainFrm.Button1Click(Sender: TObject);
> > begin
> >
> > NumLockOff;
> >
> > end;
>
> Hvorfor funker det ikke? Anyone??

Iht. MSDN virker SetKeyboardState kun for det thread hvori det bliver
kørt, men det påvirker ikke lysdioderne på tastaturet.

MS siger at man skal bruge SendInput som nærmest sender en karakter.

Eks:
uses
Windows;

procedure SetNumLock(ASet : Boolean);
var
wInput : TInput;
wCount : integer;
begin
wInput.Itype := INPUT_KEYBOARD;
wInput.ki.wVk := VK_NUMLOCK;
if ASet then begin
wInput.ki.dwFlags := 0;
end else begin
wInput.ki.dwFlags := KEYEVENTF_KEYUP;
end;
wCount := SendInput(1, wInput, Sizeof(wInput));
Assert(WCount <> 1);
end;

procedure SetCapsLock(ASet : Boolean);
var
wInput : TInput;
wCount : integer;
begin
wInput.Itype := INPUT_KEYBOARD;
wInput.ki.wVk := VK_CAPITAL;
if ASet then begin
wInput.ki.dwFlags := 0;
end else begin
wInput.ki.dwFlags := KEYEVENTF_KEYUP;
end;
wCount := SendInput(1, wInput, Sizeof(wInput));
Assert(WCount <> 1);
end;

Jeg har desværre ikke et keyboard med lysdioder (ret irriterende) men
det virkede i hvertfald i en TEdit jeg havde på formen og i andre
programmer.

/Casper

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

Månedens bedste
Årets bedste
Sidste års bedste