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 sendmessage funktioniert nicht :( (https://www.delphipraxis.net/21059-sendmessage-funktioniert-nicht.html)

seddto1977 27. Apr 2004 14:44


sendmessage funktioniert nicht :(
 
Hab ein kleines Sendmessages Problem. Ich möchte gerne in einem anderen Programm einen Button drücken. Also erst per FindWindow das Fenster suchen und per FindWindowEx den Button. Nun mit Sendmessage den Button drücken und die Schleife wiederholen da das fenster mehrmals hintereinander aufgeht. Wenn ich das Programm jetzt laufen lasse ist der Button den ich drücken möchte auch schwarz unterlegt und der Rand flimmert leicht (als wenn der Button ganz oft hintereinander gedrückt wird) aber es passiert nichts :( Erst wenn ich den Button manuell drücke funktioniert es. Weiss jemand eine Lösung?

CalganX 27. Apr 2004 14:47

Re: sendmessage funktioniert nicht :(
 
Hi,
ich würde mal vermuten, dass ein Fehler im Code ist. :? Allerdings kann ich ohne ihn dir nicht helfen. Könntest du also freundlicher weise den wesentlichen Teil deiner Schleife mal posten? ;)

Chris

SirThornberry 27. Apr 2004 15:02

Re: sendmessage funktioniert nicht :(
 
am einfachste ist vielleicht wenn du dir einfach die position von dem button holst und an dieser stelle ein klick simulierst

XeRo 27. Apr 2004 16:04

Re: sendmessage funktioniert nicht :(
 
Zitat:

Zitat von SirThornberry
am einfachste ist vielleicht wenn du dir einfach die position von dem button holst und an dieser stelle ein klick simulierst

einfach ja, schön auch?

ohne code ist da nicht viel zu machen...

seddto1977 27. Apr 2004 18:10

Re: sendmessage funktioniert nicht :(
 
Ok hier der Code

Code:
While Never = False do
  begin
    application.processmessages;
    HB := FindWindow(nil, 'Microsoft Word');
   
  IF (HB <> 0) and (IsWindow(HB)) then
    begin
     hApp := HB;
     hButton := FindWindowEx(hApp, 0, nil, 'NO');
       
      if IsWindow(hButton) then
        begin
          SendMessage(hButton, BM_CLICK, 0, 0);
         
        end;
       end;
      end;
Ich bin mir aber eigentlich fast sicher das der code funktioniert, denn wie gesagt so bald das gesuchte Fenster sich öffnet (in diesem Fall eine Word-Fehlermeldung die erzeugt wird wenn Word eigentlich geschlossen ist - also kein Problem mit doppelten Fenstern)ist der Button der geclickt werden soll auch schwarz umrahmt wie wenn er manuell geklickt wird und der schwarze Rahmen flimmert so als ob der Button oft hintereinander geklickt wird...aber es passiert nix...erst beim manuellen klick. Könnte es vielleicht sein das MS Winapi Befehle wie sendmessage für eigene Programme abgeschaltet hat??


@SirThornberry

Wie kann ich mir denn die Mausposition von dem Button holen damit ich dann den Zeiger dahinsetzen und klicken kann?

Luckie 27. Apr 2004 18:17

Re: sendmessage funktioniert nicht :(
 
Schon mal BN_CLICKED probiert?

Christian Seehase 27. Apr 2004 21:25

Re: sendmessage funktioniert nicht :(
 
Moin Seddto,

geh' doch mal im Einzelschritt da durch, und prüfe, dass auch wirklich alle Zeilen durchlaufen werden.
Ist der Text der Buttoncaption wirklich NO? nicht vielleicht No oder &No (also das N unterstrichen)?

seddto1977 28. Apr 2004 07:45

Re: sendmessage funktioniert nicht :(
 
Also ich hab mir das ganze im Einzelschrittmodus angeschaut...die Schleife funktioniert wie sie soll...also immer wenn ein Fenster mit dem Titel "Microsoft Word" offen ist, wird der "No" Button gesucht und geclickt. Das mit dem NO ist nur bei übertragen aus Delphi passiert, im Programm steht No und der Button ist auch nicht unterstrichen. Ich hab die Prozedure jetzt noch mal laufen lassen: Sobald das gesuchte Fenster aufgeht, ist der 'No" Button schwarz umrandet und geht immer ganz schnell hintereinander hoch und runter...er scheint alos wirklich "gedrückt" zu werden. Allerdings passiert dabei nichts :( Erst wenn ich manuell drücke geht es....weiss echt bald nicht mehr weiter....gibts vielleicht die Möglichkeit den mauszeiger über den Button zu plazieren und damit zu klicken?

@Luckie

Bei BN_ CLICKED tut sich bei mir garnichts :(

TStringlist 29. Apr 2004 03:35

Re: sendmessage funktioniert nicht :(
 
Hi,

probiere doch einfach mal aus, ob du damit wenigstens die Button eines selbst geschriebenen Test-Programms clicken kannst, und ob es (wenn ja) dann eben doch irgendwie an MS-Word liegt.

Weil's mich ebenfalls kurz interessierte, habe ich das auch mal schnell so gemacht. Ergebnis: FindWindowEx gab leider immer eine 0 zurück. Erst als ich es durch EnumChildWindows ersetzte, funktionierte es ...und zwar auch mit deiner originalen SendMessage-Zeile.

Code:
...

// statt: << hButton := FindWindowEx(hApp, 0, nil, 'NO'); >>
// eventuell mal dieses:

    EnumChildWindows(hApp, @EnumChildProc, 0);

...

// füge diese Proc irgendwo über deinen geposteten Zeilen ein

function EnumChildProc(hWindow: HWND; lParameter: LPARAM): Bool; stdcall;
var CtrlNameStr : string[255];
    CtrlNameStrLen : integer;
begin
  CtrlNameStrLen := GetWindowText(hWindow,@CtrlNameStr[1],255);
  SetLength(CtrlNameStr,CtrlNameStrLen);
  if CtrlNameStr <> 'No' then Result := true
  else begin
    Form1.hButton := hWindow;
    Result := false;
  end;
end;

seddto1977 29. Apr 2004 07:19

Re: sendmessage funktioniert nicht :(
 
Danke für den Tip :) Ich werds heute abend wenn ich wieder zu Hause bin gleich mal ausprobieren und mal bescheid sagen obs so geht


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