关于python获取当前用户名下的桌面或者document文件夹的方法

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders

注册表

其实思想就是,通过注册表去获取。当前用户的desktop的注册表位置

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders

import win32api,win32con   
def get_desktop():
        key = win32api.RegOpenKey(win32con.HKEY_CURRENT_USER,\
                              r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders',\
                              0,win32con.KEY_READ)
        print win32api.RegQueryValueEx(key,'Personal')[0]
        return win32api.RegQueryValueEx(key,'Desktop')[0]

1.打开注册表
对注册表进行操作前,必须打开注册表。在Python中,可以使用以下两个函数:RegOpenKey和RegOpenKeyEx。其函数原型分别如下所示。

RegOpenKey(key, subKey , reserved , sam)  
RegOpenKeyEx(key, subKey , reserved , sam)  

两个函数的参数一样。参数含义如下。

key:必须为表10-1中列出的项。
subKey:要打开的子项。
reserved:必须为0。
sam:对打开的子项进行的操作,包括win32con.KEY_ALL_ACCESS、win32con.KEY_READ、win32con. KEY_WRITE等。

2.关闭注册表
打开的注册表,在操作完成后,需要关闭。在Python中使用RegCloseKey函数关闭打开的注册表项。其函数原型如下所示。
RegCloseKey(key)
其参数只有一个,其含义如下。

key:已经打开的注册表项。

以下实例关闭一个已经打开的注册表项。

win32api.RegCloseKey(key)  
print key  

3.读取项值
在打开注册表项以后,可以使用RegQueryValue函数读取项的默认值。如果要读取某一项值,可以使用RegQueryValueEx函数。其函数原型分别如下所示。

RegQueryValue(key, subKey )  
RegQueryValueEx(key, valueName )  

对于RegQueryValue,其参数含义如下。

key:已打开的注册表项的句柄。
subKey:要操作的子项。

对于RegQueryValueEx,其参数含义如下。

key:已经打开的注册表项的句柄。
valueName:要读取的项值名称。

def get_currentuser_documents():
    # 打开“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer”项  
    key = win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE,  
    'SOFTWARE\\Microsoft\\Internet Explorer',0, win32con.KEY_ALL_ACCESS)  
    print win32api.RegQueryValue(key, '') # 读取项的默认值  
    #读取项值名称为Version的项值数据,也就是Internet Explorer的版本  
    print win32api.RegQueryValueEx(key,'Version')

4.设置项值
要修改或者重新设置注册表某一项的项值可以使用RegSetValueEx函数,如果要设置项的默认值可以使用RegSetValue函数。需要说明的是,对于RegSetValueEx,如果要设置的项值不存在,那么RegSetValueEx会添加该项值,如果存在,则修改该项值。其函数原型分别如下所示。

RegSetValueEx(key, valueName, reserved, type, value)  
RegSetValue(key, subKey, type, value)  

对于RegSetValueEx,其参数含义如下。

key:要设置的项的句柄。
valueName:要设置的项值名称。
reserved:保留,可以设为0。
type:项值的类型。
value:所要设置的值。

对于RegSetValue,其参数的含义如下。

key:已经打开的项的句柄。
subKey:所要设置的子项。
type:项值的类型,必须为win32con.REG_SZ。
value:项值数据,为字符串。

以下的实例实现修改“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer”的默认值,以及其“Version”项值数据。

# 将“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer”  
的默认值设为python  
win32api.RegSetValue(key,'',win32con.REG_SZ,'python')  
# 将其“Version”设置为7.0.2900.2180  
win32api.RegSetValueEx(key,'Version',0,win32con.REG_SZ,'7.0.2900.2180')  

5.添加、删除项
要向注册表中添加项可以使用RegCreateKey函数。RegDeleteKey函数可以删除注册表中的项。其参数原型分别如下所示。

RegCreateKey(key, subKey )  
RegDeleteKey (key, subKey )  

其参数含义相同,参数含义分别如下。

key:已经打开的注册表项的句柄。
subKey:所要操作(添加或删除)的子项。

以下的实例实现对“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer”项的添加、删除子项操作。

# 向“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer”添加子项“Python”  
win32api.RegCreateKey(key,'Python')  
  # 新创建的子项的句柄  
# 删除刚才创建的子项“Python”  
win32api.RegDeleteKey(key,'Python')  

总体的代码

def get_currentuser_documents():
    # 打开“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer”项  
    key = win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE,  
    'SOFTWARE\\Microsoft\\Internet Explorer',0, win32con.KEY_ALL_ACCESS)  
    print key
    print win32api.RegQueryValue(key, '') # 读取项的默认值  
    #读取项值名称为Version的项值数据,也就是Internet Explorer的版本  
    print win32api.RegQueryValueEx(key,'Version')    

    print win32api.RegQueryInfoKey(key)  # RegQueryInfoKey函数查询项的基本信息
    #win32api.RegCreateKey(key,'Pythonqw')  #HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Pythonqw
    # win32api.RegSetValue(key,'',win32con.REG_SZ,'pythonqw')
    # # 将其“Version”设置为7.0.2900.2180  
    # win32api.RegSetValueEx(key,'Version',0,win32con.REG_SZ,'7.0.2900.2180')
    # win32api.RegDeleteKey(key,'Pythonqw')  

ps获取当前操作系统用户名的方法-windows与linux均可行

import getpass
getpass.getuser()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容

  • 今年开始做C++服务器开发了,所以来记录下自己用到的东西。分析Core Dump文件一般好像都是用windbg、d...
    那些云阅读 27,415评论 2 7
  • Windows用户文件夹中存放着许多诡异而重要的文件和配置等,许多文件的路径也与其用户文件的命名有关。因此,如果将...
    机灵鬼机灵阅读 2,818评论 0 0
  • 1. 中断命令执行 Ctrl + Z 2. 文件/目录 cd 切换目录 例:cd // 显示当前目录 例:...
    皓皓amous阅读 644评论 0 0
  • 0 操作成功完成。1 功能错误。2 系统找不到指定的文件。3 系统找不到指定的路径。4 系统无法打开文件...
    ccq_inori阅读 2,803评论 0 0
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,476评论 16 22