INASOFT 管理人のひとことフリーソフトダウンロードサイト「INASOFT」の管理人 矢吹拓也 が日々の「ひとこと」を語るページです。 2021年1月1日より、旧ブログ(blog.inasoft.org)からお引越ししました。 ・INASOFT Webサイト: https://www.inasoft.org/ ・管理人のふたこと(長文記事/寄稿文): https://www.inasoft.org/talk/ 2022年7月下旬より再び本業多忙化してきているため、更新頻度は落ちます。 [2022/7/24 19:32] Tweet ■はてな引用記法テスト兼Windows 7のタスクバーを進捗バーに2010年10月17日(日) 2:29:09 [はてなダイアリーから転記] |
RSS配信中 | |
はてなの引用記法を試してみるってのもありますが 先日書いた、Windows 7用のタスクバーを進捗バーにするというものを書いてみようかと。 なお、Windows 7用のタスクバーを進捗バーにする方法は、上のリンクでも書いてあるとおり、単純に DLL を直接呼ぶことにより実現するようなことができません。 そのため、どうしても、最新の開発環境を用いる必要が出てきます。 しかし、いじくるつくーるは、Windows 98以降に対応するツールです。 そのため、安易にVisual Studio 2010を使おうってわけにもいきません。というのも、Visual Studio 2010でビルドすると、Windows XP以降でしか実行できないバイナリが生成されてしまうので。 というわけで今回は、Visual Studio 2005にWindows SDK 7.1を導入することにより、Windows 7の機能を使ってみたいと思います。 で、これをライブラリ(libファイル)として準備しておき、本体のビルドはデフォルトのSDKを使ってビルドしようというわけ。 #include "stdafx.h" ← windows.hとShObjIdl.hをインクルード。_WIN32_WINNTは0x0601以上にしておく必要があるかも // Windows 7から新しく追加された機能を代理で呼び出すためのライブラリ。 // このプログラムをコンパイルするためには、Windows SDK 7.1 が必要です。 // ライブラリをリンクするときには不要です。 // しかしながら、IID_ITaskbarList3を使うには、リンク時にWindows SDK 6.1が使用されていないといけません。 // そこで… // このプログラムでは、下記の宣言を使う代わりに、以下のIIDを宣言します。 //EXTERN_C const IID IID_ITaskbarList3; static const GUID IID_ITaskbarList3A = {0xea1afb91,0x9e28,0x4b86,{0x90,0xe9,0x9e,0x9f,0x8a,0x5e,0xef,0xaf}}; /* IID */ // このライブラリを使う前に、CoInitialize を必ず呼び出してください。 // また、プログラム終了前には CoUninitialize を必ず呼び出してください。 LibExport BOOL w7tbProgress(HWND hWnd, DWORD dwTbpFlag, DWORD dwValue, DWORD dwMax) // LibExport = Extern "C" (C++の場合) { static ITaskbarList3* ptl; // インタフェース if (hWnd == NULL) { // 解放 if (ptl != NULL) { ptl->Release(); ptl = NULL; return TRUE; } else { return FALSE; } } if (ptl == NULL) { if (S_OK != CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_ALL, IID_ITaskbarList3A, (void**)&ptl)) { return FALSE; // 失敗 } // ptlに値が入れば、以後はCoCreateInstanceは呼び出されない } if (ptl) { ptl->SetProgressState(hWnd, (TBPFLAG)dwTbpFlag); if (dwTbpFlag == TBPF_NORMAL) { ptl->SetProgressValue(hWnd, (ULONGLONG)dwValue, (ULONGLONG)dwMax); } return TRUE; } else { return FALSE; } } まぁ実験的なプログラムではありますが、 w7tbProgress の引数dwTbpFlagmへは、以下のフラグが入ります TBPF_NOPROGRESS = 0, TBPF_INDETERMINATE = 0x1, TBPF_NORMAL = 0x2, TBPF_ERROR = 0x4, TBPF_PAUSED = 0x8 hWndパラメタがNULLの場合は、ITaskbarList3.Releaseメソッドが呼ばれて解放です。 dwTbpFlagに入れたフラグが 0x2 だった場合、dwValue と dwMax が有効になります。dwMaxを最大とした場合の dwValue が、進捗バーの進捗度を示すことになります。 dwTbpFlagが0の場合は進捗バーなし、0x1の場合は最大が未定の場合に、あいまいに進捗バーを動かします。 0x4はエラー発生時、0x8は一時停止中(ユーザーに質問中など)の状態を意味します。あ、この場合も、dwValue と dwMax が有効になりますかね。 目次の表示: ブログではないので、コメント機能とトラックバック機能は提供していません。ご質問・ご意見等はメール、フィードバックまたはTwitter等からお願いします。いただいたご質問・ご意見などは、この「管理人のひとこと」の記事に追加、あるいは新規の記事にする形で一部または全文をそのまま、あるいは加工させていただいた上で、ご紹介させていただく場合があります。 当サイトでは掲載内容による不具合等に関する責任を持ちません。また、内容の正確性についての保証もありませんので、情報をご利用の際は、利用者の自己責任で確認をお願いします。 |
- 最近の更新 - |
|
3212362 (+0059)[+0214] Copyright© 2010-2024 INASOFT |