| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- unit dwTaskbarList;
- {$mode delphi}{$H+}
- interface
- uses
- Messages
- , Windows
- ;
- const
- CLSID_TaskbarList: TGUID = '{56FDF344-FD6D-11D0-958A-006097C9A090}';
- CLSID_TaskbarList2: TGUID = '{602D4995-B13A-429B-A66E-1935E44F4317}';
- CLSID_TaskbarList3: TGUID = '{EA1AFB91-9E28-4B86-90E9-9E9F8A5EEFAF}';
- const
- THBF_ENABLED = $0000;
- THBF_DISABLED = $0001;
- THBF_DISMISSONCLICK = $0002;
- THBF_NOBACKGROUND = $0004;
- THBF_HIDDEN = $0008;
- const
- THB_BITMAP = $0001;
- THB_ICON = $0002;
- THB_TOOLTIP = $0004;
- THB_FLAGS = $0008;
- const
- THBN_CLICKED = $1800;
- const
- TBPF_NOPROGRESS = $00;
- TBPF_INDETERMINATE = $01;
- TBPF_NORMAL = $02;
- TBPF_ERROR= $04;
- TBPF_PAUSED = $08;
- const
- TBATF_USEMDITHUMBNAIL: DWORD = $00000001;
- TBATF_USEMDILIVEPREVIEW: DWORD = $00000002;
-
- const
- WM_DWMSENDICONICTHUMBNAIL = $0323;
- WM_DWMSENDICONICLIVEPREVIEWBITMAP = $0326;
- type
- TTipString = array[0..259] of WideChar;
- PTipString = ^TTipString;
- tagTHUMBBUTTON = packed record
- dwMask
- : DWORD;
- iId
- , iBitmap
- : UINT;
- hIcon
- : HICON;
- szTip
- : TTipString;
- dwFlags
- : DWORD;
- end;
- THUMBBUTTON = tagTHUMBBUTTON;
- THUMBBUTTONLIST = ^THUMBBUTTON;
- TThumbButton = THUMBBUTTON;
- TThumbButtonList = array of TThumbButton;
- type
- ITaskbarList = interface
- ['{56FDF342-FD6D-11D0-958A-006097C9A090}']
- procedure HrInit; safecall;
- procedure AddTab(hwnd: HWND); safecall;
- procedure DeleteTab(hwnd: HWND); safecall;
- procedure ActivateTab(hwnd: HWND); safecall;
- procedure SetActiveAlt(hwnd: HWND); safecall;
- end;
- ITaskbarList2 = interface(ITaskbarList)
- ['{602D4995-B13A-429B-A66E-1935E44F4317}']
- procedure MarkFullscreenWindow(hwnd: HWND; fFullscreen: Bool); safecall;
- end;
- ITaskbarList3 = interface(ITaskbarList2)
- ['{EA1AFB91-9E28-4B86-90E9-9E9F8A5EEFAF}']
- procedure SetProgressValue(hwnd: HWND; ullCompleted, ullTotal: ULONGLONG); safecall;
- procedure SetProgressState(hwnd: HWND; tbpFlags: DWORD); safecall;
- procedure RegisterTab(hwndTab: HWND; hwndMDI: HWND); safecall;
- procedure UnregisterTab(hwndTab: HWND); safecall;
- procedure SetTabOrder(hwndTab: HWND; hwndInsertBefore: HWND); safecall;
- procedure SetTabActive(hwndTab: HWND; hwndMDI: HWND; tbatFlags: DWORD); safecall;
- procedure ThumbBarAddButtons(hwnd: HWND; cButtons: UINT; Button: THUMBBUTTONLIST); safecall;
- procedure ThumbBarUpdateButtons(hwnd: HWND; cButtons: UINT; pButton: THUMBBUTTONLIST); safecall;
- procedure ThumbBarSetImageList(hwnd: HWND; himl: HIMAGELIST); safecall;
- procedure SetOverlayIcon(hwnd: HWND; hIcon: HICON; pszDescription: LPCWSTR); safecall;
- procedure SetThumbnailTooltip(hwnd: HWND; pszTip: LPCWSTR); safecall;
- procedure SetThumbnailClip(hwnd: HWND; prcClip: PRect); safecall;
- end;
- const
- DWM_SIT_DISPLAYFRAME = $00000001; // Display a window frame around the provided bitmap
- DWMWA_FORCE_ICONIC_REPRESENTATION = 7; // [set] Force this window to display iconic thumbnails.
- DWMWA_HAS_ICONIC_BITMAP = 10; // [set] Indicates an available bitmap when there is no better thumbnail representation.
- DWMWA_DISALLOW_PEEK = 11; // [set] Don't invoke Peek on the window.
- type
- TWMDwmSendIconicLivePreviewBitmap = TWMNoParams;
- TWMDwmSendIconicThumbnail = packed record
- Msg
- : Cardinal;
- Unused
- : Integer;
- Height
- , Width
- : Word;
- Result
- : LongInt;
- end;
- function DwmInvalidateIconicBitmaps(hwnd: HWND): HRESULT;
- function DwmSetIconicLivePreviewBitmap(hwnd: HWND; hbmp: HBITMAP; pptClient: PPoint; dwSITFlags: DWORD): HRESULT;
- function DwmSetIconicThumbnail(hWnd: HWND; hBmp: HBITMAP; dwSITFlags: DWORD): HRESULT;
- function DwmSetWindowAttribute(hwnd: HWND; dwAttribute: DWORD; pvAttribute: Pointer; cbAttribute: DWORD): HRESULT;
- function PrintWindow(hwnd: HWND; hdcBlt: HDC; nFlags: UINT): BOOL;
- implementation
- var
- hDWMAPI: HMODULE;
- _DwmInvalidateIconicBitmaps: function(hwnd: HWND): HRESULT; stdcall;
- _DwmSetIconicThumbnail: function(hWnd: HWND; hBmp: HBITMAP; dwSITFlags: DWORD): HRESULT; stdcall;
- _DwmSetIconicLivePreviewBitmap: function(hwnd: HWND; hbmp: HBITMAP; pptClient: PPoint; dwSITFlags: DWORD): HRESULT; stdcall;
- _DwmSetWindowAttribute: function(hwnd: HWND; dwAttribute: DWORD; pvAttribute: Pointer; cbAttribute: DWORD): HRESULT; stdcall;
- _PrintWindow: function(hwnd: HWND; hdcBlt: HDC; nFlags: UINT): BOOL; stdcall;
- procedure InitDwmApi;
- begin
- if hDWMAPI = 0 then
- begin
- hDWMAPI := LoadLibrary('DWMAPI.DLL');
- if hDWMAPI = 0 then
- begin
- hDWMAPI := THandle(-1);
- end
- else
- begin
- _DwmInvalidateIconicBitmaps := GetProcAddress(hDWMAPI, 'DwmInvalidateIconicBitmaps');
- _DwmSetIconicLivePreviewBitmap := GetProcAddress(hDWMAPI, 'DwmSetIconicLivePreviewBitmap');
- _DwmSetIconicThumbnail := GetProcAddress(hDWMAPI, 'DwmSetIconicThumbnail');
- _DwmSetWindowAttribute := GetProcAddress(hDWMAPI, 'DwmSetWindowAttribute');
- end;
- end;
- end;
- function DwmInvalidateIconicBitmaps(hwnd: HWND): HRESULT;
- begin
- InitDwmApi;
- if Assigned(_DwmInvalidateIconicBitmaps) then
- Result := _DwmInvalidateIconicBitmaps(hwnd)
- else
- Result := E_NOTIMPL;
- end;
- function DwmSetIconicLivePreviewBitmap(hwnd: HWND; hbmp: HBITMAP; pptClient: PPoint; dwSITFlags: DWORD): HRESULT;
- begin
- InitDwmApi;
- if Assigned(_DwmSetIconicLivePreviewBitmap) then
- Result := _DwmSetIconicLivePreviewBitmap(hwnd, hbmp, pptClient, dwSITFlags)
- else
- Result := E_NOTIMPL;
- end;
- function DwmSetIconicThumbnail(hWnd: HWND; hBmp: HBITMAP; dwSITFlags: DWORD): HRESULT;
- begin
- InitDwmApi;
- if Assigned(_DwmSetIconicThumbnail) then
- Result := _DwmSetIconicThumbnail(hWnd, hBmp, dwSITFlags)
- else
- Result := E_NOTIMPL;
- end;
- function DwmSetWindowAttribute(hwnd: HWND; dwAttribute: DWORD; pvAttribute: Pointer; cbAttribute: DWORD): HRESULT;
- begin
- InitDwmApi;
- if Assigned(_DwmSetWindowAttribute) then
- Result := _DwmSetWindowAttribute(hwnd, dwAttribute, pvAttribute, cbAttribute)
- else
- Result := E_NOTIMPL;
- end;
- {-----------------------------------------------}
- function PrintWindow(hwnd: HWND; hdcBlt: HDC; nFlags: UINT): BOOL;
- begin
- if Assigned(_PrintWindow) then
- begin
- Result := _PrintWindow(hwnd, hdcBlt, nFlags);
- end
- else
- begin
- _PrintWindow := GetProcAddress(GetModuleHandle('user32.dll'), 'PrintWindow');
- Result := Assigned(_PrintWindow) and _PrintWindow(hwnd, hdcBlt, nFlags);
- end;
- end;
- end.
|