![]() |
Tastendrücke simuliern, abhängig von Betriebssystemversion?
Ich verwende folgenden Code, um eine Zeichenfolge zu senden:
Delphi-Quellcode:
Die Delphi 2006 Hilfe behauptet:
for i := 1 to Length(S) do
begin bUpCase := (S[i] in ['A'..'Z']); if bUpCase then keybd_event(VK_SHIFT, 0, 0, 0); //press (Umschalt-Taste) keybd_event(Ord(UpCase(S[i])), 0, 0, 0); //press (Zeichentaste) keybd_event(Ord(UpCase(S[i])), 0, KEYEVENTF_KEYUP, 0); //release (Zeichentaste) if bUpCase then keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); //release (Umschalt-Taste) end; "Windows NT/2000/XP: This function has been superseded. Use SendInput instead." Trotzdem funktioniert dieser Code in Windows XP. Ist es ratsam, zwischen Betriebssystem-Versionen zu unterscheiden und in Windows NT/2000/XP stattdessen SendInput zu verwenden? |
Re: Tastendrücke simuliern, abhängig von Betriebssystemversi
der Hinweis bedeutet das die Funktion in absehbarer Zukunft nicht mehr existiert. Also solltest du so weit möglich die neue Version verwenden. Da die neue Version bei alten Betriebssystemen noch nicht funktioniert bleibt somit nix anderes übrig als nach Betriebssystem zu unterscheiden welche Funktion genutzt werden soll (oder das Risiko eingehen das die Funktion beim nächsten Betriebssystem nicht mehr existiert und somit auch das Programm nicht mehr funktioniert)
|
Re: Tastendrücke simuliern, abhängig von Betriebssystemversi
Zitat:
Übrigens: Ich habe gemerkt, dass der obige Code bei Umlauten nicht funktioniert. Wie lauten denn die virtuellen Tastencodes für die Umlautzeichen-Tasten Ö, Ä, Ü sowie ß? In Windows.pas sind sie anscheinend nicht definiert. |
Re: Tastendrücke simuliern, abhängig von Betriebssystemversi
Also ich kann SirThornberry nicht zustimmen!
Wäre die Funktion überholt und flöge sie bald raus, wäre der Status "deprecated" und nicht der den du oben beschrieben hast. "Superseded" bedeutet ja noch nichtmal ersetzt ("replaced") sondern nur, daß es eine Funktion gibt, die noch mehr kann als die einzelne Funktion keybd_event() welche du gerade benutzt. In diesem Fall bedeutet es, daß du die bei keybd_event() vorhandene Funktionalität und noch mehr (nämlich Mauseingaben und sogar mehrere Eingaben auf einmal) mit SendInput() erreichen kannst. Wenn du dir ![]() ![]() Zitat:
![]() ![]() ![]() Mehr: ![]() ![]() |
Re: Tastendrücke simuliern, abhängig von Betriebssystemversi
oh, ich sollte wohl an meinem englisch arbeiten :oops:
|
Re: Tastendrücke simuliern, abhängig von Betriebssystemversi
@ Olli:
Vielen Dank für die kompetente Antwort! Leider kann ich SendInput nicht verwenden, da die Funktionalität auch unter Windows 98 gegeben sein muss. Wie kann man also die in der CodePage gemappten VirtualKeyCodes für die Umlaut-Tasten auslesen? Sind eigentlich die VirtualKeyCodes für die Umlaut-Tasten auf allen Tastaturen mit deutschem Tastatur-Layout gleich? Oder wie kann man die sonst auf dem jeweiligen Laufzeitsystem auslesen? Vielen Dank im Voraus! |
Re: Tastendrücke simuliern, abhängig von Betriebssystemversi
Also soweit ich mich entsinne, kann man die Sprache systemweit, hingegen die Codepage nur gerätekontextweit setzen. Für dich bedeutet das, daß du theoretisch statt Scancodes den Zeichencode 'ä' usw. hartkodieren kannst, daß dann aber in dem anderen Programm ggf. nicht 'ä' usw., sondern etwas komplett anderes angezeigt wird. Hat bspw. der Benutzer eine russische Codepage, kommt bei 'ä' mit großer Wahrscheinlichkeit ein 'д' raus (russisches D).
|
Re: Tastendrücke simuliern, abhängig von Betriebssystemversi
Ich habe empirisch folgende virtuelle Tastencodes für nicht-englische Zeichen-Tasten gefunden (Tastatur: Logitech MX5000, Windows XP Home; Eingabegebietsschema: Deutsch; deutsches Tastaturlayout):
Delphi-Quellcode:
In KLammern stehen die jeweils mit der Umschalttaste auf dieser Tastatur erreichbaren Zeichen.
ü $BA
+ $BB (Umschalttaste: *) , $BC (Umschalttaste: ;) - $BD (Umschalttaste: _) . $BE (Umschalttaste: :) # $BF (Umschalttaste: ') ö $C0 ß $DB (Umschalttaste: ?) ^ $DC ´ $DD ä $DE Kann man davon ausgehen, dass diese virtuellen Tastencodes auf allen deutschen Systemen zutreffend sind? Könnte das mal jemand bei sich überprüfen? Vielen Dank! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:20 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 by Thomas Breitkreuz