Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi PostMessage problem (https://www.delphipraxis.net/107508-postmessage-problem.html)

k4ni 29. Jan 2008 02:04


PostMessage problem
 
hey leute,

Normalerweise macht man doch damit EINEN tastendruck:
Delphi-Quellcode:
PostMessage(h, WM_KeyDown, $41, 0);
PostMessage(h, WM_KeyUp, $41, 0);
Doch komischerweise schickt er mir dann das "a" zweimal.

Ich hab mir die procedure von EnterText und umgeschrieben.
Und zwar so:

Delphi-Quellcode:
procedure SendText(AText: String);
var lCount, Ky : Integer;
    lScanCode : Smallint;
    h         : HWND;
    lWithShift : Boolean;
begin
for lCount := 1 To Length(AText) Do
  begin
    lScanCode := VkKeyScan(AText[lCount]);
    lWithShift := lScanCode and (1 shl 8) <> 0;
   
    if lWithShift then
    PostMessage(Memo1.Handle, WM_KeyDown, VK_SHIFT, 0);

    PostMessage(Memo1.Handle, WM_KeyDown, lScanCode, 0);
    PostMessage(Memo1.Handle, WM_KeyUp, lScanCode, 0);

    if lWithShift then
    PostMessage(Memo1.Handle, WM_KeyUp, VK_SHIFT, 0);
  end;
end;
So sollte eigentlich funktionieren, also wenn der key ein grosses "A" ist das es dann auch ein grosses a macht.
Geht aber nicht da das KeyDown/KeyUp nicht wirklich geht.

Was ist daran dann falsch?

k4ni 30. Jan 2008 13:02

Re: PostMessage problem
 
[bump] Niemand ne idee? :( [/bump]

SirThornberry 30. Jan 2008 13:10

Re: PostMessage problem
 
normaler Weise macht man einen Tastendruck mit keybd_event :)

k4ni 30. Jan 2008 13:17

Re: PostMessage problem
 
Joar schon aber ich möchte es ja geplant mit PostMessage machen :P
Das problem wäre es ja garnicht dann mach ich einfach nur KeyDown und nicht KeyDown und KeyUp.
Aber das problem ist wenn der char ein großbuchstabe ist dann klickt es ja shift aber nur einmal kurz und lässt es nicht gedrückt bis wieder KeyUp kommt...
hmm :(

Christian Seehase 30. Jan 2008 13:28

Re: PostMessage problem
 
Moin k4ni,

Du sollest Dir noch mal die Doku zu WM_KEYUP/WM_KEYDOWN durchlesen, speziell lParam.
Evtl. klappt es besser, wenn Du nicht einfach nur 0 angibst.

k4ni 30. Jan 2008 13:34

Re: PostMessage problem
 
Schon :), nur mach ich das für ein spiel. Und da muss ich bestimmte lParam's nehmen sonst blockt es die keys.

So in etwa:
Delphi-Quellcode:
lParam := MapVirtualKey(VK_SHIFT, 0);
lParam := lParma shl 16;
Edit: Oh vielen dank! Ich hab mir das mal durchgelesen und es war recht interesant. Ich versuch das mal und hoffe das dieser shift key nicht geblockt ist. (es sind nur bestimmte geblockt)

Dani 30. Jan 2008 13:43

Re: PostMessage problem
 
DelphiCheater-PRAXiS :|

Ich kann nur hoffen, dass dein Account und die Accounts der Leute, die deinen Bot benutzen, gebannt werden.

k4ni 30. Jan 2008 13:48

Re: PostMessage problem
 
Sind ja keine cheats, ändert ja nichts an der memory. Ist lediglich ein auto-chatter.

Nuclear-Ping 30. Jan 2008 13:54

Re: PostMessage problem
 
Sicher ist das ein interessantes Projekt. Trotzdem sind solche Programme, die von aussen auf das Spiel zugreifen und es (fern-)steuern von Herstellern nicht gern gesehen.

Nicht umsonst gibts z.B. bei WoW 'n Prog ("warden"), was im Hintergrund läuft und Prozesse überwacht, die auf den WoW-Prozess zugreifen und das protokollieren / reporten. Und nicht umsonst hat man dann wieder zig Leute im WoW Forum, die wegen Account-Bans rumheulen, á la "Aber ich hab doch garnichts gemacht :shock:". Die hatten vlt. auch nur 'n "Auto-Chatter" (Anti-AFK-Bot?) am laufen?

Und wer weiß, was aus der Idee (Auto-Chatter) noch wird, wenn dein Konzept greift und du merkst, dass man damit ja auch noch viele andere Sachen machen könnte. ;)

k4ni 30. Jan 2008 14:25

Re: PostMessage problem
 
Joar zudem ist das ja ziehmlich harmlos den in dem spiel hacken sowieso 40% der spieler. Das ist ein Auto-Chatter nix dagegen :D.

Nur hab ich jetzt rausgefunden das ich die PostMessage function einfach anderst benützen muss den das geht auch nicht:
Delphi-Quellcode:
procedure SendText(Handle: HWND; AText: String);
var lCount, Ky : Integer;
    lScanCode : Smallint;
    h         : HWND;
    lWithShift : Boolean;
begin
for lCount := 1 To Length(AText) Do
  begin
    lScanCode := VkKeyScan(AText[lCount]);
    lWithShift := lScanCode and (1 shl 8) <> 0;

    if lWithShift then
      keybd_event(VK_SHIFT, 0, 0, 0);

    PostMessage(Handle, WM_KeyDown, lScanCode, 0);

    if lWithShift then
      keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
end;
end;
Doch wie kann ich ermitteln ob iScanCode ein großbuchstabe ist?

Edit:
Also ich hab zumbeispiel auch rausgefunden das 1 = 49 ist und ! = 305 .
Aber ob 49 oder 305 beides sendet eine 1.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:18 Uhr.
Seite 1 von 2  1 2      

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