Hwid剪贴板

问题描述:

所以这就是我正在尝试待办事项我试图将序列号复制到剪贴板,但它不工作有什么我做错了,如果是的话然后plz帮助我我想这个工作becouse它的东西我的一个项目,我卖Hwid剪贴板

#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

解决此类问题的正确工具是使用您的调试器,但不要在Stack Overflow之前询问。告诉我们您在检查您的代码时所做的所有观察。您也可以阅读** [如何调试小程序(由Eric Lippert撰写)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)**至少给我们留下一个能够再现您的问题的[MCVE]。 (这是一个私人股票评论由πάνταῥεῖ™提供) –

+0

是'GetVolumeInformation'函数?你为什么将它传递给'SetClipboardData'? – elyashiv

+0

becouse我想获得SerialNumber,如果我将serialnumber传递给clipboardata,它会给出错误,因为它是DWORD – Arix

你应该避免使用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; 
} 
+0

ty你帮我的男人 – Arix

+0

点击复选标记以接受回答,如果这已经回答了你的问题 –