IShellBrowser的获取

简介:

获取IShellBrowser
要获取该接口只能通过IServiceProvider接口,不能通过CoCreateInstance,估计是因为该接口为纯虚类
下面是获取该接口的方法:

 
  1. // 通过该接口可以获取所有打开的shell窗口(例如folder窗口)  
  2. IShellWindows *psw = NULL;  
  3. hr = ::CoCreateInstance(CLSID_ShellWindows, NULL, CLSCTX_ALL, IID_IShellWindows, (void**)&psw);  
  4.  
  5. // 获取打开的shell窗口个数.  
  6. long lCount = 0;  
  7. hr = psw->get_Count(&lCount);  
  8.  
  9. //SWC_EXPLORER 指出获取explorer打开的窗口,如果没有打开任何窗口则会调用失败  
  10. //VISTA及以后的版本可以用SWC_DESKTOP,此时获取的是桌面窗口,即使没有其他shell  
  11. //窗口,该调用也不会失败.  
  12. VARIANT vpidl;  
  13. vpidl.vt = VT_UI4;  
  14. vpidl.ulVal = SWC_EXPLORER;  
  15. IDispatch *pdisp = NULL;  
  16. hr = psw->Item(vpidl, &pdisp);  
  17.  
  18. // 这个接口是一个控件接口,具体看MSDN吧  
  19. IWebBrowserApp *pwba = NULL;  
  20. hr = pdisp->QueryInterface(IID_IWebBrowserApp, (void**)&pwba);  
  21.  
  22. // 这个接口类厂很像,用于创建另外一些接口对象,详细内容参考MSDN.  
  23. IServiceProvider *psp = NULL;  
  24. hr = pwba->QueryInterface(IID_IServiceProvider, (void**)&psp);  
  25.  
  26. // SID_STopLevelBrowser指出获取最顶层的那个shell窗口.  
  27. // 如果不明白可以调用该接口的GetControlWindow成员函数,然后再用sp++  
  28. // 查看一下,就知道是哪个窗口了。  
  29. IShellBrowser *psb = NULL;  
  30. hr = psp->QueryService(SID_STopLevelBrowser, IID_IShellBrowser, (void**)&psb);  
  31.  
  32. //使用该shell窗口浏览其它目录(pdil指出目录路径)内容,当然也可以再创建新窗口  
  33. //psb->BrowseObject(pdil, ...)  
  34. ... 

 










本文转自jetyi51CTO博客,原文链接: http://blog.51cto.com/jetyi/560744,如需转载请自行联系原作者




相关文章
|
8月前
|
监控 安全 Linux
Qt 文件类实战:解锁文件操作的无限可能
Qt 文件类实战:解锁文件操作的无限可能
387 1
|
存储 Dragonfly 弹性计算
2023年阿里云服务器2核4G配置收费标准与活动价格参考,价格297.98元1年起
2核4G配置的云服务器通常是普通企业用户的首选配置,2023年新用户租用阿里云轻量应用服务器低至108元首年,2核4G配置目前活动价格仅需297.98元1年起,不过阿里云不同实例类型的2核4G云服务器配置,产品价格也各不相同。而在平时购买和活动期间买价格也是不一样的。本文主要为大家介绍目前阿里云服务器2核4G配置收费标准与活动价格,以供参考。
623 0
2023年阿里云服务器2核4G配置收费标准与活动价格参考,价格297.98元1年起
|
C# Windows
WPF技术之RichTextBox控件
WPF RichTextBox是Windows Presentation Foundation (WPF)中提供的一个强大的文本编辑控件,它可以显示富文本格式的文本,支持多种文本处理操作。
641 0
|
8月前
|
Kubernetes 网络协议 Perl
k8s Failed to create pod sandbox: open /run/systemd/resolve/resolv.conf: no such file or directory
k8s Failed to create pod sandbox: open /run/systemd/resolve/resolv.conf: no such file or directory
483 0
|
8月前
|
编解码 Linux API
【FFmpeg 视频流处理】FFmpeg API深度解析:视频流画面合并、拼接与裁剪技巧
【FFmpeg 视频流处理】FFmpeg API深度解析:视频流画面合并、拼接与裁剪技巧
757 0
|
存储 算法 C++
4.5 C++ Boost 文件目录操作库
在Boost库出现之前,C++对于文件和目录的操作需要调用底层接口操作,非常不友好,而且不同平台的接口差异也很大,难以移植。但是,Boost库中的filesystem库可以解决这个问题,它是一个可移植的文件系统操作库,可以跨平台的操作目录、文件等,并提供了友好的操作方法,并且在不失性能的情况下提供了良好的抽象和封装。Boost 库是一个由C/C++语言的开发者创建并更新维护的开源类库,其提供了许多功能强大的程序库和工具,用于开发高质量、可移植、高效的C应用程序。Boost库可以作为标准C库的后备,通常被称为准标准库,是C标准化进程的重要开发引擎之一。使用Boost库可以加速C应用程序的开发过程
|
网络安全 Windows
横向移动工具开发:wmiexec-Pro(二)
早于两年前,我基于wmihacker免杀横向的思路,造轮子写了个wmipersist-Modify.py的横向工具,相对于wmihacker来说,无需配合mimikatz的PTH,即可进行PTH
|
编译器 Linux Android开发
系统标准路径类详解——QStandardPaths
系统标准路径类详解——QStandardPaths
|
安全 算法 编译器
逆向分析 工具、加壳、安全防护篇
作者主页:https://www.couragesteak.com/
逆向分析 工具、加壳、安全防护篇