Windows XP Windows 7 Windows 2003 Windows Vista Windows教程綜合 Linux 系統教程
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟件教程
 Windows教程網 >> Windows 7系統教程 >> win7系統基礎知識 >> 用托管代碼調用 Windows 7 任務欄的新功能

用托管代碼調用 Windows 7 任務欄的新功能

日期:2017/1/24 15:40:09      編輯:win7系統基礎知識

Windows 7 Beta已經公開發布了的,可從http://www.microsoft.com/windows/windows-7/beta-download.aspx下載。W7在任務欄上做了很大的改進,關於任務欄的新特性可以看一下http://blogs.msdn.com/e7/archive/2008/11/20/happy-anniversary-windows-on-the-evolution-of-the-taskbar.aspx。如果要對Windows 7進行開發最好看一下白皮書,可以從http://code.msdn.microsoft.com/PDC08WhitePapers/Release/ProjectReleases.ASPx?ReleaseId=1797下載。我們對任務欄進行開發會用到Windows 7 Taskbar Enhancements。這裡我們主要實現在任務欄的圖標中顯示進度(Overlay Icons and Progress Bars)。在實現過程中還可能需要用到Windows 7 SDK Beta。

開始

首先在Windows SDK中找到ShObjIdl.idl文件,如果沒有安裝SDK可以在文後下載。這是一個接口定義語言文件,為了方便調用,我們可以將類似

1HRESULT SetProgressValue(
2    [in] HWND hwnd,
3    [in] ULONGLONG ullCompleted,
4    [in] ULONGLONG ullTotal);

這樣的接口聲明改為

1HRESULT SetProgressValue(
2    [in] long hwnd,
3    [in] ULONGLONG ullCompleted,
4    [in] ULONGLONG ullTotal);

也就是把HWND類型改成long。然後用midl將改過的idl文件生成二進制的tlb文件, ShObjTlb.tlb是生成的文件,ShObjIdl.idl是原文件。

用托管代碼調用 Windows 7 任務欄的新功能

再用tlbimp將tlb文件生成托管dll文件。

用托管代碼調用 Windows 7 任務欄的新功能

在項目中添加對該dll的引用,然後就可以像引用托管dll一樣調用其中的方法了。

要實現在任務欄圖標中顯示進度主要用到2個函數,SetProgressState和SetProgressState。

SetProgressState方法的第一個參數是句柄,第二個參數是個枚舉變量,表示當前圖標的狀態,我們可自己定義一個枚舉來表現這些狀態

1private enum TbpFlag
2    {
3      TBPF_ERROR = 1,
4      TBPF_PAUSED = 2,
5      TBPF_NORMAL = 3,
6      TBPF_INDETERMINATE = 4,
7    };

然後就可以使用SetProgressState( (int)this.Handle , TBPFLAG.TBPF_NORMAL);將圖標狀態設置成正常狀態。

SetProgressValue((int)this.Handle, 50, 100);可以設置進度,第一個參數是句柄,第二個參數是已完成量,第三個參數是總量。

關於這些函數的詳細使用方法請查看Windows 7 SDK或英文版的MSDN Library。

效果

20%完成時:

用托管代碼調用 Windows 7 任務欄的新功能

50%完成時:

用托管代碼調用 Windows 7 任務欄的新功能

100%完成時: 

用托管代碼調用 Windows 7 任務欄的新功能

其他

根據這個方法並參照PDC2008的白皮書中的介紹可以用托管語言實現其他Windows 7的新功能。

非托管代碼

如果用C++實現這個功能將更簡單,可以參考Windows SDK,路徑是Microsoft SDKsWindowsv7.0SampleswinuiShellTaskbarIntegrationPeripheralStatus

Copyright © Windows教程網 All Rights Reserved