Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Button in anderer Anwendung (https://www.delphipraxis.net/158316-button-anderer-anwendung.html)

EWeiss 15. Feb 2011 14:44

AW: Button in anderer Anwendung
 
Lustig..
BN_CLICKED kommt erst an wenn der Button losgelassen wird

Kein wunder das dein ergebnis immer 0 ist.

gruss

Delphi-Checker 17. Feb 2011 04:46

AW: Button in anderer Anwendung
 
Liste der Anhänge anzeigen (Anzahl: 4)
Habe jetzt 2 Nächte über der Sache gehockt, und bin zu der Erkenntniss gekommen
das WM_Close da schon eine Ahnung hatte.
Das Control ist zwar ein Button, doch ihm fehlen einige Eigenschaften,
so das man es zwar ansprechen kann aber von Ihm keine Informationen über de Status zurück bekommt.
Ich habe im Anhang mal ein Paar Screenshots von Spy++, vieleicht hat ja jemand noch eine Idee
wie man an den Status eines solchen Buttons herankommt.

WM_CLOSE 17. Feb 2011 07:08

AW: Button in anderer Anwendung
 
Es wäre wichtiger, wenn du uns den Unterschied zwischen Enabled und disabled zeigst.
Ich habe aber die Vermutung, dass das so etwas wie ein SpeedButton ist, der nicht die Windows Version von Enabled/Disabled benutzt, sondern nur jeweils ein anderes Bitmap drüber blendet. Damit kann mann z.B. ungewünschte Effekte unter anderen OS-Versionen vermeiden und das Programm sieht überall gleich aus. Das Programm das ich oben verlinkt habe zeigt das normalerweise zuverlässig an. (Ist das normal, dass sich WinSpy++ aufhängt??).

Vielleicht ist es auch einfacher (QAD) :twisted: einfach nur das Fenster in den Vordergrund zu holen und dann die Farbe an der Position des Buttons zu merken.

turboPASCAL 17. Feb 2011 08:55

AW: Button in anderer Anwendung
 
Vill. macht ihr euch das zu schwer und das Programm hat eine Programierer-Schnittstelle.
Dann könnte man an dieser Stelle ansetzen.

WM_CLOSE 17. Feb 2011 09:04

AW: Button in anderer Anwendung
 
turboPASCAL hat Recht:
solange wir nicht wissen, wie das Programm aufgbaut ist, bzw was das für ein Programm ist können wir relativ wenig helfen.

Eine Dll oder so würde das ganze stark vereinfachen

PS:Ist das Programm u.U in einer .Net-Sprache entwickelt?

Delphi-Checker 17. Feb 2011 20:24

AW: Button in anderer Anwendung
 
Ich habe gerade noch einmal mit PropEdit die Anwendung gecheckt,
da wird mir über den Compiler oder die Sprache nichts mitgeteilt.
Ich glaube da weiter zumachen hat wenig Sinn allerdings würde ich gerne die Idee
von WM_CLOSE aufgreifen und über die Farbe im Button den Status zu ermitteln.
Leider habe ich absolut keinen Plan.
Wie ermittle ich die Position des Buttons und wie komme ich an die Farbe?

Gruß Jörg

WM_CLOSE 17. Feb 2011 21:19

AW: Button in anderer Anwendung
 
Delphi-Quellcode:
var
  hButton   :THandle;
  ButtonRect :_Rect;//das ist ein c-Typ //evtl auch nur Rect
  Farbe     : TColor;//????
  bit       : TBitmap;//TODO: schauen, ob Graphics.TBitmap oder Windows.Bitmap
  can       : TCanvas;
begin
  res:=GetWindowRect(hButton, @ButtonRect);//vllt ohne @
  posx := (ButtonRect.Left + ButtonRect.Right) div 2;
  posy := (ButtonRect.Top + ButtonRect.Bottom) div 2;
  can.Handle := GetWindowDC(0);
  try
    bit := TBitmap.Create;
    try
      bit.Width := Screen.DesktopWidth;
      bit.Height:= Screen.DesktopHeight;
      bit.PixelFormat := pfDevice;
      BitBlt(bit.Canvas.Handle,
             0,
             0,
             Pred(Screen.DesktopWidth),
             Pred(Screen.DesktopHeight),
             can.Handle,
             Screen.DesktopLeft,
             Screen.DesktopTop,
             bit.Canvas.CopyMode);
      Farbe:=bit.Canvas.Pixels[posx,posy]//<--geändert
    finally
      bit.Free;
    end;
  finally
    ReleaseDC(0, can.Handle);
  end;
end;
k.A ob das funktioniert. im Zweifelsfall nach jedem API aufruf ein GetLastError.

PS: bei dem Ansatz wirst du Probleme mit mehreren Monitoren kriegen

Delphi-Checker 17. Feb 2011 21:50

AW: Button in anderer Anwendung
 
Dank für die schnelle Hilfe. Anwendung läuft nur auf einem Bildschirm,
deshalb könnte diese Variante funktionieren.
Bekomme leider einen Fehler bei: bit.Pixels!

rollstuhlfahrer 17. Feb 2011 22:03

AW: Button in anderer Anwendung
 
das sollte heißen:
Delphi-Quellcode:
Bit.Canvas.Pixels[]
Bernhard

Delphi-Checker 19. Feb 2011 00:24

AW: Button in anderer Anwendung
 
Habe erstmal die Variante mit der Abfrage der Farbe des Buttons gewählt,
funktioniert einwandfrei. Danke für Eure Hilfe!

Gruss Jörg


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:42 Uhr.
Seite 2 von 2     12   

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