我已经测试了一个引用代码项目article的小型shell扩展。虽然整个过程非常复杂,但我知道下面的方法是什么以及它们做了什么。:
Initialize,DragQueryFile,GetCommandString,InvokeCommand,QueryContextMenu
但在阅读完之后,我无法理解我们的ContextMenu扩展如何与.txt文件相关联。
文章解释了我们是否会查看.rgs文件,我们可以看到它创建了一个这样的注册表项:
HKCR
{
NoRemove txtfile
{
NoRemove ShellEx
{
NoRemove ContextMenuHandlers
{
ForceRemove SimpleShlExt = s '{5E2121EE-0300-11D4-8D3B-444553540000}'
}
}
}
}
但实际上,在关注文章并编写代码之后,当我打开SimpleShlExt.rgs
它看起来像这样:
- 在CodeProject中编辑 -
HKCR
{
NoRemove CLSID
{
ForceRemove {1E569362-E0A6-4DEA-AB1F-67D6D3DEF1A5} = s 'SimpleShExt Class'
{
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Apartment'
}
}
}
}
注册表是否动态创建了CLSID和txtfile reg条目之间的任何映射。
如果是这种情况,如果我想修改任何其他文件的行为,例如对于mp3文件或驱动器本身,我希望我的上下文菜单弹出或显示,那么如何去做。因为我不知道CLSID。
答案 0 :(得分:1)
一种可能性是为您要支持的所有文件扩展名注册上下文菜单。另一种可能性是在通配符/ *类中注册您的扩展。然后它将针对所有文件进行实例化。然后,您可以决定是否应该为此文件显示上下文菜单。这可以通过使用IShellExtInit :: Initialize。
的IDataObject参数来完成答案 1 :(得分:0)
您必须手动将txt文件扩展名注册的部分添加到您的rgs文件中。 Visual Studio仅添加部件以注册shell扩展。
答案 2 :(得分:0)
假设您的 lib 的 for x, row in df.iterrows():
zip_text = row['zip_cd']
street_text = row['street_addr']
test_wtf1 = len(re.findall('\d{5}$', street_text) )
test_wtf3 = re.search('\d{5}$', street_text) #alternative that works with None
test_zip = ((zip_text == 'nan') | (zip_text == '') )
test_addr = (test_wtf1 != 0)
df.at[x, 'zip_cd'] = np.where(
(test_zip and test_addr),
str(street_text[-5:]1),
str(zip_text)
)
df.at[x, 'street_addr'] = np.where(
test_addr,
str(street_text[:len(street_text)-5]),
str(street_text)
)
zip_text1 = df.at[x, 'zip_cd']
street_text1 = df.at[x, 'street_addr']
if test_zip or test_addr:
do_nothing_last = "" #breakpoint for testing specific situations
return df
是 uuid
,然后使用以下内容将您的 shell 扩展名与 5E2121EE-0300-11D4-8D3B-444553540000
和 *.txt
文件相关联。为每个新扩展添加另一个块:
*.tab