Windows Funktionen in Linux kompatible Funktionen umschreiben



  • was soll die Funktion denn machen? (Du kannst nicht erwarten, dass die Leute im Unix Forum die WinAPI Funktionen auswendig kennen... 🙄 )

    man: system(3) gibt einfach nur den übergebenen String an eine Shell weiter.



  • Achso stimmt,sorry.Ist mir garnicht aufgefallen, dass ich es nicht erläutert habe 😃

    Also ich möchte mittels ShellExecute eine URL mit dem Standardbrowser öffnen, die in der Variable Puffer enthalten ist .Das klappt in Windows wunderbar.Nun möchte ich dies so umbauen, dass es in Linux die selbe Funktionsweise hat.Bin schon ziemlich lange an dieser Aufgabe dran, aber da ich alleine damit nicht klarkomme, obwohl ich mir die von rüdiger angegebene Seite mehrmals durchgelesen habe, und auch schon das Forum von oben bis unten durchsucht habe,wäre es seht nett, wenn mir jemand dabei helfen würde 😞



  • Naja, sowas wie einen Standardbrower gibt es unter linux nicht. Bei gnome ist das beste äquivalent wohl gnome-www-browser. Ich würde vorschlagen, dass du das konfigurierbar machst (umgebungsvariable z.B.). System gibt, wie gesagt, den string an eine shell weiter. Wenn dein puffer nur die url enthalt, musst du halt system (program + ' ' + buffer) verwenden..



  • @ness
    doch gibt es, hat sich nur nicht durchgesetzt bisher http://www.catb.org/~esr/BROWSER/ 🙂 Aber so was kann man ja auch für sein Programm einfach festlegen.



  • rüdiger schrieb:

    @ness
    doch gibt es, hat sich nur nicht durchgesetzt bisher http://www.catb.org/~esr/BROWSER/ 🙂 Aber so was kann man ja auch für sein Programm einfach festlegen.

    das erinnert mich an bisschen an einer Diskussion, die wir hier vor ein Paar Monaten über Elektra hatten 🙄

    ich denke, der Grund, warum BROWSER sich nicht durchsetzt, sind Desktop Env. wie KDE oder Gnome, die ein eigenes "default browser" System haben.



  • Das Problem ist wohl eher, das GNOME oder KDE deine .profile ändern müssten, wenn du den Standard-Browser änderst und so tief greifen die ja nicht ins System ein.

    Aber wie gesagt, einfach $BROWSER-implementieren und sagen das man es so erwartet. Habe ich zB für ein sawfish-script auch so gemacht.



  • Tut mir Leid,aber ihr schreibt immer von einfach,einfach,einfach 🙄
    Für mich ist es irgendwie nicht so einfach.Ich kapier die Sache mit der Browser Variable irgendwie nicht.Auf der Seite steht ja z.B.
    For example, on most Linux systems a good thing to do would be:

    BROWSER="netscape -raise -remote \"openURL(%s,new-window)\":lynx"

    Aber die Browser Variable ist ja nicht vorhanden,aber wie/wo muss ich die genau anlegen?



  • du machst einfach in der Konsole export BROWSER="dein Browser String" (das kannst du auch in die Datei ~/.profile packen)

    und man: getenv(3) benutzt du um die Variable auszulesen.



  • Ich kriegs einfach nicht hin.Also ich beschreib mal Schritt für Schritt, wie ich vorgegangen bin:

    1:Konsole öffnen und export BROWSER="/usr/bin/firefox" eingeben.Enter,keine Meldung wurde angezeigt.

    2.Ich öffne die .cpp Datei und schreibe

    getenv("BROWSER");
    BROWSER="netscape -raise -remote \"openURL(Puffer)\":lynx";
    

    funktioniert nicht.

    3.Versuche etwas anderes und schreibe

    hilfe=getenv("BROWSER");
    hilfe="firefox -raise -remote \"openURL(Puffer)\":lynx"
    

    Wie gesagt, klappt nicht (compiliert zwar im zweiten Versuch, aber wird dann beim Ausführen automatisch abgebrochen).
    Was hab ich nun falsch gemacht?Ich werd aus dieser Browser Variable einfach nicht schlau.



  • Hab noch etwas vergessen.Hab natürlich auch das hier getestet:

    BROWSER="netscape -raise -remote \"openURL(%s,new-window)\":lynx"
    BROWSER="firefox -raise -remote \"openURL(%s,new-window)\":lynx"
    hilfe="netscape -raise -remote \"openURL(%s,new-window)\":lynx"
    


  • int main() {
      char const *browser = getenv("BROWSER");
      if(!browser)
        browser = "..."
      //...
    }
    


  • hilfe="netscape -raise -remote \"openURL(%s,new-window)\":lynx"

    int main() {
      char const *browser = getenv("BROWSER");
      if(!browser)
        browser = "netscape -raise -remote \"openURL(%s,new-window)\":lynx"
      //...
    

    wenn ich vor dem

    browser = "netscape -raise -remote \"openURL(%s,new-window)\":lynx
    

    ein cout mache, dann wird mir nix ausgegeben.Mache ich danach ein cout, wird mir nur "netscape -raise -remote \"openURL(%s,new-window)\":lynx" ausgegeben.Ich denke mal, dass er das export BROWSER="/usr/bin/firefox" in der Konsole nicht angenommen hat.Gibt es noch eine andere Möglichkeit,dies fertzulegen?



  • lege ich mit export Browser='firefox' den standardbrowser fest und mache dan echo $BROWSER wird mir auch firefox als standard Browser angezeigt.Wenn ich die Konsole allerdings wieder schließe und eine neue aufmache und wieder echo $BROWSER eingebe,wird mir ein leeres Feld angezeigt.Irgendwie komisch.



  • nicht komisch. Umgebungsvariablen werden immer nur an Unterprozesse weitergegeben. Wie gesagt, schreib das export einfach in die ~/.profile oder ~/.bashrc



  • Alles klar,hab ich gemacht und es funktioniert.
    Man einziges Problem ist jetzt nur noch, dass sich eben der Browser öffnet und die URL, die in Puffer gespeichert ist, aufruft.

    rüdiger schrieb:

    int main() {
      char const *browser = getenv("BROWSER");
      if(!browser)
        browser = "..."
      //...
    }
    

    Aber was muss denn jetzt genau in brwoser="..." rengeschrieben werden?
    Ich hab schon soviel ausprobiert aber nichts funktioniert.

    browser = "netscape -raise -remote \"openURL(%s,new-window)\":lynx" funktioniert nicht, auch in jeglichen von mir veränderten Varianten.
    Das ist jetzt nur noch mein einziges Problem.



  • Funktioniert bei mir ohne Probleme, vielleicht passt ja der Pfad nicht oä?

    #include <stdlib.h>
    #include <stdio.h>
    
    int main() {
      char const *browser = getenv("BROWSER");
      if(!browser)
          browser = "asdf";
    
      printf("%s\n", browser);
    }
    
    ~ % ./browser 
    galeon --new-tab %s:links
    ~ % unset BROWSER
    ~ % ./browser    
    asdf
    ~ %
    


  • nman schrieb:

    Funktioniert bei mir ohne Probleme, vielleicht passt ja der Pfad nicht oä?

    #include <stdlib.h>
    #include <stdio.h>
    
    int main() {
      char const *browser = getenv("BROWSER");
      if(!browser)
          browser = "asdf";
    
      printf("%s\n", browser);
    }
    

    Wenn ich es so mache, dann gibt er mir nur /usr/bin/firfox aus anstatt den browser zu öffnen.

    Und wenn ich

    ~ % ./browser 
    galeon --new-tab %s:links
    ~ % unset BROWSER
    ~ % ./browser    
    asdf
    ~ %
    

    in die Konsole eingebe, dann werden nur Fehler angezeigt.
    Ich versteh nicht, wieso das bei euch funktioniert aber bei mir nicht.Ich will dieses blöde Programm endlich mal fertig kriegen,aber bekomm es einfach nicht hin.



  • Mitdenken ist durchaus erlaubt. Natürlich sollst Du den String nicht ausgeben, sondern das Programm ausführen.

    Und der zweite Absatz lässt mich ernsthaft daran zweifeln, ob Du wirklich eine Lösung suchst, oder einfach nur herumtrollst.



  • Ja tut mir leid,aber ich habe vor einer Woche das erste mal was mit Linux zutun gehabt.Deshalb kann ich mit diesem Code

    ~ % ./browser
    galeon --new-tab %s:links
    ~ % unset BROWSER
    ~ % ./browser    
    asdf
    ~ %
    

    auch nichts anfangen.deshalb fände ich es äußerst ansprechend,wenn du einen kurzen Kommentar dazu abgeben könntest, was das sein soll.An den Programm sitzt ich inzwischen auch schon seit letzter Woche dran.In Windows hab ich keinerlei Probleme gehabt mit den prog aber in Linux fängt es mich langsam an zu nerven.



  • das hat doch nichts mit Linux zu tun, das du nicht weißt was printf macht... Dir fehlen einfach absolut die Grundlagen und offensichtlich auch das Verständnis. Du musst den String natürlich auslesen und das %s mit der Webseite ersetzen die du aufrufen willst oder wenn kein %s vorhanden ist eben mit einem Space getrennt anhängen. Den resultierenden String musst du dann ausführen mit system. Steht eigentlich auch auf der BROWSER-Homepage. Da findest du vermutlich auch Beispielcode...


Anmelden zum Antworten