c++ 调用系统的dll

void CAPITESTDlg::OnBnClickedBtnDiskFree()
{
	typedef BOOL(WINAPI* MyFunc)(LPCSTR rootName, PULARGE_INTEGER pulA, PULARGE_INTEGER pulB, PULARGE_INTEGER pulFreeBytes);
	ULARGE_INTEGER a, b, c;	
	HMODULE hModule = LoadLibraryEx(_T("kernel32.dll"), NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
	if (hModule)
	{
		MyFunc diskspace = (MyFunc)GetProcAddress(hModule, "GetDiskFreeSpaceExA");
		if (diskspace)
		{
			diskspace("C:\\", &a, &b, &c);
		}
		::FreeLibrary(hModule);
		ULONGLONG i = c.QuadPart / 1024;
		CString text;
		text.Format(_T("%d"), i);
		GetDlgItem(IDC_EDIT1)->SetWindowText(text);
	}
}


void CAPITESTDlg::OnBnClickedBtnGetIcon()
{
	CFileDialog file(TRUE, _T("file"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("位图文件(*.*)|*.*"), this);
	if (file.DoModal()==IDOK)
	{
		CString path = file.GetFileName();
		SHFILEINFO sfi;
		typedef BOOL(WINAPI* MyFunc)(LPCTSTR pszPath, DWORD dwFileAttributes, SHFILEINFO* psfi, UINT cbFileInfo, UINT uFlags);
		HMODULE hModule = LoadLibraryEx(_T("shell32.dll"), NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
		if (hModule)
		{
			MyFunc getFileInfo = (MyFunc)GetProcAddress(hModule, "SHGetFileInfo");
			if (getFileInfo)
			{
				getFileInfo(path, 0, &sfi, sizeof(SHFILEINFO), SHGFI_ICON);
				//注意这个CStatic要选择Picture控件才能显示
				CStatic* pStatic = (CStatic*)GetDlgItem(IDC_ICON);
				pStatic->SetIcon(sfi.hIcon);
			}
			::FreeLibrary(hModule);
			
		}
	}
}


void CAPITESTDlg::OnBnClickedBtnDrawText()
{
	CRect rc;
	GetDlgItem(IDC_TEXT)->GetWindowRect(&rc);
	ScreenToClient(&rc);
	HDC dc = this->GetDC()->m_hDC;
	typedef BOOL(WINAPI* MyFunc)(HDC hDC, LPCTSTR lpString, int nCount, LPRECT lpRect, UINT nFormat);
	HMODULE hModule = LoadLibraryEx(_T("user32.dll"), NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
	if (hModule)
	{
		MyFunc drawText = (MyFunc)GetProcAddress(hModule, "DrawTextA");
		if (drawText)
		{
			CString str = "Hello";
			drawText(dc, str, str.GetLength(), &rc, DT_CENTER);
		}
		::FreeLibrary(hModule);

	}
}

猜你喜欢

转载自blog.csdn.net/dxm809/article/details/115157055