![]() |
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. |
Re: Probleme mit virtual keys
Ich wollte an ein dos-programm folgende Tasten senden:
Enter E NachUnten Enter .... hat auf einem rechner prima funktioniert. als ich es dann auch auf einem anderen rechner laufen lassen wollte, haben die pfeiltasten nicht mehr funktioniert. |
Re: Probleme mit virtual keys
Eigentlich sollte das entweder mit KEYEVENTF_EXTENDEDKEY oder ohne funktionieren. Zeig doch mal deinen Code.
Bei Notebooks besteht aber immer eine gewisse Chance das ein spezieller Treiber (z. B. fuer Spezialtasten) dazwischenpfuscht. |
Re: Probleme mit virtual keys
Hier ist ein Auszug aus meinem Prog.
.... if form6.listbox1.Items.Strings[x]='Enter' then Begin keybd_event(VK_return, MapVirtualKey(VK_return, 0), 0, 0); keybd_event(VK_return, MapVirtualKey(VK_return, 0),KEYEVENTF_KEYUP,0); End else if form6.listbox1.Items.Strings[x]='Hoch' then Begin keybd_event(VK_down, MapVirtualKey(VK_up, 0), 0, 0); keybd_event(VK_down, MapVirtualKey(VK_up, 0), KEYEVENTF_KEYUP, 0); End else if form6.listbox1.Items.Strings[x]='Runter' then Begin keybd_event(VK_down, MapVirtualKey(VK_down, 0), 0, 0); keybd_event(VK_down, MapVirtualKey(VK_down, 0), KEYEVENTF_KEYUP, 0); End else if form6.listbox1.Items.Strings[x]='Links' then Begin keybd_event(VK_down, MapVirtualKey(VK_left, 0), 0, 0); keybd_event(VK_down, MapVirtualKey(VK_left, 0), KEYEVENTF_KEYUP, 0); End else if form6.listbox1.Items.Strings[x]='Rechts' then Begin keybd_event(VK_down, MapVirtualKey(VK_right, 0), 0, 0); keybd_event(VK_down, MapVirtualKey(VK_right, 0), KEYEVENTF_KEYUP, 0); End else .... Wie gesagt, läuft auf dem einen Rechner prima und auf dem anderen nicht. |
Re: Probleme mit virtual keys
Erst mal den Fehler beheben. Innerhalb der Aufrufe ueberall den gleichen VK_ Code angeben.
keybd_event(VK_down, MapVirtualKey(VK_down, 0), 0, 0); keybd_event(VK_down, MapVirtualKey(VK_down, 0), KEYEVENTF_KEYUP, 0); Wenn das nicht hilft dann mal mit KEYEVENTF_EXTENDEDKEY. keybd_event(VK_down, MapVirtualKey(VK_down, 0), KEYEVENTF_KEYDOWN or KEYEVENTF_EXTENDEDKEY, 0); keybd_event(VK_down, MapVirtualKey(VK_down, 0), KEYEVENTF_KEYUP or KEYEVENTF_EXTENDEDKEY, 0); Es kann gut sein das es dann auf dem anderen aber nicht mehr auf dem einen Rechner geht. |
Re: Probleme mit virtual keys
Hi Robert,
stimmt. ich hatte da teilweise die falschen vk_ codes drin. aber beim vk_down ('runter') hat's ja gestimmt und nicht funktioniert. ich werde jetzt mal die andere lösung von dir ausprobieren. gruß wotan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:03 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