我在 Code::Blocks 中创建了一个隐藏的 C++ 控制台应用程序。因此,应用程序的任务栏图标在执行过程中不可见。
我想隐藏“GetOpenFileNameW”对话框的任务栏图标。
这是我为了打开该对话框而编写的代码:
#include "iostream"
#include "string_operations.h"
using namespace std;
///--- variables ---///
//-- HMODULE --//
HMODULE hmComDlg32;
//-- OPENFILENAMEW --//
OPENFILENAMEW ofn;
//-- size_t --//
size_t szSizeOfSelectedFilePaths;
//-- string --//
string strSelectedFilePath;
//-- vector<string> --//
vector<string> v_strSelectedFilePaths;
//-- wchar_t* --//
wchar_t* p_wcSelectedFilePaths;
int main()
{
ZeroMemory(&ofn, sizeof(ofn));
p_wcSelectedFilePaths = new wchar_t[MAX_PATH];
memset(p_wcSelectedFilePaths, 0, MAX_PATH * sizeof(wchar_t));
ofn = {0};
ofn.Flags = OFN_ALLOWMULTISELECT | OFN_DONTADDTORECENT | OFN_EXPLORER | OFN_HIDEREADONLY | OFN_PATHMUSTEXIST;
ofn.lpstrFile = p_wcSelectedFilePaths;
ofn.lpstrFilter = L"JSON Files (*.json)\0*.json\0PAS Files (*.pas)\0*.pas\0";
ofn.lpstrTitle = L"Choose files.";
ofn.lStructSize = sizeof(ofn);
ofn.nMaxFile = MAX_PATH;
hmComDlg32 = LoadLibraryW(L"ComDlg32.dll");
if(hmComDlg32)
{
typedef WINBOOL (WINAPI *tdGetOpenFileNameW)(LPOPENFILENAMEW);
tdGetOpenFileNameW fnGetOpenFileNameW = (tdGetOpenFileNameW)GetProcAddress(hmComDlg32, "GetOpenFileNameW");
if(fnGetOpenFileNameW)
{
if(fnGetOpenFileNameW(&ofn))
{
while(*p_wcSelectedFilePaths)
{
szSizeOfSelectedFilePaths = wcslen(p_wcSelectedFilePaths);
strSelectedFilePath = WideStringToUtf8String(wstring(p_wcSelectedFilePaths));
v_strSelectedFilePaths.push_back(strSelectedFilePath);
p_wcSelectedFilePaths += szSizeOfSelectedFilePaths + 1;
}
}
}
FreeLibrary(hmComDlg32);
}
return 0;
}
但是该对话框在任务栏中显示一个图标,如下所示:
那么,如何隐藏该图标?
您需要使用
OPENFILENAMEW::hwndOwner
字段指定对话框窗口的所有者。所有者可以是没有任务栏按钮的隐藏窗口。