Button in Fremdanwendung ausblenden
-
Jo Winspector gibt mir was mit Delphi bei dem Buttons zurück!
-
Dann hilft nur noch ein: Mit EnumChildWindows alle Buttons durchgehen und die Beschriftung vergleichen. Die Fensterklasse ist TButton bei VCL Anwendungen.
-
Hmm das könnte ich tuen, obwohl ich mir nicht sicher bin ob ich die Caption der Buttons extrahiert bekomme, denn weder Spy++,Winspector oder X-Spy konnte die Caption extrahieren.
-
Hmm wenn ich wüsste wie ich die reellen Left und Top werte von einem dieser Buttons ermitteln könnte, könnte ich per ChildWindowFromPoint den Handler leichter ermitteln ;P
-
gekommst noch ein tip, es ginge wahrscheinlich auch mit:
FindWindow(
LPCTSTR lpClassName, // pointer to class name
LPCTSTR lpWindowName // pointer to window name
);
-
Danke Nox, leider lässt sich der Handler des Buttons nicht ermitteln, da er keine Caption ausspuckt bzw. hat!
-
Irgendwie is heut nich mein Tag, der durchläuft das EnumChildWindows nur 1 mal
//Ausschnitt aus der Message Schleife inkl. WM_COMMAND Message hwndPXButton = FindWindowEx(hwndPX, 0, "TSeSkinButton", NULL); //hwndPX = Handle vom TMainForm der Anwendung if (EnumChildWindows(hwndPX,EnumChildWindowsProc,0)) { ShowWindow(hwndPXButton,SW_HIDE); } break; default: /* for messages that we don't deal with */ return DefWindowProc (hwnd, message, wParam, lParam); } return 0; } //CALLBACK Function von EnumChildWindows BOOL CALLBACK EnumChildWindowsProc(HWND hwndChild, LPARAM lParam) { int a=0; char sWindowText[]=""; TCHAR buffer[255]; ZeroMemory(buffer,255*sizeof(TCHAR)); GetWindowText(hwndChild, buffer, 255); if (buffer=="SMS-Center") { hwndPXButton=hwndChild; } return FALSE; }
-
Wie könnte man das ganze denn angehen (sry bin Umsteiger von VB auf C++)

-
Zeig mal deine Code-Versuche

-
Sry, wenn das etwas chaotisch aussieht und manche variablen sinnfrei im raum stehen *g* Aber ich beiß mir echt die Zähne an den sch**ß Buttons aus

Da oben könnt ihr meine Code Versuche betrachten.
-
To continue enumeration, the callback function must return TRUE; to stop enumeration, it must return FALSE.
-
Licht aufgeh, wer lesen kann ist klar im Vorteil

-
So er hat nun alle Controls durchlaufen, aber scheinbar hat er nen Prob mit der Caption oder die Buffer deklaration ist falsch bzw. ich werte sie falsch aus

-
Du kannst nicht einfach == für den Vergleich nehmen, sondern brauchst spezielle Funktionen, wie z.B. lstrcmp dafür

-
Hmm wie vermutet, die Caption der Controls lässt sich nicht extrahieren, weil es ein grafischer Button ist.
Ich habe die Buffervariable in die Überwachung eingefügt und sie gibt permanent einen null string zurück
BOOL CALLBACK EnumChildProc(HWND hwndChild,LPARAM lParam) { int iLength=0; char buffer[255]; iLength=GetWindowTextLength(hwndChild); GetWindowText(hwndChild,buffer,iLength+1); return true; }
-
Mir bleibt jetzt nur noch übrig, den Button über seine Position zu ermitteln, aber leider wird die Position zum Screen und nicht zum Client angegeben. Wie kann ich die Position zum Client ermitteln?
-
Evtl. mit ScreenToClient()?

-
cable2k3 schrieb:
aber leider wird die Position zum Screen und nicht zum Client angegeben.
Wo wird die so angegeben?! Falls du in Spy++ bzw. WinSpector meinst: einfach einen Scrreshot machen und in einem Bildbearbeitungsprogramm die Position ausmessen

-
flenders *anspring*
Danke Dir!!! Danke Euch funzt prima!! Musste mich zwar an die tatsächlichen Werte annähern, weil offentsichtlich die Angaben vom Grafikprogramm nicht korrekt waren.