IE URL Programm aus FAQ erweitern



  • brauchst nur noch entsprechend umzusetzen:

    #define STRICT
    #pragma comment( lib, "User32.lib" )
    
    #include <windows.h>
    #include <iostream>
    using namespace std;
    
    BOOL CALLBACK EnumWindowsProc( HWND hWnd, LPARAM lParam );
    
    int main()
    {
    	if( !EnumWindows( EnumWindowsProc, 0 ))
    		cout << "Error enumerating windows: " << GetLastError() << endl;
    
    	return 0;
    }
    
    BOOL CALLBACK EnumWindowsProc( HWND hWnd, LPARAM lParam )
    {
    	char buffer[1001], szClassName[256];
    	HWND child = NULL;
    
    	GetClassName( hWnd, szClassName, 255 );
    
    	if( strcmp( szClassName, "IEFrame" ) == 0 )
    	{
    		if(( child = ::FindWindowEx( hWnd, 0, "WorkerW", 0 )) != NULL ) 
    		{ 
    			if(( child = ::FindWindowEx( child, 0, "ReBarWindow32", 0 )) != NULL ) 
    			{ 
    				if(( child = ::FindWindowEx( child, 0, "ComboBoxEx32", 0 )) != NULL ) 
    				{
    					::SendMessage( child, WM_GETTEXT, 1000, (long)buffer ); 
    					cout << "URL: " << buffer << endl;
    				}
    			}
    		}
    	}
    
        return TRUE;
    }
    


  • cool 😮 👍



  • Ich hab den Aufruf in der OnInitDialog einfach mal in einen Timer gepackt. So wäre es doch theoretisch möglich, eine Log File zu schreiben. Man müsste vielleicht nur die schon geaddeten abfragen wegen doppeleintrag.

    --> Ja, das sollte man auf jedenfall tun, weil euch sonst die Listbox zuläuft *gg*

    hmm, das ist mal gar nicht so einfach:

    wie soll ich das am besten machen? nen string vergleich?



  • ich hab den code jetzt so modifiziert

    if ( pDlg->m_lstUrls.FindString(0,GetUrl(buff)) == CB_ERR )
    		{
    			pDlg->m_lstUrls.AddString(GetUrl(buff));
    			pDlg->m_lstTitel.AddString(buff.Left(nIdx));
    		}
    

    Ziel der Sache soll ne Logfile sein

    der Aufruf der in OnInitDialog passiert ist jetzt im Timer

    PROBLEM: bei eintippen der URL übernimmt er aber trotzdem alles



  • also wenn ich die abfrage jetzt so mache, updatet er aber auch die "unfertigen" URLs

    das einzigste, was mir jetzt einfallen würde ist, dass man die abfrage auf die Domainendungen macht ( .de, .com, .net ) etc wobei dann wieder das problem kommt, das ein eintrag mehrere male vorhanden ist

    hmmmm

    kann ich da nicht eine abfrage machen, die mir ne nachricht sendet, wenn im IE Enter oder Return gedrückt wird?

    denn dann würde ich erst dann das fenster abfragen und mir den string holen

    wenn man jetzt mal weiterdenkt könnte das noch richtig interessant werden. mal angenommen er geht auf www.google.de . diese URL wird dann als erste in die Logbox vom programm eingetragen. dann sucht er was und klickt auf die Links, diese dann aber auch in die logbox sollen, auch wenn er das im gleichen fenster macht. praktisch bis in die letzte linktiefe des benutzers alles mitloggen.

    oh man *gg*

    ein haufen arbeit.

    aber naja: meine frage nochmal: gibt es nicht so eine methode die ne nachricht sendet wenn im IE enter oder return gedrückt wird?

    oder hat sonst jemand ne andere idee wie ich den kompletten string bekomme wenn ich nen neues fenster öffne?

    im moment sieht es so aus:

    fenster öffnet sich --> benutzer tippt ein: www.google.de und programm trägt folgendes ein:

    w
    ww
    www
    www.
    www.g
    ....
    ....



  • Merk dir doch die letzten Abfrageergebnisse irgendwo extra und frag dann mit Find, welche fast identisch sind.

    CString strAlt = "www.g";
    CString strNeu " "www.go";
    if (strNeu.Find(strAlt) == 0) // gefunden
    {
    return;
    }
    if (strAlt.Find(strNeu) == 0) // gefunden (Backspacetaste)
    {
    return;
    }
    // Hier in die Liste packen
    

    Vielleicht sollte man auch noch nach der Länge abfragen, ob die sich um 1 unterscheidet - oder kann man schneller Tippen als dein Timer auslöst?



  • also das er schneller tippt als der timer läuft ist eher unwahrscheinlich, denn dann müsste er unter 1 ms schnell tippen *Gg*

    ist jetzt nur die frage, dass wenn ich das programm auf einen dienst umstelle, es die prozessorleistung beeinflusst



  • MSS-Software schrieb:

    also das er schneller tippt als der timer läuft ist eher unwahrscheinlich, denn dann müsste er unter 1 ms schnell tippen *Gg*

    Timer gehen nicht genauer als 50ms. ⚠



  • hää? dann macht der aus der übergebenen 1 praktisch den min wert 50 oder wie?



  • Der kann einfach nicht schneller. 😃


Anmelden zum Antworten