问题标签 [ipropertystorage]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 如何删除 IPropertyStorage 自动添加的 LOCALE 属性?
根据IPropertyStorage::WriteMultiple 方法的备注部分...
创建新属性集时,特殊代码页(属性 ID 1)和区域设置 ID(属性 ID 0x80000000)属性会自动写入属性集。
但是,我希望我的 PropertySet 省略 LOCALE ID。我努力了
但这失败了
0x80030057 无效参数错误
如何省略这个不需要的属性 ID?我试过IPropertyStorage::Commit()
前后做一个。但是调用时也会产生同样的错误DeleteMultiple()
。
注意:我尝试过使用和不使用 specs[0].lpwstr = 0; 但这很愚蠢,因为它是与 propid 的“联合”,所以写它们都改变了第一个。但是仅设置 propid = PID_LOCALE 时仍然失败。
windows-shell - windows IPropertyStore 处理程序扩展不返回属性值
我正在尝试为我们的产品创建的文件类型编写属性处理程序,我大部分时间都在那里,但处理程序无法通过 IPropertyStore::GetValue 返回任何数据。
我可以通过跟踪/调试看到正在调用 Initialise 方法并用值填充存储。
但是我可以看到,尽管在商店中找到了密钥,但每当调用 GetValue 时,变体中都没有数据!如果那时我做类似的事情:
进入 outval 然后一切正常,BLANK 将出现在 InfoTip 上。
奇怪的是,如果我编写一个使用 SHGetPropertyStoreFromParsingName 的测试应用程序并要求我得到正确的数据的属性。
真的有点难过,有人吗?
TIA
winapi - PROPERTYKEY::pid 含义
有人可以解释结构中的pid
字段是什么吗?PROPERTYKEY
微软说不要使用0
or1
你很好,但是当我需要IPropertyStore
在我的代码中实现时这并没有帮助。是否pid
应该是键的一部分,所以可能存在多个相同fmtid
但不同的值?pid
还是应该忽略它,所以GetValue
应该返回任何匹配的值fmtid
,忽略pid
?
winapi - IPropertyStore_Commit 方法 - 是否需要,为什么不实施?
我正在尝试更改 IPropertyStore 中标志的值。但是,无论标志的值如何,我的代码的行为似乎都是相同的。
IPropertyStore_Commit
这是因为我的代码在更改标志后 没有调用吗?
我确实尝试调用该方法,但是我得到了一个错误代码0x80004001
,意思是“未实现”。因此,我的问题的第二部分:为什么不实施?
更详细地说,我正在开发一个 Java 软电话,它使用 WASAPI(通过 JNI)进行一些音频处理。本机代码是用 C 编写的。
最近启用了 AES(声学回声抑制),我发现 AGC(自动增益控制)也启用了。我试图通过在 IPropertyStore 对象上设置 MFPKEY_WMAAECMA_FEATR_AGC 键来禁用 AGC。但是,无论我将值设置为什么都没有区别。
相关代码片段如下:
winapi - SetValue 和 Release 不是函数
总结:我搜索了 MSDN 并想创建自己的SetValue
,但我找不到任何源代码。它不在DLL中,就像InitPropVariantFromString
在头文件中,但我找不到。:(如果可以的话,请给我看htat C++代码,我会从那里拿走它:)
底部的东西是为了展示我付出的努力。
这是我正在转换的微小 C++ 代码:
我已将其翻译为:
这IPropertyStore_SetValue
是我从这个 C++ 转换而来的:
我得到了它:
所以这需要我写InitPropVariantFromString
我所做的:
我的 SHSTRDUP 困境中的一个小问题(不是一个问题,只是表明我努力工作,并且通过无法解释的怪异让它发挥作用)
所以这需要我做
SHStrDup
我认为需要两个参数的,ctypes.jschar.ptr
因为它是的第一个参数LPCTSTR
和第二个参数LPTSTR
。对于第一个论点,我通过了召回的 PCWSTR
ctypes.jschar.array()('Contoso.Scratch')
。因此,当我将第一个 arg 定义设置为ctypes.jschar.ptr
它不起作用时,它会引发此错误:expected type pointer, got ctypes.jschar.array(16).ptr(ctypes.UInt64("0x2855b560"))
因此,我将定义从定义更改
ctypes.jschar.ptr
为 定义,ctypes.voidptr_t
因此它适用于该参数,但随后在第二个参数上抛出错误,请回忆propvarPtr.contents.pwszVal.address()
:
ctypes.jschar.ptr.ptr(ctypes.UInt64("0x20fdb3b4"))
,因此,我最终设置了
SHStrDup
to 的两个参数ctypes.voidptr_t
并且它起作用了。不知道为什么,但它奏效了。并且propvarPtr.contents.pwszVal
肯定会被填充,因为当我 console.log 它显示:"propvarPtr.contents.pwszVal" CData { contents: "C" }
.所以最终的
SHStrDup
定义是这样的:
所以现在一切都过去了,IPropertyStore_SetValue
如果:
现在rez
是真的,所以它现在会尝试pps.SetValue
,这就是它失败的地方,我不知道如何解决它。:(
我搜索了 MSDN 并想创建自己的SetValue
,但我找不到任何源代码。它不在DLL中,就像InitPropVariantFromString
在头文件中,但我找不到。:(如果可以的话,请给我看htat C++代码,我会从那里拿走它:)
winapi - IPropertyStory 在不提交的情况下执行 SetValue
我正在关注此博客以编写相同的代码来更改System.AppUserModel.ID
窗口:The Old New Thing :: 如何防止用户将我的程序固定到任务栏?
他在做:
他不做pps->Commit()
,我很困惑,因为我已经写了代码,我做了SetValue
,我做了,Commit
但我的改变不会。
他怎么不做Commit
?他弄错了吗?还是他是您不需要的特殊情况Commit
?
谢谢
winapi - SHGetPropertyStoreForWindow - 如何在现有 System.AppUserModel.ID 上设置属性
IPropertyStore
所以我通过这样的方式将我的窗口从主选项卡组中拆分出来SHGetPropertyStoreForWindow
:
然后用户后来决定他想重命名它,所以他使用我的功能:
这是第一次成功。但是,如果他想只更改一次RelaunchCommand
,RelaunchDisplayNameResource
除非我也更改一次,否则它将无法正常工作ID
。
我在这里举了一个例子RelaunchCommand
,RelaunchDisplayNameResource
在我的真实案例中,用户也想更改图标,但同样的问题,它是第一次工作ID
。无论如何要运行多次而不必ID
每次都更改?
谢谢
PS:这个解决方案的另一个重要原因是我的一个窗口已经有一个System.AppUserModel.ID
并且已经固定了。我只想更改图标/重新启动命令/等,如果我更改,System.AppUserModel.ID
那么它将有效地取消固定它。:(
winapi - 通过 IPropertyStore 多次使用 IPersistFile::Load
我正在遍历一堆.lnk
文件并获取有关它们的信息。
对于我这样做的每个文件,这是 js-ctypes 但这是一个 winapi 问题。我删除了错误检查并简化了代码:
但是ppropvar.pwszVal
出来的是我IPersitFile::Load
编辑的第一个文件的 SystemAppUserModelID,这是预期的吗?我必须CoUninitialize
和CoInitialize
每个循环或其他东西来解决这个问题吗?
谢谢
powershell - 是否可以获取不在 shell 命名空间中的项目的 shell 属性?
精简版
shell 如何获取文件的属性?
长版
Windows Shell 公开了关于shell 命名空间中项目(例如文件和文件夹)的丰富属性系统。
例如:
- System.Title : SQL Server Native Client OLE DB 到 ODBC 转换的快速指南
- System.Author : George Yan (KW)
- System.Document.LastAuthor : rohanl
- System.Comment : 要了解有关此演讲者的更多信息,查找其他 TEDTalks,并订阅此 Podcast 系列,请访问 www.TED.com 反馈:tedtalks@ted.com
- System.ItemParticipants : George Yan (KW)
- System.Company:Contoso _
- System.Language:英语(美国)
- System.Document.DateCreated : 6/10/2014 5∶16∶30 ᴘᴍ
- System.Image.HorizontalSize:1845 像素
- System.Image.VerticalSize:4695 像素
- System.Image.HorizontalResolution:71 dpi
- System.Image.VerticalResolution:71 dpi
为了让 shell 读取这些属性,它显然必须使用很多来源:
- Windows Media Foundation IMFMetadata非常适合图像和电影
- Windows 映像组件 ( WIC ) 可能有很多用于读取元数据的 API
- 我不确定是否可以从 Office 文档
IFilter
中检索Title、Author、Subject、Comments等
无论哪种方式,它都必须读取文件内容流并对文件的内容进行处理才能获得所有这些花哨的 shell 属性。换句话说:
可以与我自己的流一起使用吗?
我有不在 shell 命名空间中的项目;它们在数据存储中。我确实将它们暴露给外壳,IDataObject
就像CF_FILEDESCRIPTOR
执行IStream
复制粘贴或拖放一样。但除此之外,它们只是数据存储中的可流式 blob。
我希望能够利用非常有才华和勤奋的1 shell 团队所做的所有现有工作从“文件”中读取元数据,该文件最终仅作为IStream
.
是否有一个绑定上下文选项可以让我获得基于 aIDataObject
而不是 a的属性存储IShellItem2
?
所以而不是:
有没有:
?
shell 如何获取文件的所有属性?
奖金聊天 - IPropertyStoreFactory
此接口通常通过IShellFolder::BindToObject或IShellItem::BindToHandler 获得。它对于希望避免通过IShellItem2::GetPropertyStore创建属性存储的额外开销的数据源实现者很有用。但是,除非您通过 Shell 文件夹扩展实现数据源,否则推荐使用IShellItem2::GetPropertyStore方法来获取属性存储。
试过了
但CLSID_PropertyStore
不支持IInitializeWithStream
。
奖金阅读
- MSDN:初始化属性处理程序
物业管理人员是物业系统的重要组成部分。它们由索引器在进程内调用以读取和索引属性值,并且还由 Windows 资源管理器在进程内调用以直接在文件中读取和写入属性值。
- MSDN:注册和分发属性处理程序 (拼写注册表以获得乐趣并从另一端阅读合同)
winapi - 初始化 VT_VARIANT 的 PROPVARIANT 结构 | VT_VECTOR 类型
我很好奇如何初始化 VT_VARIANT 的 PROPVARIANT 结构 | VT_VECTOR 类型。我知道的现有模型是DocumentSummaryInformation属性集HeadingPairs
的属性:
HeadingPairs 属性作为变体向量存储在重复的 VT_LPSTR(或 VT_LPWSTR)和 VT_I4 值对中。
我知道各种 Init 函数,例如InitPropVariantFromStringAsVector
创建 VT_VECTOR | 的函数。VT_LPWSTR propvariant,但据我所知,没有函数可以初始化 VT_VARIANT | 的 PROPVARIANT 结构 VT_VECTOR 类型。
任何帮助或建议将不胜感激。
谢谢你。