Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi mehrmals sendmessage hintereinander ausführen (https://www.delphipraxis.net/125990-mehrmals-sendmessage-hintereinander-ausfuehren.html)

soulies 16. Dez 2008 08:14


mehrmals sendmessage hintereinander ausführen
 
hoi,

ich wollte ein Fenster 'fernsteuern' und 2 Buttons des Fensters drücken,
dazu suche ich das Fenster und wenn gefunden sende ich die jeweilige Message.

Das Problem ist das nur das erste Sendmessage 'offensichtlich' ausgeführt wird.

Die Fenster und Buttons werden alle gefunden.
Auch beim Step-By-Step durchschalten führt er 2mal Sendmessage aus - aber nur einmal
(das erste sendmessage) funktioniert (anscheinend).

Wenn das 2. SendMessage ausgeführt - hängt dann die Nachricht noch in einer Nachrichtenschlange ?
Hatte auch Postmessage ausprobiert um Nachrichten in der Schlange hintereinander abarbeiten zu lassen - auch nichts.

Wenn ich das ganze in 2 Proceduren splitte funktionierts.

Mein bisheriger Code wie er in etwa aussieht:

Delphi-Quellcode:
procedure xyz ;
var
  wndMain, wndChild: HWND;
begin
  wndMain := FindWindow('Klassenname','Fenstertitel');
  if (wndMain <> 0) then
  begin
      wndChild := FindWindowEx(wndMain, 0, 'Button', 'ButtonTitel1');
      if (wndChild <>0) then
         SendMessage(wndChild, BM_CLICK,0,0);

      wndChild := FindWindowEx(wndMain, 0, 'Button', 'ButtonTitel2');
      if (wndChild <>0) then
         SendMessage(wndChild, BM_CLICK,0,0);    
  end;
end;
cya

SirThornberry 16. Dez 2008 08:24

Re: mehrmals sendmessage hintereinander ausführen
 
was meinst du damit wenn du sagst:
Zitat:

Wenn ich das ganze in 2 Proceduren splitte funktionierts.
Auch wenn du die Proceduren direkt hintereinander aufrufst?
Delphi-Quellcode:
procedure1();
procedure2();
Oder wenn du die Proceduren nacheinander mit Zeit etc. dazwischen aufrufst?

Ich würde einfach vermuten das du die Nachrichten zu kurz hintereinander sendest.
Generell zu deiner Vorgehensweise:
Es gibt Anwendungen die auch die Mausposition etc. überprüfen. Von daher ist es sicherer
- die Maus zu plazieren und ein down der Maus und ein up der Maus zu simulieren
- oder eine Message für das down der Maus mit koordinaten und ein up der Maus mit Koordinanten zu senden.

soulies 16. Dez 2008 08:36

Re: mehrmals sendmessage hintereinander ausführen
 
hoi,

mit 2 Proceduren meinte ich quasi das was du auch meinst:
Delphi-Quellcode:
procedure 1;
var
  wndMain, wndChild: HWND;
begin
  wndMain := FindWindow('Klassenname','Fenstertitel');
  if (wndMain <> 0) then
  begin
      wndChild := FindWindowEx(wndMain, 0, 'Button', 'ButtonTitel1');
      if (wndChild <>0) then
         SendMessage(wndChild, BM_CLICK,0,0);        
  end;
end;

procedure 2;
var
  wndMain, wndChild: HWND;
begin
  wndMain := FindWindow('Klassenname','Fenstertitel');
  if (wndMain <> 0) then
  begin
      wndChild := FindWindowEx(wndMain, 0, 'Button', 'ButtonTitel2');
      if (wndChild <>0) then
         SendMessage(wndChild, BM_CLICK,0,0);    
  end;
end;

procedure Aufruf ; // so würde es gehen
begin
   1;
   2;
end;
Zitat:

Es gibt Anwendungen die auch die Mausposition etc. überprüfen. Von daher ist es sicherer
Hab ich ausprobiert - ist in der Tat bei mir der Fall - wenn der Cursor von der Position auf dem 2.Button liegt funzt alles ...

Also bleiben mir 2 Möglichkeiten - 2 Proceduren o.ä. oder
Zitat:

Message für das down der Maus mit koordinaten und ein up der Maus mit Koordinanten
Danke

cya


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