我需要剪贴板

Hwid to clipboard

本文关键字:剪贴板      更新时间:2023-10-16

所以这就是我想要做的,我试图复制序列号到剪贴板,但它不起作用是有什么我做错了,如果是,那么请帮助我,我想有这个工作,因为它的东西为我的一个项目,我正在销售

#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
#include "windows.h"
namespace std {}
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    TCHAR volumeName[MAX_PATH + 1] = { 0 };
        TCHAR fileSystemName[MAX_PATH + 1] = { 0 };
        DWORD serialNumber = 0;
        DWORD maxComponentLen = 0;
        DWORD fileSystemFlags = 0;
        if (GetVolumeInformation(
            _T("C:\"),
            volumeName,
            ARRAYSIZE(volumeName),
            & serialNumber,
            & maxComponentLen,
            & fileSystemFlags,
            fileSystemName,
            ARRAYSIZE(fileSystemName)))
        {

                _tprintf(_T("Serial Number: %lun"), serialNumber);

                GlobalUnlock(GetVolumeInformation);
                OpenClipboard(NULL);
                EmptyClipboard();
                SetClipboardData(1, GetVolumeInformation);
                CloseClipboard();
                MessageBoxA(NULL, "HWID COPYED.", "HWID", NULL);
                std::cout << std::endl << "Press any key to continue...";
                getchar();
        }
}

您应该避免使用T宏(以_T_t开头的宏)。由于历史原因,微软在一些文档中仍然使用这些宏,但它们既无用又令人困惑。我不知道你是使用ANSI还是Unicode(推荐使用Unicode)。

如果您只需要GetVolumeInformation的序列号,那么您可以将其他变量设置为NULL,请参阅文档。

获得序列号后,将其转换为文本。然后将文本复制到剪贴板。下面是ANSI示例:

void copy(const char* text)
{
    int len = strlen(text) + 1;
    HGLOBAL hmem = GlobalAlloc(GMEM_MOVEABLE, len);
    char* buffer = (char*)GlobalLock(hmem);
    strcpy_s(buffer, len, text);
    GlobalUnlock(hmem);
    OpenClipboard(NULL);
    EmptyClipboard();
    SetClipboardData(CF_TEXT, hmem);
    CloseClipboard();
}
int _tmain()
{
    DWORD serialNumber = 0;
    if (GetVolumeInformation(
        _T("C:\"),
        NULL,
        0,
        &serialNumber,
        NULL,
        0,
        NULL,
        0))
    {
        std::cout << serialNumber << std::endl;
        char buf[100];
        sprintf_s(buf, 100, "%d", serialNumber);
        copy(buf);
        MessageBoxA(NULL, buf, "HWID", NULL);
    }
    return 0;
}