我在网上查到的修改
这种方法并不管用,变成小白跟着这个网站上学的https://www.bilibili.com/video/BV1NJ411b7ZV?p=83,程序如下,请问该怎么修改
#include<Windows.h>
#include "resource.h"
void FillListBox(HWND hwndList)
{
//TCHAR szBuf[1024];//使用栈
TCHAR* pVarName;//使用堆
// LPVOID pVName; //使用堆
TCHAR* pVarBlock;
TCHAR* pVarBeg, * pVarEnd;
int iLength;
pVarBlock = GetEnvironmentStrings();
while (*pVarBlock)
{
if (*pVarBlock != '=')
{
pVarBeg = pVarBlock;
while (*pVarBlock++ != '=');
pVarEnd = pVarBlock - 1;
iLength = pVarEnd - pVarBeg;
//使用栈
/* ZeroMemory(szBuf, 1024);
CopyMemory(szBuf, pVarBeg, iLength*sizeof(TCHAR));
SendMessage(hwndList, LB_ADDSTRING, 0, (LPARAM)szBuf);*/
//使用堆
pVarName = (TCHAR*)calloc(iLength + 1, sizeof(TCHAR));
pVarName = (TCHAR*)malloc((iLength + 1) * sizeof(TCHAR)); ZeroMemory(pVarName, ((iLength + 1) * sizeof(TCHAR)));
CopyMemory(pVarName, pVarBeg, iLength * sizeof(TCHAR));
SendMessage(hwndList, LB_ADDSTRING, 0, (LPARAM)pVarName);
free(pVarName);
//使用HeapAlloc
/*pVName = HeapAlloc(GetProcessHeap(), 0, (iLength + 1) * sizeof(TCHAR));
ZeroMemory(pVName, (iLength + 1) * sizeof(TCHAR));
CopyMemory(pVName, pVarBeg, iLength * sizeof(TCHAR));
SendMessage(hwndList, LB_ADDSTRING, 0, (LPARAM)pVName);
HeapFree(GetProcessHeap(), 0, pVName);*/
}
while (*pVarBlock++ != '\0');
}
FreeEnvironmentStrings(pVarBlock);
}
INT_PTR CALLBACK MainDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
BOOL bRet = TRUE;
int iIndex, iLength;//列表中选到的是第几个以及它有多长
TCHAR* pVarName, * pVarValue;
switch (uMsg)
{
case WM_INITDIALOG:
FillListBox(GetDlgItem(hDlg, IDC_LIST1));
break;
case WM_COMMAND:
if (LOWORD(wParam) == IDC_LIST1 && HIWORD(wParam) == LBN_SELCHANGE)
{
iIndex = SendMessage(GetDlgItem(hDlg, IDC_LIST1), LB_GETCURSEL, 0, 0);
iLength=SendMessage(GetDlgItem(hDlg, IDC_LIST1), LB_GETTEXTLEN, iIndex, 0)+1;
pVarName = (TCHAR*)calloc(iLength, sizeof(TCHAR));
SendMessage(GetDlgItem(hDlg, IDC_LIST1), LB_GETTEXT, iIndex, (LPARAM)pVarName);
iLength=GetEnvironmentVariable(pVarName, NULL, 0);
pVarValue = (TCHAR*)calloc(iLength, sizeof(TCHAR));
GetEnvironmentVariable(pVarName, pVarValue, iLength);
SetWindowText(GetDlgItem(hDlg, IDC_LIST1), pVarValue);
free(pVarName);
free(pVarValue);
}
break;
case WM_CLOSE:
EndDialog(hDlg, 0);
break;
default:
bRet = FALSE;
break;
}
return bRet;
}
int APIENTRY wWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, MainDlgProc);
return 0;
}