(Gast)
n/a Beiträge
|
Re: Probleme mit virtual keys
17. Sep 2003, 14:12
Hier mal die Funktion mit allen Extras aus einem meiner Projekte.
Eine der Besonderheiten ist es, das die Funktion die Ziffernblocktasten auf die gewoehnlichen Tasten mappen kann. Einige Spiele kommen nicht mit allen Tasten zurecht.
Fuer dich ist wohl nur der Bereich von KEYEVENTF_EXTENDEDKEY interessant.
Delphi-Quellcode:
procedure StdKeyEvent(wScan: Word; dwFlags, dwExtraInfo: DWORD; Wait: Cardinal; NoNumPad: Boolean);
var
Vk: Word;
begin
if NoNumPad and ((wScan and $FF) in [$1C, $47, $48, $49, $4B, $4D, $4F, $50, $51, $52, $53]) then
wScan := wScan and $FEFF;
Vk := MapVirtualKey(wScan, 3);
if Vk = 0 then
Vk := MapVirtualKey(wScan, 1);
if NoNumPad and ((wScan and $1FF) = $135) then
begin
Vk := VK_DIVIDE;
wScan := MapVirtualKey(Vk, 0);
end
else
if (Windows.GetKeyState(VK_NUMLOCK) and $1) <> 0 then
case wScan and $FF of
$47: begin Vk := Ord('7'); wScan := MapVirtualKey(Vk, 0); end;
$48: begin Vk := Ord('8'); wScan := MapVirtualKey(Vk, 0); end;
$49: begin Vk := Ord('9'); wScan := MapVirtualKey(Vk, 0); end;
$4B: begin Vk := Ord('4'); wScan := MapVirtualKey(Vk, 0); end;
$4C: begin Vk := Ord('5'); wScan := MapVirtualKey(Vk, 0); end;
$4D: begin Vk := Ord('6'); wScan := MapVirtualKey(Vk, 0); end;
$4F: begin Vk := Ord('1'); wScan := MapVirtualKey(Vk, 0); end;
$50: begin Vk := Ord('2'); wScan := MapVirtualKey(Vk, 0); end;
$51: begin Vk := Ord('3'); wScan := MapVirtualKey(Vk, 0); end;
$52: begin Vk := Ord('0'); wScan := MapVirtualKey(Vk, 0); end;
$53: begin Vk := VK_DECIMAL; wScan := MapVirtualKey(Vk, 0); end;
end;
if (wScan and $100) <> 0 then
begin
dwFlags := dwFlags or KEYEVENTF_EXTENDEDKEY;
wScan := wScan and $FEFF;
end;
keybd_event(Vk, wScan, dwFlags, dwExtraInfo);
if Wait > 0 then
Sleep(Wait);
end;
[edit=Luckie]D-Tags hinzugefügt, folge Posting gelöscht. Mfg, Luckie[/edit]
|
|
Zitat
|