![]() |
Tastendrücke
Hallo
ich versuche einen Tastendruck zu simulieren, warum aber, funktioniert folgender Code nicht?
Code:
Aus ein Paar versuchen, weiß ich, dass er den Tastencode der F3 Taste sendet und nicht den der "r" taste! Was mache ich falsch?
edit1.setfocus;
keybd_event(ord('r'),0,0,0); Tnx TO |
Spontaner tipp: teste mal ord('R') nicht ord('r')!
|
Moin The Omega,
die Taste ist R nicht r. [EDIT]Mist, zu spät ;-)[/EDIT] |
Hi,
Muss man da nicht anstatt den ASCII- Nummern der jeweiligen Taste (die "ord" ja zurückgibt) Hex-Werte übergeben? Ich hab mir dazu vor einigen Monaten mal was zum Ausprobieren geschrieben, hab aber die Sources nich mehr. Da hatte ich mir für irgendetwas ne lange Liste von VKeys gemacht, die dann jeweils für einen HexWert ($irgendwas) standen. Wahrscheinlich hab ich das so gemacht, weil man die HexWerte ja nich mit dieser IntToHex- Funktion errechnen und übergeben kann (die gibt ja nen string zurück). Die hab ich mir dann von VK_A bis VK_Z und in kleinbuchstaben durchdefiniert. Vermutlich gibts ne Unit in der die drinstehen, aber die hab ich damals nich gefunden... Also, wie gesagt: Mein Vorschlag is, die Acii- Werte als Hex zu übergeben und nich als Integer. Is aber zu lange her, vielleicht is das auch der falsche Ansatz. Bis denn, S - tefano |
Hi S-tefano,
es spielt keine Rolle, ob die Zahl als Hexadezimal- oder Dezimalzahl übergeben wird. Die Dezimalzahl ist ja nichts weiteres als eine Kodierung der binären Darstellung im Speicher, die Hexadezimalzahl ebenfalls. Die Unterscheidung ist sinnvoll, da Binärzahlen unbequem zu lesen sind und leicht in Hexadezimalzahlen umwandelbar sind, spielt allerdings bei der Verarrbeitung im Speicher keine Rolle. |
Moin S - tefano,
das Zahlensystem, in dem Du die Zahlen angibst spielt keine Rolle, ob Du also Zahlen zur Basis 10, oder zur Basis 16 nimmst, wird sich nicht im geringsten auf das Auswirken was die Funktion macht. Zu Deiner Idee mit VK_A usw. Schau mal in der Hilfe unter "Virtuelle Tastencodes". Dort wird ausdrücklich darauf hingewiesen, dass solche "normalen" Tasten nicht als virtuelle Tastencodes angelegt wurden. (A bis Z und die Ziffern) Kann man natürlich machen, womit dann, Vorteil, auch die Unterscheidungsprobleme zwischen A und a wegfallen (vorausgesetzt man legt die Konstanten richtig an ;-)). Übrigens kannst Du das Ergebnis von IntToHex durchaus als Zahl übergeben, wenn Du ein '$' davorsetzt, also '$'+IntToHex(...) schreibst. [EDIT]Schon wieder zu spät. Zweimal im gleichen Thread :cry: :mrgreen: [/EDIT] |
Hi,
jo stimmt, hattest recht. (so @ C.Seehase und Chewie) Hm, aber ich weiß genau dass ich mir sone Liste angelegt hab... Komisch. Naja, also theomega, wenns so wie dus z.Zt. machst nich klappt, kannstes ja mal mit soner Liste versuchen. Bei mir hats jedenfalls geklappt... :witch: Werd mich am Wochenende und in den Ferien mal damit beschäftigen, so als Nebenprojekt zu meinem anderen Prog, dass hoffentlich laufen wird. Bis dann, S - tefano |
Hallo,
ich stand kürzlich vor einem ähnlichen Problem. Eine Lösung findest Du bei Andreas Blenk ![]() unter: Delphi-Tipps Komponenten/Oberfläche/Anwendung/Strings Wie kann ich einen simulierten Tastendruck an eine Komponente senden? Das funktioniert ausgezeichnet. Für das kleine r musst Du entweder die Dezimalzahl 82 einsetzen oder ord('R'). Für das grosse R musst Du als zweite Taste (Key2) VK_Shift einsetzen. Falls Du nicht auf der Tastatur vohandene Zeichen (ALT+.....) durch Drücken der Funktionstasten erzeugen willst (zB ñ, das war mein Problem), melde Dich bitte per eMail bei mir. Werner |
hi,
hab da ein bisl anderes Problem, dachte ich frag mal vielleicht kann mir ja jemand helfen :oops: Habe auf meinem Keyboard eine Umschalttaste für Funktionstasten (doppelte Belegung) wie kann ich die aktiviren deaktivieren ?? Beziehungsweise Standartmäsig aktivieren ? Microsoft Multimedia Keyboard :freak: gruß Steven |
Zitat:
|
Zu Doppelbelegung fällt mir ein: Hat jemand mal eine relative komplette Übersicht über die Windows-Shortcuts? Ich wollte was auf Strg-H legen, und siehe da, das ist das gleiche wie Backspace. Mich würde mal interessieren, wo noch mehr solcher Überraschungen lauern
|
Moin Nailor,
wo hattest Du denn ein Problem mit STRG-H? Die gesamten Kombinationen STRG-A bis STRG-Z sind mit den entsprechenden ASCII Codes 01 bis 26 belegt (Steuerzeichen). Dies dürfte sich allerdings nur in der Konsole auswirken (in Notepad ist STRG-H der Shortcut für Ersetzen) Gib da mal STRG-G und Enter ein. Ein Beep wird laut, da STRG-G für den Code 07 = BEL steht. Was übrigens auch die ausgeschriebene Version von STRG nahelegt: Steuerung. Für diese Zeichen besorgst Du Dir am Besten mal eine Liste der ASCII Codes, z.B. in den GExperts enthalten. |
in jedem edit, memo... ist STRG-H das gleiche wie Backspace! Damit löschst du das letzte Zeichen. Auch bei Notepad! Ich wollte das glaub ich für einen Hilfedialog nehmen, aber dann war immer Hilfe aufgerufen und letztes Zeichen weg. Also hab ich es dann doch auf F1.
|
Vernünftig. Warum vom Standard abweichen.
|
Und meine Frage war jetzt, ob vielleicht auf STRG-S oder STRG-N auch noch irgendwelche Nebenwirkungen zu befürchten sind, die man erst eliminieren müsste?
|
Moin Nailor,
also wenn ich im Notepad Strg-H drücke geht, wie schon gesagt, der Ersetzen Dialog auf. Da wird nichts gelöscht. Diese Tastenkombinationen wirken sich nur in der Konsole aus (jedenfalls bei mir) [EDIT] Ich hab's gerade mal mit einem TMemo ausprobiert: Da passiert's nur, wenn ich Strg-H nicht anderweitig als Shortcut zugeordnet habe (z.B. zu einem Menüpunkt) In Frage kommen, wie schon gesagt, die Kombinationen Strg-A bis Strg-Z in Frage. Evtl., aber das hab' ich jetzt nicht probiert, liesse sich das noch in der WndProc abfangen. Allerdings: Wären keine Kombinationen vorbelegt, müsste man Strg-C,-X,-V auch immer selber programmieren. [/EDIT] |
als ich hab win me. da gehen im editor, im start->ausführen,...
überall das letzte zeichen weg! ...mal testen. ...Bei WordPad geht ein Suchen/Ersetzen Dialog auf. Sonst nirgends! |
Moin Nailor,
mal verallgemeinert ausgedrückt: Ist Strg-H bereits belegt, wird diese Verknüpfung ausgeführt, ansonsten wird es als Backspace interpretiert. Mit Strg-Y wird i.d.R. auch eine Zeile gelöscht. (z.B. auch in der Delphi IDE) |
NeinNeinNein!
Wenn ich im Form1.KeyDown abfrage, ob STRG dedrückt und H gedrückt ist, und wenn ja ShowMessage('HaHaHa') mache, dann passiert bei STRG-H folgendes: Mein Letztes getipptes Zeichen geht weg UND eine Messagebox geht auf!!! Ehrlich!!! |
Moin Nailor,
DochDochDoch :mrgreen: Ich sagte ja: Wenn diese Kombination bereits belegt ist passiert das nicht. Das heisst: Du hast einen Shortcut mit dieser Tastenkombination belegt, z.B. als Eigenschaft ShortCut in einem Mainmenü. Dann wird nicht gelöscht. |
Nicht das ich wüßte. Strg+S ist immer der Shortcut zum Speichern und Strg+N für ein neues Dokument (siehe Notepad).
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:41 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