Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Direktlink Google Bildersuche als Kontextmenü im Windows Explorer

Mitglied: PeterleB

PeterleB (Level 1) - Jetzt verbinden

15.04.2018 um 11:00 Uhr, 1116 Aufrufe, 36 Kommentare

Häufig suche ich bestimmte Bilder im Web mit besserer Auflösung oder einfach nur nach Herkunft oder Inhalt verschiedener Bilder. Meist bastle ich mir schöne Desktophintergründe für mein Dualscreen-System.
Bei der Suche muss ich immer erst die Google Bildersuche aufrufen, auf "Datei hochladen" gehen und dann das Bild auf dem PC auswählen.

Gibt es eine Möglichkeit, für den Windows Explorer ein Kontextmenü für Bilddateien zu konstruieren, welches dieses Vorgehen automatisiert?
So in etwa: "https://www.google.de/imghp" "Bild hochladen" %1.

Ich habe etwas von Google APIs gelesen, aber nichts zu Direktaufrufen der Bildersuche gefunden.

Schönen Sonntag noch.

Peter
36 Antworten
Mitglied: Pedant
15.04.2018, aktualisiert um 13:46 Uhr
Hallo Peter,

Zitat von PeterleB:
Gibt es eine Möglichkeit, für den Windows Explorer ein Kontextmenü für Bilddateien zu konstruieren, welches dieses Vorgehen automatisiert?
So in etwa: "https://www.google.de/imghp" "Bild hochladen" %1.
Ein Bild, dass schon in Web ist, also eine URL hat, könntest Du so suchen lassen:
start https://www.google.de/searchbyimage?image_url=%1&image_content=&filename=&hl=de
Hier ein Beispiellink mit ersetzem %1:
https://www.google.de/searchbyimage?image_url=https://www.administrator.de/icons/members/profile_man_128x128.png&image_content=&filename=&hl=de
Dass statt der Url (http...bild.jpg) auf ähnlich einfache Weise eine lokale Datei (D:\...Bild.jpg) verwendet werden kann, möchte ich ausschließen.
Ich könnte mir als Lösung nur vorstellen, dass der lokale Pfad zum Bild an ein speziell geschriebenes Tool übergeben werden kann, dass in Browsermanier den Dateiinhalt ausliest und an Google sendet. Wobei dann zuvor geklärt werden müsste wohin der Datenstrom geschickt werden müsste.

Ein anderer Ansatz könnte ein Makro sein.
Eventuell kann man was mit Autohotkey basteln, dass man ins Kontextmenü aufnimmt.

Das Folgende gälte es dabei zu automatisieren:
1. start https://www.google.de/imghp
2. zum Kamera-Symbol springen und [Enter] oder auf Kamera-Symbol klicken
3. [Shift]+[Tab] damit "Bild hochladen" den Fokus erhält, dann [Enter]
4. [Tab] damit "Durchsuchen..." den Fokus erhält, dann [Enter]
5. lokalen Pfad (aus %1) ins Eingabefeld "Dateiname:" einfügen und [Enter]
Fertig

Schwierigkeiten sehe ich hier nur bei 2., also wie man per Tastatur zum Kamera-Symbol navigieren kann, habe ich nicht ermitteln können und per automatisiertem Klick, müsste man dessen Position kennen.
Wenn man den Browser maximiert und seine Bildschirmauflösung kennt, wäre die Position als x/y-Koordinaten zu ermitteln und wiederholbar verwendbar.
Schöner wäre es aber über eine Tastaturnavigation.

Zitat von PeterleB:
Ich habe etwas von Google APIs gelesen, aber nichts zu Direktaufrufen der Bildersuche gefunden.
Hast Du den Link dazu?

Gruß Frank
Bitte warten ..
Mitglied: Pedant
15.04.2018 um 13:46 Uhr
Hallo selbst,

Zitat von Pedant:
Schwierigkeiten sehe ich hier nur bei 2., also wie man per Tastatur zum Kamera-Symbol navigieren kann, habe ich nicht ermitteln können
So schwer war's dann doch nicht:
[Shift]+[Tab] springt vom Eingabefeld auf das Kamera-Symbol

Gruß an mich
Bitte warten ..
Mitglied: PeterleB
15.04.2018 um 14:12 Uhr
Vielen Dank für die guten Ansätze.
Ich versuche mal, mich darin zu vertiefen.

Die Autohotkey-Sache klingt vielversprechend, gefällt mir aber nicht.

Kommt man nicht irgendwie legal an den (Javascript-)Code der Bildersuche ran?

Hier mal was zu API:
https://developers.google.com/image-search/
Bitte warten ..
Mitglied: colinardo
LÖSUNG 15.04.2018, aktualisiert um 16:47 Uhr
Servus Peter.
Ist es aber nicht. Es reicht hier das Bild via MultiPart-Form POST direkt eine spezielle Google URL zu schicken und die URL die per 302 Redirect zurück kommt im Browser aufzurufen. Das kannst du mit jeder Programmier und besseren Skriptsprache realisieren.

Nimmst du z.B. folgendes Powershell-Skript, das du dann folgendermaßen aufrufst
powershell -Executionpolicy Bypass -C "&'C:\Pfad\Script.ps1' 'D:\deinbild.jpg'"
Das öffnet dann automatisch deinen Browser mit dem Ergebnis.
01.
param(
02.
    [string]$file
03.
)
04.

05.
function Get-GoogleImageSearchResult([string][ValidateScript({Test-Path $_})]$path){
06.
    $boundary = [datetime]::now.Ticks.ToString()
07.
    $p1 = @"
08.
--$boundary
09.
Content-Disposition: form-data; name="encoded_image"; filename="$([IO.Path]::GetFileName($path))"
10.
Content-Type: image/$([System.IO.Path]::GetExtension($path).substring(1))
11.

12.

13.
"@
14.
    $p2 = @"
15.
--$boundary
16.
Content-Disposition: form-data; name="image_content"
17.

18.

19.
--$boundary--
20.

21.
"@
22.
    $bytes = [System.Text.Encoding]::ASCII.GetBytes($p1) + ([IO.File]::ReadAllBytes($path)) + [System.Text.Encoding]::ASCII.GetBytes($p2)
23.
    $request = [Net.HttpWebRequest] ([Net.HttpWebRequest]::Create('https://images.google.com/searchbyimage/upload'))
24.
    $request.Method = "POST"
25.
    $request.ContentType = "multipart/form-data; boundary=$boundary"
26.
    $request.ContentLength = $bytes.Length
27.
    $request.AllowAutoredirect = $false
28.
    $stream = $request.GetRequestStream()
29.
    $stream.Write($bytes, 0, $bytes.Length)
30.
    $stream.Close()
31.
    return [regex]::match((New-Object Io.StreamReader $request.GetResponse().GetResponseStream()).ReadToEnd(),'(?is)HREF="([^"]+)"').Groups[1].Value
32.
}
33.

34.
$url = Get-GoogleImageSearchResult $file
35.
if ($url){start $url}
Oder wenn du Python magst, das geht auch wenn man das 'requests' Modul nachinstalliert:
01.
import sys
02.
import requests
03.
filePath = sys.argv[-1]
04.

05.
sUrl = 'https://www.google.com/searchbyimage/upload'
06.
parts = {'encoded_image': (filePath, open(filePath, 'rb')), 'image_content': ''}
07.
response = requests.post(sUrl, files=parts, allow_redirects=False)
08.
url = response.headers['Location']
09.
print(url)
(Zeigt dir in Beispiel nur die URL an).

Viel Spaß
Grüße Uwe
Bitte warten ..
Mitglied: Pedant
LÖSUNG 15.04.2018, aktualisiert um 16:03 Uhr
Hallo Peter,

Zitat von PeterleB:
Die Autohotkey-Sache klingt vielversprechend, gefällt mir aber nicht.

Mir gefällt's und ich hab's testweise zum Laufen gebracht.

Autohotkey habe ich als zip runtergeladen, dann läuft's auch ohne Installation.
Ausgepackt hab ich's nach "C:\Program Files (x86)\Tools\AutoHotkey\"
Die geschriebene Makrodatei habe ich auch dort abgelegt, sie könnte aber auch woanders abgelegt werden.
Genannt habe ich die "Bildersuche.ahk".

Um Autohotkey etwas als Parameter (zusätzlich zum Skript) mitzugeben ist die Syntax so:
AutoHotkeyU64.exe Skriptdatei.ahk "Bla Bla"
Im übergebenen Skript kann man auf den Parameter (Bla Bla) per %1% zugreifen.

Bildersuche.ahk
01.
Run, https://www.google.de/imghp
02.
WinWaitActive Google Bilder
03.
Sleep 1000
04.
Send +{Tab}
05.
Sleep 100
06.
Send {Enter}
07.
Sleep 100
08.
Send +{Tab}
09.
Sleep 100
10.
Send {Enter}
11.
Sleep 100
12.
Send {Tab}
13.
Sleep 100
14.
Send {Tab}
15.
Sleep 100
16.
Send {Enter}
17.
Sleep 100
18.
;Send, D:\Meine Bilder\Testbild.jpg
19.
Send, %1%
20.
Sleep 100
21.

22.
; Das letze Enter ist vorläufig noch auskommentiert,
23.
; damit man in der Testphase noch lesen kann, was automatisch eingetragen wurde.
24.
;Send {Enter}
Der Aufruf aus der Kommandozeile sähe dann so aus:
01.
"C:\Program Files (x86)\Tools\AutoHotkey\AutoHotkeyU64.exe" "C:\Program Files (x86)\Tools\AutoHotkey\Bildersuche.ahk" "D:\Meine Bilder\Testbild.jpg"

Um den Aufruf ins Kontextmenü zu bekommen ist eine Sache etwas merkwürdig:
Man muss es scheinbar nicht dem Dateityp unterschieben:
01.
[HKEY_CLASSES_ROOT\jpegfile\shell\Bildersuche\command]
02.
@="\"C:\\Program Files (x86)\\Tools\\AutoHotkey\\AutoHotkeyU64.exe\" \"C:\\Program Files (x86)\\Tools\\AutoHotkey\\Bildersuche.ahk\" \"%1\""
Das wird ignoriert und ist daher nutzlos,

sondern der Anwendung, mit der der Dateityp verknüpft ist.
01.
[HKEY_CLASSES_ROOT\Applications\Mein-Bildbetrachter.exe\shell\Bildersuche\command]
02.
@="\"C:\\Program Files (x86)\\Tools\\AutoHotkey\\AutoHotkeyU64.exe\" \"C:\\Program Files (x86)\\Tools\\AutoHotkey\\Bildersuche.ahk\" \"%1\""
Das ist zwar etwas unintuitiv, hat aber den Vorteil, dass es sich auf alle verknüpften Dateitypen auswirkt, aber auch den Nachteil, dass es nicht mehr funktioniert, wenn man dem Dateityp eine andere Anwendung zuordnet.

Man könnte es auch pauschal allen Dateitypen unterschieben
01.
[HKEY_CLASSES_ROOT\*\shell\Bildersuche\command]
02.
@="\"C:\\Program Files (x86)\\Tools\\AutoHotkey\\AutoHotkeyU64.exe\" \"C:\\Program Files (x86)\\Tools\\AutoHotkey\\Bildersuche.ahk\" \"%1\""
aber das wäre hier denkbar unelegant.
Wer will schon sein Sterererklärung.doc in die Bildersuche hochladen.

Wenn Du "Mein-Bildbetrachter.exe" und falls nötig ein paar Pfade anpasst, kannst Du's gerne benutzen.

Gruß Frank

PS:
Mit der API beschäftige ich mich - zumindest heute - nicht, aber danke für den Link.
Bitte warten ..
Mitglied: Pedant
LÖSUNG 15.04.2018 um 16:11 Uhr
Hallo Uwe,

Zitat von colinardo:
powershell -Executionpolicy Bypass -C "&'C:\Pfad\Script.ps1' 'D:\deinbild.jpg'"
...funktioniert wie immer einwandfrei.
Mein Makro schmier' ich mir dann in die Haare.

Gruß Frank
Bitte warten ..
Mitglied: PeterleB
15.04.2018 um 16:40 Uhr
Das ist der Hammer!
Ich danke Euch wie verrückt.

Gruß Peter
Bitte warten ..
Mitglied: colinardo
15.04.2018, aktualisiert um 17:40 Uhr
Noch zur Info für all die, die das mit anderen Sprachen realisieren möchten. Es gibt hier eine fiese Falle/Bug welche mich beim Implementieren einige Zeit gekostet hat. Und zwar betrifft das den Content-Type- Header und das boundary Feld. Laut RFC darf dieses Feld durchaus mit Anführungszeichen (") umgeben sein.
Content-Type: multipart/form-data; boundary="123456789"
Es gibt aber einige Implementierungen die eben diesen Fakt nicht richtig interpretieren. Microsoft hat es korrekt nach RFC implementiert, aber die Gegenseite bei Google kommt damit nicht klar, dort dürfen beim Request keine Anführungszeichen im Header-Feld übermittelt werden, ansonsten gibt Google eine falsche URL zurück!!
Content-Type: multipart/form-data; boundary=123456789
Wenn man also mit .NET und HttpClient oder Invoke-Webrequest arbeiten wollte geht das auf den ersten Versuch hin deshalb nicht, deswegen die Umsetzung über einen RAW HttpWebRequest.

Grüße Uwe
Bitte warten ..
Mitglied: PeterleB
15.04.2018 um 17:57 Uhr
Also, ich bin begeistert!
Das klappt wirklich.

Könnte man das PowerShell-Fenster ganz ausblenden und dafür eine MsgBox "Suche gestartet" anzeigen?
(Vielleicht schaffe ich das sogar selbst.)

Nochmal vielen Dank.

Gruß Peter
Bitte warten ..
Mitglied: PeterleB
15.04.2018 um 18:08 Uhr
Habe noch einen anderen Key gefunden, der funktioniert:
HKEY_CLASSES_ROOT\SystemFileAssociations\image\Shell

Gruß Peter
Bitte warten ..
Mitglied: PeterleB
15.04.2018, aktualisiert um 18:22 Uhr
Dachte ich...

mit

powershell.exe -Executionpolicy Bypass -C "&'C:\Scripts\GoogleImgSearch.ps1' %1"

wird das Kontextmenü angezeigt, die PowerShell startet und schließt sich, dann passiert nichts mehr.
Als Direktaufruf hat es so schön funktioniert.

Gruß Peter
Bitte warten ..
Mitglied: colinardo
LÖSUNG 15.04.2018, aktualisiert um 18:49 Uhr
Zitat von PeterleB:
Powershell.exe -Executionpolicy Bypass -C "&'C:\Scripts\GoogleImgSearch.ps1' %1"

wird das Kontextmenü angezeigt, die PowerShell startet und schließt sich, dann passiert nichts mehr.
Als Direktaufruf hat es so schön funktioniert.
Das %1 gehört in Hochkommata, da ansonsten Leerzeichen im Pfad zu einer Parametertrennung führen!
01.
Powershell.exe -Executionpolicy Bypass -C "&'C:\Scripts\GoogleImgSearch.ps1' '%1'"
Hättest du oben mal besser hingesehen .

Könnte man das PowerShell-Fenster ganz ausblenden und dafür eine MsgBox "Suche gestartet" anzeigen?
Kann man, entweder den Parameter -Windowstyle Hidden nutzen oder das Skript via VBS starten, oder via .NET Function ausblenden, du hast viele Möglichkeiten.
(Vielleicht schaffe ich das sogar selbst.)
Oder einfach mal die Suche hier anwerfen, das hab ich hier schon bis zum Abwinken gepostet.
Ich nehm dir jetzt mal nicht den Forscherdrang weg, du schaffst das! Ist ja Sonntag.

Habe noch einen anderen Key gefunden, der funktioniert:
HKEY_CLASSES_ROOT\SystemFileAssociations\image\Shell
Oder auch einfach Verknüpfung ins Sendto legen.

p.s. Powershell-Grundlagen gehören hier nicht schon wieder hin, die sollten doch mittlerweile Standard sein. Merci!
Bitte warten ..
Mitglied: PeterleB
15.04.2018 um 19:15 Uhr
Danke, Danke, Danke

Gruß Peter


PS: Wie geht das mit der Code-Zeile?
Wenn ich hier links auf "Codeblock" drücke, sehe ich dann nur die HTML-Anweisung.
Bitte warten ..
Mitglied: colinardo
LÖSUNG 15.04.2018, aktualisiert um 19:36 Uhr
Keine Ursache.
Zitat von PeterleB:
PS: Wie geht das mit der Code-Zeile?
Wenn ich hier links auf "Codeblock" drücke, sehe ich dann nur die HTML-Anweisung.
Das ist normal wenn du deinen Text bearbeitest, kopiere deinen Quelltext zwischen die Tags und wenn du auf Vorschau klickst siehst du wie es aussieht ...
Hier nachzulesen
https://www.administrator.de/faq/20#toc-27
Bitte warten ..
Mitglied: PeterleB
16.04.2018, aktualisiert um 07:02 Uhr
Also zu Hause klappt das alles wunderbar.
Aber auf Arbeit bekomme ich einen Fehler (fast erwartet):

Ausnahme beim Aufrufen von "GetRequestStream" mit 0 Argument(en):
"Der Remoteserver hat einen Fehler zurückgegeben: (407) Proxyauthentifizierung erforderlich."
In C:\Scripts\GoogleImgSearch.ps1:28 Zeichen:5
$stream = $request.GetRequestStream()

Hab' schon ein bisschen gegoogelt, muss halt der PowerShell irgendwie den Systemproxy mit Authentifizierung übergeben.

Gruß Peter
Bitte warten ..
Mitglied: colinardo
16.04.2018, aktualisiert um 07:27 Uhr
Pillepalle, einfach dem Webrequest die Creds über ein Proxy Objekt übergeben
https://stackoverflow.com/questions/9603093/proxy-basic-authentication-i ...
Bitte warten ..
Mitglied: PeterleB
16.04.2018, aktualisiert um 07:36 Uhr
Schon was gefunden:

01.
$Wcl=New-Object System.Net.WebClient
02.
$Creds=Get-Credential
03.
$Wcl.Proxy.Credentials=$Creds
Jetzt muss ich noch User/PW übergeben,
und eine Abfrage, ob ein Proxy vorgeschaltet ist.

Gruß Peter
Bitte warten ..
Mitglied: colinardo
16.04.2018, aktualisiert um 07:35 Uhr
Nein, den Webclient kannst du nicht nehmen, der hat oben genannte Schwachstelle mit den Google Servern! Siehe Link, dem Httpwebrequest kannst du genauso ein Proxy Object mit Creds übergeben, also mach das auch.
Nicht suchen, sondern Kopf benutzen.

Btw. langsam am Thema vorbei.
Bitte warten ..
Mitglied: PeterleB
16.04.2018 um 07:43 Uhr
Ich werde das beherzigen.
Und bitte Nachsicht, bin nur Mediziner und kein studierter Informatiker.

Muss jetzt meinem Job nachgehen.

Schönen Tag
Peter
Bitte warten ..
Mitglied: colinardo
16.04.2018, aktualisiert um 12:10 Uhr
Proxy für Webrequest verwenden:
Das hier zwischen Zeile 24 und 25 einfügen:
01.
$proxy = [System.Net.WebProxy]::GetDefaultProxy()
02.
$proxy.UseDefaultCredentials = $true
03.
$request.Proxy = $proxy
Schönen Tag
Peter
Gleichfalls.
Bitte warten ..
Mitglied: Pedant
16.04.2018 um 13:22 Uhr
Hallo Peter,

Zitat von PeterleB:
Habe noch einen anderen Key gefunden, der funktioniert:
HKEY_CLASSES_ROOT\SystemFileAssociations\image\Shell

Danke, der ist besser als die von mir aufgeführten.

Gruß Frank
Bitte warten ..
Mitglied: PeterleB
16.04.2018 um 15:17 Uhr
Leider findet PS den DefaultProxy nicht.

Gruß Peter
Bitte warten ..
Mitglied: colinardo
16.04.2018, aktualisiert um 16:13 Uhr
Dann gib ihn in den Eigenschaften stattdessen einfach an. Die Intellisense ist dein Freund und zeigt dir welche Eigenschaften das Objekt hat ! Also mal ehrlich, als Mediziner weist du doch auch wo du nachschlagen musst wenn du etwas nicht weist, oder?
Bitte warten ..
Mitglied: PeterleB
16.04.2018 um 16:16 Uhr
Danke für die Hinweise.
Kann erst morgen auf der Arbeit (in einer Pause) weitermachen.
Bitte warten ..
Mitglied: PeterleB
17.04.2018 um 08:07 Uhr
Hatte heute früh noch etwas Zeit.
Das Ergebnis sieht so aus und funktioniert.

01.
    $proxyenabled = Get-ItemProperty -Path "Registry::HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
02.
    #if proxy
03.
    if($proxyenabled.ProxyEnable = 1) { 
04.
        # Standardanmeldedaten ...
05.
        ## $proxy = [System.Net.WebProxy]::GetDefaultProxy()
06.
        ## $proxy.UseDefaultCredentials = $true
07.
        # ...oder nach Anmeldedaten fragen
08.
        ## $proxy.Credentials = (Get-Credential).GetNetworkCredential()
09.
        # ...oder Anmeldedaten übergeben
10.
        $proxy = New-Object System.Net.WebProxy("http://xxx.xxx.xxx.xx:80")
11.
        $creds = New-object System.Net.NetworkCredential("user","passwort")
12.
        $proxy.Credentials = $creds
13.
        $request.Proxy = $proxy
14.
        }
15.
    #endif proxy
Jetzt muss noch das PowerShell-Fenster weg und eine Meldung, dass was passiert.

Gruß Peter
Bitte warten ..
Mitglied: colinardo
17.04.2018, aktualisiert um 10:41 Uhr
Jetzt muss noch das PowerShell-Fenster weg und eine Meldung, dass was passiert.
Hatte ich dir oben schon die passenden Hinweise dafür gegeben! Wenn du es ganz weg haben willst starte es über ein VBS Script, -WindowStyle Hidden lässt es zwar verschwinden es blitzt aber noch kurz auf. Alternativ kompilier es zu einer Exe.

Lösung über VBS, erstelle dir folgendes VBS:
01.
If MsgBox ("Datei '" & WScript.Arguments(0) & "' jetzt zu Google hochladen.", vbInformation Or vbYesNo) = vbYes Then
02.
	CreateObject("Wscript.Shell").Run("powershell -NoProfile -Executionpolicy Bypass -C ""&'C:\Pfad\script.ps1' '" & WScript.Arguments(0)& "'"""),0,False
03.
End If
passe den Pfad zum Script an. Und dann startest du das VBS folgendermaßen über die Registry:
wscript //NOLOGO "C:\pfad\script.vbs" "%1"
if($proxyenabled.ProxyEnable = 1) {
Das funktioniert nicht!! Das Gleichheitszeichen ist ein Zuweisungsoperator und kein Vergleichsoperator. Zum Vergleichen nutzt du -eq!

Grüße Uwe
Bitte warten ..
Mitglied: PeterleB
17.04.2018, aktualisiert um 11:12 Uhr
Oh, Danke.
01.
if($proxyenabled.ProxyEnable -eq 1) {
Lieber wäre mir eine MsgBox ohne Benutzereingabe, die sich bei Öffnen des Browserfensters selbst schließt.
Aber ich kann ja auch suchen...

Gruß Peter
Bitte warten ..
Mitglied: colinardo
LÖSUNG 17.04.2018, aktualisiert um 12:37 Uhr
Zitat von PeterleB:
Lieber wäre mir eine MsgBox ohne Benutzereingabe, die sich bei Öffnen des Browserfensters selbst schließt.

Auch noch Sonderwünsche ...

Powershell kann Windows-Forms oder WPF in allen Spielarten da kannst du machen was du willst:
01.
param(
02.
    [string]$file
03.
)
04.

05.
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
06.
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null
07.

08.
function Get-GoogleImageSearchResult([string][ValidateScript({Test-Path $_})]$path){
09.
    $boundary = [datetime]::now.Ticks.ToString()
10.
    $p1 = @"
11.
--$boundary
12.
Content-Disposition: form-data; name="encoded_image"; filename="$([IO.Path]::GetFileName($path))"
13.
Content-Type: image/$([System.IO.Path]::GetExtension($path).substring(1))
14.

15.

16.
"@
17.
    $p2 = @"
18.
--$boundary
19.
Content-Disposition: form-data; name="image_content"
20.

21.

22.
--$boundary--
23.

24.
"@
25.
    $bytes = [System.Text.Encoding]::ASCII.GetBytes($p1) + ([IO.File]::ReadAllBytes($path)) + [System.Text.Encoding]::ASCII.GetBytes($p2)
26.
    $request = [Net.HttpWebRequest] ([Net.HttpWebRequest]::Create('https://images.google.com/searchbyimage/upload'))
27.
    $request.Method = "POST"
28.
    $request.ContentType = "multipart/form-data; boundary=$boundary"
29.
    $request.ContentLength = $bytes.Length
30.
    $request.AllowAutoredirect = $false
31.
    $stream = $request.GetRequestStream()
32.
    $stream.Write($bytes, 0, $bytes.Length)
33.
    $stream.Close()
34.
    return [regex]::match((New-Object Io.StreamReader $request.GetResponse().GetResponseStream()).ReadToEnd(),'(?is)HREF="([^"]+)"').Groups[1].Value
35.
}
36.

37.
function ShowForm(){
38.
    $form1 = New-Object System.Windows.Forms.Form
39.
    $lblStatus = New-Object System.Windows.Forms.Label
40.
    $form1.ClientSize = [System.Drawing.Size]::new(292,62)
41.
    $form1.ControlBox = $False
42.
    $form1.StartPosition = 1
43.
    $form1.FormBorderStyle = 5
44.
    $form1.Name = "form1"
45.
    $form1.Text = "Uploading ..."
46.
    $form1.add_Shown({
47.
        $form1.Update()
48.
        $url = Get-GoogleImageSearchResult $file
49.
        if ($url){
50.
            start $url
51.
        }
52.
        $form1.Close()
53.
    })
54.

55.
    $lblStatus.Dock = 5
56.
    $lblStatus.Font = New-Object System.Drawing.Font("Arial",13,1,3,0)
57.
    $lblStatus.Location = [System.Drawing.Point]::new(0,0)
58.
    $lblStatus.Name = "lblStatus"
59.
    $lblStatus.Size = [System.Drawing.Size]::new(292,62)
60.
    $lblStatus.Visible = $true
61.
    $lblStatus.Text = "Uploading file, please wait."
62.
    $lblStatus.TextAlign = [System.Drawing.ContentAlignment]::MiddleCenter
63.
    $form1.Controls.Add($lblStatus)
64.
    $form1.ShowDialog() | out-null
65.
}
66.
ShowForm
Dein Proxycode kannst du ja selbst einfügen.

Falls euch der Beitrag gefällt, könnt ich euch auch gerne jederzeit mit einer kleinen Spende erkenntlich zeigen.
Bitte warten ..
Mitglied: PeterleB
17.04.2018 um 13:09 Uhr
Das haut mich um (Dein Fleiß und Wissen)
Danke.

Wer bekommt die Spende? (Falls euch der Beitrag gefällt, könnt ich euch auch gerne jederzeit mit einer kleinen Spende erkenntlich zeigen.)
Bitte warten ..
Mitglied: PeterleB
17.04.2018 um 16:36 Uhr
Es funktioniert wunderbar.

Habe dem Registry-Aufruf noch "-WindowStyle Hidden " hinzugefügt.
Das kurze Aufflackern der Console stört mich nicht.

Nochmals Danke
Gruß Peter
Bitte warten ..
Mitglied: Pedant
17.04.2018 um 18:30 Uhr
Hallo Peter,

Zitat von PeterleB:
Habe dem Registry-Aufruf noch "-WindowStyle Hidden " hinzugefügt.
...dann siehst Du aber auch die schicke Sonderwunsch-MsgBox-ohne-Benutzereingabe nicht.

Zitat von PeterleB:
Das kurze Aufflackern der Console stört mich nicht.
...falls doch, dann nutz colinardos vb-Skript.
Das if und die Rückfrage kannst Du ja weglassen, wenn Du beides nicht brauchst.
Es bliebe dann nur dieser Einzeiler übrig:
CreateObject("Wscript.Shell").Run("powershell -NoProfile -Executionpolicy Bypass -C ""&'C:\Pfad\script.ps1'
und für die Registy hieße es dann, wie colinardos schrieb:
wscript //NOLOGO "C:\pfad\script.vbs" "%1"
Gruß Frank
Bitte warten ..
Mitglied: PeterleB
17.04.2018, aktualisiert um 20:22 Uhr
Die MsgBox sehe ich trotzdem.
Die wscript-Sache probiere ich.
(Fehlt eine Klammer ganz hinten, nicht wahr?)

Gruß Peter.
Bitte warten ..
Mitglied: PeterleB
17.04.2018, aktualisiert um 20:42 Uhr
Habe nochmal nach der CreateObject-Zeile geschaut, weiter oben ist sie vollständig.
01.
CreateObject("Wscript.Shell").Run("powershell -NoProfile -Executionpolicy Bypass -C ""&'C:\Scripts\GoogleImgSearch.ps1' '" & WScript.Arguments(0)& "'"""),0,False
Jetzt ist die PowerShell tatsächlich weg, aber ich sehe auch keine MsgBox mehr!
Bitte warten ..
Mitglied: colinardo
17.04.2018, aktualisiert um 21:27 Uhr
Zitat von PeterleB:

Die MsgBox sehe ich trotzdem.
Das ist keine Msgbox im Powershell-Skript, das ist eine ausgewachsene Windows Form und diese wird vom WindowStyle Parameter nicht beeinflusst weil der nur die Sichtbarkeit der Konsole und nicht des ganzen Prozesses festlegt.
Im Gegensatz dazu macht das VBS den ganzen Powershell-Thread unsichtbar inkl. abhängig gestarteter Forms.

Also entweder Message im VBS zeigen oder im Powershell-Skript. Man kann aber auch per Win32 die Konsole verstecken, also das WindowStyle Hidden quasi mit eigenem Code im PS Script anstoßen aber das kannst du zu Genüge in diversen meiner Beiträge nachlesen falls es dich interessiert. .
Siehe als bsp. https://www.administrator.de/forum/powershell-logon-script-ausgabe-anzei ...

So jetzt haben wird das ganze aber bis zum Abwinken abgehandelt, das sollte eigentlich reichen für weitere eigene Experimente.

p.s. Herzlichen Dank für deine Spende .
Bitte warten ..
Mitglied: PeterleB
11.05.2018, aktualisiert um 13:28 Uhr
Lieber colinardo

Ist es zu vermessen, um den Code in C++ für Visual Studio Community 2017 zu bitten?
Ich bastle da an einer DLL fürs Kontextmenü.
Das Gerüst funktioniert schon.

Gruß Peter
Bitte warten ..
Ähnliche Inhalte
Webbrowser
Direktlink und Torrent?
Frage von M.MarzWebbrowser1 Kommentar

Hallo zusammen, was genau ist der Unterschied zwischen diesen beiden begriffen?

Windows 10

Windows 10, Senden an EMailempfänger aus dem Kontextmenu geht nicht, es passiert nichts

Frage von xtra-longWindows 101 Kommentar

Hallo. Ich habe an einem Recher das Problem, dass nichts passiert, wenn ich senden an EMailempfänger drücke passiert. Die ...

Windows Tools

Windows Datenträgerverwaltung buggy! (Windows Vista bis Windows 10)

Erfahrungsbericht von LochkartenstanzerWindows Tools

Moin, Ich habe eine Testkiste mit diversen Windows-Versionen + Ubuntu im Multiboot drauf. Gestern habe ich an den Partitionen ...

Windows 10

Windows Store, Windows 10 Deaktivieren

gelöst Frage von HanutaWindows 1011 Kommentare

Hallo Zusammen, habe einen Reg-Wert: HKEY_LOCAL_MACHINE\Software\Policies\Microsoft mit dem Schlüssel: RemoveWindowsStore DWORD-Wert (32)Bit Wert: 1 Leider wird der Windows Store ...

Neue Wissensbeiträge
Sicherheit
Have i been pwned Datensammlung lokal durchsuchen
Information von sabines vor 5 StundenSicherheit2 Kommentare

Heise beschreibt in diesem Artikel wie man seine eigenen Passwörter prüfen kann. Da viele den Weg der Onlineprüfung scheuen, ...

Windows 10

Windows 10 kann XPS erzeugen aber nicht anzeigen ????

Erfahrungsbericht von Deepsys vor 1 TagWindows 101 Kommentar

Heute schickt mir ein Kollegen eine E-Mail mit einer XPS-Datei vom Kunden im Anhang und fragt wie er diese ...

Exchange Server

1und1 IONOS: Probleme beim Mailversand mit Exchange

Information von reksierp vor 2 TagenExchange Server3 Kommentare

Hallo, seit Do, 17.1.19 etwa Mittags nimmt 1und1 IONOS keine Mails mehr über den Standard-Port SMTP 25 an. Nachdem ...

LAN, WAN, Wireless

Cisco Mikrotik VPN Standort Vernetzung mit dynamischem Routing

Anleitung von aqui vor 2 TagenLAN, WAN, Wireless

1. Allgemeine Einleitung Das nachfolgende Tutorial ist eine Fortführung der hier bei Administrator.de schon bestehenden VPN Tutorials und beschreibt ...

Heiß diskutierte Inhalte
Windows Server
Sicherung Domain Controller
gelöst Frage von Monto1Windows Server22 Kommentare

Hallo zusammen, wie sichert Ihr den Domain Controller? Selbst, wenn zwei parallel laufen, ist eine Sicherung doch mal nützlich. ...

Backup
Was spricht gegen die veeam backup free edition?
Frage von keine-ahnungBackup20 Kommentare

Moin at all, aktuell plane ich die Umstellung meiner sehr überschaubaren Umgebung (3 Büchsen, davon 1 SBS2011 physisch, ein ...

LAN, WAN, Wireless
Wo lässt sich das Gateway in der FRITZ!Box 7360 einstellen?
gelöst Frage von OssabowLAN, WAN, Wireless20 Kommentare

Hallo all, nach gründlicher Suche scheine ich der einzige zu sein der das Problem hat (macht micht schon mal ...

Windows Server
Windows User Freigaben anzeigen lassen
Frage von fritte87Windows Server18 Kommentare

Hallo zusammen, gibt es eine Möglichkeit aus User Sicht anzeigen zu lassen, welche Freigaben er alle besitzt? Wir haben ...