Skript zur google-Suche eines markierten Wortes

  • VBScript

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Tintifax.

    Skript zur google-Suche eines markierten Wortes

    Hallo!

    Ich habe ein kleines VBScript geschrieben (mein Erstes! :)) das einen markierten Text in die Zwischenablage kopiert (Sendkey ^C), den Text aus der Zwischenablage ausliest (htmlfile-workaround) und Firefox mit einer google-Suche nach diesem Text startet:

    Visual Basic-Quellcode

    1. Option Explicit
    2. Dim WSHShell
    3. Dim objHtml
    4. Dim strClipText
    5. Set WSHShell = WScript.CreateObject("WScript.Shell")
    6. WSHShell.SendKeys "^(C)"
    7. Set objHtml = CreateObject("htmlfile")
    8. strClipText = objHtml.ParentWindow.ClipboardData.GetData("text")
    9. WSHShell.Exec("C:\Programme\Mozilla Firefox\firefox.exe -new-window https://www.google.at/search?q="&strClipText)
    10. WScript.Quit


    Damit das ganze bequem funktioniert hab ich diesem Skript einen Shortcut gegeben. (Strg + Alt + F) in Anlehnung an Strg + F.
    Funktioniert überraschend einwandfrei!

    Ein paar Kleinigkeiten hätte ich aber dennoch gerne verfeinert:
    1) Ist der Umweg über die Zwischenablage wirklich notwendig? Kann man in VBScript nicht direkt auf markierten Text zugreifen?
    2) Wenn gerade nichts bzw. kein Text markiert ist öffnen sich zig Firefox-Tabs mit random-Inhalt. Kann man das irgendwie sauber abfangen?
    So in der Art "ischar(strClipText)"?
    3) Sind zwei Wörter markiert öffnen sich zwei Tabs mit je einem Wort. Kann man das SPACE irgendwie abfangen?

    Gruß,
    Johannes

    Tintifax schrieb:

    Ist der Umweg über die Zwischenablage wirklich notwendig? Kann man in VBScript nicht direkt auf markierten Text zugreifen?
    Kann ich dir für VBS nicht sagen, aber warum schreibst du nicht einfach in VB.NET?

    Tintifax schrieb:

    Wenn gerade nichts bzw. kein Text markiert ist öffnen sich zig Firefox-Tabs mit random-Inhalt. Kann man das irgendwie sauber abfangen?
    Probier mal

    Visual Basic-Quellcode

    1. if strcliptext <> "" then
    2. WSHShell.Exec("C:\Programme\Mozilla Firefox\firefox.exe -new-window https://www.google.at/search?q="&strClipText)
    3. else
    4. msgbox("Kein Text markiert!")
    5. end if


    Tintifax schrieb:

    Sind zwei Wörter markiert öffnen sich zwei Tabs mit je einem Wort. Kann man das SPACE irgendwie abfangen?
    Versuche mal "" durch "%20" zu ersetzen. Weiß aber auch nicht genau, ob/wo in VBS es eine Replace-Methode gibt. Wie gesagt: Warum kein "richtiges" VB.NET?


    btw. @Mods: falsch geguckt - ist ja bei VBS
    Danke BjöNi!

    <> "", das hab ich gesucht! Danke! Funktionert einwandfrei!

    Dass zwei Wörter "auf einmal" gesucht werden hab ich noch nicht geschafft, aber:
    Rufe ich Firefox in der Kommandozeile wie im Skript auf und packe die durch SPACE getrennten Suchwörter in Anführungszeichen funktionierts:
    "C:\Programme\Mozilla Firefox\firefox.exe" -new-window google.at/search?q="Wort1 Wort2"
    Mache ich die Anführungszeichen im Skript gehts natürlich nicht weil das Anführungszeichen ja den String beendet.
    Ich muß wohl in strClipText am Anfang und am Ende ein Anführungszeichen einfügen.
    Werd das mal probieren.

    Gruß,
    Johannes

    PS: Mit VB.NET wärs wohl einfacher, da hast du recht, aber ich wollte nicht für so eine Kleinigkeit extra einen Compiler und/oder eine Runtime Environment installieren. Außerdem hab ich nicht viel Ahnung von VB.NET, VBScript versteh ich bis jetzt ganz gut und da man es nicht compilieren muß ist einfaches Ausprobieren möglich.

    Tintifax schrieb:

    und da man es nicht compilieren muß ist einfaches Ausprobieren möglich.
    Naja, solange du nen halbwegs schnellen Rechner hast dauert es wenige Sekunden vom Drücken des Debugbuttons bis zum Ausführen des Programms.

    Tintifax schrieb:

    Mache ich die Anführungszeichen im Skript gehts natürlich nicht weil das Anführungszeichen ja den String beendet.
    Verwende zwei Anführungszeichen, dann wird das Anführungszeichen in den String genommen und beendet ihn nicht.
    Ansonsten versuche mal:

    Visual Basic-Quellcode

    1. WSHShell.Exec("C:\Programme\Mozilla Firefox\firefox.exe -new-window https://www.google.at/search?q="&Replace(strClipText," ","%20"))
    oder

    Visual Basic-Quellcode

    1. WSHShell.Exec("C:\Programme\Mozilla Firefox\firefox.exe -new-window https://www.google.at/search?q="&Replace(strClipText," ","+"))
    (beides nicht ausprobiert)

    Hab halt schon seit etwa 3 Jahren nichts mehr mit VBS gemacht ;)
    Jawoll! Hatte die ganze Zeit nach einem Escape-Zeichen gesucht. Einfach doppeltes Anführungszeichen, dachte ein Anführungszeichen beendet den String.

    So hats funktioniert:
    WSHShell.Exec("C:\Programme\Mozilla Firefox\firefox.exe -new-window google.at/search?q="""&strClipText)&""""
    Also ein Anführungszeichen vor den Suchtext und eins danach.

    Is aber ziemlich unschön, dein Replace gefällt mir besser und funktioniert auch, hatte das mit %20 ganz vergessen.

    Danke!

    Kleines (großes?) Problem noch: Hab bis jetzt immer mit Notepad getestet, hat immer brav in die Zwischenablage kopiert.
    Wenn ich Text in Firefox markiere gehts aber nicht?!
    Hab schon WSHShell.AppActivate "firefox" probiert weil ich dachte dass er vielleicht den Fokus verliert, geht aber auch nicht.
    Blockiert Firefox SendKeys? Sicherheitseinstellungen?

    Gruß,
    Johannes

    Tintifax schrieb:

    Hab schon WSHShell.AppActivate "firefox" probiert weil ich dachte dass er vielleicht den Fokus verliert, geht aber auch nicht.
    Blockiert Firefox SendKeys? Sicherheitseinstellungen?
    Firefox hat schon manchmal eigenartige Sicherheitseinstellungen. (Um den Kleinkrieg mal wieder anzuzetteln: Chrome 4ever! ;)). Nope, da kann ich dir auch nicht helfen...

    btw. habe es gerade unter Win8 probiert, da wurde Sendkeys für Strg+C offensichtlich komplett blockiert (egal welches Programm).
    Macht ja nichts, du hast mir schon viel weitergeholfen.
    Ist jetzt auch nicht so ein Problem, Strg+C und dann Strg+Alt+F funktioniert und ist jetzt auch nicht so umständlich.
    Wenns auf einmal gehen würde wärs natürlich perfekt.

    Danke und Gruß,
    Johannes

    Btw: Kann es sein dass es diese Einschränkung mit VB.NET nicht gibt?

    Bzw. gibt es in VB.NET andere Möglichkeiten markierten Text aus Firefox heraus in die Zwischenablage zu kopieren als mit sendkeys?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Tintifax“ ()

    Oh Mann, bin jetzt endlich draufgekommen!

    Ich hab in meinem Skript doch Sendkeys "^C" geschrieben, genau so wie man CTRL+C schreibt, obwohl eigentlich CTRL+c gemeint ist.
    (Dazu kommt noch dass die Buchstaben groß auf der Tastatur aufgedruckt sind. Wahrscheinlich schreibt man deshalb Tastenkombinationen immer groß)

    Alle Programm an denen ich mein Skript getestet hab sind nicht case-sensitive, aber Firefox schon!
    In Firefox gibt es CTRL+SHIFT-Shortcuts.

    Mann mann mann, dummer Fehler.
    Habs geändert und freu mich darüber dass es funktioniert. :)

    Danke nochmal BjöNi!

    Gruß,

    Johannes