2014-11-06 2 views
2

Как this SU answer ноты, чтобы изменить на значок папки, необходимо изменить атрибут к папке только для чтения или системы, и есть его desktop.ini содержать что-то вродеКак настроить значок папки через Python?

[.ShellClassInfo] 
IconResource=somePath.dll,0 

Хотя было бы просто использовать win32api.SetFileAttributes(dirpath, win32con.FILE_ATTRIBUTE_READONLY) и создайте desktop.ini с нуля, я бы хотел сохранить другие настройки, существующие в потенциально существующем desktop.ini. Но должен ли я использовать ConfigParser для этого или, например, win32api (или, может быть, ctypes.win32) предоставляют собственные средства для этого?

+0

(единственная связанная с настройкой функция, которую я нашел до сих пор, - [SHSetLocalizedName] (http://msdn.microsoft.com/en-us/library/windows/desktop/bb762250%28v=vs.85%29.aspx)) –

+0

Привет, поскольку эта ветка не так уж и старая, я позволю себе спросить вас, нашли ли вы ответ. В настоящее время я сталкиваюсь с той же проблемой. – DrHaze

+0

@DrHaze, к сожалению, я застрял с desktop.ini с нуля до сих пор ... может быть, небольшая щедрость по этому вопросу помогает мотивировать кого-то сообщать о своих результатах. –

ответ

1

Хорошо, поэтому от this thread мне удалось получить что-то работающее. Надеюсь, это вам поможет.

Вот моя база desktop.ini файл:

[.ShellClassInfo] 
IconResource=somePath.dll,0 

[Fruits] 
Apple = Blue 
Strawberry = Pink 

[Vegies] 
Potatoe = Green 
Carrot = Orange 

[RandomClassInfo] 
foo = somePath.ddsll,0 

Вот скрипт я использую:

from ConfigParser import RawConfigParser 

dict = {"Fruits":{"Apple":"Green", "Strawberry":"Red"},"Vegies":{"Carrot":"Orange"} } 
# Get a config object 
config = RawConfigParser() 
# Read the file 'desktop.ini' 
config.read(r'C:\Path\To\desktop.ini') 

for section in dict.keys(): 
    for option in dict[section]: 
     try: 
      # Read the value from section 'Fruit', option 'Apple' 
      currentVal = config.get(section, option) 
      print "Current value of " + section + " - " + option + ": " + currentVal 
      # If the value is not the right one 
      if currentVal != dict[section][option]: 
       print "Replacing value of " + section + " - " + option + ": " + dict[section][option] 
       # Then we set the value to 'Llama' 
       config.set(section, option, dict[section][option]) 
     except: 
      print "Could not find " + section + " - " + option 

# Rewrite the configuration to the .ini file 
with open(r'C:\Path\To\desktop.ini', 'w') as myconfig: 
    config.write(myconfig) 

Здесь выходной файл desktop.ini:

[.ShellClassInfo] 
iconresource = somePath.dll,0 

[Fruits] 
apple = Green 
strawberry = Red 

[Vegies] 
potatoe = Green 
carrot = Orange 

[RandomClassInfo] 
foo = somePath.ddsll,0 

Единственная проблема, с которой я сталкиваюсь, заключается в том, что опции теряют свою первую букву в верхнем регистре.

+0

Просто протестировано, и случай-потеря не влияет на поведение iconresource. – DrHaze

+0

Я думаю, что проблема в том, что я пробовал это на сетевом ресурсе, но поскольку моя настройка изменилась между тем, я не могу воспроизвести ошибку –

+1

, нижняя регистр может быть исправлена ​​['config.optionxform = str'] (https: // stackoverflow .com/а/1611877/321973) –

Смежные вопросы