Iternetlink öfnnen oder schließen



  • scheinbar scheint das etwas schwieriger zu sein, wenn mir da keiner helfen kann



  • Jaepen schrieb:

    scheinbar scheint das etwas schwieriger zu sein, wenn mir da keiner helfen kann

    Das hat nichts mit dem zu tun. Deine Frage hat einfach so gar nichts mit C++ zu tun. 🙄



  • das problem ist, dass du ein anderes programm steuern willst, in deinem Fall
    den IE.

    öffen geht über das ShellExecute aber das auch nur weil der browser auch
    über die befehlszeile die addresse erwartet. das geht aber nur beim starten des programmes, d.h. die schließen-nachricht wirst du so nicht senden können.

    ich sehe da folgende möglichkeiten:

    1. "manuelle" eingabe
    - handle von der addresszeile holen
    - addresse reinschreiben
    - [Enter] simulieren

    2. mit neuem fenster
    - mit ShellExecute oder CreateProcess browser starten und seite anzeigen
    - WM_CLOSE oder WM_DESTROY an das fenster senden

    mfg helferlein



  • mit ShellExecute oder CreateProcess browser starten und seite anzeigen

    das mache ich bis jetzt auch

    ShellExecute(NULL, L"open", L"www.abc.de", NULL, NULL, SW_SHOW);
    

    .... mein Problem ist das ich nicht weiß wie ich das WM close an das fenster senden kann???

    gruß



  • Jaepen schrieb:

    scheinbar scheint das etwas schwieriger zu sein, wenn mir da keiner helfen kann

    Ich habe Dir doch gesagt, daß Du Dein Vorhaben wohl nur mit direkten Messages an den Browser, bzw. seine dafür vorgesehenen Steuerelemente umsetzen kannst.

    Und wir hier schon jemand bemerkte, das ist kein C / C++ - Problem, sondern eines für das WINAPI-Forum; dort geht es nämlich um Windows-Programmierung (vorausgesetzt, daß Windows Deine Zielplattform ist).

    Es macht aber den Anschein, als ob Du so gar keine Ahnung davon hast, worum es hier geht. Vielleicht solltest Du Dir erst mal etwas weniger anspruchsvolle Ziele vornehmen.

    Ansonsten kann ich zum Thema Windowsprogrammierung das gleichnamige Buch von Charles Petzold empfehlen.



  • Jaepen schrieb:

    .... mein Problem ist das ich nicht weiß wie ich das WM close an das fenster senden kann???

    Fensterhandle holen mit
    FindWindow - dann PostMessage oder auch SendMessage.


  • Administrator

    Belli schrieb:

    Jaepen schrieb:

    .... mein Problem ist das ich nicht weiß wie ich das WM close an das fenster senden kann???

    Fensterhandle holen mit
    FindWindow - dann PostMessage oder auch SendMessage.

    Dann öffnet sich mit ShellExecute im IE7 ein neuer Tab und mit der WM_CLOSE Nachricht, welche du an dieses Fenster schickst, schliesst sich der ganze IE. Der User wird den Entwickler töten!

    @Jaepen,
    Dein Vorgehen ist schon einfach gesagt falsch. Was soll das überhaupt bringen? Wieso willst du einen Link öffnen und später wieder schliessen?

    Grüssli



  • Dravere schrieb:

    Belli schrieb:

    Jaepen schrieb:

    .... mein Problem ist das ich nicht weiß wie ich das WM close an das fenster senden kann???

    Fensterhandle holen mit
    FindWindow - dann PostMessage oder auch SendMessage.

    Dann öffnet sich mit ShellExecute im IE7 ein neuer Tab und mit der WM_CLOSE Nachricht, welche du an dieses Fenster schickst, schliesst sich der ganze IE. Der User wird den Entwickler töten!

    Ja ... will ICH WM_CLOSE an den IE schicken? Nein, ich habe vorgeschlagen, die erforderlichen Messages direkt an die nötigen Controls zu schicken.


  • Administrator

    Belli schrieb:

    Ja ... will ICH WM_CLOSE an den IE schicken? Nein, ich habe vorgeschlagen, die erforderlichen Messages direkt an die nötigen Controls zu schicken.

    Ich will sehen, wie du mit FindWindow den Tab findest. Vielleicht geht es sogar, aber es ist und bleibt eindeutig ein falscher Weg ...

    Grüssli



  • Stichwort DDE
    schau mal ob du dazu in bezug auf den IE was findest.



  • Dravere schrieb:

    Ich will sehen, wie du mit FindWindow den Tab findest. Vielleicht geht es sogar, aber es ist und bleibt eindeutig ein falscher Weg ...

    Mit FindWindow finde ich erstmal den Explorer. Den Tab finde ich danach mit FindWindowEx.
    Warum soll das ein falscher Weg sein?
    Und was wäre Deiner Meinung nach der richtige Weg?


  • Administrator

    Belli schrieb:

    Mit FindWindow finde ich erstmal den Explorer. Den Tab finde ich danach mit FindWindowEx.
    Warum soll das ein falscher Weg sein?
    Und was wäre Deiner Meinung nach der richtige Weg?

    Auch da will ich immer noch sehen, wie du das richtige Fenster findest! Wie findest du heraus, welches Control, bzw. Fenster, das richtige ist?

    Und der falsche Weg ist es, weil der OP irgendetwas machen möchte und versucht dies zu erledigen, in dem er bei einem fremden Prozess versucht die Kontrolle zu übernehmen. Das ist ganz eindeutig ein Designfehler.

    Ich sehe auch überhaupt nicht ein, wieso ein Link im Browser für eine Zeit lang geöffnet werden sollte. Bei jeglichem Einfall den ich dazu habe, fallen mir hunderte von besseren Wegen dafür ein, als den Weg, welcher der OP einschlagen möchte.
    Er sollte mal verraten, was er eigentlich tun möchte. Ich bin mir sicher, wir können ihm einen besseren Weg zeigen.

    Grüssli



  • Dravere schrieb:

    Belli schrieb:

    Mit FindWindow finde ich erstmal den Explorer. Den Tab finde ich danach mit FindWindowEx.
    Warum soll das ein falscher Weg sein?
    Und was wäre Deiner Meinung nach der richtige Weg?

    Auch da will ich immer noch sehen, wie du das richtige Fenster findest! Wie findest du heraus, welches Control, bzw. Fenster, das richtige ist?

    Na, ich guck mir mit Spy an, wie die Fensterklasse heißt, evtl. gibt es noch einen Fenstertext. So viele Tab Controls wird es als Childs unterhalb des MainWindows nicht geben.
    Und für das, was der Threadersteller vorhat, ist das meiner Meinung nach der richtige Weg.
    Ob es grundsätzlich richtig ist, die Problemstellung - die wir nicht kennen - so anzugehen, ist eine ganz andere Frage, da bin ich schon eher geneigt, Deiner Ansicht zu folgen. Mit meinem richtigen Weg meine ich lediglich, richtig im Sinne der Anforderung des Threaderstellers.


  • Administrator

    Belli schrieb:

    Na, ich guck mir mit Spy an, wie die Fensterklasse heißt, evtl. gibt es noch einen Fenstertext. So viele Tab Controls wird es als Childs unterhalb des MainWindows nicht geben.

    Es wird wahrscheinlich eine Tabklasse geben. Dann musst dich allerdings auf den Fenstertitel verlassen. Wenn nun aber zwei Fenster den gleichen Titel haben, was passiert dann? Ups ... sorry Anwender ... rofl

    Es ist eine extrem schlechte Art und keine Lösung und das sollte man dem OP mitteilen. Das seine Anforderungen Unsinn sind und er besser das Problem genauer schildern sollte.

    Grüssli



  • Dravere schrieb:

    Belli schrieb:

    Na, ich guck mir mit Spy an, wie die Fensterklasse heißt, evtl. gibt es noch einen Fenstertext. So viele Tab Controls wird es als Childs unterhalb des MainWindows nicht geben.

    Es wird wahrscheinlich eine Tabklasse geben. Dann musst dich allerdings auf den Fenstertitel verlassen.

    So wie ich das sehe, gibt es nur ein einziges TabControl als direktes Child des Mainwindow. Da kann mir der Fenstertitel völlig egal sein ...

    Also ich denke nach wie vor, daß das kein (großes) Problem ist.

    Wie gesagt, der Sinn ode Unsinn, das so zu machen, ist ein anderes Thema.


  • Administrator

    Belli schrieb:

    Also ich denke nach wie vor, daß das kein (großes) Problem ist.

    Zeig mal den Code her. Das will ich sehen! Behauptungen kann man lange aufstellen. Beweis es, dass es kein (grosses) Problem ist.
    Die Aufgabe ist ganz einfach. Da ist ein Browser offen mit x Tabs. Schliesse automatisch einen Tab und zwar den richtigen, welcher vorher über ShellExecute geöffnet wurde.

    Man darf verwenden:
    FindWindow, FindWindowEx, PostMessage/SendMessage, WM_CLOSE Nachricht

    Viel Glück!

    Grüssli



  • Dravere schrieb:

    Belli schrieb:

    Also ich denke nach wie vor, daß das kein (großes) Problem ist.

    Zeig mal den Code her. Das will ich sehen! Behauptungen kann man lange aufstellen. Beweis es, dass es kein (grosses) Problem ist.

    Bitte richtig lesen. Ich habe nix behauptet, ich habe gesagt, ich DENKE, daß es kein großes Problem ist.
    Ich habe selbst noch kein TabControl eingesetzt, und müsste mich da jetzt erst einlesen, wofür ich weder die Zeit noch die Lust habe.

    Dravere schrieb:

    Die Aufgabe ist ganz einfach. Da ist ein Browser offen mit x Tabs. Schliesse automatisch einen Tab und zwar den richtigen, welcher vorher über ShellExecute geöffnet wurde.

    Man darf verwenden:
    FindWindow, FindWindowEx, PostMessage/SendMessage, WM_CLOSE Nachricht

    Ich würde den neuen Tab nicht mit ShellExecute öffnen, sondern versuchen, daß über die Message TCM_INSERTITEM zu erledigen. Die gibt mir den Index des neuen Tabs zurück, den ich später an TCM_DELETEITEM zum Löschen übergeben würde.
    ShellExecute/WM_CLOSE sind sicher viel einfacher zu benutzen, aber nur hilfreich, wenn ich ein NEUE IExplorer-Instanz starten und wieder schließen will, was das ursprüngliche Anliegen des Threaderstellers war.
    Noch einmal: Ich BEHAUPTE nicht, daß es so geht, aber ich denke schon, daß man das hinkriegen kann.
    Zumindest kann man einiges versuchen, wenn man dieses Problem so wie vom Threadersteller gewünscht angehen möchte.



  • Morgen,
    da sich immer noch gestritten wird was ich machen will....

    Also ich hab ein kleines Prog. mit dem verschiedene sachen berechne, wie zb ein Taschenrechner nur mit etwas größeren funktionen z.b fibonaci zahlen usw.
    Im mom läuft das ganze auf einer konsole, soll später vll in eine form app gewandelt werden, aber erst mal so.

    Jetzt möchte ich während das Prog läuft, von dem prog aus eine Internetseite starten (das hab ich auch schon)
    Dann will ich später diese Seite auch wieder schließen (ich will zb während mein prog läuft in einem Gästebuch nachschauen ob es einen neuen eintrag gibt)

    Wichtiger als das schließen dieser einzelnen Karte wäre mir das aktualisieren dieser seite ohne das diese dann in den Vordergrund springt.

    Ich hoffe das ist jetzt eindeutig!

    Gruß Jaepen



  • Hi
    So, zum aktualisieren hab ich jetzt auch eine möglichkeit gefunden

    HWND explorer = FindWindow(NULL, L"top - Windows Internet Explorer");
    if(explorer){ 
    cout<<"gefunden"; 
    PostMessage(explorer ,WM_KEYDOWN,VK_F5,0);
    PostMessage(explorer ,WM_KEYUP,VK_F5,0);
    

    diese funktioniert auch.

    folgendes hab ich noch versucht

    PostMessage(explorer,WM_COMMAND,MAKEWPARAM(41504,1) ,0);
    

    das hat nicht funktioniert. warum 😕

    wenn ich jetzt die erste möglichkeit verwende, und die .exe auf einem anderen rechner ausführe geht es auf einmal nicht mehr, da er den handle nicht findet.

    Warum nicht ?

    gruß



  • Wenn der User eh noch selbst nachgucken soll, dann musst du es doch auch nicht aktualisieren?

    Ohne jetzt zu suchen: FindWindow(NULL, L"top - Windows Internet Explorer"); das scheint mit der Fenstertitel zu sein... Was so viel heißt, wie: wenn nen anderer Tab offen ist, als der, den du kennst, findest du das fenster nicht, weil der IE sich ganz anders nennt...

    bb


Anmelden zum Antworten