1,183
社区成员
发帖
与我相关
我的任务
分享
void GetWindowIcons(HWND hwnd, HICON* phIcon, HICON* phIconSm) {
_ASSERT(phIcon);
BOOL fIsHungApp = FALSE;
HICON hIcon = NULL;
if (!SendMessageTimeout(hwnd, WM_GETICON, ICON_BIG, 0,
SMTO_ABORTIFHUNG, HUNG_TIMEOUT, (PDWORD_PTR)&hIcon)) {
DWORD dwErr = GetLastError();
if (dwErr == 0 || dwErr == 1460) {
fIsHungApp = TRUE;
goto _HUNG_ICON;
}
}
if (!hIcon)
hIcon = (HICON)(UINT_PTR)GetClassLongPtr(hwnd, GCLP_HICON);
if (!hIcon) {
_HUNG_ICON:
hIcon = LoadIcon(NULL, IDI_APPLICATION);
}
*phIcon = hIcon;
if (phIconSm) {
if (fIsHungApp)
goto _HUNG_ICONSM;
hIcon = NULL;
if (!SendMessageTimeout(hwnd, WM_GETICON, ICON_SMALL, 0,
SMTO_ABORTIFHUNG, HUNG_TIMEOUT, (PDWORD_PTR)&hIcon)) {
DWORD dwErr = GetLastError();
if (dwErr == 0 || dwErr == 1460)
goto _HUNG_ICONSM;
}
if (!hIcon) {
if (!SendMessageTimeout(hwnd, WM_GETICON, ICON_SMALL2, 0,
SMTO_ABORTIFHUNG, HUNG_TIMEOUT, (PDWORD_PTR)&hIcon)) {
DWORD dwErr = GetLastError();
if (dwErr == 0 || dwErr == 1460)
goto _HUNG_ICONSM;
}
}
if (!hIcon) {
hIcon = (HICON)(UINT_PTR)GetClassLongPtr(hwnd, GCLP_HICONSM);
}
if (hIcon) {
*phIconSm = hIcon;
} else {
_HUNG_ICONSM:
*phIconSm = *phIcon;
}
}
}
图标句柄 := SendMessage(窗口句柄, WM_GETICON, ICON_SMALL2, 0);
{第三个参数可选值:ICON_BIG, ICON_SMALL, ICON_SMALL2}
uses
ShellAPI;
var
SFI: TSHFileInfo;
ICO: TIcon;
begin
if SHGetFileInfo(
'c:\windows\system32\taskmgr.exe',
FILE_ATTRIBUTE_NORMAL,
SFI, SizeOf(TSHFileInfo),
SHGFI_ICON or SHGFI_SMALLICON {or SHGFI_LARGEICON}
) <> 0 then
begin
ICO := TIcon.Create;
ICO.Handle := SFI.hIcon;
// YOU CODE HERE ...
// DEMO: 运行后看本程序的窗口图标
Self.Icon.Handle := SFI.hIcon;
ICO.Free;
DestroyIcon(SFI.hIcon);
end;
end;