Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi PostMessage und Konstanten (https://www.delphipraxis.net/150985-postmessage-und-konstanten.html)

Xerogon 2. Mai 2010 12:05


PostMessage und Konstanten
 
Hallo, Ich schreibe gerade an einer Dll, mit der man bequem Tasten senden kann.
Standart muss man ja die Hexzahlen eingeben ($41 für A usw.).

Das gefällt mir aber nicht. Ich will einfach nur A eingeben. Deswegen habe ich zu jedem Buchstaben Konstanten gesetzt

Delphi-Quellcode:
{===============================================================================
 Autor: Markus S. @  General Desert
 DLL Version: 1.0.0

 Funktionen:
   - GetHandle
   - INIRead
   - INIWrite
   - SendText
   - MouseClick
   - MemoryRead
   - MemoryWrite
   - TimeDiff
   - Shutdown
   - RecordMouse

 ==============================================================================}

library Main;

uses
  SysUtils, Windows, Messages, Classes, inifiles;

const
  A = $41;
  B = $42;
  C = $43;
  D = $44;
  E = $45;
  F = $46;
  G = $47;
  H = $48;
  I = $49;
  J = $4A;
  K = $4B;
  L = $4C;
  M = $4D;
  N = $4E;
  O = $4F;
  P = $50;
  Q = $51;
  R = $52;
  S = $53;
  T = $54;
  U = $55;
  V = $56;
  W = $57;
  X = $58;
  Y = $59;
  Z = $59;

  ENTER = $0D;
  SPACE = $20;
  SHIFT = $10;

  LBUTTON = $01;
  RBUTTON = $02;
Nun will ich einen text per PostMessage senden.

Delphi-Quellcode:
Procedure TUser.SendText(Handle: HWnd; Text: PChar; var Delay: longInt); stdcall;
var
  i: Integer;
  Zeichenlaenge: Integer;
  Save: TMaxLength;
begin
  Zeichenlaenge := Length(Text);
  for i := 1 to Zeichenlaenge do
  begin
    Save[i] := Text[i];

    //Taste senden
    PostMessage(Handle, WM_KEYDOWN, Save[i], 0);
Nur das ganze geht nicht. Also es sollte später mal so aussehen

Delphi-Quellcode:
Postmessage(Handle, WM_KEYDOWN, A, 0); //Sendet die taste A
Danke ;)

daywalker9 2. Mai 2010 12:31

Re: PostMessage und Konstanten
 
Was heißt "geht nicht" ?

Xerogon 2. Mai 2010 13:06

Re: PostMessage und Konstanten
 
Integer und PChar sind inkompitable

MacGuyver 5. Mai 2010 21:12

Re: PostMessage und Konstanten
 
Moin auch :hi:

Delphi-Quellcode:
Postmessage(Handle, WM_KEYDOWN, A, 0); //Sendet die taste A
Das sollte so funktionieren. Stimmt der Scan-Code?

Wichtig dabei ist, dass zum WM_KEYDOWN auch ein WM_KEYUP gesendet wird. Die Taste muss ja auch wieder losgelassen werden.

In der oberen Geschichte könnte man das so lösen:

Delphi-Quellcode:
var lCode : Word;

case Text[i] of                   //Ord('a') ist klarer zu lesen als die passende Zahl
  'a'..'z' : lCode := Ord(Text[i]) - Ord('a') + $41;

  else lCode := 0;
end;
if lCode > 0 then
begin
  //Taste senden
  PostMessage(Handle, WM_KEYDOWN, lCode, 0);
  PostMessage(Handle, WM_KEYUP,  lCode, 0);
end;
Ist nur so eine Idee.


Stefan


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:14 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