大家知道怎么在 windows 环境下以管理员模式运行 python 么?

2016-07-03 02:04:22 +08:00
 dtfm
是这样,实在看不惯 WIN10 非活动窗口的惨白,就自己些写了个脚本一键修改注册表,使其和前台窗口颜色同步,但需要涉及到注册表 create 操作,需要管理员权限, Google 了半天也没找到怎么执行成功的方法。
附上代码:
import winreg
def regcolorchange():
key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"SOFTWARE\Microsoft\Windows\DWM")
#获取前台窗口的注册表颜色值
regAccentColor=winreg.QueryValueEx(key, "AccentColor")
#元组内 value 为颜色值, type 为类型
value=(regAccentColor[0])
type=(regAccentColor[1])
#赋给 AccentColorInactive ,修改后台窗口颜色
winreg.SetValueEx(key,"AccentColorInactive",0,type,value)
regcolorchange()
12634 次点击
所在节点    Python
20 条回复
fy
2016-07-03 02:40:27 +08:00
你搞个管理员权限 cmd 去执行就好了。
xupefei
2016-07-03 02:50:33 +08:00
HKCU\SOFTWARE\Microsoft\Windows\DWM 写入并不需要管理员权限。
如果 py 坚持要管理员权限,你可以直接调用 WIN32 API 。
emric
2016-07-03 02:54:15 +08:00
不能用 bat 或者 reg 吗
dtfm
2016-07-03 03:05:05 +08:00
@fy 不能啊,还是拒绝我访问啊
dtfm
2016-07-03 03:05:55 +08:00
@xupefei 不需要么?难道是我写法上有问题, winreg 这个库不是太熟,抱佛脚看的文档就上了。
dtfm
2016-07-03 03:06:42 +08:00
@emric 不会啊,习惯了用 python 写点小玩意,并没有冲动去搞 bat 啊。
emric
2016-07-03 03:38:30 +08:00
···
for /F "skip=1 tokens=1,2,*" %%i IN ('reg query "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\DWM" /v AccentColor') DO set COLOR=%%k
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa" /v AccentColorInactive /t REG_DWORD /d %COLOR% /f
···

存至 bat ,右键管理员运行
mxalbert1996
2016-07-03 03:51:30 +08:00
管理员权限的 cmd 里运行的所有程序都具有管理员权限,如果还不行那就说明不是管理员权限的问题。
xupefei
2016-07-03 05:20:40 +08:00
Document of _winreg.OpenKey(key, sub_key[, res[, sam]]):

sam is an integer that specifies an access mask that describes the desired security access for the key. Default is KEY_READ.

sam 权限不对。

改正后应该是不需要管理员权限就能用的。
BMW
2016-07-03 07:05:26 +08:00
搞开发的就不应该用 windows 吧
kindjeff
2016-07-03 10:16:36 +08:00
用管理员方式打开 cmd 然后在 cmd 里执行不行么
dtfm
2016-07-03 11:34:43 +08:00
@emric 虽然不怎么看得懂语法,但我试了下,没有效果啊,注册表没有得到修改。
ksc010
2016-07-03 11:45:03 +08:00
rem 在 win7 下右击此脚本,然后以管理员身份运行
rem 需要 把 python.exe 所在的目录加入环境变量

@echo off
if not "%1" == "uac" (
echo 申请 UAC 权限...
goto GetUAC
) else ( goto DO )

:GetUAC
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "uac", "", "runas", 1 >> "%temp%\getadmin.vbs"

"%temp%\getadmin.vbs"
exit /B

:DO
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"


python.exe %~dp0XXXXX.py
pause

XXXXX.py 是脚本名称
存储为 bat 文件
双击运行自动弹出 UAC 授权
emric
2016-07-03 12:00:02 +08:00
```
@echo off
for /F "skip=1 tokens=1,2,*" %%i IN ('reg query "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\DWM" /v AccentColor') DO set COLOR=%%k
reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\DWM" /v AccentColorInactive /t REG_DWORD /d %COLOR% /f
```
@dtfm 拿我之前的脚本改的。忘记改第二行的路径了... 这个就没问题了。
dtfm
2016-07-03 12:09:03 +08:00
@xupefei 感谢,你这个给了我思路,应该是忘了加上读写权限了,虽然_winreg 是 Python2 时代的语法了。
这一行应该是这样:
key = winreg.OpenKeyEx(winreg.HKEY_CURRENT_USER, r"SOFTWARE\Microsoft\Windows\DWM",0,winreg.KEY_ALL_ACCESS)
dtfm
2016-07-03 15:21:28 +08:00
@emric 可以这个可以,不过我也用 python 写出来了,之前是 READ 权限,不能写。
dtfm
2016-07-03 15:22:24 +08:00
@ksc010 这个是直接向系统申请权限的写法?
dtfm
2016-07-03 15:23:26 +08:00
感谢楼上的诸位,已经完全搞定,介绍放在了知乎专栏上: https://zhuanlan.zhihu.com/p/21477137
下载地址: https://1drv.ms/f/s!AplN36d0zPo8hR8x1KgzdIuyBS7t
ksc010
2016-07-03 16:43:22 +08:00
@dtfm 是 双击后通过 vbs 脚本申请 UAC 授权 同意后执行 python 脚本 不用对注册表做修改
somebody
2016-07-03 17:03:29 +08:00
对可执行文件和快捷方式,右键-属性-兼容性-以管理员权限运行
.py 文件不知道,不过你可以建一个.lnk 快捷方式调 Python

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/289902

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX