C++打开属性对话框并保持其处于打开状态
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++打开属性对话框并保持其处于打开状态,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1607字,纯文字阅读大概需要3分钟。
内容图文
![C++打开属性对话框并保持其处于打开状态](/upload/InfoBanner/zyjiaocheng/686/12600729908545d3b8cbdf568a710588.jpg)
#include <Windows.h> #include <shlobj_core.h> #pragma comment(lib,"Shell32.lib") class ProcessReference : public IUnknown { public: STDMETHODIMP QueryInterface(REFIID riid, void **ppv) { if (riid == IID_IUnknown) { *ppv = static_cast<IUnknown*>(this); AddRef(); return S_OK; } *ppv = NULL; return E_NOINTERFACE; } STDMETHODIMP_(ULONG) AddRef() { return InterlockedIncrement(&m_cRef); } STDMETHODIMP_(ULONG) Release() { LONG lRef = InterlockedDecrement(&m_cRef); if (lRef == 0) PostThreadMessage(m_dwThread, WM_NULL, 0, 0); return lRef; } ProcessReference() : m_cRef(1), m_dwThread(GetCurrentThreadId()) { SHSetInstanceExplorer(this); } ~ProcessReference() { SHSetInstanceExplorer(NULL); Release(); MSG msg; while (m_cRef && GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } } private: LONG m_cRef; DWORD m_dwThread; }; int main() { struct CoInit { HRESULT m_hr; CoInit() { m_hr = CoInitialize(0); } ~CoInit() { if (SUCCEEDED(m_hr)) CoUninitialize(); } } coinit; ProcessReference ref; IShellItem*pSI; HRESULT hr = SHCreateItemInKnownFolder(FOLDERID_Windows, KF_FLAG_DEFAULT, L"Explorer.exe", IID_IShellItem, (void**)&pSI); if (hr) return hr; IContextMenu*pCM; hr = pSI->BindToHandler(NULL, BHID_SFUIObject, IID_IContextMenu, (void**)&pCM); pSI->Release(); if (hr) return hr; SHELLEXECUTEINFO info = { 0 }; info.cbSize = sizeof info; info.lpFile = "C:\\Users\\strives\\Desktop\\print.txt"; info.nShow = SW_SHOW; info.fMask = SEE_MASK_INVOKEIDLIST; info.lpVerb = "properties"; ShellExecuteEx(&info); }
另外参考: Reading a contract from the other side: SHSetInstanceExplorer and SHGetInstanceExplorer
链接是介绍 SHSetInstanceExplorer 的用法
内容总结
以上是互联网集市为您收集整理的C++打开属性对话框并保持其处于打开状态全部内容,希望文章能够帮你解决C++打开属性对话框并保持其处于打开状态所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。