Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Problem mit SendMessage (https://www.delphipraxis.net/111961-problem-mit-sendmessage.html)

any_key 12. Apr 2008 09:53


Problem mit SendMessage
 
ahoihoi,
zur Zeit versuche ich aus meinem Programm einen Button in einem anderen Programm klicken zu lassen.
Um das Fenster zu finden hab ich FindWindowByTitle von swissdelphicenter.ch genutzt.
Das Finden des Fensters und des Buttons funktionieren.
Aber aus irgendeinem Grund wird in der Anwendung nur der Fokus auf den Button gesetzt, aber kein Klick ausgeführt.
Der Quelltext dazu sieht bisher so aus:
Code:
var
  wnd : Hwnd;
  s : string;
  btn : THandle;
begin
  wnd:= FindWindowByTitle('Test13');
    if wnd<>0 then begin
      btn := FindWindowEx(wnd,0,'TButton','Test12');
        if btn <> 0 then
          SendMessage(btn, BM_CLICK, 0, 0);
    end
    else
      ShowMessage('Fenster nicht gefunden');
end;
Wenn ich das auf ein Programm von mir anwende funktioniert das auch alles. Nur bei dem Programm bei dem ich den Button klicken will geht es halt nicht.
Den Namen des Buttons habe ich mit WinSpy ermittelt.
Da er ja fokussiert wird denke ich nicht, dass er nicht gefunden wird sondern, dass irgendetwas beim Senden des Klicks falsch ist.

Schon mal Danke für eure Antworten.
mfg any_key

Nuclear-Ping 12. Apr 2008 10:02

Re: Problem mit SendMessage
 
Unter was für einem Betriebssystem? XP? Vista? Unter Vista könnte es Probleme wegen UAC geben.

Versuch mal statt BM_CLICK 2 Messages zu senden. WM_LBUTTONDOWN und WM_LBUTTONUP.

any_key 12. Apr 2008 10:23

Re: Problem mit SendMessage
 
Ich benutze WinXP SP2. Bei WM_LBUTTONDOWN und WM_LBUTTONUP wird auch nur der Button fokussiert, aber weiter passiert nichts. Außerdem habe ich auch schon ausprobiert das Fenster in den Vordergrund zu bringen (was es eigentlich gar nicht soll - aber man muss ja erstmal alle Möglichkeiten ausprobieren) und dann per Tastendruck (Leertaste) das Button Event auszulösen. Aber das klappt alles nicht :(

toms 12. Apr 2008 10:46

Re: Problem mit SendMessage
 
Hallo,

Wie heisst denn das Programm?

any_key 12. Apr 2008 10:58

Re: Problem mit SendMessage
 
Das ist ein Downloaddialog aus dem WebBrowser.
Ich habe auch schon probiert den Download an idHTTP oder dem Embedded Webbrowser weiterzugeben, aber das klappt nicht weil ich dann immer die Seite herunterlade von der ich gerade gekommen bin.
Insgesamt soll eine Datei von Rapidshare.com heruntergeladen werden. Dabei ist dann das Problem mit idHTTP und dem Embedded WebBrowser gewesen, dass immer nur die Seite selbst heruntergeladen wurde und nicht die Datei. Deshalb will ich versuchen den Downloaddialog, wenn er sich öffnet direkt zu beantworten.

Der.Kaktus 12. Apr 2008 11:06

Re: Problem mit SendMessage
 
Hallo,
Du hast diese Frage doch schon selbst hier gestellt..da kam doch eine Antwort.Webbrowser Mausklick an Position

1234588 12. Apr 2008 11:15

Re: Problem mit SendMessage
 
SendMessage(btn, BM_CLICK, 0, 0);
so kann das garnicht funktionieren, da nicht ein argument stimmig ist.
siehe msdn:
http://msdn2.microsoft.com/en-us/lib...25(VS.85).aspx

als handle musst du den parent des buttons uebergeben. BN_CLICKED wird durch WM_COMMAND uebertragen und ist der highword wert vom wparam parameter. der loword wert ist dann die id des buttons (siehe GetWindowsLong()). als lparam musst (solltest) du dann das handle des buttons uebergeben.

grundsaetzlich musst du schauen was du wie benutzen musst. BN_CLICKED ist eine einfache 0. genau wie WM_NULL. du sendest also erstmal ans falsche fenster (und zwar an den button) eine falsche nachricht, die dem fenster sagt, das es nichts tun soll:
The WM_NULL message performs no operation

any_key 12. Apr 2008 11:20

Re: Problem mit SendMessage
 
Da ging es noch um einen Schritt davor. Den habe ich jetzt aber so ähnlich gelöst, wie inherited es mir in dem Threat geraten hat.
Bisher dachte ich da würde diese Möglichkeit nicht bestehen, da ich nicht an die übergebenen Parameter komme - dachte ich... Jetzt wo ich mir den Quelltext noch Mal angesehen habe habe ich gesehen, dass es vllt doch sein könnte. Also ich schau es mir noch Mal an und wenn ich nicht mehr weiter komme dann melde ich mich noch Mal.
Vielen Dank für eure Antworten.

Danke auch an 1234588.
Wenn ich mit idHttp nicht weiterkomme dann werde ich dem Ansatz weiter nachgehen.

toms 12. Apr 2008 11:24

Re: Problem mit SendMessage
 
Zitat:

Zitat von any_key
Ich benutze WinXP SP2. Bei WM_LBUTTONDOWN und WM_LBUTTONUP wird auch nur der Button fokussiert, aber weiter passiert nichts. Außerdem habe ich auch schon ausprobiert das Fenster in den Vordergrund zu bringen (was es eigentlich gar nicht soll - aber man muss ja erstmal alle Möglichkeiten ausprobieren) und dann per Tastendruck (Leertaste) das Button Event auszulösen. Aber das klappt alles nicht :(

Setze den Dialog zuerst in den Vordergrund und verwende anstatt SendMessage() mal SendNotifyMessage()


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