今天闲得蛋疼清理了一下右键菜单,于是在之后某时刻使用Everything的“双击路径列打开目录”功能时发现异常:
[Window Title]
Everything.exe
[Content]
该文件没有与之关联的应用来执行该操作。请安装应用,若已经安装应用,请在“默认应用设置”页面中创建关联。
[确定]
接下来的自救过程实在曲折,中间查到Everything是调用Windows API SHOpenFolderAndSelectItems 失败导致弹这个错误(Automatically open folder again with "Open path with double click")。
我甚至还在网上找了一份可以调用这个API的代码,运行这份测试代码时出现了几乎完全一样的错误窗口。
#!python3
# https://stackoverflow.com/questions/20565401/how-to-access-shopenfolderandselectitems-by-ctypes
import win32api
from win32com.shell import shell, shellcon
import os
def launch_file_explorer(path, files):
'''
Given a absolute base path and names of its children (no path), open
up one File Explorer window with all the child files selected
'''
folder_pidl = shell.SHILCreateFromPath(path,0)[0]
desktop = shell.SHGetDesktopFolder()
shell_folder = desktop.BindToObject(folder_pidl, None,shell.IID_IShellFolder)
name_to_item_mapping = dict([(desktop.GetDisplayNameOf(item, shellcon.SHGDN_FORPARSING|shellcon.SHGDN_INFOLDER), item) for item in shell_folder])
print("name_to_item_mapping: {0}".format(name_to_item_mapping))
to_show = []
for file in files:
if file in name_to_item_mapping:
to_show.append(name_to_item_mapping[file])
else:
raise Exception('File: "%s" not found in "%s"' % (file, path))
print("to_show: {0}".format(to_show))
print("call SHOpenFolderAndSelectItems()")
result = shell.SHOpenFolderAndSelectItems(folder_pidl, to_show, 0)
last_error = win32api.GetLastError()
print("SHOpenFolderAndSelectItems returned {0}".format(result))
p=r'Z:\SHARE'
print(os.listdir(p))
launch_file_explorer(p, os.listdir(p))
此时其实离最终答案已经不远了,可我却没有及时发现,折腾到后期甚至怀疑并不是注册表引起的问题,毕竟早已经尝试过把右键菜单还原回去了。
直至尝试系统还原并且失败后,五味杂陈地一边看着这个窗口一边备份文件时才忽然灵光乍现!
既然可能是操作注册表导致的故障,那么找一份OK的注册表来对比或许还有救。
于是从另一台正常的Windows 10 PC里导出 HKEY_CLASSES_ROOT\Folder ,跟这里故障机导出的文件对比:
把天杀的 none 删除后故障成功排除!
此时回想起出问题的API SHOpenFolderAndSelectItems 名字里带着 Folder ,真是蓝瘦……
Win10该文件没有与之关联的应用来执行该操作...请在";默认应用设置";页面中创建关联
问题发现:一直使用的一款软件--火柴,这两天忽然发现通过ctrl + 回车快捷键无法进入到文件所在的目录中(之前几天印象中还可以使用该功能).后来测试又发现无法打开网易云音乐中下载的音乐而进入到该音乐 ...
使用Js脚本 修改控制IE的注册表相关设置(activex等)
使用Js脚本 修改控制IE的注册表相关设置(activex等) 分类: PHP2012-12-05 18:51 2035人阅读 评论(2) 收藏 举报 脚本写法:
一,定义和用法
标签在 HTML 页面中创建一条水平线. 水平分隔线(horizontal rule)可以在视觉上将文档分隔成各个部分. 二,HTML 与 XHTML 之间的 ...
jsp页面中创建方法
在JSP页面中是用 <%! void function(){ } %> 这种方式可以定义函数. 如果只使用 <% //todo %> 代码块中的代码在编译时将会都被加到 sev ...
[Xcode 实际操作]九、实用进阶-(28)在iTunes Connect(苹果商店的管理后台)中创建一个新的新的APP
目录:[Swift]Xcode实际操作 本文将演示如何在iTunes Connect(苹果商店的管理后台)中创建一个新的新的APP. 首先要做的是打开浏览器,并进入[iTunesConnect网站], ...
通过开发MSBuild ,引发的注册表相关知识
最近在做一个小项目,目的就是只需要点一个按钮,就把web程序发布到指定的服务器中.基本步骤就是 编译——>打包->复制包到远程服务器->解压缩.我想重点说一下解压缩,我们可以用win ...
安装Mysql的一些问题,比如Net Connect 卸载不掉,注册表相关操作
我安装mysql用了一段时间后卸载了,在安装就发现安装不了了,原因就是卸载的时候Net Connetc无法卸载,我试了一个月也没有解决后来百度各种还是没有办法解决.于是就尝试自己手动卸载注册表.在“开 ...
随机推荐
WinXP/Win7/Win8本地用户配置文件迁移至域用户
一.概述 最近在进行加域的工作,PC大部分是Win7,使用过微软USMT 4.0和5.0工具进行迁移,但命令行报错,目前还没找到好的文章研究. 本文迁移方法很特殊,利用的是Windows默认配置文件. ...
(转)C# foreach 中获取索引index的方法
在C# 开发中往往使用foreach 循环语句 来代替for循环语句.foreach 比 for 更加简洁高效. foreach : foreach ...
Java提高篇(三四)-----fail-fast机制
在JDK的Collection中我们时常会看到类似于这样的话: 例如,ArrayList: 注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证.快速失 ...
enbale blakboxing
chrome://flags/#enable-devtools-experiments
第4章 类型基础 -- 4.1 所有类型都从System.Object派生
4.1 所有类型都从System.Object派生 “运行时”要求每个类型最终都从System.Object类型派生. 由于所有类型最终都从System.Object派生,所以每个类型的每个对象都保证 ...
java:字符串的“+”运算
今天在一篇博客里,意外的看到了一段关于java中对字符串的“+”运算的处理(博客原文:http://blog.csdn.net/yirentianran/article/details/2871417 ...
Python爬虫入门:URLError异常处理
大家好,本节在这里主要说的是URLError还有HTTPError,以及对它们的一些处理. 1.URLError 首先解释下URLError可能产生的原因: 网络无连接,即本机无法上网 连接不到特定的 ...
Game Engine Architecture 5
[Game Engine Architecture 5] 1.Memory Ordering Semantics These mysterious and vexing problems can on ...
python迭代器的说明
data = [randint(0,20) for _ in xrange(30)]表示30个随机生成的0-20随机数其中for _ in xrange(30)表示循环30次. from random ...
转载 Python中关键字global与nonlocal的区别
转载自CSDN 雁丘1990, 原文地址: https://blog.csdn.net/xcyansun/article/details/79672634 这篇文章写的很赞, 条理清晰, 分析循序渐进 ...