![]() |
Tastaursimulation + Windows.pas
das mein programm richtig geht, ist es für mich notwendig gewesen, die Windows.pas zu erweitern da die virtualkeys für a-z und 0-9 nicht enthalten waren. nachdem ich das jetzt getan habe und endlich über den aufruf
Delphi-Quellcode:
ein 'a' an die anwendung geben kann stellst sich für mich die frage, wie mache ich das mit umlauten und grossbuchstaben und sonderzeichen?
keybd_event(VK_A, MapVirtualKey(VK_A, 0), 0, 0)
und bitte nicht auf sendkey, sendkey32.pas, PostKeyEx, PostKeyEx32 usw. verweisen. das habe ich alles schon durch und nie wirklich das gewünschte ergebenis bekommen (in den letzten 3 tagen). am besten davon ist die procedure PostKeyEx32 dahabe ich habe das problem einer "variablen verschiebung" wenn ich diese über den aufruf
Delphi-Quellcode:
tue kommt am ende ein '+' bei der zeilanwendung an. vom '+' bis zum 'k' sind es nach ascii tabelle genau 32 zeichen. eine berechnung kann ich nicht machen, weil die tasten 1-9 ordnungsgemäss gehen. befindet sin in TEMPSTR ein 'a' kommt bei der zeilanwendung eine '1' an. von '1' bis 'a' sind es 52 zeichen bzw. bis 'A' wenn ich ssShift übergebe sind es 16 zeichen.
{in TEMPSTR befindet sich zb. 'k'}
PostKeyEx32(Ord(TEMPSTR[1]), [], FALSE); also das alles geht nicht. des halb will ich den entsprechen aufruf in einer case of unter bringen:
Delphi-Quellcode:
case TEMPSTR[1] of
//.. #97: keybd_event(VK_A, MapVirtualKey(VK_A, 0), 0, 0) //.. end; gruß harry |
Re: Tastaursimulation + Windows.pas
Das waere nicht noetig gewesen. Die VK_ Codes fuer 'A'..'Z' und '0'..'9' entsprechen dem ASCII-Wert. VK_A ist also Ord('A').
Nicht vergessen die Taste wieder loszulassen:
Delphi-Quellcode:
Jetzt mal ein 'a':
keybd_event(Ord('A'), MapVirtualKey(Ord('A'), 0), 0, 0);
keybd_event(Ord('A'), MapVirtualKey(Ord('A'), 0), KEYEVENTF_KEYUP, 0);
Delphi-Quellcode:
Jetzt mal ein Alt-Tab:
keybd_event(VK_SHIFT, MapVirtualKey(VK_SHIFT, 0), 0, 0);
keybd_event(Ord('A'), MapVirtualKey(Ord('A'), 0), 0, 0); keybd_event(Ord('A'), MapVirtualKey(Ord('A'), 0), KEYEVENTF_KEYUP, 0); keybd_event(VK_SHIFT, MapVirtualKey(VK_SHIFT, 0), KEYEVENTF_KEYUP, 0);
Delphi-Quellcode:
Die Vermutung das es ein Ü ueberhaupt gibt ist natuerlich falsch.
keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), 0, 0);
keybd_event(VK_TAB, MapVirtualKey(VK_TAB, 0), 0, 0); keybd_event(VK_TAB, MapVirtualKey(VK_TAB, 0), KEYEVENTF_KEYUP, 0); keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), KEYEVENTF_KEYUP, 0); Die Tastaturverarbeitung sollte man an den Scancodes aufhaengen und nicht an den VK_ Codes. Die Tastatur liefert naemlich sprachunabhaengige Scancodes und die Umwandlung in lokalisierte Zeichen erfolgt mit ToAscii(). Die Umwandlung ist nicht trivial! |
Re: Tastaursimulation + Windows.pas
hallo robert,
es geht nicht!!! ich bekomme statt einem 'k' ein '+' und bei einem 'a' eine '1' geschrieben |
Re: Tastaursimulation + Windows.pas
Poste doch mal den Code der zum '+' fuehrt.
Ein Test:
Delphi-Quellcode:
Dieser generiert im Editfeld ein grosses A. Kommentiert man dir VK_SHIFT-Zeilen aus, so generiert es ein kleines a.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Buttons, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; SpeedButton1: TSpeedButton; procedure SpeedButton1Click(Sender: TObject); public end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.SpeedButton1Click(Sender: TObject); begin keybd_event(VK_SHIFT, MapVirtualKey(VK_SHIFT, 0), 0, 0); keybd_event(Ord('A'), MapVirtualKey(Ord('A'), 0), 0, 0); keybd_event(Ord('A'), MapVirtualKey(Ord('A'), 0), KEYEVENTF_KEYUP, 0); keybd_event(VK_SHIFT, MapVirtualKey(VK_SHIFT, 0), KEYEVENTF_KEYUP, 0); end; end. Die Vermutung es gaebe ein VK_a ist falsch. Die Vermutung Ord('A') erzeuge ein 'A' ist falsch. Man muss hier beachten das die VK_-Konstanten die Taste einer US-Tastatur benennen. Tastaturen sind aber immer in Grossbuchstaben benannt. Das Druecken einer Taste generiert aber keinen Grossbuchstaben sondern einen Kleinbuchstaben. Zum Spass teste das Programm mit auskommentierten VK_SHIFT-Zeilen und CAPS LOCK aktiv. Du bekommst ein grosses A. |
Re: Tastaursimulation + Windows.pas
Delphi-Quellcode:
oder eben wie schon oben gepostet:
TEMPSTR := 'k';
keybd_event(Ord(TEMPSTR[1]), MapVirtualKey(Ord(TEMPSTR[1]), 0), 0, 0); keybd_event(Ord(TEMPSTR[1]), MapVirtualKey(Ord(TEMPSTR[1]), 0), KEYEVENTF_KEYUP, 0);
Delphi-Quellcode:
so wie du es gepostest hast geht es ja auch aber aber nur wenn ich es mi button habe und mit einer direkten letter angabe zb 'a'. ich brauche das so, wie ich es dargestellt habe. ich habe auch schon über die abfrage:
PostKeyEx32(Ord(TEMPSTR[1]), [], FALSE);
Delphi-Quellcode:
es versucht. nix da kommt ein '+' ob du es glaubst oder nicht. ich kann dir ja mal den code via pn zustellen. ist auch nicht viel, weil ich dieses problem "ausserhalb der hauptanwendung" behandle.
if TEMPSTR = 'k' then keybd_event(Ord('k'), MapVirtualKey(Ord('k'), 0), 0, 0);
ich bin mir zwar noch nicht ganz sicher aber wenn ich TEMPSTR als ascii-code behandele geht... aber ich bin mir noch nicht ganz sicher
Delphi-Quellcode:
TASTE := StrToInt(TEMPSTR); //in TEMPSTR steht jetzt zb 65 für 'A'
keybd_event(TASTE, MapVirtualKey(TASTE, 0), 0, 0); keybd_event(TASTE, MapVirtualKey(TASTE, 0), KEYEVENTF_KEYUP, 0); |
Re: Tastaursimulation + Windows.pas
Lies doch nochmal meine Message durch (ich habe sie editiert).
Ein VK_k gibt es nicht. Der Fehler ist also der String 'k'. Ersetze ihn durch 'K'. |
Re: Tastaursimulation + Windows.pas
so weit geht das zwar dann aber spätesten beim '!' ist ende da kommt nix mehr... da muß ich dann den ascii wert abfragen und ggf shift nehmen so wie du es oben gezeigt hast??
|
Re: Tastaursimulation + Windows.pas
Aber natuerlich. Schau auf deine Tastatur da steht es drauf.
Loese dich von der Vorstellung das ASCII hier eine Rolle spielt. |
Re: Tastaursimulation + Windows.pas
in wie weit gehen dann die pfeil tasten und F1-F12 sowie die zeichen der drittbelegung @ € ~ \ usw ???
|
Re: Tastaursimulation + Windows.pas
Bitte lies dir mal die VK_ Codes durch.
Vergiss nicht das sich dies auf der Ebene der Tastatur abspielt. Drittbelegungen sind also AltGr + Taste = Ctrl + Alt + Taste. Was das Programm daraus macht ist dem Programm ueberlassen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 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