2017-03-05 7 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が実行されるようにしたい。

編集:私は答えを見つけました。 SetValueではなくSetValueEx関数である必要があります。

+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 LIBSインポートするには:

try: 
    import _winreg as winreg 
except ImportError: 
    # this has been renamed in python 3 
    import winreg 
関連する問題