-3

所以这就是我想要做的事情我试图将序列号复制到剪贴板但它不起作用如果是的话我做错了什么然后请帮助我我想让这个工作因为它对我的一个项目来说是我的我在卖

#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();
        }

}
4

1 回答 1

0

您应该避免使用宏(以andT开头的宏)。由于历史原因,Microsoft 在其某些文档中仍然使用这些宏,但它无用且令人困惑。我不知道您使用的是 ANSI 还是 Unicode(建议使用 Unicode)。_T_t

如果您只需要序列号,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;
}
于 2016-08-22T09:34:24.500 回答