Hwid到剪贴板

时间:2016-08-21 10:02:30

标签: c++ clipboarddata

所以这就是我正在尝试todo我正在尝试将序列号复制到剪贴板,但它不起作用是否有任何我做错了如果是,那么PLZ帮助我,我想有这个工作因为它的东西为一个项目的我,我在卖

#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: %lu\n"), 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();
        }

}

1 个答案:

答案 0 :(得分:0)

您应该避免使用T宏(以_T_t开头的宏)。出于历史原因,Microsoft仍然在其某些文档中使用这些宏,但它无用且令人困惑。我不知道您使用的是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;
}