Seite automatisch neuladen



  • Hallo
    Ich versuche gerade mit meinem Programm den IE zu öffnen automatisch eine Seite zu öffnen und diese dauernd neuzuladen.
    Mein Problem ist, dass die Seite sich zwar öffnet, aber sie sich nicht neulädt.
    Funktioniert hat es noch, als ich die Seite von Hand geöffnet habe und dann ein Programm zum automatischen neuladen ausgeführt habe.

    Mein Code:

    #include <iostream>
    #include <windows.h>
    #include <stdlib.h>
    using namespace std;
    
    int main()
    {
    	int befehl;
    
        cout << endl;
    	cout << " Menue " << endl;
    	cout << " starten		<1>" << endl;
    	cout << " beenden		<2>" << endl;
    	cout << " hilfe			<3>" << endl;
    
    	cout << " Ihre eingabe : ";
    	cin  >> befehl;
    
        	system ("cmd /c iexplore.exe http://www.youtube.com"); //führt CMD Code aus: startet Iexplorer und öffnet dort die angegebene 
    	HWND hwnd = FindWindow("IEFrame", NULL);                                                                                                    //Seite    
    
    	// Befehl bearbeiten
    	switch(befehl)
    	{
    	case 1: cout << endl;
    			while(true)
    			{
    
    				if(hwnd)
    				{
    				SetForegroundWindow(hwnd);
    				keybd_event(VK_F5, 0, 0, 0);
    				keybd_event(VK_F5, 0, KEYEVENTF_KEYUP, 0);
    				Sleep(3500);
    				}
    
    			}
    			break;
    	case 2: cout << endl;
    			cout << "Programm beenden" << endl;
    		break;
    	case 3: cout << endl;
    		cout << "Dieses Programm ist zum automatischen betätigen der F5 taste zu gebrauchen(an InternetExplorer wird gesendet)" << endl;
    		cout << " Beim ausführen von start beginnt das programm alle 3,5 sekunden die F5 taste zu drücken! "<< endl;
    		cout << " Beim beenden wird das betätigen unterbrochen "<< endl;
    		break;
    	default: cout << endl;
    		cout << "Ungeueltige Eingabe " << endl;
    		break;
    	}
    return 0;
    }
    

    Kann mir jemand helfen ?

    Gruß
    silent12



  • mal debugt und geschaut ob das Programm noch in den if (hwnd) Block geht?

    Ansonsten bist du im WinAPI Forum besser aufgehobem.

    greetz KN4CK3R



  • Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ (auch C++0x und C++11) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Mithilfe von Haltepunkten oder wie teste ich ob er in den HWND-Bereich geht ?

    Gruß
    silent12



  • ja, mit nem Breakpoint am einfachsten. Eine Ausgabe im if hilft aber auch (aber sicher nicht bei der Fehlersuche)

    Ich nehme an, dass system sofort zurückkehrt. Dadurch rufst du FindWindow auf, obwohl der IE noch gar nicht gestartet ist, ergo gibt es auch kein gültiges HWND.

    greetz KN4CK3R



  • Wenn ich einfach zwischen den Programm Start und den Programm Such Befehl ein Sleep(2000); setze funktioniert es auch nicht. 😕
    Der if(hwnd) part wird wirklich nicht ausgeführt und nach dem schließen von IE bekomme ich im Programm-Fenster die Ausgabe:

    Der Befehl "feature" ist entweder falsch geschrieben oder
    konnte nicht gefunden werden.
    Der Befehl "context" ist entweder falsch geschrieben oder
    konnte nicht gefunden werden.

    Gruß
    silent12



  • Also. wenn ich Youtube mit dem IE öffne, heisst das Fenster nicht IFrameirgendwas sondern Youtubeirgendwas. Vieleicht liegt da je dein Fehler. Den Rest des Codes hab ich mir jetzt nicht angeschaut.



  • Er hat doch den ersten Parameter angegeben, nicht den zweiten. Der erste ist lpClassName und der zweite lpWindowName. 😛
    Ansonnsten kann ich dir nur empfehlen auf system() zu verzichten und ShellExecute zu verwenden, hat aber sehr wahrscheinlich nichts mit deinem Problem zu tun.



  • Alles was ich bis jetzt zur ShellExecute Funktion gelesen habe, ist weitaus komplizierter. Könnte ich es nicht mit system anders lösen ?
    Gruß
    silent12



  • silent12 schrieb:

    Alles was ich bis jetzt zur ShellExecute Funktion gelesen habe, ist weitaus komplizierter. Könnte ich es nicht mit system anders lösen ?
    Gruß
    silent12

    Dann ist Programmieren vielleicht nichts für Dich!?



  • Ich weiß nicht was an ShellExecute komplizierter sein soll.

    ShellExecute(NULL, "open", "iexplore.exe", "http://www.youtube.com", NULL, SW_SHOW);
    

    Funktioniert wunderbar und ich denke jeder Parameter ist nachvollziehbar, sofern du die Doku gelesen hast dazu.



  • #include <exdisp.h>
    #pragma comment(lib,"uuid.lib")
    #pragma comment(lib,"oleaut32.lib")
    #pragma comment(lib,"ole32.lib")
    
    class CIE
    {
    	IWebBrowser2 *m_browser;
    public:
    	void ProcessMessages() {
    		MSG msg;
    		while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) {
    			TranslateMessage(&msg); DispatchMessage(&msg);
    		}
    	}
    	BOOL Wait(int timeout=20) {
    		VARIANT_BOOL busy = VARIANT_TRUE;
    		if (m_browser) {
    			while ((busy == VARIANT_TRUE) && timeout--)
    			{
    				ProcessMessages();
    				Sleep(100);
    				m_browser->get_Busy(&busy);
    			}
    		}
    		return busy==VARIANT_FALSE;
    	}
    	void Open(LPCWSTR url) {
    		if (m_browser) {
    			m_browser->put_Visible(VARIANT_TRUE);
    			BSTR b = SysAllocString(url);
    			static VARIANT v;
    			m_browser->Navigate(b,&v,&v,&v,&v);
    			SysFreeString(b);
    		}
    	}
    	void Focus() {
    		if (m_browser) {
    			HWND hwnd=0;
    			if (!m_browser->get_HWND((long*)&hwnd) && hwnd) {
    				ShowWindow(hwnd,SW_MINIMIZE); // idiotisch
    				ShowWindow(hwnd,SW_MAXIMIZE);
    			}
    		}
    	}
    	void Refresh() {
    		if (m_browser) m_browser->Refresh();
    	}
    	CIE() {
    		CoInitialize(0);
    		CoCreateInstance(CLSID_InternetExplorer, NULL, CLSCTX_SERVER, IID_IWebBrowser2, (void**)&m_browser);
    	}
    	~CIE() {
    		if (m_browser) m_browser->Release();
    		CoUninitialize();
    	}
    };
    
    // example
    int main()
    {
    	CIE ie;
    	ie.Open(L"\1:blank");
    	ie.Wait();
    	ie.Focus();
    	ie.Open(L"http://www.youtube.com/");
    	ie.Wait();
    	MessageBox(0,TEXT("Click OK to refresh and quit"),0,0);
    	ie.Refresh();
    	return 0;
    }
    

Anmelden zum Antworten