win32 - IFolderView2::GetCurrentFolderFlags的使用
网上关于IFolderView2接口调用的示例有点少。
下面的例子是将桌面的图标隐藏起来,使用了FWF_NOICONS样式。
#include <ShlObj.h> // Shell API
#include <atlcomcli.h> // CComPtr & Co.
#include <string>
#include <iostream>
#include <system_error>
#include <vector>
#define SUCCEEDED(hr) (((HRESULT)(hr)) >= 0) // Throw a std::system_error if the HRESULT indicates failure.
template< typename T >
void ThrowIfFailed(HRESULT hr, T&& msg)
{
if (FAILED(hr))
throw std::system_error{ hr, std::system_category(), std::forward<T>(msg) };
} // RAII wrapper to initialize/uninitialize COM
struct CComInit
{
CComInit() { ThrowIfFailed(::CoInitialize(nullptr), "CoInitialize failed"); }
~CComInit() { ::CoUninitialize(); }
CComInit(CComInit const&) = delete;
CComInit& operator=(CComInit const&) = delete;
}; // Query an interface from the desktop shell view.
void FindDesktopFolderView(REFIID riid, void** ppv, std::string const& interfaceName)
{
CComPtr<IShellWindows> spShellWindows;
ThrowIfFailed(
spShellWindows.CoCreateInstance(CLSID_ShellWindows),
"Failed to create IShellWindows instance"); CComVariant vtLoc(CSIDL_DESKTOP);
CComVariant vtEmpty;
long lhwnd;
CComPtr<IDispatch> spdisp;
ThrowIfFailed(
spShellWindows->FindWindowSW(
&vtLoc, &vtEmpty, SWC_DESKTOP, &lhwnd, SWFO_NEEDDISPATCH, &spdisp),
"Failed to find desktop window"); CComQIPtr<IServiceProvider> spProv(spdisp);
if (!spProv)
ThrowIfFailed(E_NOINTERFACE, "Failed to get IServiceProvider interface for desktop"); CComPtr<IShellBrowser> spBrowser;
ThrowIfFailed(
spProv->QueryService(SID_STopLevelBrowser, IID_PPV_ARGS(&spBrowser)),
"Failed to get IShellBrowser for desktop"); CComPtr<IShellView> spView;
ThrowIfFailed(
spBrowser->QueryActiveShellView(&spView),
"Failed to query IShellView for desktop"); ThrowIfFailed(
spView->QueryInterface(riid, ppv),
"Could not query desktop IShellView for interface " + interfaceName);
} void ToggleDesktopIcons()
{
CComPtr<IFolderView2> spView;
FindDesktopFolderView(IID_PPV_ARGS(&spView), "IFolderView2"); DWORD flags = 0;
ThrowIfFailed(
spView->GetCurrentFolderFlags(&flags),
"GetCurrentFolderFlags failed");
ThrowIfFailed(
spView->SetCurrentFolderFlags(FWF_NOICONS, flags ^FWF_NOICONS),
"SetCurrentFolderFlags failed"); } int wmain(int argc, wchar_t** argv)
{
try
{
CComInit init; ToggleDesktopIcons(); std::cout << "Desktop icons have been toggled.\n";
}
catch (std::system_error const& e)
{
std::cout << "ERROR: " << e.what() << ", error code: " << e.code() << "\n";
return 1;
} return 0;
}
另外,我在寻找IFolderView2::GetSortColumns的使用实例,如果有人碰巧做过这样的案例,可以在评论区中告诉我。
win32 - IFolderView2::GetCurrentFolderFlags的使用的更多相关文章
- C#[Win32&WinCE&WM]应用程序只能运行一个实例:MutexHelper
前言 在开发应用程序时,通常只让程序运行一个实例.所以,就要判断程序是否已经运行. 下面是我自己在项目中使用到,封装好的帮助类.有 普通的 C# 应用程序 和 Windows CE 和 Windows ...
- java.lang.UnsatisfiedLinkError: %1 不是有效的 Win32 应用程序。
JNA 调用 dll 库时,保错: ///////////////// 通过 JNA 引入 DLL 库 //////////// /** * ID_FprCap.dll 负责指纹的采集, 指纹仪的初始 ...
- 初次认识 C# win32 api
第一次接触win32api,刚开始的时候有点迷迷糊糊的. Windows API 就是windows应用程序接口. win api向上就是windows应用程序,向下就是windows操作系统核心. ...
- [老文章搬家] [翻译] 深入解析win32 crt 调试堆
09 年翻译的东西. 原文见: http://www.nobugs.org/developer/win32/debug_crt_heap.html 在DeviceStudio的Debug编译模式下, ...
- Virus.Win32.Virlock.b分析
0x00 样本说明 分析样本是被0b500d25f645c0b25532c1e3c9741667的样本感染得到.感染前的文件是Tcpview.exe,一款windows网络连接查看工具. 感染前后文件 ...
- cocos2d-x 从win32到android移植的全套解决方案
引言:我们使用cocos2d-x引擎制作了一款飞行射击游戏,其中创新性地融入了手势识别功能.但是我们在移植过程中遇到了很多的问题,同时也发现网上的资料少而不全.所以在项目行将结束的时候,我们特地写了这 ...
- Git使用出错:Couldn‘t reserve space for cygwin‘s heap, Win32
今天使用Git在命令行下更新代码遇到了问题,起初觉得是自己安装某软件导致冲突,从网上搜索了一下找到类似问题,成功解决问题. 错误信息如下: E:\storm-sql>git pull origi ...
- ATL封装IE内核启示:使用Win32/ATL建立窗口
开发大型GUI界面程序MFC当仁不让,但如果是开发图形应用程序,并不需要大规模界面控件,没有必要链接庞大的MFC库,直接使用platform sdk会很麻烦,这时ATL中的关于Windows的封装就是 ...
- Win32 OpenProcess打开进程失败,返回5无权限操作
Win32 OpenProcess打开进程失败,返回5无权限操作,相信你会碰到这样的事,在IDE中可以,单独却不可以了,其实这时就需要提权了,否则是无法打开的,OpenProcess提权至Debug即 ...
- win32进程名查找进程PID
1. #include <Psapi.h> #pragma comment(lib, "Psapi.lib") DWORD GetProcIDFromName(LPCT ...
随机推荐
- ChatGPT 提高工作效率-一例SQL编写的过程
ChatGPT 提高工作效率-一例SQL编写的过程 前言 遇到一个问题, 怀疑是有一些补丁没有被依赖. 导致第一次更新时没有更新这些没依赖的补丁. 后面更新时又更新了这些游离态的补丁. 导致出现 ol ...
- ESXi上面虚拟机磁盘损坏修复案例
事故情况 最近同事反馈, 一个文件更新后出现了文件部分不可读的情况 具体现象为: 前端功能打开白屏 后端文件 前面93行不显示, notepad++打开都是 NULL 黑框. 然后重新覆盖文件, 有概 ...
- echarts去掉y轴线、设置x轴线的颜色、x轴文字颜色
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- echarts饼状图不要中间的文字提示
饼状图不要中间的文字提示信息 emphasis: { label: { show: false, //将这个设置为false }, }, 为什么饼状图不要中间的问题提示信息 因为有些时候,在文字很多的 ...
- HEVC扩展备用安装方法
这个玩意微软商店免费但是下架了,购买需要RMB 安装 转到 https://store.rg-adguard.net/ 在左侧的下拉菜单选择"ProductId" 把链接中&quo ...
- 14.7 Socket 循环结构体传输
在上述内容中笔者通过一个简单的案例给大家介绍了在套接字编程中如何传递结构体数据,本章将继续延申结构体传输,在某些时候例如我们需要传输一些当前系统的进程列表信息,或者是当前主机中的目录文件,此时就需要使 ...
- 2.1 PE结构:文件映射进内存
PE结构是Windows系统下最常用的可执行文件格式,理解PE文件格式不仅可以理解操作系统的加载流程,还可以更好的理解操作系统对进程和内存相关的管理知识,在任何一款操作系统中,可执行程序在被装入内存之 ...
- C/C++ 感染标志与空字节感染
C/C++ 通过搜索PE结构中的空隙部分,对指定文件写入感染标志,作用是,如果程序被感染过则不再继续感染,而搜索空字节,则是要将恶意代码动态的填充到可执行文件中,并劫持执行流,以下代码就是这两种代码的 ...
- SpringSecurity 的登录流程
用过SpringSecurity的小伙伴,都知道 Authentication 这个接口,我们在任何地方通过这个接口来获取到用户登录的信息,而我们用的频繁的一个它的一个实现类就是 Username ...
- Web入门:JavaScript文字动画
欢迎来的我的小院,恭喜你今天又要涨知识了! 案例内容 利用JavaScript实现文字逐步展现的动画效果. 演示 学习 <!DOCTYPE html> <html lang=&quo ...