如何隐藏“GetOpenFileNameW”对话框的任务栏图标?

问题描述 投票:0回答:1

我在 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;
}

但是该对话框在任务栏中显示一个图标,如下所示:

点击此文字即可查看图片

那么,如何隐藏该图标?

c++ taskbar getopenfilename comdlg32
1个回答
0
投票

您需要使用

OPENFILENAMEW::hwndOwner
字段指定对话框窗口的所有者。所有者可以是没有任务栏按钮的隐藏窗口。

© www.soinside.com 2019 - 2024. All rights reserved.