2015-05-15 2 views
0

Код, приведенный ниже, предназначен для установки значка по умолчанию и приложения по умолчанию для типа файла на основе того, что я смог узнать о настройках реестра. Я вижу, что изменения происходят с помощью regedit, но информация для файлов с этим расширением не меняется. Любые предложения о том, как это сделать? было найденыПочему параметр реестра DefaultIcon не работает (Python/winreg)

import os.path 
import _winreg as winreg 

G2path="Z:\\Scratch\\GSASII" 
G2icon = 'c:\\gsas2.ico,0' 
G2bat = os.path.join(G2path,'RunGSASII.bat') 

gpxkey = winreg.CreateKey(winreg.HKEY_CURRENT_USER,r'Software\CLASSES\.gpx') 
#gpxkey = winreg.CreateKey(winreg.HKEY_CLASSES_ROOT, '.gpx') 
iconkey = winreg.CreateKey(gpxkey, 'DefaultIcon') 
winreg.SetValue(iconkey, None, winreg.REG_SZ, G2icon) 
openkey = winreg.CreateKey(gpxkey, 'OpenWithList') 
g2key = winreg.CreateKey(openkey, 'GSAS-II') 
winreg.SetValue(g2key, None, winreg.REG_SZ, G2bat) 

winreg.CloseKey(iconkey) 
winreg.CloseKey(g2key) 
winreg.CloseKey(openkey) 
#winreg.CloseKey(gpxkey) 
winreg.FlushKey(gpxkey) 

ответ

0

Ключа для решения моей проблемы значка здесь: https://msdn.microsoft.com/en-us/library/windows/desktop/hh127427%28v=vs.85%29.aspx. Мне нужно:

  1. установить значение ключа я создавал и
  2. запустить обновление оболочки, чтобы увидеть изменения.

Этот код работает, чтобы получить значок, отображаемый:

import os.path 
import _winreg as winreg 

G2path="Z:\\Scratch\\GSASII" 
G2icon = 'c:\\gsas2.ico' 
G2bat = os.path.join(G2path,'RunGSASII.bat') 

gpxkey = winreg.CreateKey(winreg.HKEY_CLASSES_ROOT, '.gpx') 
winreg.SetValue(gpxkey, None, winreg.REG_SZ, 'GSAS-II project') # what was needed! 
iconkey = winreg.CreateKey(gpxkey, 'DefaultIcon') 
winreg.SetValue(iconkey, None, winreg.REG_SZ, G2icon)  
winreg.CloseKey(iconkey) 
winreg.CloseKey(gpxkey) 

# show the change 
import win32com.shell.shell, win32com.shell.shellcon 
win32com.shell.shell.SHChangeNotify(
    win32com.shell.shellcon.SHCNE_ASSOCCHANGED, 0, None, None) 

также получить приложение, связанное с расширением, мне нужно, чтобы сделать больше. Это помогло: Create registry entry to associate file extension with application in C++

Обратите внимание, что, как указано в ссылке, я использую HKEY_CURRENT_USER, так как это позволяет избежать необходимости использования admin privs.

import _winreg as winreg 

G2bat = "Z:\\Scratch\\GSASII\\RunGSASII.bat" 
G2icon = 'c:\\gsas2.ico' 
gpxkey = winreg.CreateKey(winreg.HKEY_CURRENT_USER,r'Software\CLASSES\.gpx') 
winreg.SetValue(gpxkey, None, winreg.REG_SZ, 'GSAS-II.project') 
winreg.CloseKey(gpxkey) 

gpxkey = winreg.CreateKey(winreg.HKEY_CURRENT_USER,r'Software\CLASSES\GSAS-II.project') 
winreg.SetValue(gpxkey, None, winreg.REG_SZ, 'GSAS-II project') 

iconkey = winreg.CreateKey(gpxkey, 'DefaultIcon') 
winreg.SetValue(iconkey, None, winreg.REG_SZ, G2icon) 
openkey = winreg.CreateKey(gpxkey, r'shell\open\command') 
winreg.SetValue(openkey, None, winreg.REG_SZ, G2bat+" %1") 

winreg.CloseKey(iconkey) 
winreg.CloseKey(openkey) 
winreg.CloseKey(gpxkey) 

import win32com.shell.shell, win32com.shell.shellcon 
win32com.shell.shell.SHChangeNotify(
    win32com.shell.shellcon.SHCNE_ASSOCCHANGED, 0, None, None)