2017-03-05 30 views
1

我想在Windows 7的Run鍵下創建一個新的值。我正在使用Python 3.5,並且在寫入密鑰時遇到了問題。我目前的代碼是在我試圖修改其值的密鑰下創建一個新密鑰。在註冊表中創建新值使用Python運行鍵?

from winreg import * 

aKey = OpenKey(HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Run", 0, KEY_ALL_ACCESS) 

SetValue(aKey, 'NameOfNewValue', REG_SZ, '%windir%\system32\calc.exe') 

當我運行它,它使運行並將其命名爲「NameOfNewKey」下一個鍵,然後設置默認值到的calc.exe路徑。但是,我想向Run鍵添加一個新值,以便在啓動時運行calc.exe。

編輯:我找到了答案。它應該是SetValueEx函數而不是SetValue。

+0

你試過手動首先添加它,確保它的工作原理?然後嘗試將其轉換爲代碼? –

+0

上面這個不是按預期工作的。即使我在Run鍵下添加一個值,它也只是在Run鍵下創建一個新鍵,而不是在Run鍵下創建一個值。編輯 - 找到答案,放入OP。 – sqlsqlsql

+0

你可以把你的完整的代碼片段,以確保任何人在未來來到這裏有一個工作代碼示例看?謝謝 –

回答

0

這是一個可以設置/刪除運行鍵的功能。

代碼:

def set_run_key(key, value): 
    """ 
    Set/Remove Run Key in windows registry. 

    :param key: Run Key Name 
    :param value: Program to Run 
    :return: None 
    """ 
    # This is for the system run variable 
    reg_key = winreg.OpenKey(
     winreg.HKEY_CURRENT_USER, 
     r'Software\Microsoft\Windows\CurrentVersion\Run', 
     0, winreg.KEY_SET_VALUE) 

    with reg_key: 
     if value is None: 
      winreg.DeleteValue(reg_key, key) 
     else: 
      if '%' in value: 
       var_type = winreg.REG_EXPAND_SZ 
      else: 
       var_type = winreg.REG_SZ 
      winreg.SetValueEx(reg_key, key, 0, var_type, value) 

設置:

set_run_key('NameOfNewValue', '%windir%\system32\calc.exe') 

要刪除:

set_run_key('NameOfNewValue', None) 

要導入win32庫:

try: 
    import _winreg as winreg 
except ImportError: 
    # this has been renamed in python 3 
    import winreg