以下是一个示例代码,实现了在按下 Ctrl 键时,获取鼠标选中的文件,并判断文件类型并打印出来:

#include <Windows.h>
#include <iostream>
#include <Shlwapi.h>
#include <shellapi.h>

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);

int main()
{
    WNDCLASS wc = { 0 };
    wc.lpszClassName = L"Window Class";
    wc.lpfnWndProc = WndProc;
    RegisterClass(&wc);

    HWND hwnd = CreateWindow(wc.lpszClassName, L"Window", WS_OVERLAPPEDWINDOW, 0, 0, 500, 500, NULL, NULL, NULL, NULL);

    ShowWindow(hwnd, SW_SHOWDEFAULT);

    MSG msg = { 0 };
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return 0;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {
    case WM_CREATE:
        DragAcceptFiles(hwnd, TRUE);
        break;

    case WM_DESTROY:
        PostQuitMessage(0);
        break;

    case WM_DROPFILES:
        if (GetKeyState(VK_CONTROL) < 0)
        {
            HDROP hDrop = (HDROP)wParam;
            UINT fileCount = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0);
            for (UINT i = 0; i < fileCount; i++)
            {
                TCHAR fileName[MAX_PATH];
                DragQueryFile(hDrop, i, fileName, MAX_PATH);

                // Get the file type
                SHFILEINFO fileInfo = { 0 };
                SHGetFileInfo(fileName, 0, &fileInfo, sizeof(fileInfo), SHGFI_TYPENAME);

                std::wcout << fileName << L" is " << fileInfo.szTypeName << std::endl;
            }
            DragFinish(hDrop);
        }
        break;

    default:
        return DefWindowProc(hwnd, msg, wParam, lParam);
    }

    return 0;
}

在这个示例代码中,我们创建了一个窗口,并在窗口创建时调用了 DragAcceptFiles 函数来启用拖拽文件功能。在窗口过程函数中,我们处理了 WM_DROPFILES 消息,通过 GetKeyState 函数来判断是否按下了 Ctrl 键。如果按下了 Ctrl 键,我们就可以通过 DragQueryFile 函数来获取鼠标选中的文件路径,然后再通过 SHGetFileInfo 函数来获取文件类型信息。最后,我们将文件名和文件类型信息输出到控制台中。

需要注意的是,在使用 SHGetFileInfo 函数时,我们需要包含 Shlwapi.lib 库文件,并在代码中添加以下头文件:

#include <Shlwapi.h>
#include <shellapi.h>

另外,我们也需要在程序初始化时调用 CoInitialize 函数来初始化 COM 库。

C++ 使用 Win API 获取 Ctrl 键按下时鼠标选中的文件类型

原文地址: https://www.cveoy.top/t/topic/oBjQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录