2016-08-08 13 views
1

Bitte Bild einer solchen Situation: Eine lokale Datei-Symbol wird in einer GUI angezeigt, klicken Sie mit der rechten Maustaste auf das Symbol, ein Kontextmenü erscheint, mit der Option: Datei im Explorer anzeigen. Klicken Sie auf die Option, dann wird ein Explorer-Fenster mit der ausgewählten Datei geöffnet. Viele Redakteure haben ein solches Feature: In Ordner anzeigen oder Show im ExplorerPython öffnen Windows Explorer

In der Tat ist die GUI von PyQt gebaut, mein erster Gedanke ist einfach, nur einen Teilprozess öffnen und die Befehlszeile übergeben:

explorer /select, a_full_path_name

Das Verhalten ist in der Tat, was ich brauche, aber wenn Sie wieder auf "Show in Ordner" klicken, wird ein neues Explorer-Fenster geöffnet, sogar das alte wird angezeigt! Wie wäre es mit einem ungezogenen Jungen, der Dutzende Male in einem Atemzug auf "Show in Folder" klickt? Also brauche ich nur ein Fenster, wenn ein altes existiert, hebe es einfach nach vorne.

Der Befehl start /D a_path . kann die ungezogenen Jungs enttäuschen (führen Sie es mehrmals, nur ein Fenster.) Jedoch gibt es keine Option, um eine ausgewählte Datei, damit auch enttäuscht mich zu markieren ...

Wie oben erwähnt, viele Editoren haben solch eine "Show im Ordner" -Funktion, , aber zu meiner Überraschung, PyCharm "Show in Explorer" öffnet mehrere Fenster mit mehreren Klicks auf die gleiche Datei, und auch die CodeBlocks "Öffnen mit Ordner", jedoch Programmierer Notizblock "Öffnen mit Ordner" wird immer nur einen Ordner in der gleichen Datei öffnen. (Um h onest, ich habe nur die drei Redakteure in meinem PC außer dem Windows Notepad :)


Meine Frage:
Kann die Funktion oben erwähnt nur durch Fenster cmd erreicht werden?
Wenn nicht, Gibt es einen Python-Weg, um das zu erreichen?

In der Tat habe ich mehrere verwandte Fragen in stackoverflow, for example, gefunden, aber mein Problem ist ungelöst, würde jemand mir eine Fahrt geben?

Antwort

1

Endlich führte mich ein netter Kerl zur Antwort.
Es ist von https://github.com/exaile/exaile/blob/master/xl/common.py#L350

in py3 +

import ctypes 

ctypes.windll.ole32.CoInitialize(None) 
upath = r"C:\Windows" 
pidl = ctypes.windll.shell32.ILCreateFromPathW(upath) 
ctypes.windll.shell32.SHOpenFolderAndSelectItems(pidl, 0, None, 0) 
ctypes.windll.shell32.ILFree(pidl) 
ctypes.windll.ole32.CoUninitialize() 

in py2 +

Nur eine Unicode-Pfad geben.
Hinweis: ILCreateFromPathW (Unicode) und ILCreateFromPathA (ANSI)

Verwandte Themen