Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Probleme mit virtual keys (https://www.delphipraxis.net/9036-probleme-mit-virtual-keys.html)

Wotan 17. Sep 2003 09:58


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

Robert Marquardt 17. Sep 2003 11:14

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.

Wotan 17. Sep 2003 12:57

Probleme mit virtual keys
 
Wie mache ich das ? Nutze den folgenden Code:

keybd_event(VK_return, MapVirtualKey(VK_shift, 0), 0, 0);

Robert Marquardt 17. Sep 2003 13:12

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:
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]

Wotan 17. Sep 2003 13:23

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

Dannyboy 17. Sep 2003 13:34

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

Wotan 17. Sep 2003 13:44

Re: Probleme mit virtual keys
 
hi dannyboy,

das ist mir schon klar.

die frage ist, was ich für dwFlags und dwExtraInfo setzen muß !?

Robert Marquardt 17. Sep 2003 14:48

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.

Wotan 17. Sep 2003 15:16

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

Robert Marquardt 18. Sep 2003 06:36

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 14:39 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz