Button in anderer Anwendung
Hallo, ich versuche krampfhaft den Status eines Button in einer
andren Anwendung zu ermitteln. Das Handle des Buttons habe ich, und ein ansprechen des Buttons mit
Delphi-Quellcode:
bring auch den gewünschten Erfolg.
SendMessage(wndChild,BM_CLICK,0,0)
Die Abfragen zum Status des Buttons bringen keinen Erfolg.
Delphi-Quellcode:
und
Style := getWindowLong(wndMain, gwl_style);
if (Style and WS_DISABLED) <> WS_DISABLED then ...// kein Ergebniss
Delphi-Quellcode:
if (SendMessage(wndChild,BM_GETSTATE,0,0) and BST_PUSHED) = BST_PUSHED then... //kein Ergebniss
Vieleicht hat ja noch jemand eine Idee, woran das liegen kann. Gruss Jörg |
AW: Button in anderer Anwendung
was sagt denn GetLastError?
|
AW: Button in anderer Anwendung
GetLastError gibt in beiden Fällen keinen Fehler aus.
Beim ersten Aufruf erhalte ich immer WS_ENABLED zurück, und bei der zweiten Abfrage bekomme Ich immer 0 zurück. |
AW: Button in anderer Anwendung
Zitat:
|
AW: Button in anderer Anwendung
Entschuldige bitte, da habe ich mich verschrieben.
Es heist bei mir natürlich
Delphi-Quellcode:
Wie gesagt, erhalte ich auch einen Wert zurück,
Style := getWindowLong(wndChild, gwl_style);
if (Style and WS_DISABLED) <> WS_DISABLED then ...// kein Ergebniss der jedoch egal wie der Button aussieht immer enabled ist. |
AW: Button in anderer Anwendung
Hast Du es einmal mit IsWindowEnabled versucht?
|
AW: Button in anderer Anwendung
IsWindowEnabled bringt auch immer nur True.
Ich bin am verzweifeln! |
AW: Button in anderer Anwendung
Merkwürdig, ich habe das gerade einmal ausprobiert, bei mir geht das einwandfrei :gruebel:
|
AW: Button in anderer Anwendung
Was ist denn das für eine "Anwendung". Kann es sein, dass sie die Windows-Eigenschaft WS_ENABLED gar nicht antastet?
Versuch mal mit dem dem Programm die Eigenschaft auzulesen: http://mh-nexus.de/en/downloads.php?product=PropEdit |
AW: Button in anderer Anwendung
Ich habe das mal mit einer Dummy-Anwendung ausprobiert.
Das Handle des Buttons habe ich mit WinSpy++ geholt und es funktioniert! Ich glaube mein Problem liegt an dem Handle des Buttons. Komisch aber das ich den Button über SendMessage ansprechen kann. Danke für den Link, werde Heute Nacht auf Arbeit noch einmal ein paar Versuche machen (Habe die Anwendung nicht zu Hause). Werde mich Morgen mal dazu melden. Grüße Jörg |
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 |
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. |
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. |
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. |
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? |
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 |
AW: Button in anderer Anwendung
Delphi-Quellcode:
k.A ob das funktioniert. im Zweifelsfall nach jedem API aufruf ein GetLastError.
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; PS: bei dem Ansatz wirst du Probleme mit mehreren Monitoren kriegen |
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! |
AW: Button in anderer Anwendung
das sollte heißen:
Delphi-Quellcode:
Bernhard
Bit.Canvas.Pixels[]
|
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 02:06 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