![]() |
Probleme mit virtual keys
morgen alle zusammen,
ich sende virtuelle tasten an ein dos-programm unter win98 (ibm thinkpad). klappt prima mit keyb_event(.....) leider funktioniert es nicht mehr auf einem anderen rechner (toshiba tecra 8000), bei dem ebenfalls win98 installiert ist. Enter funktioniert, aber nicht die pfeiltasten. kennt jemand den grund ?? gruß wotan |
Re: Probleme mit virtual keys
Da kann ich dir ein traurig Lied singen.
Setz mal das EXTENDED Bit. Die separaten Pfeiltasten und die Pfeiltasten auf dem Nummernblock unterscheiden sich durch dieses Bit. Was die Notebooktasten liefern steht in den Sternen. |
Probleme mit virtual keys
Wie mache ich das ? Nutze den folgenden Code:
keybd_event(VK_return, MapVirtualKey(VK_shift, 0), 0, 0); |
Re: Probleme mit virtual keys
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:
[edit=Luckie]D-Tags hinzugefügt, folge Posting gelöscht. Mfg, Luckie[/edit]
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; |
Probleme mit virtual keys
Das schaut ja schon sehr gut aus. Könntest du mir ein Beispiel geben, wie ich die Funktion für die normalen Pfeiltasten aufrufe !?
Gruß Wotan |
Re: Probleme mit virtual keys
Servus Wotan,
dafür nimmst Du das Beispiel mit diesen Api-Konstanten als Parameter: VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT Gruß Dannyboy |
Re: Probleme mit virtual keys
hi dannyboy,
das ist mir schon klar. die frage ist, was ich für dwFlags und dwExtraInfo setzen muß !? |
Re: Probleme mit virtual keys
dwFlags kommt rein mit entweder KEYEVENTF_KEYDOWN oder KEYEVENTF_KEYUP.
dwExtraInfo ist egal. Den Wert kannst du im Programm das letztendlich eine WM_KEYDOWN oder WM_KEYUP Message bekommt, abrufen. Damit koenntest du dann unterscheiden woher der Tastenevent kommt. Leider markieren alle Treiber mit 0. |
Re: Probleme mit virtual keys
hi robert,
es hat leider nicht geklappt. kann es sein, daß man die einstellungen für die verknüpfungen der dos-programme irgendwie anpassen muß oder daß die win98 versionen verschieden sind !??? ich weiß nicht weiter. :coder: gruß wotan |
Re: Probleme mit virtual keys
Was willst du denn eigentlich generieren?
Hotkeys? Die koennten durchs Raster fallen, da sie moeglicherweise auf der Ebene unter keybd_event abgehandelt werden. Ctrl-Alt-Del z. B. wird tief im Treiber abgehandelt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz