原文 https://docs.substance3d.com/spdoc/editing-the-shelf-preferences-with-python-172824763.html
以下は、シェルフのパスを操作するためにWindowsレジストリを変更するPythonスクリプトの例です。
シェルフパスの追加
WindowsレジストリにSubstance Paintのシェルフパスを追加するには、既に存在するシェルフパスを確認して、新しいシェルフパスを追加する必要があります。以下のコードは、既に定義されているパスの現在の数を確認した上で、Windowsレジストリに新しいシェルフパスを追加します。
import winreg RegistryKeyName = "Software\\Allegorithmic\\Substance Painter\\Shelf\\pathInfos" ShelfName = "myshelf" #Needs to be lowercase ShelfPath = "C:/Temp" ShelfStatus = "false" #false = not disabled try: RegConnection = winreg.ConnectRegistry( None, winreg.HKEY_CURRENT_USER ) #Open registry key Key = winreg.OpenKey( RegConnection, RegistryKeyName, winreg.KEY_READ ) SubKeyCount = winreg.QueryInfoKey( Key )[0] #Iterate over each sub-key to find the biggest Shelf number ShelfNumber = 0 for x in range(SubKeyCount) : SubKeyName = winreg.EnumKey(Key, x) if int(SubKeyName) > ShelfNumber : ShelfNumber = int(SubKeyName) #Create the new Key and add its values ShelfNumber += 1 NewKey = winreg.CreateKey( Key, str( ShelfNumber ) ) winreg.SetValueEx( NewKey, "disabled", 0, winreg.REG_SZ, ShelfStatus) winreg.SetValueEx( NewKey, "name", 0, winreg.REG_SZ, ShelfName) winreg.SetValueEx( NewKey, "path", 0, winreg.REG_SZ, ShelfPath) #Finish NewKey.Close() Key.Close() except Exception as e : print( e )
シェルフパスを追加した後、"pathInfos "レジストリキー内の "size "値もインクリメントしてください。
シェルフパスの無効化と有効化
Substance Painterで作成されたシェルフのパスは削除することができますが、無効にすることもできます。これは、Substance Painterに同梱されているデフォルトのシェルフを無効にすることしかできません。以下のコードは、Windowsレジストリを解析し、デフォルトのシェルフ(「allegorithmic」という名前)を無効にします。
import winreg RegistryKeyName = "Software\\Allegorithmic\\Substance Painter\\Shelf\\pathInfos" try: RegConnection = winreg.ConnectRegistry( None, winreg.HKEY_CURRENT_USER ) #Open registry key Key = winreg.OpenKey( RegConnection, RegistryKeyName, winreg.KEY_READ ) SubKeyCount = winreg.QueryInfoKey( Key )[0] #Iterate over each sub-key for x in range(SubKeyCount) : SubKeyName = winreg.EnumKey(Key, x) SubKey = winreg.OpenKey( RegConnection, RegistryKeyName + "\\" + SubKeyName, winreg.KEY_READ ) SubKeyValueCount = winreg.QueryInfoKey( SubKey )[1] #Read subkey values Values = [] for i in range( SubKeyValueCount ) : Values.append( winreg.EnumValue( SubKey, i ) ) #Note : Values is a table of tuples FoundKey = False for Value in Values : if Value[0] == "name" : if Value[1] == "allegorithmic" : FoundKey = True SubKey.Close() #Found the path ? Then we edit the Key if FoundKey : print( " - Editing Windows Registry" ) #Re-Open key in edition mode SubKey = winreg.OpenKey( winreg.HKEY_CURRENT_USER, RegistryKeyName + "\\" + SubKeyName, 0, winreg.KEY_SET_VALUE ) #Assign new value winreg.SetValueEx(SubKey, "disabled", 0, 1, "true" ) #use "false" to Enable that shelf path SubKey.Close() #Finish Key.Close() except Exception as e : print( e )