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, 715 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

Internet Explorer 11 - Google Bildersuche "Drag and Drop" geht nicht

Frage von neueradmuserWebbrowser4 Kommentare

hi, also es geht sich um einen Terminal Server 2012r2 und den Internet Explorer 11 Die User müssten die ...

Webbrowser

Direktlink und Torrent?

Frage von M.MarzWebbrowser1 Kommentar

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

Webbrowser

Windows 7 - Internet Explorer 11 - Google öffnet sich nicht

gelöst Frage von chrisaleWebbrowser23 Kommentare

Guten Morgen zusammen, ich habe ein SEHR eigenartiges Phänomen. Ich habe bei einem unserer Clients (Windows 7 Enterprise x64) ...

Entwicklung

Google Bildersuche mit Bild-Upload per Skript benutzen und URLs auslesen

gelöst Frage von Jens4everEntwicklung3 Kommentare

Moin zusammen, folgende Situation: Wie könnte man Bilder in einem Ordner nach und nach automatisiert per Sktipt zu Google ...

Neue Wissensbeiträge
Peripheriegeräte
Unterschrank für HP Drucker
Tipp von NixVerstehen vor 1 TagPeripheriegeräte2 Kommentare

Als kurzen Freitags-Tipp möchte ich gerne meinen neuen Drucker-Unterschrank Modell Amica KS 15423W vorstellen. Das Gerät eignet sich hervorragend ...

Windows 10
Windows 10 - Probleme mit Point-And-Print
Tipp von emeriks vor 2 TagenWindows 103 Kommentare

Hi, wir kämpfen z.Z. mit einigen Druckertreibern, welche unter Win10 beim Verbinden eines Druckers von Printserver mit dem Dialog ...

Windows 10

Windows 10 1803 - Ihr Roamingbenutzerprofil wurde nicht vollständig synchronisiert

Anleitung von Deepsys vor 2 TagenWindows 101 Kommentar

Bei allen Windows 10 1803 PCs traten Probleme mit den Servergespeicherten Profilen auf. Das Abmelden dauerte sehr lange und ...

Exchange Server
Exchange - Fehler mit 2018-07 Sicherheitsupdate
Tipp von ArnoNymous vor 4 TagenExchange Server7 Kommentare

Hallo, es gibt mal wieder Freude mit den MS-Updates. KB4338814 führt dazu, dass der Exchange keine Mails mehr zustellt. ...

Heiß diskutierte Inhalte
Humor (lol)
Freitagsfrage: Was tun, wenn der Admin der DAU ist?
gelöst Frage von VoiperHumor (lol)32 Kommentare

Moin Zusammen, Eine nicht ganz ernst gemeinte Frage an die Außendienstler unter uns. Zusammenfassung: Ein Inhouse Admin ruft bei ...

Windows Netzwerk
LTE Modul - Kein Internet trotz Verbindung
Frage von killtecWindows Netzwerk19 Kommentare

Hallo, ich habe hier ein Dell 7390 2-in-1 mit W10 Pro wo ich nachträglich eine LTE-Karte (Original Dell DW5811e ...

LAN, WAN, Wireless
HP Probook 470 G4 - abbrechende Downloads
Frage von joern1LAN, WAN, Wireless19 Kommentare

Folgendes Problem, für einen Tipp wäre ich dankbar: Bei WLAN-Verbindung zum Internet (nicht LAN) kommt es bei etwas größeren ...

Router & Routing
Routing Problem mit Kaskade FritzBox und pfsense zugeriff nur von der firewall auf die clients und 0.0.0.0
Frage von ukl1967Router & Routing18 Kommentare

Hallo, ich habe ein an sich triviales Problem elches ich allerdings nicht gelöst bekomme. NAS 10.5.10.53 Mein Netz baut ...