AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Tastaursimulation + Windows.pas

Ein Thema von Harry M. · begonnen am 21. Apr 2005 · letzter Beitrag vom 21. Apr 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#1

Tastaursimulation + Windows.pas

  Alt 21. Apr 2005, 11:29
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
keybd_event(VK_A, MapVirtualKey(VK_A, 0), 0, 0) ein 'a' an die anwendung geben kann stellst sich für mich die frage, wie mache ich das mit umlauten und grossbuchstaben und sonderzeichen?

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:
{in TEMPSTR befindet sich zb. 'k'}
PostKeyEx32(Ord(TEMPSTR[1]), [], FALSE);
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.

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
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#2

Re: Tastaursimulation + Windows.pas

  Alt 21. Apr 2005, 13:20
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:
  keybd_event(Ord('A'), MapVirtualKey(Ord('A'), 0), 0, 0);
  keybd_event(Ord('A'), MapVirtualKey(Ord('A'), 0), KEYEVENTF_KEYUP, 0);
Jetzt mal ein 'a':
Delphi-Quellcode:
  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);
Jetzt mal ein Alt-Tab:
Delphi-Quellcode:
  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 Vermutung das es ein Ü ueberhaupt gibt ist natuerlich falsch.
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!
  Mit Zitat antworten Zitat
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#3

Re: Tastaursimulation + Windows.pas

  Alt 21. Apr 2005, 13:39
hallo robert,

es geht nicht!!! ich bekomme statt einem 'k' ein '+' und bei einem 'a' eine '1' geschrieben
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#4

Re: Tastaursimulation + Windows.pas

  Alt 21. Apr 2005, 14:14
Poste doch mal den Code der zum '+' fuehrt.

Ein Test:
Delphi-Quellcode:
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.
Dieser generiert im Editfeld ein grosses A. Kommentiert man dir VK_SHIFT-Zeilen aus, so generiert es ein kleines a.
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.
  Mit Zitat antworten Zitat
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#5

Re: Tastaursimulation + Windows.pas

  Alt 21. Apr 2005, 14:26
Delphi-Quellcode:
  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);
oder eben wie schon oben gepostet:
PostKeyEx32(Ord(TEMPSTR[1]), [], FALSE); 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:

if TEMPSTR = 'kthen keybd_event(Ord('k'), MapVirtualKey(Ord('k'), 0), 0, 0); 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.

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);
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#6

Re: Tastaursimulation + Windows.pas

  Alt 21. Apr 2005, 15:10
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'.
  Mit Zitat antworten Zitat
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#7

Re: Tastaursimulation + Windows.pas

  Alt 21. Apr 2005, 15:19
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??
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#8

Re: Tastaursimulation + Windows.pas

  Alt 21. Apr 2005, 15:22
Aber natuerlich. Schau auf deine Tastatur da steht es drauf.
Loese dich von der Vorstellung das ASCII hier eine Rolle spielt.
  Mit Zitat antworten Zitat
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#9

Re: Tastaursimulation + Windows.pas

  Alt 21. Apr 2005, 15:27
in wie weit gehen dann die pfeil tasten und F1-F12 sowie die zeichen der drittbelegung @ € ~ \ usw ???
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#10

Re: Tastaursimulation + Windows.pas

  Alt 21. Apr 2005, 15:31
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:58 Uhr.
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