网上关于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的使用的更多相关文章

  1. C#[Win32&WinCE&WM]应用程序只能运行一个实例:MutexHelper

    前言 在开发应用程序时,通常只让程序运行一个实例.所以,就要判断程序是否已经运行. 下面是我自己在项目中使用到,封装好的帮助类.有 普通的 C# 应用程序 和 Windows CE 和 Windows ...

  2. java.lang.UnsatisfiedLinkError: %1 不是有效的 Win32 应用程序。

    JNA 调用 dll 库时,保错: ///////////////// 通过 JNA 引入 DLL 库 //////////// /** * ID_FprCap.dll 负责指纹的采集, 指纹仪的初始 ...

  3. 初次认识 C# win32 api

    第一次接触win32api,刚开始的时候有点迷迷糊糊的. Windows API 就是windows应用程序接口. win api向上就是windows应用程序,向下就是windows操作系统核心. ...

  4. [老文章搬家] [翻译] 深入解析win32 crt 调试堆

    09 年翻译的东西. 原文见:  http://www.nobugs.org/developer/win32/debug_crt_heap.html 在DeviceStudio的Debug编译模式下, ...

  5. Virus.Win32.Virlock.b分析

    0x00 样本说明 分析样本是被0b500d25f645c0b25532c1e3c9741667的样本感染得到.感染前的文件是Tcpview.exe,一款windows网络连接查看工具. 感染前后文件 ...

  6. cocos2d-x 从win32到android移植的全套解决方案

    引言:我们使用cocos2d-x引擎制作了一款飞行射击游戏,其中创新性地融入了手势识别功能.但是我们在移植过程中遇到了很多的问题,同时也发现网上的资料少而不全.所以在项目行将结束的时候,我们特地写了这 ...

  7. Git使用出错:Couldn‘t reserve space for cygwin‘s heap, Win32

    今天使用Git在命令行下更新代码遇到了问题,起初觉得是自己安装某软件导致冲突,从网上搜索了一下找到类似问题,成功解决问题. 错误信息如下: E:\storm-sql>git pull origi ...

  8. ATL封装IE内核启示:使用Win32/ATL建立窗口

    开发大型GUI界面程序MFC当仁不让,但如果是开发图形应用程序,并不需要大规模界面控件,没有必要链接庞大的MFC库,直接使用platform sdk会很麻烦,这时ATL中的关于Windows的封装就是 ...

  9. Win32 OpenProcess打开进程失败,返回5无权限操作

    Win32 OpenProcess打开进程失败,返回5无权限操作,相信你会碰到这样的事,在IDE中可以,单独却不可以了,其实这时就需要提权了,否则是无法打开的,OpenProcess提权至Debug即 ...

  10. win32进程名查找进程PID

    1. #include <Psapi.h> #pragma comment(lib, "Psapi.lib") DWORD GetProcIDFromName(LPCT ...

随机推荐

  1. [转帖]一文说清 Linux System Load

    https://zhuanlan.zhihu.com/p/447661302 双十一压测过程中,常见的问题之一就是load 飙高,通常这个时候业务上都有受影响,比如服务rt飙高,比如机器无法登录,比如 ...

  2. [转帖]TNS-12535 TNS-00505的处理方法

    硬件说明: 操作系统版本:ORACLE LINUX 6.3  64位 数据库版本:11.2.0.3   64位 问题说明: 在检查数据库的alert日志的时候,发现大量的12170和TNS-12535 ...

  3. [转帖]MegaCli命令

    MegaCli命令 设置jbod模式 1.3 LSI 9260/9261 raid卡配置 LSI 9260/9261 raid卡支持0.1.10.5.6.50.60 常用命令: 清除raid卡原有的配 ...

  4. [转帖]第七篇:双管齐下,JVM内部优化与JVM性能调优

    文章目录 一.前言 二.编译时优化 2.1 Javac编译器 2.2 Java语法糖 2.2.1 泛型和泛型擦除 2.2.2 自动装箱.自动拆箱.遍历循环 2.2.3 条件编译 三.运行时优化(核心: ...

  5. SQLServer 隔离级别的简单学习

    SQLServer 隔离级别的简单学习 背景 上周北京一个项目出现了卡顿的现象. 周末开发测试加紧制作测试发布了补丁,但是并没有好转. 上周四时跟研发訾总简单沟通过, 怀疑是隔离级别有关系.但是不敢确 ...

  6. SPI在Java中的实现与应用 | 京东物流技术团队

    1 SPI的概念 API API在我们日常开发工作中是比较直观可以看到的,比如在 Spring 项目中,我们通常习惯在写 service 层代码前,添加一个接口层,对于 service 的调用一般也都 ...

  7. Spring缓存是如何实现的?如何扩展使其支持过期删除功能?

    前言:在我们的应用中,有一些数据是通过rpc获取的远端数据,该数据不会经常变化,允许客户端在本地缓存一定时间. 该场景逻辑简单,缓存数据较小,不需要持久化,所以不希望引入其他第三方缓存工具加重应用负担 ...

  8. kettle系统列文章02---如何建立一个转换

    1.连接mysql 主对象树---->DB连接---->新建 2.连接sqlserver 主对象树--->DB连接----->新建 3.设置数据库为共享:在db上右键---&g ...

  9. 基于Basic auth 的一个C# 示例

    最近在做公司的一个项目时,客户需要我们定时获取他们矩阵系统的数据.在与客户进行对接时,提到他们的接口使用的目前不常用的BASIC 认证.天呢,它好不安全,容易被不法人监听,咋还在使用呀.但是没办法呀, ...

  10. 深度学习应用篇-元学习[15]:基于度量的元学习:SNAIL、RN、PN、MN

    深度学习应用篇-元学习[15]:基于度量的元学习:SNAIL.RN.PN.MN 1.Simple Neural Attentive Learner(SNAIL) 元学习可以被定义为一种序列到序列的问题 ...