SendMessage
-
hi,
bin gerade dabei das mit EnumChildWindows() auszuprobieren.
hwndParent = (hWindow,"AOL") ;
hWindow ist die Variable auf FindWindow(parent,"Titel des parent-Fenster");
,"AOL" ist das gleiche. Ist also ein "kann/muss aber nicht sein".Ja, das läuft durch den Compiler.
cookie_woman
[ Dieser Beitrag wurde am 18.05.2003 um 17:22 Uhr von cookie_woman editiert. ]
-
Original erstellt von cookie_woman:
**```cpp
hwndParent = (hWindow,"AOL") ;Ja, das läuft durch den Compiler.**
Glaube ich dir nicht. Jeder Compiler der das ohne Warnung kompiliert ist sein geld nicht wert.
-
hm... das wird jetzt offtopic. glaub es oder nicht.
konstructive ideen zu meinem problem sind besser.cookie_woman
-
Das "Problem" ist, das Dein "Problem" nicht wirklich ein Problem ist.
Da aber Dein Quelltext für manche von uns unkompilierbar zu sein scheint, macht es das uns nicht unbedingt leichter, Dir zu helfen!Ich z. B. kenne auch ShowMessage überhaupt nicht (ist das MFC? VCL? Oder was?)
Genauso wie
hwndParent = (hWindow,"AOL");
Mein Compiler/Linker meint dazu folgendes:
d:\Visual Studio-Projekte\Test\main.cpp(324): error C2146: Syntaxfehler : Fehlendes ')' vor Bezeichner 'hWindow'
d:\Visual Studio-Projekte\Test\main.cpp(324): error C2059: Syntaxfehler : 'Zeichenfolge'
d:\Visual Studio-Projekte\Test\main.cpp(324): error C2059: Syntaxfehler : ')'Nach meinem befinden fehlt dazwischen ein FindWindowEx oder so...
Aber, naja, was solls....
Für mich ist Dein Quelltext schlichtweg nicht kompilierbar (siehe auchHWND hWindow; Handel für Elternfenster
, wird sicherlich nur'n Tippfehler sein, aber egal) und daher befinde ich mich nicht in der Lage, Dir zu helfen!
Fakt ist: Ich kann fremde Buttons in fremden Anwendungen klicken...
-
Hi, ich versuche es zu erklären.
Original erstellt von Hepi:
**
Ich z. B. kenne auch ShowMessage überhaupt nicht (ist das MFC? VCL? Oder was?)
**Dies ist eine ganz normale Botschaft. Zu finden unter
[url] ]http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwindowsformsdesigniuiserviceclassshowmessagetopic1.asp[/url]**
Genauso wiehwndParent = (hWindow,"AOL");
**
Ich hatte vorausgesetzt, das bekannt ist, dass hwndParent nur eine Variable ist bzw. sein kann.
Also:
[code type="C++"]
HWND hWindow;
hWindow =FindWindow("Parent-Fenster-Klasse","Titel des Parent");
if (hWindow == NULL);
{
ShowMessage("Parent-Fenster nicht gefunden");
}
else
{
ShowMessage("Parent-Fenster gefunden");
}
[code/]**
wird sicherlich nur'n Tippfehler sein, aber egal) und daher befinde ich mich nicht in der Lage, Dir zu helfen!
**Schade. Eigentlich.
**
Fakt ist: Ich kann fremde Buttons in fremden Anwendungen klicken...**Und wie sieht der code dazu aus ???
cookie_woman
[ Dieser Beitrag wurde am 18.05.2003 um 22:20 Uhr von cookie_woman editiert. ]
-
Aus Mangel an AOL-Software (Brrr, bei dem Gedanken daran schüttelt es mich schon) kann ich das nicht testen bzw. 100%ig lauffähig gestalten, sollte aber so (oder so ähnlich, Gedankenansätze hab ich weißgott genug geliefert) funktionieren!
Wenn nicht lern mal die Benutzung von Spy++ oder ähnlichen (Freeware-)SpyTools!
Ach, und ShowMessage() ist kein "normaler" Befehl sondern gehört zum .NET Framework. Ich wußte nicht das Du den Benutzerkreis Deiner Programme so sehr einschränken willst, aber naja, jeder so wie er mag...
Benötigte Header/Libs suchste mal selber anhand der verwendeten Funktionen zusammen... etwas Arbeit sollst Du ja auch noch haben....
... char szUeberwachungsOrdner[]="C:\\Programme\\AOL 7.0\\aol.exe"; EnumWindows(EnumProc, NULL); ... BOOL CALLBACK EnumProc(HWND hwnd, LPARAM lParam) { char szBuffer[256*4]; GetPathFromHandle(hwnd, szBuffer); if (_stricmp(szBuffer, szUeberwachungsOrdner)==NULL) { EnumChildWindows(hwnd, EnumChildWindowsProc, NULL); return FALSE; } return TRUE; } BOOL CALLBACK EnumChildWindowsProc ( HWND hCWnd, LPARAM lParam) { char szText[256]; int iLoginButton=0; GetWindowText(hWnd, szText, 256); if(strcmp(szText, "Anmelden")==NULL) // Oder wie der Button auch immer heißen mag! { iLoginButton = GetDlgCtrlID(hCWnd); SendMessage(hWnd, WM_COMMAND, iLoginButton, NULL); return FALSE; } else return TRUE; } void GetPathFromHandle(HWND hWnd, LPTSTR szPathFromHandle) { // // Diese Funktion läuft nur unter NT/2K/XP! // // Für Win9x check GetWindowModuleFileName and GetModuleFileName DWORD lpdwProcessId; HANDLE hProcessHandle; GetWindowThreadProcessId(hWnd, &lpdwProcessId); hProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, TRUE, lpdwProcessId); GetModuleFileNameEx(hProcessHandle, NULL, szPathFromHandle, MAX_PATH); CloseHandle(hProcessHandle); }
Ach, und
hwndParent = (hWindow,"AOL");
ist immer noch falsch, ganz egal was hwndParent für 'ne Variable ist!
[ Dieser Beitrag wurde am 19.05.2003 um 07:58 Uhr von Hepi editiert. ]
-
Hi,
sorry... Es muss natürlich heisen:
HWND hwndParent = FindWindowEx(hWindow,"AOL");Hatte cca. 8 Stunden davor gesessen. Und ich habe nur noch HWND's gesehen
Werde mal dein Script ausprobieren.
Meine momentane Lösung:// HWND sind selbstverständlich hWindow = FindWindow("Eltern","Titel"); hwndmdi = FindWindowEx(hWindow, NULL,"Child",0); hwndsignon = FindWindowEx(hwndmdi, NULL,0,"Child 2"); hwndbutton = FindWindowEx(hwndsignon,0,0,"Buttonname"); if (hWindow == NULL) { ShowMessage("Eltern Fenster nicht gefunden!\n\nProgramm wird gestartet!"); ShellExecute(NULL,"open","prog.exe",NULL,"C:\\Prog\\Pfad\\prog.exe",SW_SHOWNORMAL); } else //-----------------------Beginn Handle für KindfensterKlasse1---// { ShowMessage("ElternFenster gefunden"); do { //do something with hwndChildAfter // Handel zum 1. Kindfenster if (hwndmdi == 0) { ShowMessage("1. Kindfenster nicht gefunden"); } else { ShowMessage("1. Kindfenster gefunden :-)"); } // Handel zum 2. Kindfenster do { if (hwndsignon == 0) { ShowMessage("2. Kindfenster nicht gefunden"); } else { ShowMessage("2. Kindfenster gefunden :-)"); } // Handel zum Button do { if (hwndbutton == 0) // Wenn Button NICHT gefunden wurde { ShowMessage("Button nicht gefunden"); } else { ShowMessage(" Button gefunden :-)"); SendMessage(hwndbutton,BM_CLICK,0,0); // Handel zu anderer Klasse } } while(hwndbutton = FindWindowEx(hwndsignon,"ButtonKlasse",0,0)) ; } while(hwndsignon = FindWindowEx(hwndmdi,"2. Kindfenster-Klasse", 0, 0)) ; } while(hwndmdi = FindWindowEx(hWindow, "1. Kindfenster-Klasse", 0, 0)) ;
Der Button wird zwar noch nicht geclickt, aber da komme ich noch dahinter.
cookie_woman
-
Jo, also mein Code "klappert" erstmal alle Fenster ab und vergleicht, ob es zur "C:\Programme\AOL 7.0\aol.exe" gehört.
Wenn das so ist, dann werden mit EnumChildWindows() alls Kindfenster dieses einen Fensters "abgeklappert".
Von jedem Fenster (Button, EditContols usw.) holt sich die Funktion den Titel (GetWindowTitle()) und vergleicht ihn mit "Anmelden" (das mußt Du halt durch den richtigen ButtonText ersetzen, den Du brauchst!).
Wenn auf dem Button "Anmelden" steht wird er geklickt (dazu hole ich mir die SteuerID des Buttons (GetDlgCtrlID()) und sende sie als WM_COMMAND an das Hauptfenster. Bei Dialogen sollte das einwandfrei funktionieren...)
-
Tach, oder doch schon fast guten Morgen ;-),
ich habe mal deinen Code ausgeführt. Bei mir kommt bei:
EnumWindows(EnumProc, NULL);
[C++ Fehler] Unit1.cpp(70): E2034 Konvertierung von 'void *' nach 'int (__stdcall *)()' nicht möglich [C++ Fehler] Unit1.cpp(70): E2342 Keine Übereinstimmung des Typs beim Parameter 'lpEnumFunc' ('int (__stdcall *)()' erwartet, 'void *' erhalten) [C++ Fehler] Unit1.cpp(74): E2108 Ungültige Verwendung von typedef 'BOOL'
Wie könnte ich das ändern?
cookie_woman
-
Hallo zusammen,
ich habe jetzt mal den code verändert und auch den richtigen Button gefunden(insgesamt sind es 4).
Der Button wird auch gedrückt und wieder losgelassen.
Aber, es passiert nicht das Ereigniss, welches bei einem (per Hand) Mausklick oder Entertaste entsteht.
else { i++ ; if (i==4) // bis der 4. Button gefunden wird { SendMessage(hParent3, WM_LBUTTONDOWN, 0,0); ShowMessage(" Test"); SendMessage(hParent3, WM_LBUTTONUP,0,0); //SendMessage(hParent3,BM_CLICK,1,0); // funzt nicht } // ShowMessage(" Button gefunden :-)\n Freu... Freu... Freu..."); }
Hinweise?, Anmerkungen, etc...
cookie_woman
[ Dieser Beitrag wurde am 23.05.2003 um 19:07 Uhr von cookie_woman editiert. ]