AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi sendmessage funktioniert nicht :(
Thema durchsuchen
Ansicht
Themen-Optionen

sendmessage funktioniert nicht :(

Ein Thema von seddto1977 · begonnen am 27. Apr 2004 · letzter Beitrag vom 29. Apr 2004
Antwort Antwort
seddto1977

Registriert seit: 15. Apr 2004
69 Beiträge
 
#1

sendmessage funktioniert nicht :(

  Alt 27. Apr 2004, 15:44
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?
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: sendmessage funktioniert nicht :(

  Alt 27. Apr 2004, 15:47
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
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: sendmessage funktioniert nicht :(

  Alt 27. Apr 2004, 16:02
am einfachste ist vielleicht wenn du dir einfach die position von dem button holst und an dieser stelle ein klick simulierst
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
XeRo

Registriert seit: 23. Okt 2003
Ort: Warth
461 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: sendmessage funktioniert nicht :(

  Alt 27. Apr 2004, 17:04
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...
  Mit Zitat antworten Zitat
seddto1977

Registriert seit: 15. Apr 2004
69 Beiträge
 
#5

Re: sendmessage funktioniert nicht :(

  Alt 27. Apr 2004, 19:10
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?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: sendmessage funktioniert nicht :(

  Alt 27. Apr 2004, 19:17
Schon mal BN_CLICKED probiert?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: sendmessage funktioniert nicht :(

  Alt 27. Apr 2004, 22:25
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)?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
seddto1977

Registriert seit: 15. Apr 2004
69 Beiträge
 
#8

Re: sendmessage funktioniert nicht :(

  Alt 28. Apr 2004, 08:45
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
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: sendmessage funktioniert nicht :(

  Alt 29. Apr 2004, 04:35
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;
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
seddto1977

Registriert seit: 15. Apr 2004
69 Beiträge
 
#10

Re: sendmessage funktioniert nicht :(

  Alt 29. Apr 2004, 08:19
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03: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