Frage zum FAQ "IE URL Leiste"



  • Hallo!

    Ich hoffe hier bin ich richtig in dem Part zum Forum, da man bei dem FAQ direkt nur als mod posten kann und ich Visual Studio C++ 6 Pro verwende.

    Und zwar habe ich folgendes Problem bei dem FAQ. Wenn ich die URL-Leiste auslesen möchte, bekomm ich nur als Titel für das Internet Explorer Fenster "Internet Explorer" zurück. Allerdings müsste da zum Beispiel ja "\1:blank - Microsoft Internet Explorer" stehen. Anbei poste ich mal meinen Quellcode, vielleicht kann mir jemand sagen, warum ich den Titel nicht bekomme und mir einen Tipp geben. 😉

    void CCMS4NXTDlg::OnbtnTest() 
    {
        ::EnumChildWindows(::GetDesktopWindow(), EnumWindowsProc, (LPARAM)this);
    }
    
    //Quellcode
    BOOL CALLBACK CCMS4NXTDlg::EnumWindowsProc(HWND hwnd, LPARAM lParam)
    {
        static char cbuff[256]="\0";
        static CString strClass, buff;
        static DWORD dwPID=0;
    
        // get window class name
        ::GetClassName(hwnd, strClass.GetBuffer(_MAX_PATH), _MAX_PATH);
    
        // get pid
        ::GetWindowThreadProcessId(hwnd, &dwPID);
    
        // get caption
        ::GetWindowText(hwnd, cbuff, sizeof(cbuff));
    
        buff.Format("%s",cbuff);
    
        // In buff stehen nun alle offnen Fenster drin
        // Du musst nun einfach die Rausfiltern die MIE oder halt Opera
        // Im Titel haben
        // mit if und find arbeiten
    
        // --- wird momentan nicht ausgeführt. Mal morgen nachschauen.
        if(buff == "Internet Explorer")
        {
    	CBrowserCheck* pCBCheck = new CBrowserCheck();
    	pCBCheck->CheckLink((CString) buff);
    	delete pCBCheck;
        }
    
        return true;
    }
    
    // --- Funktion CheckLink von meiner Klasse CBrowserCheck
    bool CBrowserCheck::CheckLink(CString titel)
    {
    	char buffer[256];
    	HWND child;
    	HWND ie;
    
    	AfxMessageBox(titel, MB_OK);
    
    	// Der Aufruf der Callback Funktion
    	if(ie = ::FindWindow("IEFrame", titel) )
    	{
    		if(child = :: FindWindowEx(ie, 0, "WorkerW", 0))
    		{
    			if(child = ::FindWindowEx(child, 0, "ReBarWindow32", 0))
    			{
    				if(child = ::FindWindowEx(child, 0, "ComboBoxEx32", 0))
    				{
    					::SendMessage(child, WM_GETTEXT, 255, (long) &buffer[0]);
    					CString tmp = &buffer[0];
    					AfxMessageBox(tmp, MB_OK);
    					return true;
    				}
    				else
    				{
    					AfxMessageBox("4", MB_OK);
    					return false;
    				}
    			}
    			else
    			{
    				AfxMessageBox("3", MB_OK);
    				return false;
    			}
    		}
    		else
    		{
    			AfxMessageBox("2", MB_OK);
    			return false;
    		}
    	}
    	else
    	{
    		AfxMessageBox("1", MB_OK);
    		return false;
    	}
    }
    

    Die Messageboxen nutze ich zur Debug-Ausgabe, damit ich weiß was übergeben wird.
    Hoffe jemand kann mir da helfen. Schonmal vielen Dank im vorraus für jeden erdenklichen Tipp. 🙂

    Gruß Marine



  • Wie kann so eine Frickelei in die FAQ kommen?



  • gedanke schrieb:

    Wie kann so eine Frickelei in die FAQ kommen?

    Sag mir wie ich es besser machen kann? 😉

    Habe es jetzt mit SendMessage und WM_GETTEXT lösen können. 🙂


Anmelden zum Antworten