<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Windows 7 Insider &#187; Blogs</title>
	<atom:link href="http://win7insider.com/category/blogs/feed/" rel="self" type="application/rss+xml" />
	<link>http://win7insider.com</link>
	<description>Information &#38; Tips About Windows 7</description>
	<lastBuildDate>Sun, 05 Feb 2012 08:45:10 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Blog Post: Windows 7 タスク バー関連の開発 &#8211; サムネイル ツール バー</title>
		<link>http://win7insider.com/2011/08/04/blog-post-windows-7-%e3%82%bf%e3%82%b9%e3%82%af-%e3%83%90%e3%83%bc%e9%96%a2%e9%80%a3%e3%81%ae%e9%96%8b%e7%99%ba-%e3%82%b5%e3%83%a0%e3%83%8d%e3%82%a4%e3%83%ab-%e3%83%84%e3%83%bc%e3%83%ab-%e3%83%90-3/</link>
		<comments>http://win7insider.com/2011/08/04/blog-post-windows-7-%e3%82%bf%e3%82%b9%e3%82%af-%e3%83%90%e3%83%bc%e9%96%a2%e9%80%a3%e3%81%ae%e9%96%8b%e7%99%ba-%e3%82%b5%e3%83%a0%e3%83%8d%e3%82%a4%e3%83%ab-%e3%83%84%e3%83%bc%e3%83%ab-%e3%83%90-3/#comments</comments>
		<pubDate>Thu, 04 Aug 2011 07:30:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blogs]]></category>

		<guid isPermaLink="false">http://win7insider.com/2011/08/04/blog-post-windows-7-%e3%82%bf%e3%82%b9%e3%82%af-%e3%83%90%e3%83%bc%e9%96%a2%e9%80%a3%e3%81%ae%e9%96%8b%e7%99%ba-%e3%82%b5%e3%83%a0%e3%83%8d%e3%82%a4%e3%83%ab-%e3%83%84%e3%83%bc%e3%83%ab-%e3%83%90-3/</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>みなさん、こんにちは。Windows 開発統括部の古内です。</p>
<p>今日も引き続き Windows 7 のタスク バーに関するブログ記事の翻訳をお届けします。今回は、2009 年 12 月 4 日に <a rel="nofollow" target="_blank" href="http://windowsteamblog.com/windows/b/developers/">Developing for Windows</a> Blog に 投稿された 「<a rel="nofollow" target="_blank" href="http://windowsteamblog.com/windows/b/developers/archive/2009/12/04/developing-for-windows-7-taskbar-thumbnail-toolbars.aspx">Developing for Windows 7 Taskbar &#8211; Thumbnail Toolbars</a>」 の翻訳です。</p>
<hr />
<h3>Windows 7 タスク バー関連の開発 &#8211; サムネイル ツール バー</h3>
<p>今回は、おなじみの Windows 7 API についての説明に戻ります。Windows 7 タスク バーの基本事項については既に 「<a rel="nofollow" target="_blank" href="http://blogs.msdn.com/b/jpwin/archive/2011/07/13/developing-for-win7-taskbar-appid.aspx">Windows 7 タスク バー関連の開発 &ndash; Application ID</a>」 という記事で紹介し、アプリケーションのジャンプ リストの作成については 「<a rel="nofollow" target="_blank" href="http://blogs.msdn.com/b/jpwin/archive/2011/07/19/developing-for-win7-taskbar-jump-lists-part-1.aspx">Windows 7 タスク バー関連の開発 &ndash; ジャンプ リストの活用 (その 1)</a><i></i>」、「<a rel="nofollow" target="_blank" href="http://blogs.msdn.com/b/jpwin/archive/2011/07/20/developing-for-win7-taskbar-jump-list-part-2.aspx">その 2</a><i></i>」、「<a rel="nofollow" target="_blank" href="http://blogs.msdn.com/b/jpwin/archive/2011/07/21/developing-for-win7-taskbar-jump-list-part-3.aspx">その 3</a>」 で取り上げました。この記事では、エンド ユーザーの作業効率向上を実現するサムネイル ツール バーの使用を中心に説明します。また、サムネイル プレビューと共通する詳細についても触れます。</p>
<p>まずは、サムネイル ツール バーの概念を簡単に説明しましょう。サムネイル ツール バーがどのような機能かを既にご存知の方は、実際のコードでの説明が始まる中盤あたりまで読み飛ばしてください。</p>
<table border="0" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td valign="top" width="562">サムネイル ツール バーは、フォーカスが当たっていない場合 (または非表示の場合) でもアプリケーションの機能にアクセスできるようにする機能で、作業効率の向上にとても役立ちます。つまり、この機能があれば、アプリケーションにアクセスするのに、そのアプリケーションに切り替える (ウィンドウをアクティブにする) 必要はありません。サムネイル ツール バーは、最大 7 個のボタンを置くことができ、タスク バー アイコンのサムネイル プレビューの下部に表示されます。</td>
</tr>
</tbody>
</table>
<table border="0" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td valign="top" width="275">
<p>このわかりやすい例が、Windows Media Player のサムネイル ツール バーです (隣の画像を参照してください)。アプリケーションの実行中にマウス ポインターを Media Player アイコンに重ねると、再生/一時停止、次の曲、前の曲の 3 つのボタンが表示されます。このボタンをクリックすると、各ボタンが示す処理が実行されます。</p>
</td>
<td valign="top" width="288"><a rel="nofollow" target="_blank" href="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/developers/Taskbar_5F00_ThumbnailToolbar1_5F00_4548551E.png"><img style="float:none;margin-left:auto;margin-right:auto;border-width:0px" border="0" alt="Taskbar_ThumbnailToolbar1" src="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/developers/Taskbar_5F00_ThumbnailToolbar1_5F00_thumb_5F00_394664EA.png" width="240" height="223" /></a></td>
</tr>
</tbody>
</table>
<p>また、以前にこの Developing for Windows Blog で取り上げた <a rel="nofollow" target="_blank" href="http://windowsteamblog.com/windows/b/developers/archive/2009/11/19/fishbowl-for-facebook-using-the-windows-7-taskbar-for-extra-spice.aspx">Fishbowl for Facebook アプリケーション (英語)</a> も良い例です。このアプリケーションは、Facebook ユーザーのだれもが行う一般的なタスクにすばやく簡単にアクセスできるようにするためにサムネイル プレビューを活用しています。ホームや友達のフィードの表示などの操作をサムネイル ツール バーで実行することが可能です。下の画像が示すように、Fishbowl サムネイル ツール バーにはボタンが 5 個あります (実際は 6 個ですが、これについては後で説明します)。</p>
<p><a rel="nofollow" target="_blank" href="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/developers/thumbnailbutton_5F00_3908A181.png"><img style="margin:0px auto;float:none;border-width:0px" border="0" alt="サムネイル ボタン" src="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/developers/thumbnailbutton_5F00_thumb_5F00_30A4CC2A.png" width="382" height="360" /></a></p>
<p>これらの例のように、この優れたタスク バー機能は多くの場面で必要とされています。では、この機能の実装について見ていきましょう。最初に、基本的なルールを説明します。</p>
<ul>
<li>ボタンは 7 個まで表示できる。サイズは固定で、16 X 16 ピクセル (高 DPI の場合は最大 24 X 24 ピクセル) にあらかじめ定義されている。</li>
<li>サムネイル ツール バー ボタンは、アプリケーション内のアクティブ ウィンドウごとに設定できる。つまり、複数のウィンドウで構成されるアプリケーションの場合は、ウィンドウごとに異なるサムネイル ツール バーを表示することが前提となる。</li>
<li>ボタンをいったん設定したら (通常はタスク バー アイコンの生成時に設定する)、ツール バー上のボタンを追加または削除することはできない。ただし、ボタンを非表示にすることはできる。</li>
</ul>
<p>いつものように、ネイティブ コード (Win32) の実装から説明します。次のサンプルは Windows 7 SDK にあります。</p>
<p>サムネイル ツール バー ボタンを追加するには、ITaskbarList4 インターフェイスを使用します。このインターフェイスには、タスク バーのアイテムを動的に追加、削除、有効化するメソッドが含まれています。サムネイル ツール バーを操作する場合、具体的には以下のメソッドを使用します。</p>
<ul>
<li><b>ThumbBarAddButtons</b> &#8211; 指定されたボタン群を持つサムネイル ツール バー (タスク バー ボタンのポップアップ ウィンドウとして表示されるサムネイル画像に埋め込むツール バー) を、タスク バー ボタンのポップアップ ウィンドウとして表示されるサムネイル画像に追加する。<b></b></li>
<li><b>ThumbBarSetImageList</b> &#8211; タスク バー ボタンのポップアップ ウィンドウとして表示されるサムネイル画像に埋め込むツール バー内の、各ボタンに使われる画像を含む画像リストを指定する。<b></b></li>
<li><b>ThumbBarUpdateButtons</b> &#8211; サムネイル ツール バーのボタンをウィンドウの現在の状態に応じて、有効化、無効化、非表示化する。</li>
</ul>
<p>タスク バー アイコン関連の操作では常に操作対象のタスク バー アイコンが存在することを確認します。これには、<b>RegisterWindowMessage</b> メソッドを使用して &ldquo;TaskbarCreatedMessage&rdquo; を登録した後、メッセージが Win32 WndProc メソッドに届くのを待ちます。アプリケーションがこのメッセージを受信したら、サムネイル ツール バー ボタンの作成に進んでも安全です。この <b>WndProc</b> メソッドは、作成したサムネイル ボタンがクリックされたときに発生する <b>WM_COMMAND</b> メッセージも受信します。wParam パラメーターの下位ワードにはそのボタンのボタン ID が格納され、上位ワードは単純に <b>THBN_CLICKED</b> に設定されます。次のコード スニペットにこの処理を示します。</p>
<div>
<div>
<pre>LRESULT CALLBACK WndProc(</pre>
<pre> HWND hWnd, UINT message, </pre>
<pre> WPARAM wParam, LPARAM lParam)</pre>
<pre>{</pre>
<pre> <span>static</span> UINT s_uTBBC = WM_NULL;</pre>
<pre>&nbsp;</pre>
<pre> <span>if</span> (s_uTBBC == WM_NULL)</pre>
<pre> {</pre>
<pre> <span>// TaskbarButtonCreated メッセージの値を計算する</span></pre>
<pre> s_uTBBC = RegisterWindowMessage(L<span>"TaskbarButtonCreated"</span>);</pre>
<pre>&nbsp;</pre>
<pre> <span>// 権限昇格による管理者特権でアプリケーションが実行される場合を考慮して、</span></pre>
<pre> <span>// TaskbarButtonCreated および WM_COMMAND メッセージの受信を許可する</span></pre>
<pre> ChangeWindowMessageFilter(s_uTBBC, MSGFLT_ADD);</pre>
<pre> ChangeWindowMessageFilter(WM_COMMAND, MSGFLT_ADD);</pre>
<pre> }</pre>
<pre>&nbsp;</pre>
<pre> <span>if</span> (message == s_uTBBC) <span>//wmTaskbarButtonCreated)</span></pre>
<pre> {</pre>
<pre> <span>// TaskbarButtonCreated メッセージを取得したら、</span></pre>
<pre> <span>// ウィンドウのサムネイル ツール バーを作成する</span></pre>
<pre> CreateThumbnailToolbar(hWnd);</pre>
<pre> }</pre>
<pre> <span>else</span> <span>switch</span> (message)</pre>
<pre> {</pre>
<pre> <span>case</span> WM_COMMAND:</pre>
<pre> {</pre>
<pre> <span>int</span> <span>const</span> wmId = LOWORD(wParam);</pre>
<pre> <span>switch</span> (wmId)</pre>
<pre> {</pre>
<pre> <span>case</span> IDTB_BUTTON1:</pre>
<pre> <span>case</span> IDTB_BUTTON2:</pre>
<pre> <span>case</span> IDTB_BUTTON3:</pre>
<pre> {</pre>
<pre> WCHAR szMsg[100];</pre>
<pre> StringCchPrintf(</pre>
<pre> szMsg, ARRAYSIZE(szMsg), </pre>
<pre> L<span>"Thumbnail toolbar button clicked, </span></pre>
<pre> ID=%d", wmId);</pre>
<pre>&nbsp;</pre>
<pre> MessageBox(hWnd, szMsg, L<span>"Application"</span>, MB_OK);</pre>
<pre> <span>break</span>;</pre>
<pre> }</pre>
<pre> <span>case</span> IDM_EXIT:</pre>
<pre> DestroyWindow(hWnd);</pre>
<pre> <span>break</span>;</pre>
<pre>&nbsp;</pre>
<pre> <span>default</span>:</pre>
<pre> <span>return</span> DefWindowProc(hWnd, message, wParam, lParam);</pre>
<pre> }</pre>
<pre> <span>break</span>;</pre>
<pre> }</pre>
<pre> <span>case</span> WM_DESTROY:</pre>
<pre> PostQuitMessage(0);</pre>
<pre> <span>break</span>;</pre>
<pre> <span>default</span>:</pre>
<pre> <span>return</span> DefWindowProc(hWnd, message, wParam, lParam);</pre>
<pre> }</pre>
<pre> <span>return</span> 0;</pre>
<pre>}</pre>
</p></div>
</p></div>
<p>TaskbarCreatedMessage メッセージをリッスンするよう登録した直後に <b>ChangeWindowMessageFilter</b> メソッドを呼び出している点に注意してください。このメソッドは、ユーザー インターフェイス特権の分離 (UIPI) メッセージ フィルターでフィルター処理するメッセージを追加または削除します。この処理は、ユーザーが権限を昇格して管理者特権でアプリケーションを実行している場合のために必要です。簡単に説明しましょう。タスク バーは explorer.exe プロセスの一部であり、中度の整合性レベルつまり標準ユーザーとして実行されます。Windows Vista と UIPI の導入以降、特権レベルの低いアプリケーションは、レベルの高いアプリケーションに Windows メッセージを送信できなくなりました。このため、整合性レベルの低い送信者からのメッセージを受信するにはフィルターを変更する必要があります。ここでは、TaskbarCreatedMessage および <b>WM_COMMAND</b> の結果を受信できるようにします。UIPI については、近く、別の記事で説明する予定です。</p>
<p>本題に戻ります。<b>WM_COMMAND</b> の処理はきわめて単純で、wParam パラメーターの下位ワードからボタン ID を抽出しているだけです。これは単なる例なので、実際にはその ID による処理は何も行っていません (switch 文はすべてのボタンで同じです)。</p>
<p>次に、サムネイル ツール バーを登録するのに必要な処理について説明します。先ほどのコード スニペットでは、CreateThumbnailToolbar ヘルパー メソッドを呼び出しています。以下にこのメソッドのコードを示します。</p>
<div>
<div>
<pre>HRESULT CreateThumbnailToolbar(HWND hWnd)</pre>
<pre>{</pre>
<pre> ITaskbarList4 *pTaskbarList;</pre>
<pre> HRESULT hr = CoCreateInstance(</pre>
<pre> CLSID_TaskbarList, </pre>
<pre> NULL, </pre>
<pre> CLSCTX_INPROC_SERVER, </pre>
<pre> IID_PPV_ARGS(&amp;pTaskbarList));</pre>
<pre>&nbsp;</pre>
<pre> <span>if</span> (SUCCEEDED(hr))</pre>
<pre> {</pre>
<pre> hr = pTaskbarList-&gt;HrInit();</pre>
<pre> <span>if</span> (SUCCEEDED(hr))</pre>
<pre> {</pre>
<pre> <span>// サムネイル ツール バー ボタン用に、 </span></pre>
<pre> <span>// どのビットマップを使用するかを判断する</span></pre>
<pre> <span>// システムの「小さいアイコン」の幅を基準に決定する</span></pre>
<pre> <span>// これにより DPI 対応になる</span></pre>
<pre> <span>struct</span> </pre>
<pre> {</pre>
<pre> PCWSTR pbmp;</pre>
<pre> <span>int</span> cx;</pre>
<pre> } </pre>
<pre> <span>const</span> bitmaps[3] =</pre>
<pre> {</pre>
<pre> { MAKEINTRESOURCE(IDB_BUTTONIMAGES_96), 16 },</pre>
<pre> { MAKEINTRESOURCE(IDB_BUTTONIMAGES_120), 20 },</pre>
<pre> { MAKEINTRESOURCE(IDB_BUTTONIMAGES_144), 24 }</pre>
<pre> };</pre>
<pre>&nbsp;</pre>
<pre> <span>int</span> <span>const</span> cxButton = GetSystemMetrics(SM_CXSMICON);</pre>
<pre>&nbsp;</pre>
<pre> <span>int</span> iButtons = 0;</pre>
<pre> <span>for</span> (<span>int</span> i = 0; i &lt; ARRAYSIZE(bitmaps); i++)</pre>
<pre> {</pre>
<pre> <span>if</span> (bitmaps[i].cx &lt;= cxButton)</pre>
<pre> {</pre>
<pre> iButtons = i;</pre>
<pre> }</pre>
<pre> }</pre>
<pre>&nbsp;</pre>
<pre> HIMAGELIST himl = ImageList_LoadImage(</pre>
<pre> g_hInstance, </pre>
<pre> bitmaps[iButtons].pbmp,</pre>
<pre> bitmaps[iButtons].cx, </pre>
<pre> 0, </pre>
<pre> RGB(255,0,255), </pre>
<pre> IMAGE_BITMAP, </pre>
<pre> LR_CREATEDIBSECTION);</pre>
<pre>&nbsp;</pre>
<pre> <span>if</span> (himl)</pre>
<pre> {</pre>
<pre> hr = pTaskbarList-&gt;ThumbBarSetImageList(hWnd, himl);</pre>
<pre> <span>if</span> (SUCCEEDED(hr))</pre>
<pre> {</pre>
<pre> THUMBBUTTON buttons[3] = {};</pre>
<pre>&nbsp;</pre>
<pre> <span>// 1 つ目のボタン</span></pre>
<pre> buttons[0].dwMask = THB_BITMAP | THB_TOOLTIP | THB_FLAGS;</pre>
<pre> buttons[0].dwFlags = THBF_ENABLED | THBF_DISMISSONCLICK;</pre>
<pre> buttons[0].iId = IDTB_BUTTON1;</pre>
<pre> buttons[0].iBitmap = 0;</pre>
<pre> StringCchCopy(buttons[0].szTip, </pre>
<pre> ARRAYSIZE(buttons[0].szTip), L<span>"Button 1"</span>);</pre>
<pre>&nbsp;</pre>
<pre> <span>// 2 つ目のボタン</span></pre>
<pre> buttons[1].dwMask = THB_BITMAP | THB_TOOLTIP | THB_FLAGS;</pre>
<pre> buttons[1].dwFlags = THBF_ENABLED | THBF_DISMISSONCLICK;</pre>
<pre> buttons[1].iId = IDTB_BUTTON2;</pre>
<pre> buttons[1].iBitmap = 1;</pre>
<pre> StringCchCopy(buttons[1].szTip, </pre>
<pre> ARRAYSIZE(buttons[1].szTip), L<span>"Button 2"</span>);</pre>
<pre>&nbsp;</pre>
<pre> <span>// 3 つ目のボタン</span></pre>
<pre> buttons[2].dwMask = THB_BITMAP | THB_TOOLTIP | THB_FLAGS;</pre>
<pre> buttons[2].dwFlags = THBF_ENABLED | THBF_DISMISSONCLICK;</pre>
<pre> buttons[2].iId = IDTB_BUTTON3;</pre>
<pre> buttons[2].iBitmap = 2;</pre>
<pre> StringCchCopy(buttons[2].szTip, </pre>
<pre> ARRAYSIZE(buttons[2].szTip), L<span>"Button 3"</span>);</pre>
<pre>&nbsp;</pre>
<pre> <span>// これらのボタンをサムネイル ツール バーに設定する</span></pre>
<pre> hr = pTaskbarList-&gt;ThumbBarAddButtons(</pre>
<pre> hWnd, </pre>
<pre> ARRAYSIZE(buttons), </pre>
<pre> buttons);</pre>
<pre> }</pre>
<pre> ImageList_Destroy(himl);</pre>
<pre> }</pre>
<pre> }</pre>
<pre> <span>// ITaskbarList3 はここで解放してかまわない</span></pre>
<pre> <span>// サムネイル ツール バーは残る</span></pre>
<pre> pTaskbarList-&gt;Release();</pre>
<pre> }</pre>
<pre> <span>return</span> hr;</pre>
<pre>}</pre>
</p></div>
</p></div>
<p>最初に、ITasbarList4 COM インターフェイスを CoCreate する必要があります。次に、標準的な方法に従って、<b>HrInit</b> を呼び出し Taskbar リスト オブジェクトを初期化します。このメソッドを呼び出した後、他の ITaskbarList メソッドが呼び出せるようになります。次に、使用するビットマップのリストを設定します。「小さいアイコン」に推奨される幅 (ピクセル単位) を確認する必要があります。この値は DPI 設定によって変わってきます。最後に、<b>ThumbBarSetImageList</b> を呼び出してボタンのアイコンを設定します。ソース コードをダウンロードしたら、この行をコメントアウトしてアプリケーションを実行するとどのような結果になるか、ぜひ試してみてください。</p>
<p>次に、3 つの THUMBBUTTON を含む配列を作成し、各ボタンのビットマップ、ツールヒント、フラグを設定します。これはツール バー ボタンの構成に使用します。たとえば、ビットマップ値は (THUMBBUTTON の) iBitmap フィールドの値が有効であることを示します。THB_FLAGS を使用すると、ボタンの状態や動作 (有効、無効、非表示など) を指定できます。SDK には他にもたくさんのオプションが用意されています。またこのサンプルでは、クリックされたボタンを識別できるようにボタン ID を設定しています。この ID は WM_COMMAND メッセージと一緒に送信されます。</p>
<table border="0" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td valign="top" width="275">最後に、<b>ThumbBarAddButtons</b> メソッドを呼び出して現在の hWnd とボタンの配列を渡します。これによりサムネイル ツール バーが登録されます。マウス ポインターをアプリケーションのタスク バー アイコンに重ねると、3 つの色付きボタンが表示されるようになります (下の画像を参照してください)。</td>
<td valign="top" width="293"><a rel="nofollow" target="_blank" href="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/developers/Taskbar_5F00_ThumbnailToolbar2_5F00_76F34CA6.png"><img style="float:none;margin-left:auto;margin-right:auto;border-width:0px" border="0" alt="Taskbar_ThumbnailToolbar2" src="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/developers/Taskbar_5F00_ThumbnailToolbar2_5F00_thumb_5F00_417A8A81.png" width="240" height="230" /></a></td>
</tr>
</tbody>
</table>
<p>マネージ コード アプリケーションのサムネイル ツール バーは、Windows API Code Pack を使用して作成できます。以下は、<a rel="nofollow" target="_blank" href="http://channel9.msdn.com/learn/">Channel 9 Learning Center (英語)</a> にある <a rel="nofollow" target="_blank" href="http://channel9.msdn.com/learn/courses/Windows7/">Windows 7 トレーニング キット</a>の一部です。<a rel="nofollow" target="_blank" href="http://blogs.msdn.com/jaimer/">Jaime Rodriguez</a> が作成した TaskbarConcepts というデモは、WPF アプリケーションとして作成されており、開発者が利用できる Windows タスク バーの機能を網羅しています。ここではサムネイル ツール バーの部分のみ触れます。他の部分については各自でぜひお試しください。このデモは、WPF アプリケーションのマネージ コード サンプルのベースとして今後もたびたび使用する予定です。</p>
<p>Windows API Code Pack を使用する場合は、当然ながら、Windows メッセージの登録や処理に頭を悩ませることはありません。<b>TaskbarManager</b> を使用するだけで済みます。特に、<b>ThumbnailToolbars</b> が便利です。ここには、ThumbnailToolbarButton オブジェクトを追加するときに必要な AddButtons メソッドが用意されています。ThumbnailToolbarButton オブジェクトはタスク バー サムネイル ボタンを表し、これを通してタスク バー ボタンの有効化/無効化、アイコンやツールヒントの変更、表示/非表示の制御を行うことが可能です。また、マネージ コードなので、ご期待のとおり、ボタンの <b>Click</b> イベントにイベント ハンドラーを接続できます。手間のかかることもある Windows メッセージを操作する必要はありません。以下は、<b>ToolbarButtons.xaml.cs</b> ファイル内のコードの一部です。サムネイル ツール バーをマネージ コード アプリケーションに追加することがとても簡単であることがわかります。</p>
<div>
<div>
<pre><span>private</span> <span>void</span> CreateToolbarButtons()</pre>
<pre>{</pre>
<pre> buttonFirst = <span>new</span> ThumbnailToolbarButton(</pre>
<pre> TaskbarConcepts.Resources.first, <span>"First Image"</span>);</pre>
<pre> buttonFirst.Enabled = <span>false</span>;</pre>
<pre> buttonFirst.Click += buttonFirst_Click;</pre>
<pre>&nbsp;</pre>
<pre> buttonPrevious = <span>new</span> ThumbnailToolbarButton(</pre>
<pre> TaskbarConcepts.Resources.prevArrow, <span>"Previous Image"</span>);</pre>
<pre> buttonPrevious.Enabled = <span>false</span>;</pre>
<pre> buttonPrevious.Click += buttonPrevious_Click;</pre>
<pre>&nbsp;</pre>
<pre> buttonNext = <span>new</span> ThumbnailToolbarButton(</pre>
<pre> TaskbarConcepts.Resources.nextArrow, <span>"Next Image"</span>);</pre>
<pre> buttonNext.Click += buttonNext_Click;</pre>
<pre>&nbsp;</pre>
<pre> buttonLast = <span>new</span> ThumbnailToolbarButton(</pre>
<pre> TaskbarConcepts.Resources.last, <span>"Last Image"</span>);</pre>
<pre> buttonLast.Click += buttonLast_Click;</pre>
<pre>&nbsp;</pre>
<pre> TaskbarManager.Instance.ThumbnailToolbars.AddButtons</pre>
<pre> (</pre>
<pre> <span>new</span> WindowInteropHelper(Application.Current.MainWindow).Handle,</pre>
<pre> buttonFirst, </pre>
<pre> buttonPrevious, </pre>
<pre> buttonNext, </pre>
<pre> buttonLast</pre>
<pre> );</pre>
<pre>}</pre>
</p></div>
</p></div>
<p>このファイルの残りのコードでは、さまざまなイベントのロジックと処理を行っています。これにより、以下の図にあるように、メイン アプリケーションに表示されるさまざまな画像を制御できるようになっています。</p>
<p><a rel="nofollow" target="_blank" href="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/developers/Taskbar_5F00_ThumbnailToolbar3_5F00_47C1610F.png"><img style="float:none;margin-left:auto;margin-right:auto;border-width:0px" border="0" alt="Taskbar_ThumbnailToolbar3" src="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/developers/Taskbar_5F00_ThumbnailToolbar3_5F00_thumb_5F00_7F93A532.png" width="579" height="368" /></a></p>
<p>以上の説明で、サムネイル ツール バーを適切に導入できればメリットが大きいこと、またその実装が簡単であることを理解していただけたと思います。</p>
<p>ところで、Fishbowl のサムネイル ツール バーのボタンが 5 個ではなく 6 個である理由をまだ説明していませんでした (最初の画像を参照してください)。画像をよく見ると、左側の 4 個のボタンはアプリケーションの動作に直接影響しますが、右側に 1 個だけあるボタンは既定のブラウザーを起動して Facebook の Web サイトを自動的に読み込むだけであることがわかります。つまり、ボタンの種類に応じてボタンを分けて表示していることがわかります。アプリケーションはボタンを 6 個作成していますが、5 番目のボタンは非表示なのでボタンの間にスペースがあるように見えます。これを実現するには、Win32 アプリケーションの場合は <b>ThumbBarUpdateButtons</b> を使用します。</p>
<p>マネージ コード開発の場合は、<strong>ThubmnailButton</strong> を非表示にすることで簡単に実現できます。Windows API Code Pack を詳しく調べると、<strong>ThubmnailButton</strong> クラスに、ツール バー ボタンの表示状態を制御する Visible プロパティがあることがわかります。Visible Set セクションの終わりに <strong>UpdateThumbnailButton</strong>() 関数があります。これは、基本的にはネイティブの <b>ThumbBarUpdateButtons</b> メソッドのラッパーです。</p>
<p>Win32 ネイティブのサンプルは<a rel="nofollow" target="_blank" href="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/developers.CodeSamples/NativeTaskbarThumbnailToolbar.zip">こちら</a>からダウンロードできます。</p>
<p>マネージ コード (WPF) のサンプルは<a rel="nofollow" target="_blank" href="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/developers.CodeSamples/ManagedTaskbarConcepts_5F00_Solution.zip">こちら</a>からダウンロードできます。</p>
<p><a rel="nofollow" target="_blank" href="http://channel9.msdn.com/learn/">Channel 9 Learning Center (英語)</a> では、他の <a rel="nofollow" target="_blank" href="http://channel9.msdn.com/learn/courses/Windows7/">Windows 7 タスク バー関連のトレーニング キット</a>も提供されています。</p>
]]></content:encoded>
			<wfw:commentRss>http://win7insider.com/2011/08/04/blog-post-windows-7-%e3%82%bf%e3%82%b9%e3%82%af-%e3%83%90%e3%83%bc%e9%96%a2%e9%80%a3%e3%81%ae%e9%96%8b%e7%99%ba-%e3%82%b5%e3%83%a0%e3%83%8d%e3%82%a4%e3%83%ab-%e3%83%84%e3%83%bc%e3%83%ab-%e3%83%90-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blog Post: Windows 7 タスク バー関連の開発 &#8211; サムネイル ツール バー</title>
		<link>http://win7insider.com/2011/08/04/blog-post-windows-7-%e3%82%bf%e3%82%b9%e3%82%af-%e3%83%90%e3%83%bc%e9%96%a2%e9%80%a3%e3%81%ae%e9%96%8b%e7%99%ba-%e3%82%b5%e3%83%a0%e3%83%8d%e3%82%a4%e3%83%ab-%e3%83%84%e3%83%bc%e3%83%ab-%e3%83%90-2/</link>
		<comments>http://win7insider.com/2011/08/04/blog-post-windows-7-%e3%82%bf%e3%82%b9%e3%82%af-%e3%83%90%e3%83%bc%e9%96%a2%e9%80%a3%e3%81%ae%e9%96%8b%e7%99%ba-%e3%82%b5%e3%83%a0%e3%83%8d%e3%82%a4%e3%83%ab-%e3%83%84%e3%83%bc%e3%83%ab-%e3%83%90-2/#comments</comments>
		<pubDate>Thu, 04 Aug 2011 07:30:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blogs]]></category>

		<guid isPermaLink="false">http://win7insider.com/2011/08/04/blog-post-windows-7-%e3%82%bf%e3%82%b9%e3%82%af-%e3%83%90%e3%83%bc%e9%96%a2%e9%80%a3%e3%81%ae%e9%96%8b%e7%99%ba-%e3%82%b5%e3%83%a0%e3%83%8d%e3%82%a4%e3%83%ab-%e3%83%84%e3%83%bc%e3%83%ab-%e3%83%90-2/</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>みなさん、こんにちは。Windows 開発統括部の古内です。</p>
<p>今日も引き続き Windows 7 のタスク バーに関するブログ記事の翻訳をお届けします。今回は、2009 年 12 月 4 日に <a rel="nofollow" target="_blank" href="http://windowsteamblog.com/windows/b/developers/">Developing for Windows</a> Blog に 投稿された 「<a rel="nofollow" target="_blank" href="http://windowsteamblog.com/windows/b/developers/archive/2009/12/04/developing-for-windows-7-taskbar-thumbnail-toolbars.aspx">Developing for Windows 7 Taskbar &#8211; Thumbnail Toolbars</a>」 の翻訳です。</p>
<hr />
<h3>Windows 7 タスク バー関連の開発 &#8211; サムネイル ツール バー</h3>
<p>今回は、おなじみの Windows 7 API についての説明に戻ります。Windows 7 タスク バーの基本事項については既に 「<a rel="nofollow" target="_blank" href="http://blogs.msdn.com/b/jpwin/archive/2011/07/13/developing-for-win7-taskbar-appid.aspx">Windows 7 タスク バー関連の開発 &ndash; Application ID</a>」 という記事で紹介し、アプリケーションのジャンプ リストの作成については 「<a rel="nofollow" target="_blank" href="http://blogs.msdn.com/b/jpwin/archive/2011/07/19/developing-for-win7-taskbar-jump-lists-part-1.aspx">Windows 7 タスク バー関連の開発 &ndash; ジャンプ リストの活用 (その 1)</a><i></i>」、「<a rel="nofollow" target="_blank" href="http://blogs.msdn.com/b/jpwin/archive/2011/07/20/developing-for-win7-taskbar-jump-list-part-2.aspx">その 2</a><i></i>」、「<a rel="nofollow" target="_blank" href="http://blogs.msdn.com/b/jpwin/archive/2011/07/21/developing-for-win7-taskbar-jump-list-part-3.aspx">その 3</a>」 で取り上げました。この記事では、エンド ユーザーの作業効率向上を実現するサムネイル ツール バーの使用を中心に説明します。また、サムネイル プレビューと共通する詳細についても触れます。</p>
<p>まずは、サムネイル ツール バーの概念を簡単に説明しましょう。サムネイル ツール バーがどのような機能かを既にご存知の方は、実際のコードでの説明が始まる中盤あたりまで読み飛ばしてください。</p>
<table border="0" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td valign="top" width="562">サムネイル ツール バーは、フォーカスが当たっていない場合 (または非表示の場合) でもアプリケーションの機能にアクセスできるようにする機能で、作業効率の向上にとても役立ちます。つまり、この機能があれば、アプリケーションにアクセスするのに、そのアプリケーションに切り替える (ウィンドウをアクティブにする) 必要はありません。サムネイル ツール バーは、最大 7 個のボタンを置くことができ、タスク バー アイコンのサムネイル プレビューの下部に表示されます。</td>
</tr>
</tbody>
</table>
<table border="0" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td valign="top" width="275">
<p>このわかりやすい例が、Windows Media Player のサムネイル ツール バーです (隣の画像を参照してください)。アプリケーションの実行中にマウス ポインターを Media Player アイコンに重ねると、再生/一時停止、次の曲、前の曲の 3 つのボタンが表示されます。このボタンをクリックすると、各ボタンが示す処理が実行されます。</p>
</td>
<td valign="top" width="288"><a rel="nofollow" target="_blank" href="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/developers/Taskbar_5F00_ThumbnailToolbar1_5F00_4548551E.png"><img style="float:none;margin-left:auto;margin-right:auto;border-width:0px" border="0" alt="Taskbar_ThumbnailToolbar1" src="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/developers/Taskbar_5F00_ThumbnailToolbar1_5F00_thumb_5F00_394664EA.png" width="240" height="223" /></a></td>
</tr>
</tbody>
</table>
<p>また、以前にこの Developing for Windows Blog で取り上げた <a rel="nofollow" target="_blank" href="http://windowsteamblog.com/windows/b/developers/archive/2009/11/19/fishbowl-for-facebook-using-the-windows-7-taskbar-for-extra-spice.aspx">Fishbowl for Facebook アプリケーション (英語)</a> も良い例です。このアプリケーションは、Facebook ユーザーのだれもが行う一般的なタスクにすばやく簡単にアクセスできるようにするためにサムネイル プレビューを活用しています。ホームや友達のフィードの表示などの操作をサムネイル ツール バーで実行することが可能です。下の画像が示すように、Fishbowl サムネイル ツール バーにはボタンが 5 個あります (実際は 6 個ですが、これについては後で説明します)。</p>
<p><a rel="nofollow" target="_blank" href="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/developers/thumbnailbutton_5F00_3908A181.png"><img style="margin:0px auto;float:none;border-width:0px" border="0" alt="サムネイル ボタン" src="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/developers/thumbnailbutton_5F00_thumb_5F00_30A4CC2A.png" width="382" height="360" /></a></p>
<p>これらの例のように、この優れたタスク バー機能は多くの場面で必要とされています。では、この機能の実装について見ていきましょう。最初に、基本的なルールを説明します。</p>
<ul>
<li>ボタンは 7 個まで表示できる。サイズは固定で、16 X 16 ピクセル (高 DPI の場合は最大 24 X 24 ピクセル) にあらかじめ定義されている。</li>
<li>サムネイル ツール バー ボタンは、アプリケーション内のアクティブ ウィンドウごとに設定できる。つまり、複数のウィンドウで構成されるアプリケーションの場合は、ウィンドウごとに異なるサムネイル ツール バーを表示することが前提となる。</li>
<li>ボタンをいったん設定したら (通常はタスク バー アイコンの生成時に設定する)、ツール バー上のボタンを追加または削除することはできない。ただし、ボタンを非表示にすることはできる。</li>
</ul>
<p>いつものように、ネイティブ コード (Win32) の実装から説明します。次のサンプルは Windows 7 SDK にあります。</p>
<p>サムネイル ツール バー ボタンを追加するには、ITaskbarList4 インターフェイスを使用します。このインターフェイスには、タスク バーのアイテムを動的に追加、削除、有効化するメソッドが含まれています。サムネイル ツール バーを操作する場合、具体的には以下のメソッドを使用します。</p>
<ul>
<li><b>ThumbBarAddButtons</b> &#8211; 指定されたボタン群を持つサムネイル ツール バー (タスク バー ボタンのポップアップ ウィンドウとして表示されるサムネイル画像に埋め込むツール バー) を、タスク バー ボタンのポップアップ ウィンドウとして表示されるサムネイル画像に追加する。<b></b></li>
<li><b>ThumbBarSetImageList</b> &#8211; タスク バー ボタンのポップアップ ウィンドウとして表示されるサムネイル画像に埋め込むツール バー内の、各ボタンに使われる画像を含む画像リストを指定する。<b></b></li>
<li><b>ThumbBarUpdateButtons</b> &#8211; サムネイル ツール バーのボタンをウィンドウの現在の状態に応じて、有効化、無効化、非表示化する。</li>
</ul>
<p>タスク バー アイコン関連の操作では常に操作対象のタスク バー アイコンが存在することを確認します。これには、<b>RegisterWindowMessage</b> メソッドを使用して &ldquo;TaskbarCreatedMessage&rdquo; を登録した後、メッセージが Win32 WndProc メソッドに届くのを待ちます。アプリケーションがこのメッセージを受信したら、サムネイル ツール バー ボタンの作成に進んでも安全です。この <b>WndProc</b> メソッドは、作成したサムネイル ボタンがクリックされたときに発生する <b>WM_COMMAND</b> メッセージも受信します。wParam パラメーターの下位ワードにはそのボタンのボタン ID が格納され、上位ワードは単純に <b>THBN_CLICKED</b> に設定されます。次のコード スニペットにこの処理を示します。</p>
<div>
<div>
<pre>LRESULT CALLBACK WndProc(</pre>
<pre> HWND hWnd, UINT message, </pre>
<pre> WPARAM wParam, LPARAM lParam)</pre>
<pre>{</pre>
<pre> <span>static</span> UINT s_uTBBC = WM_NULL;</pre>
<pre>&nbsp;</pre>
<pre> <span>if</span> (s_uTBBC == WM_NULL)</pre>
<pre> {</pre>
<pre> <span>// TaskbarButtonCreated メッセージの値を計算する</span></pre>
<pre> s_uTBBC = RegisterWindowMessage(L<span>"TaskbarButtonCreated"</span>);</pre>
<pre>&nbsp;</pre>
<pre> <span>// 権限昇格による管理者特権でアプリケーションが実行される場合を考慮して、</span></pre>
<pre> <span>// TaskbarButtonCreated および WM_COMMAND メッセージの受信を許可する</span></pre>
<pre> ChangeWindowMessageFilter(s_uTBBC, MSGFLT_ADD);</pre>
<pre> ChangeWindowMessageFilter(WM_COMMAND, MSGFLT_ADD);</pre>
<pre> }</pre>
<pre>&nbsp;</pre>
<pre> <span>if</span> (message == s_uTBBC) <span>//wmTaskbarButtonCreated)</span></pre>
<pre> {</pre>
<pre> <span>// TaskbarButtonCreated メッセージを取得したら、</span></pre>
<pre> <span>// ウィンドウのサムネイル ツール バーを作成する</span></pre>
<pre> CreateThumbnailToolbar(hWnd);</pre>
<pre> }</pre>
<pre> <span>else</span> <span>switch</span> (message)</pre>
<pre> {</pre>
<pre> <span>case</span> WM_COMMAND:</pre>
<pre> {</pre>
<pre> <span>int</span> <span>const</span> wmId = LOWORD(wParam);</pre>
<pre> <span>switch</span> (wmId)</pre>
<pre> {</pre>
<pre> <span>case</span> IDTB_BUTTON1:</pre>
<pre> <span>case</span> IDTB_BUTTON2:</pre>
<pre> <span>case</span> IDTB_BUTTON3:</pre>
<pre> {</pre>
<pre> WCHAR szMsg[100];</pre>
<pre> StringCchPrintf(</pre>
<pre> szMsg, ARRAYSIZE(szMsg), </pre>
<pre> L<span>"Thumbnail toolbar button clicked, </span></pre>
<pre> ID=%d", wmId);</pre>
<pre>&nbsp;</pre>
<pre> MessageBox(hWnd, szMsg, L<span>"Application"</span>, MB_OK);</pre>
<pre> <span>break</span>;</pre>
<pre> }</pre>
<pre> <span>case</span> IDM_EXIT:</pre>
<pre> DestroyWindow(hWnd);</pre>
<pre> <span>break</span>;</pre>
<pre>&nbsp;</pre>
<pre> <span>default</span>:</pre>
<pre> <span>return</span> DefWindowProc(hWnd, message, wParam, lParam);</pre>
<pre> }</pre>
<pre> <span>break</span>;</pre>
<pre> }</pre>
<pre> <span>case</span> WM_DESTROY:</pre>
<pre> PostQuitMessage(0);</pre>
<pre> <span>break</span>;</pre>
<pre> <span>default</span>:</pre>
<pre> <span>return</span> DefWindowProc(hWnd, message, wParam, lParam);</pre>
<pre> }</pre>
<pre> <span>return</span> 0;</pre>
<pre>}</pre>
</p></div>
</p></div>
<p>TaskbarCreatedMessage メッセージをリッスンするよう登録した直後に <b>ChangeWindowMessageFilter</b> メソッドを呼び出している点に注意してください。このメソッドは、ユーザー インターフェイス特権の分離 (UIPI) メッセージ フィルターでフィルター処理するメッセージを追加または削除します。この処理は、ユーザーが権限を昇格して管理者特権でアプリケーションを実行している場合のために必要です。簡単に説明しましょう。タスク バーは explorer.exe プロセスの一部であり、中度の整合性レベルつまり標準ユーザーとして実行されます。Windows Vista と UIPI の導入以降、特権レベルの低いアプリケーションは、レベルの高いアプリケーションに Windows メッセージを送信できなくなりました。このため、整合性レベルの低い送信者からのメッセージを受信するにはフィルターを変更する必要があります。ここでは、TaskbarCreatedMessage および <b>WM_COMMAND</b> の結果を受信できるようにします。UIPI については、近く、別の記事で説明する予定です。</p>
<p>本題に戻ります。<b>WM_COMMAND</b> の処理はきわめて単純で、wParam パラメーターの下位ワードからボタン ID を抽出しているだけです。これは単なる例なので、実際にはその ID による処理は何も行っていません (switch 文はすべてのボタンで同じです)。</p>
<p>次に、サムネイル ツール バーを登録するのに必要な処理について説明します。先ほどのコード スニペットでは、CreateThumbnailToolbar ヘルパー メソッドを呼び出しています。以下にこのメソッドのコードを示します。</p>
<div>
<div>
<pre>HRESULT CreateThumbnailToolbar(HWND hWnd)</pre>
<pre>{</pre>
<pre> ITaskbarList4 *pTaskbarList;</pre>
<pre> HRESULT hr = CoCreateInstance(</pre>
<pre> CLSID_TaskbarList, </pre>
<pre> NULL, </pre>
<pre> CLSCTX_INPROC_SERVER, </pre>
<pre> IID_PPV_ARGS(&amp;pTaskbarList));</pre>
<pre>&nbsp;</pre>
<pre> <span>if</span> (SUCCEEDED(hr))</pre>
<pre> {</pre>
<pre> hr = pTaskbarList-&gt;HrInit();</pre>
<pre> <span>if</span> (SUCCEEDED(hr))</pre>
<pre> {</pre>
<pre> <span>// サムネイル ツール バー ボタン用に、 </span></pre>
<pre> <span>// どのビットマップを使用するかを判断する</span></pre>
<pre> <span>// システムの「小さいアイコン」の幅を基準に決定する</span></pre>
<pre> <span>// これにより DPI 対応になる</span></pre>
<pre> <span>struct</span> </pre>
<pre> {</pre>
<pre> PCWSTR pbmp;</pre>
<pre> <span>int</span> cx;</pre>
<pre> } </pre>
<pre> <span>const</span> bitmaps[3] =</pre>
<pre> {</pre>
<pre> { MAKEINTRESOURCE(IDB_BUTTONIMAGES_96), 16 },</pre>
<pre> { MAKEINTRESOURCE(IDB_BUTTONIMAGES_120), 20 },</pre>
<pre> { MAKEINTRESOURCE(IDB_BUTTONIMAGES_144), 24 }</pre>
<pre> };</pre>
<pre>&nbsp;</pre>
<pre> <span>int</span> <span>const</span> cxButton = GetSystemMetrics(SM_CXSMICON);</pre>
<pre>&nbsp;</pre>
<pre> <span>int</span> iButtons = 0;</pre>
<pre> <span>for</span> (<span>int</span> i = 0; i &lt; ARRAYSIZE(bitmaps); i++)</pre>
<pre> {</pre>
<pre> <span>if</span> (bitmaps[i].cx &lt;= cxButton)</pre>
<pre> {</pre>
<pre> iButtons = i;</pre>
<pre> }</pre>
<pre> }</pre>
<pre>&nbsp;</pre>
<pre> HIMAGELIST himl = ImageList_LoadImage(</pre>
<pre> g_hInstance, </pre>
<pre> bitmaps[iButtons].pbmp,</pre>
<pre> bitmaps[iButtons].cx, </pre>
<pre> 0, </pre>
<pre> RGB(255,0,255), </pre>
<pre> IMAGE_BITMAP, </pre>
<pre> LR_CREATEDIBSECTION);</pre>
<pre>&nbsp;</pre>
<pre> <span>if</span> (himl)</pre>
<pre> {</pre>
<pre> hr = pTaskbarList-&gt;ThumbBarSetImageList(hWnd, himl);</pre>
<pre> <span>if</span> (SUCCEEDED(hr))</pre>
<pre> {</pre>
<pre> THUMBBUTTON buttons[3] = {};</pre>
<pre>&nbsp;</pre>
<pre> <span>// 1 つ目のボタン</span></pre>
<pre> buttons[0].dwMask = THB_BITMAP | THB_TOOLTIP | THB_FLAGS;</pre>
<pre> buttons[0].dwFlags = THBF_ENABLED | THBF_DISMISSONCLICK;</pre>
<pre> buttons[0].iId = IDTB_BUTTON1;</pre>
<pre> buttons[0].iBitmap = 0;</pre>
<pre> StringCchCopy(buttons[0].szTip, </pre>
<pre> ARRAYSIZE(buttons[0].szTip), L<span>"Button 1"</span>);</pre>
<pre>&nbsp;</pre>
<pre> <span>// 2 つ目のボタン</span></pre>
<pre> buttons[1].dwMask = THB_BITMAP | THB_TOOLTIP | THB_FLAGS;</pre>
<pre> buttons[1].dwFlags = THBF_ENABLED | THBF_DISMISSONCLICK;</pre>
<pre> buttons[1].iId = IDTB_BUTTON2;</pre>
<pre> buttons[1].iBitmap = 1;</pre>
<pre> StringCchCopy(buttons[1].szTip, </pre>
<pre> ARRAYSIZE(buttons[1].szTip), L<span>"Button 2"</span>);</pre>
<pre>&nbsp;</pre>
<pre> <span>// 3 つ目のボタン</span></pre>
<pre> buttons[2].dwMask = THB_BITMAP | THB_TOOLTIP | THB_FLAGS;</pre>
<pre> buttons[2].dwFlags = THBF_ENABLED | THBF_DISMISSONCLICK;</pre>
<pre> buttons[2].iId = IDTB_BUTTON3;</pre>
<pre> buttons[2].iBitmap = 2;</pre>
<pre> StringCchCopy(buttons[2].szTip, </pre>
<pre> ARRAYSIZE(buttons[2].szTip), L<span>"Button 3"</span>);</pre>
<pre>&nbsp;</pre>
<pre> <span>// これらのボタンをサムネイル ツール バーに設定する</span></pre>
<pre> hr = pTaskbarList-&gt;ThumbBarAddButtons(</pre>
<pre> hWnd, </pre>
<pre> ARRAYSIZE(buttons), </pre>
<pre> buttons);</pre>
<pre> }</pre>
<pre> ImageList_Destroy(himl);</pre>
<pre> }</pre>
<pre> }</pre>
<pre> <span>// ITaskbarList3 はここで解放してかまわない</span></pre>
<pre> <span>// サムネイル ツール バーは残る</span></pre>
<pre> pTaskbarList-&gt;Release();</pre>
<pre> }</pre>
<pre> <span>return</span> hr;</pre>
<pre>}</pre>
</p></div>
</p></div>
<p>最初に、ITasbarList4 COM インターフェイスを CoCreate する必要があります。次に、標準的な方法に従って、<b>HrInit</b> を呼び出し Taskbar リスト オブジェクトを初期化します。このメソッドを呼び出した後、他の ITaskbarList メソッドが呼び出せるようになります。次に、使用するビットマップのリストを設定します。「小さいアイコン」に推奨される幅 (ピクセル単位) を確認する必要があります。この値は DPI 設定によって変わってきます。最後に、<b>ThumbBarSetImageList</b> を呼び出してボタンのアイコンを設定します。ソース コードをダウンロードしたら、この行をコメントアウトしてアプリケーションを実行するとどのような結果になるか、ぜひ試してみてください。</p>
<p>次に、3 つの THUMBBUTTON を含む配列を作成し、各ボタンのビットマップ、ツールヒント、フラグを設定します。これはツール バー ボタンの構成に使用します。たとえば、ビットマップ値は (THUMBBUTTON の) iBitmap フィールドの値が有効であることを示します。THB_FLAGS を使用すると、ボタンの状態や動作 (有効、無効、非表示など) を指定できます。SDK には他にもたくさんのオプションが用意されています。またこのサンプルでは、クリックされたボタンを識別できるようにボタン ID を設定しています。この ID は WM_COMMAND メッセージと一緒に送信されます。</p>
<table border="0" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td valign="top" width="275">最後に、<b>ThumbBarAddButtons</b> メソッドを呼び出して現在の hWnd とボタンの配列を渡します。これによりサムネイル ツール バーが登録されます。マウス ポインターをアプリケーションのタスク バー アイコンに重ねると、3 つの色付きボタンが表示されるようになります (下の画像を参照してください)。</td>
<td valign="top" width="293"><a rel="nofollow" target="_blank" href="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/developers/Taskbar_5F00_ThumbnailToolbar2_5F00_76F34CA6.png"><img style="float:none;margin-left:auto;margin-right:auto;border-width:0px" border="0" alt="Taskbar_ThumbnailToolbar2" src="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/developers/Taskbar_5F00_ThumbnailToolbar2_5F00_thumb_5F00_417A8A81.png" width="240" height="230" /></a></td>
</tr>
</tbody>
</table>
<p>マネージ コード アプリケーションのサムネイル ツール バーは、Windows API Code Pack を使用して作成できます。以下は、<a rel="nofollow" target="_blank" href="http://channel9.msdn.com/learn/">Channel 9 Learning Center (英語)</a> にある <a rel="nofollow" target="_blank" href="http://channel9.msdn.com/learn/courses/Windows7/">Windows 7 トレーニング キット</a>の一部です。<a rel="nofollow" target="_blank" href="http://blogs.msdn.com/jaimer/">Jaime Rodriguez</a> が作成した TaskbarConcepts というデモは、WPF アプリケーションとして作成されており、開発者が利用できる Windows タスク バーの機能を網羅しています。ここではサムネイル ツール バーの部分のみ触れます。他の部分については各自でぜひお試しください。このデモは、WPF アプリケーションのマネージ コード サンプルのベースとして今後もたびたび使用する予定です。</p>
<p>Windows API Code Pack を使用する場合は、当然ながら、Windows メッセージの登録や処理に頭を悩ませることはありません。<b>TaskbarManager</b> を使用するだけで済みます。特に、<b>ThumbnailToolbars</b> が便利です。ここには、ThumbnailToolbarButton オブジェクトを追加するときに必要な AddButtons メソッドが用意されています。ThumbnailToolbarButton オブジェクトはタスク バー サムネイル ボタンを表し、これを通してタスク バー ボタンの有効化/無効化、アイコンやツールヒントの変更、表示/非表示の制御を行うことが可能です。また、マネージ コードなので、ご期待のとおり、ボタンの <b>Click</b> イベントにイベント ハンドラーを接続できます。手間のかかることもある Windows メッセージを操作する必要はありません。以下は、<b>ToolbarButtons.xaml.cs</b> ファイル内のコードの一部です。サムネイル ツール バーをマネージ コード アプリケーションに追加することがとても簡単であることがわかります。</p>
<div>
<div>
<pre><span>private</span> <span>void</span> CreateToolbarButtons()</pre>
<pre>{</pre>
<pre> buttonFirst = <span>new</span> ThumbnailToolbarButton(</pre>
<pre> TaskbarConcepts.Resources.first, <span>"First Image"</span>);</pre>
<pre> buttonFirst.Enabled = <span>false</span>;</pre>
<pre> buttonFirst.Click += buttonFirst_Click;</pre>
<pre>&nbsp;</pre>
<pre> buttonPrevious = <span>new</span> ThumbnailToolbarButton(</pre>
<pre> TaskbarConcepts.Resources.prevArrow, <span>"Previous Image"</span>);</pre>
<pre> buttonPrevious.Enabled = <span>false</span>;</pre>
<pre> buttonPrevious.Click += buttonPrevious_Click;</pre>
<pre>&nbsp;</pre>
<pre> buttonNext = <span>new</span> ThumbnailToolbarButton(</pre>
<pre> TaskbarConcepts.Resources.nextArrow, <span>"Next Image"</span>);</pre>
<pre> buttonNext.Click += buttonNext_Click;</pre>
<pre>&nbsp;</pre>
<pre> buttonLast = <span>new</span> ThumbnailToolbarButton(</pre>
<pre> TaskbarConcepts.Resources.last, <span>"Last Image"</span>);</pre>
<pre> buttonLast.Click += buttonLast_Click;</pre>
<pre>&nbsp;</pre>
<pre> TaskbarManager.Instance.ThumbnailToolbars.AddButtons</pre>
<pre> (</pre>
<pre> <span>new</span> WindowInteropHelper(Application.Current.MainWindow).Handle,</pre>
<pre> buttonFirst, </pre>
<pre> buttonPrevious, </pre>
<pre> buttonNext, </pre>
<pre> buttonLast</pre>
<pre> );</pre>
<pre>}</pre>
</p></div>
</p></div>
<p>このファイルの残りのコードでは、さまざまなイベントのロジックと処理を行っています。これにより、以下の図にあるように、メイン アプリケーションに表示されるさまざまな画像を制御できるようになっています。</p>
<p><a rel="nofollow" target="_blank" href="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/developers/Taskbar_5F00_ThumbnailToolbar3_5F00_47C1610F.png"><img style="float:none;margin-left:auto;margin-right:auto;border-width:0px" border="0" alt="Taskbar_ThumbnailToolbar3" src="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/developers/Taskbar_5F00_ThumbnailToolbar3_5F00_thumb_5F00_7F93A532.png" width="579" height="368" /></a></p>
<p>以上の説明で、サムネイル ツール バーを適切に導入できればメリットが大きいこと、またその実装が簡単であることを理解していただけたと思います。</p>
<p>ところで、Fishbowl のサムネイル ツール バーのボタンが 5 個ではなく 6 個である理由をまだ説明していませんでした (最初の画像を参照してください)。画像をよく見ると、左側の 4 個のボタンはアプリケーションの動作に直接影響しますが、右側に 1 個だけあるボタンは既定のブラウザーを起動して Facebook の Web サイトを自動的に読み込むだけであることがわかります。つまり、ボタンの種類に応じてボタンを分けて表示していることがわかります。アプリケーションはボタンを 6 個作成していますが、5 番目のボタンは非表示なのでボタンの間にスペースがあるように見えます。これを実現するには、Win32 アプリケーションの場合は <b>ThumbBarUpdateButtons</b> を使用します。</p>
<p>マネージ コード開発の場合は、<strong>ThubmnailButton</strong> を非表示にすることで簡単に実現できます。Windows API Code Pack を詳しく調べると、<strong>ThubmnailButton</strong> クラスに、ツール バー ボタンの表示状態を制御する Visible プロパティがあることがわかります。Visible Set セクションの終わりに <strong>UpdateThumbnailButton</strong>() 関数があります。これは、基本的にはネイティブの <b>ThumbBarUpdateButtons</b> メソッドのラッパーです。</p>
<p>Win32 ネイティブのサンプルは<a rel="nofollow" target="_blank" href="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/developers.CodeSamples/NativeTaskbarThumbnailToolbar.zip">こちら</a>からダウンロードできます。</p>
<p>マネージ コード (WPF) のサンプルは<a rel="nofollow" target="_blank" href="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/developers.CodeSamples/ManagedTaskbarConcepts_5F00_Solution.zip">こちら</a>からダウンロードできます。</p>
<p><a rel="nofollow" target="_blank" href="http://channel9.msdn.com/learn/">Channel 9 Learning Center (英語)</a> では、他の <a rel="nofollow" target="_blank" href="http://channel9.msdn.com/learn/courses/Windows7/">Windows 7 タスク バー関連のトレーニング キット</a>も提供されています。</p>
]]></content:encoded>
			<wfw:commentRss>http://win7insider.com/2011/08/04/blog-post-windows-7-%e3%82%bf%e3%82%b9%e3%82%af-%e3%83%90%e3%83%bc%e9%96%a2%e9%80%a3%e3%81%ae%e9%96%8b%e7%99%ba-%e3%82%b5%e3%83%a0%e3%83%8d%e3%82%a4%e3%83%ab-%e3%83%84%e3%83%bc%e3%83%ab-%e3%83%90-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blog Post: Windows 7 タスク バー関連の開発 &#8211; サムネイル ツール バー</title>
		<link>http://win7insider.com/2011/08/04/blog-post-windows-7-%e3%82%bf%e3%82%b9%e3%82%af-%e3%83%90%e3%83%bc%e9%96%a2%e9%80%a3%e3%81%ae%e9%96%8b%e7%99%ba-%e3%82%b5%e3%83%a0%e3%83%8d%e3%82%a4%e3%83%ab-%e3%83%84%e3%83%bc%e3%83%ab-%e3%83%90/</link>
		<comments>http://win7insider.com/2011/08/04/blog-post-windows-7-%e3%82%bf%e3%82%b9%e3%82%af-%e3%83%90%e3%83%bc%e9%96%a2%e9%80%a3%e3%81%ae%e9%96%8b%e7%99%ba-%e3%82%b5%e3%83%a0%e3%83%8d%e3%82%a4%e3%83%ab-%e3%83%84%e3%83%bc%e3%83%ab-%e3%83%90/#comments</comments>
		<pubDate>Thu, 04 Aug 2011 07:30:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blogs]]></category>

		<guid isPermaLink="false">http://win7insider.com/2011/08/04/blog-post-windows-7-%e3%82%bf%e3%82%b9%e3%82%af-%e3%83%90%e3%83%bc%e9%96%a2%e9%80%a3%e3%81%ae%e9%96%8b%e7%99%ba-%e3%82%b5%e3%83%a0%e3%83%8d%e3%82%a4%e3%83%ab-%e3%83%84%e3%83%bc%e3%83%ab-%e3%83%90/</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>みなさん、こんにちは。Windows 開発統括部の古内です。</p>
<p>今日も引き続き Windows 7 のタスク バーに関するブログ記事の翻訳をお届けします。今回は、2009 年 12 月 4 日に <a rel="nofollow" target="_blank" href="http://windowsteamblog.com/windows/b/developers/">Developing for Windows</a> Blog に 投稿された 「<a rel="nofollow" target="_blank" href="http://windowsteamblog.com/windows/b/developers/archive/2009/12/04/developing-for-windows-7-taskbar-thumbnail-toolbars.aspx">Developing for Windows 7 Taskbar &#8211; Thumbnail Toolbars</a>」 の翻訳です。</p>
<hr />
<h3>Windows 7 タスク バー関連の開発 &#8211; サムネイル ツール バー</h3>
<p>今回は、おなじみの Windows 7 API についての説明に戻ります。Windows 7 タスク バーの基本事項については既に 「<a rel="nofollow" target="_blank" href="http://blogs.msdn.com/b/jpwin/archive/2011/07/13/developing-for-win7-taskbar-appid.aspx">Windows 7 タスク バー関連の開発 &ndash; Application ID</a>」 という記事で紹介し、アプリケーションのジャンプ リストの作成については 「<a rel="nofollow" target="_blank" href="http://blogs.msdn.com/b/jpwin/archive/2011/07/19/developing-for-win7-taskbar-jump-lists-part-1.aspx">Windows 7 タスク バー関連の開発 &ndash; ジャンプ リストの活用 (その 1)</a><i></i>」、「<a rel="nofollow" target="_blank" href="http://blogs.msdn.com/b/jpwin/archive/2011/07/20/developing-for-win7-taskbar-jump-list-part-2.aspx">その 2</a><i></i>」、「<a rel="nofollow" target="_blank" href="http://blogs.msdn.com/b/jpwin/archive/2011/07/21/developing-for-win7-taskbar-jump-list-part-3.aspx">その 3</a>」 で取り上げました。この記事では、エンド ユーザーの作業効率向上を実現するサムネイル ツール バーの使用を中心に説明します。また、サムネイル プレビューと共通する詳細についても触れます。</p>
<p>まずは、サムネイル ツール バーの概念を簡単に説明しましょう。サムネイル ツール バーがどのような機能かを既にご存知の方は、実際のコードでの説明が始まる中盤あたりまで読み飛ばしてください。</p>
<table border="0" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td valign="top" width="562">サムネイル ツール バーは、フォーカスが当たっていない場合 (または非表示の場合) でもアプリケーションの機能にアクセスできるようにする機能で、作業効率の向上にとても役立ちます。つまり、この機能があれば、アプリケーションにアクセスするのに、そのアプリケーションに切り替える (ウィンドウをアクティブにする) 必要はありません。サムネイル ツール バーは、最大 7 個のボタンを置くことができ、タスク バー アイコンのサムネイル プレビューの下部に表示されます。</td>
</tr>
</tbody>
</table>
<table border="0" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td valign="top" width="275">
<p>このわかりやすい例が、Windows Media Player のサムネイル ツール バーです (隣の画像を参照してください)。アプリケーションの実行中にマウス ポインターを Media Player アイコンに重ねると、再生/一時停止、次の曲、前の曲の 3 つのボタンが表示されます。このボタンをクリックすると、各ボタンが示す処理が実行されます。</p>
</td>
<td valign="top" width="288"><a rel="nofollow" target="_blank" href="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/developers/Taskbar_5F00_ThumbnailToolbar1_5F00_4548551E.png"><img style="float:none;margin-left:auto;margin-right:auto;border-width:0px" border="0" alt="Taskbar_ThumbnailToolbar1" src="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/developers/Taskbar_5F00_ThumbnailToolbar1_5F00_thumb_5F00_394664EA.png" width="240" height="223" /></a></td>
</tr>
</tbody>
</table>
<p>また、以前にこの Developing for Windows Blog で取り上げた <a rel="nofollow" target="_blank" href="http://windowsteamblog.com/windows/b/developers/archive/2009/11/19/fishbowl-for-facebook-using-the-windows-7-taskbar-for-extra-spice.aspx">Fishbowl for Facebook アプリケーション (英語)</a> も良い例です。このアプリケーションは、Facebook ユーザーのだれもが行う一般的なタスクにすばやく簡単にアクセスできるようにするためにサムネイル プレビューを活用しています。ホームや友達のフィードの表示などの操作をサムネイル ツール バーで実行することが可能です。下の画像が示すように、Fishbowl サムネイル ツール バーにはボタンが 5 個あります (実際は 6 個ですが、これについては後で説明します)。</p>
<p><a rel="nofollow" target="_blank" href="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/developers/thumbnailbutton_5F00_3908A181.png"><img style="margin:0px auto;float:none;border-width:0px" border="0" alt="サムネイル ボタン" src="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/developers/thumbnailbutton_5F00_thumb_5F00_30A4CC2A.png" width="382" height="360" /></a></p>
<p>これらの例のように、この優れたタスク バー機能は多くの場面で必要とされています。では、この機能の実装について見ていきましょう。最初に、基本的なルールを説明します。</p>
<ul>
<li>ボタンは 7 個まで表示できる。サイズは固定で、16 X 16 ピクセル (高 DPI の場合は最大 24 X 24 ピクセル) にあらかじめ定義されている。</li>
<li>サムネイル ツール バー ボタンは、アプリケーション内のアクティブ ウィンドウごとに設定できる。つまり、複数のウィンドウで構成されるアプリケーションの場合は、ウィンドウごとに異なるサムネイル ツール バーを表示することが前提となる。</li>
<li>ボタンをいったん設定したら (通常はタスク バー アイコンの生成時に設定する)、ツール バー上のボタンを追加または削除することはできない。ただし、ボタンを非表示にすることはできる。</li>
</ul>
<p>いつものように、ネイティブ コード (Win32) の実装から説明します。次のサンプルは Windows 7 SDK にあります。</p>
<p>サムネイル ツール バー ボタンを追加するには、ITaskbarList4 インターフェイスを使用します。このインターフェイスには、タスク バーのアイテムを動的に追加、削除、有効化するメソッドが含まれています。サムネイル ツール バーを操作する場合、具体的には以下のメソッドを使用します。</p>
<ul>
<li><b>ThumbBarAddButtons</b> &#8211; 指定されたボタン群を持つサムネイル ツール バー (タスク バー ボタンのポップアップ ウィンドウとして表示されるサムネイル画像に埋め込むツール バー) を、タスク バー ボタンのポップアップ ウィンドウとして表示されるサムネイル画像に追加する。<b></b></li>
<li><b>ThumbBarSetImageList</b> &#8211; タスク バー ボタンのポップアップ ウィンドウとして表示されるサムネイル画像に埋め込むツール バー内の、各ボタンに使われる画像を含む画像リストを指定する。<b></b></li>
<li><b>ThumbBarUpdateButtons</b> &#8211; サムネイル ツール バーのボタンをウィンドウの現在の状態に応じて、有効化、無効化、非表示化する。</li>
</ul>
<p>タスク バー アイコン関連の操作では常に操作対象のタスク バー アイコンが存在することを確認します。これには、<b>RegisterWindowMessage</b> メソッドを使用して &ldquo;TaskbarCreatedMessage&rdquo; を登録した後、メッセージが Win32 WndProc メソッドに届くのを待ちます。アプリケーションがこのメッセージを受信したら、サムネイル ツール バー ボタンの作成に進んでも安全です。この <b>WndProc</b> メソッドは、作成したサムネイル ボタンがクリックされたときに発生する <b>WM_COMMAND</b> メッセージも受信します。wParam パラメーターの下位ワードにはそのボタンのボタン ID が格納され、上位ワードは単純に <b>THBN_CLICKED</b> に設定されます。次のコード スニペットにこの処理を示します。</p>
<div>
<div>
<pre>LRESULT CALLBACK WndProc(</pre>
<pre> HWND hWnd, UINT message, </pre>
<pre> WPARAM wParam, LPARAM lParam)</pre>
<pre>{</pre>
<pre> <span>static</span> UINT s_uTBBC = WM_NULL;</pre>
<pre>&nbsp;</pre>
<pre> <span>if</span> (s_uTBBC == WM_NULL)</pre>
<pre> {</pre>
<pre> <span>// TaskbarButtonCreated メッセージの値を計算する</span></pre>
<pre> s_uTBBC = RegisterWindowMessage(L<span>"TaskbarButtonCreated"</span>);</pre>
<pre>&nbsp;</pre>
<pre> <span>// 権限昇格による管理者特権でアプリケーションが実行される場合を考慮して、</span></pre>
<pre> <span>// TaskbarButtonCreated および WM_COMMAND メッセージの受信を許可する</span></pre>
<pre> ChangeWindowMessageFilter(s_uTBBC, MSGFLT_ADD);</pre>
<pre> ChangeWindowMessageFilter(WM_COMMAND, MSGFLT_ADD);</pre>
<pre> }</pre>
<pre>&nbsp;</pre>
<pre> <span>if</span> (message == s_uTBBC) <span>//wmTaskbarButtonCreated)</span></pre>
<pre> {</pre>
<pre> <span>// TaskbarButtonCreated メッセージを取得したら、</span></pre>
<pre> <span>// ウィンドウのサムネイル ツール バーを作成する</span></pre>
<pre> CreateThumbnailToolbar(hWnd);</pre>
<pre> }</pre>
<pre> <span>else</span> <span>switch</span> (message)</pre>
<pre> {</pre>
<pre> <span>case</span> WM_COMMAND:</pre>
<pre> {</pre>
<pre> <span>int</span> <span>const</span> wmId = LOWORD(wParam);</pre>
<pre> <span>switch</span> (wmId)</pre>
<pre> {</pre>
<pre> <span>case</span> IDTB_BUTTON1:</pre>
<pre> <span>case</span> IDTB_BUTTON2:</pre>
<pre> <span>case</span> IDTB_BUTTON3:</pre>
<pre> {</pre>
<pre> WCHAR szMsg[100];</pre>
<pre> StringCchPrintf(</pre>
<pre> szMsg, ARRAYSIZE(szMsg), </pre>
<pre> L<span>"Thumbnail toolbar button clicked, </span></pre>
<pre> ID=%d", wmId);</pre>
<pre>&nbsp;</pre>
<pre> MessageBox(hWnd, szMsg, L<span>"Application"</span>, MB_OK);</pre>
<pre> <span>break</span>;</pre>
<pre> }</pre>
<pre> <span>case</span> IDM_EXIT:</pre>
<pre> DestroyWindow(hWnd);</pre>
<pre> <span>break</span>;</pre>
<pre>&nbsp;</pre>
<pre> <span>default</span>:</pre>
<pre> <span>return</span> DefWindowProc(hWnd, message, wParam, lParam);</pre>
<pre> }</pre>
<pre> <span>break</span>;</pre>
<pre> }</pre>
<pre> <span>case</span> WM_DESTROY:</pre>
<pre> PostQuitMessage(0);</pre>
<pre> <span>break</span>;</pre>
<pre> <span>default</span>:</pre>
<pre> <span>return</span> DefWindowProc(hWnd, message, wParam, lParam);</pre>
<pre> }</pre>
<pre> <span>return</span> 0;</pre>
<pre>}</pre>
</p></div>
</p></div>
<p>TaskbarCreatedMessage メッセージをリッスンするよう登録した直後に <b>ChangeWindowMessageFilter</b> メソッドを呼び出している点に注意してください。このメソッドは、ユーザー インターフェイス特権の分離 (UIPI) メッセージ フィルターでフィルター処理するメッセージを追加または削除します。この処理は、ユーザーが権限を昇格して管理者特権でアプリケーションを実行している場合のために必要です。簡単に説明しましょう。タスク バーは explorer.exe プロセスの一部であり、中度の整合性レベルつまり標準ユーザーとして実行されます。Windows Vista と UIPI の導入以降、特権レベルの低いアプリケーションは、レベルの高いアプリケーションに Windows メッセージを送信できなくなりました。このため、整合性レベルの低い送信者からのメッセージを受信するにはフィルターを変更する必要があります。ここでは、TaskbarCreatedMessage および <b>WM_COMMAND</b> の結果を受信できるようにします。UIPI については、近く、別の記事で説明する予定です。</p>
<p>本題に戻ります。<b>WM_COMMAND</b> の処理はきわめて単純で、wParam パラメーターの下位ワードからボタン ID を抽出しているだけです。これは単なる例なので、実際にはその ID による処理は何も行っていません (switch 文はすべてのボタンで同じです)。</p>
<p>次に、サムネイル ツール バーを登録するのに必要な処理について説明します。先ほどのコード スニペットでは、CreateThumbnailToolbar ヘルパー メソッドを呼び出しています。以下にこのメソッドのコードを示します。</p>
<div>
<div>
<pre>HRESULT CreateThumbnailToolbar(HWND hWnd)</pre>
<pre>{</pre>
<pre> ITaskbarList4 *pTaskbarList;</pre>
<pre> HRESULT hr = CoCreateInstance(</pre>
<pre> CLSID_TaskbarList, </pre>
<pre> NULL, </pre>
<pre> CLSCTX_INPROC_SERVER, </pre>
<pre> IID_PPV_ARGS(&amp;pTaskbarList));</pre>
<pre>&nbsp;</pre>
<pre> <span>if</span> (SUCCEEDED(hr))</pre>
<pre> {</pre>
<pre> hr = pTaskbarList-&gt;HrInit();</pre>
<pre> <span>if</span> (SUCCEEDED(hr))</pre>
<pre> {</pre>
<pre> <span>// サムネイル ツール バー ボタン用に、 </span></pre>
<pre> <span>// どのビットマップを使用するかを判断する</span></pre>
<pre> <span>// システムの「小さいアイコン」の幅を基準に決定する</span></pre>
<pre> <span>// これにより DPI 対応になる</span></pre>
<pre> <span>struct</span> </pre>
<pre> {</pre>
<pre> PCWSTR pbmp;</pre>
<pre> <span>int</span> cx;</pre>
<pre> } </pre>
<pre> <span>const</span> bitmaps[3] =</pre>
<pre> {</pre>
<pre> { MAKEINTRESOURCE(IDB_BUTTONIMAGES_96), 16 },</pre>
<pre> { MAKEINTRESOURCE(IDB_BUTTONIMAGES_120), 20 },</pre>
<pre> { MAKEINTRESOURCE(IDB_BUTTONIMAGES_144), 24 }</pre>
<pre> };</pre>
<pre>&nbsp;</pre>
<pre> <span>int</span> <span>const</span> cxButton = GetSystemMetrics(SM_CXSMICON);</pre>
<pre>&nbsp;</pre>
<pre> <span>int</span> iButtons = 0;</pre>
<pre> <span>for</span> (<span>int</span> i = 0; i &lt; ARRAYSIZE(bitmaps); i++)</pre>
<pre> {</pre>
<pre> <span>if</span> (bitmaps[i].cx &lt;= cxButton)</pre>
<pre> {</pre>
<pre> iButtons = i;</pre>
<pre> }</pre>
<pre> }</pre>
<pre>&nbsp;</pre>
<pre> HIMAGELIST himl = ImageList_LoadImage(</pre>
<pre> g_hInstance, </pre>
<pre> bitmaps[iButtons].pbmp,</pre>
<pre> bitmaps[iButtons].cx, </pre>
<pre> 0, </pre>
<pre> RGB(255,0,255), </pre>
<pre> IMAGE_BITMAP, </pre>
<pre> LR_CREATEDIBSECTION);</pre>
<pre>&nbsp;</pre>
<pre> <span>if</span> (himl)</pre>
<pre> {</pre>
<pre> hr = pTaskbarList-&gt;ThumbBarSetImageList(hWnd, himl);</pre>
<pre> <span>if</span> (SUCCEEDED(hr))</pre>
<pre> {</pre>
<pre> THUMBBUTTON buttons[3] = {};</pre>
<pre>&nbsp;</pre>
<pre> <span>// 1 つ目のボタン</span></pre>
<pre> buttons[0].dwMask = THB_BITMAP | THB_TOOLTIP | THB_FLAGS;</pre>
<pre> buttons[0].dwFlags = THBF_ENABLED | THBF_DISMISSONCLICK;</pre>
<pre> buttons[0].iId = IDTB_BUTTON1;</pre>
<pre> buttons[0].iBitmap = 0;</pre>
<pre> StringCchCopy(buttons[0].szTip, </pre>
<pre> ARRAYSIZE(buttons[0].szTip), L<span>"Button 1"</span>);</pre>
<pre>&nbsp;</pre>
<pre> <span>// 2 つ目のボタン</span></pre>
<pre> buttons[1].dwMask = THB_BITMAP | THB_TOOLTIP | THB_FLAGS;</pre>
<pre> buttons[1].dwFlags = THBF_ENABLED | THBF_DISMISSONCLICK;</pre>
<pre> buttons[1].iId = IDTB_BUTTON2;</pre>
<pre> buttons[1].iBitmap = 1;</pre>
<pre> StringCchCopy(buttons[1].szTip, </pre>
<pre> ARRAYSIZE(buttons[1].szTip), L<span>"Button 2"</span>);</pre>
<pre>&nbsp;</pre>
<pre> <span>// 3 つ目のボタン</span></pre>
<pre> buttons[2].dwMask = THB_BITMAP | THB_TOOLTIP | THB_FLAGS;</pre>
<pre> buttons[2].dwFlags = THBF_ENABLED | THBF_DISMISSONCLICK;</pre>
<pre> buttons[2].iId = IDTB_BUTTON3;</pre>
<pre> buttons[2].iBitmap = 2;</pre>
<pre> StringCchCopy(buttons[2].szTip, </pre>
<pre> ARRAYSIZE(buttons[2].szTip), L<span>"Button 3"</span>);</pre>
<pre>&nbsp;</pre>
<pre> <span>// これらのボタンをサムネイル ツール バーに設定する</span></pre>
<pre> hr = pTaskbarList-&gt;ThumbBarAddButtons(</pre>
<pre> hWnd, </pre>
<pre> ARRAYSIZE(buttons), </pre>
<pre> buttons);</pre>
<pre> }</pre>
<pre> ImageList_Destroy(himl);</pre>
<pre> }</pre>
<pre> }</pre>
<pre> <span>// ITaskbarList3 はここで解放してかまわない</span></pre>
<pre> <span>// サムネイル ツール バーは残る</span></pre>
<pre> pTaskbarList-&gt;Release();</pre>
<pre> }</pre>
<pre> <span>return</span> hr;</pre>
<pre>}</pre>
</p></div>
</p></div>
<p>最初に、ITasbarList4 COM インターフェイスを CoCreate する必要があります。次に、標準的な方法に従って、<b>HrInit</b> を呼び出し Taskbar リスト オブジェクトを初期化します。このメソッドを呼び出した後、他の ITaskbarList メソッドが呼び出せるようになります。次に、使用するビットマップのリストを設定します。「小さいアイコン」に推奨される幅 (ピクセル単位) を確認する必要があります。この値は DPI 設定によって変わってきます。最後に、<b>ThumbBarSetImageList</b> を呼び出してボタンのアイコンを設定します。ソース コードをダウンロードしたら、この行をコメントアウトしてアプリケーションを実行するとどのような結果になるか、ぜひ試してみてください。</p>
<p>次に、3 つの THUMBBUTTON を含む配列を作成し、各ボタンのビットマップ、ツールヒント、フラグを設定します。これはツール バー ボタンの構成に使用します。たとえば、ビットマップ値は (THUMBBUTTON の) iBitmap フィールドの値が有効であることを示します。THB_FLAGS を使用すると、ボタンの状態や動作 (有効、無効、非表示など) を指定できます。SDK には他にもたくさんのオプションが用意されています。またこのサンプルでは、クリックされたボタンを識別できるようにボタン ID を設定しています。この ID は WM_COMMAND メッセージと一緒に送信されます。</p>
<table border="0" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td valign="top" width="275">最後に、<b>ThumbBarAddButtons</b> メソッドを呼び出して現在の hWnd とボタンの配列を渡します。これによりサムネイル ツール バーが登録されます。マウス ポインターをアプリケーションのタスク バー アイコンに重ねると、3 つの色付きボタンが表示されるようになります (下の画像を参照してください)。</td>
<td valign="top" width="293"><a rel="nofollow" target="_blank" href="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/developers/Taskbar_5F00_ThumbnailToolbar2_5F00_76F34CA6.png"><img style="float:none;margin-left:auto;margin-right:auto;border-width:0px" border="0" alt="Taskbar_ThumbnailToolbar2" src="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/developers/Taskbar_5F00_ThumbnailToolbar2_5F00_thumb_5F00_417A8A81.png" width="240" height="230" /></a></td>
</tr>
</tbody>
</table>
<p>マネージ コード アプリケーションのサムネイル ツール バーは、Windows API Code Pack を使用して作成できます。以下は、<a rel="nofollow" target="_blank" href="http://channel9.msdn.com/learn/">Channel 9 Learning Center (英語)</a> にある <a rel="nofollow" target="_blank" href="http://channel9.msdn.com/learn/courses/Windows7/">Windows 7 トレーニング キット</a>の一部です。<a rel="nofollow" target="_blank" href="http://blogs.msdn.com/jaimer/">Jaime Rodriguez</a> が作成した TaskbarConcepts というデモは、WPF アプリケーションとして作成されており、開発者が利用できる Windows タスク バーの機能を網羅しています。ここではサムネイル ツール バーの部分のみ触れます。他の部分については各自でぜひお試しください。このデモは、WPF アプリケーションのマネージ コード サンプルのベースとして今後もたびたび使用する予定です。</p>
<p>Windows API Code Pack を使用する場合は、当然ながら、Windows メッセージの登録や処理に頭を悩ませることはありません。<b>TaskbarManager</b> を使用するだけで済みます。特に、<b>ThumbnailToolbars</b> が便利です。ここには、ThumbnailToolbarButton オブジェクトを追加するときに必要な AddButtons メソッドが用意されています。ThumbnailToolbarButton オブジェクトはタスク バー サムネイル ボタンを表し、これを通してタスク バー ボタンの有効化/無効化、アイコンやツールヒントの変更、表示/非表示の制御を行うことが可能です。また、マネージ コードなので、ご期待のとおり、ボタンの <b>Click</b> イベントにイベント ハンドラーを接続できます。手間のかかることもある Windows メッセージを操作する必要はありません。以下は、<b>ToolbarButtons.xaml.cs</b> ファイル内のコードの一部です。サムネイル ツール バーをマネージ コード アプリケーションに追加することがとても簡単であることがわかります。</p>
<div>
<div>
<pre><span>private</span> <span>void</span> CreateToolbarButtons()</pre>
<pre>{</pre>
<pre> buttonFirst = <span>new</span> ThumbnailToolbarButton(</pre>
<pre> TaskbarConcepts.Resources.first, <span>"First Image"</span>);</pre>
<pre> buttonFirst.Enabled = <span>false</span>;</pre>
<pre> buttonFirst.Click += buttonFirst_Click;</pre>
<pre>&nbsp;</pre>
<pre> buttonPrevious = <span>new</span> ThumbnailToolbarButton(</pre>
<pre> TaskbarConcepts.Resources.prevArrow, <span>"Previous Image"</span>);</pre>
<pre> buttonPrevious.Enabled = <span>false</span>;</pre>
<pre> buttonPrevious.Click += buttonPrevious_Click;</pre>
<pre>&nbsp;</pre>
<pre> buttonNext = <span>new</span> ThumbnailToolbarButton(</pre>
<pre> TaskbarConcepts.Resources.nextArrow, <span>"Next Image"</span>);</pre>
<pre> buttonNext.Click += buttonNext_Click;</pre>
<pre>&nbsp;</pre>
<pre> buttonLast = <span>new</span> ThumbnailToolbarButton(</pre>
<pre> TaskbarConcepts.Resources.last, <span>"Last Image"</span>);</pre>
<pre> buttonLast.Click += buttonLast_Click;</pre>
<pre>&nbsp;</pre>
<pre> TaskbarManager.Instance.ThumbnailToolbars.AddButtons</pre>
<pre> (</pre>
<pre> <span>new</span> WindowInteropHelper(Application.Current.MainWindow).Handle,</pre>
<pre> buttonFirst, </pre>
<pre> buttonPrevious, </pre>
<pre> buttonNext, </pre>
<pre> buttonLast</pre>
<pre> );</pre>
<pre>}</pre>
</p></div>
</p></div>
<p>このファイルの残りのコードでは、さまざまなイベントのロジックと処理を行っています。これにより、以下の図にあるように、メイン アプリケーションに表示されるさまざまな画像を制御できるようになっています。</p>
<p><a rel="nofollow" target="_blank" href="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/developers/Taskbar_5F00_ThumbnailToolbar3_5F00_47C1610F.png"><img style="float:none;margin-left:auto;margin-right:auto;border-width:0px" border="0" alt="Taskbar_ThumbnailToolbar3" src="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/developers/Taskbar_5F00_ThumbnailToolbar3_5F00_thumb_5F00_7F93A532.png" width="579" height="368" /></a></p>
<p>以上の説明で、サムネイル ツール バーを適切に導入できればメリットが大きいこと、またその実装が簡単であることを理解していただけたと思います。</p>
<p>ところで、Fishbowl のサムネイル ツール バーのボタンが 5 個ではなく 6 個である理由をまだ説明していませんでした (最初の画像を参照してください)。画像をよく見ると、左側の 4 個のボタンはアプリケーションの動作に直接影響しますが、右側に 1 個だけあるボタンは既定のブラウザーを起動して Facebook の Web サイトを自動的に読み込むだけであることがわかります。つまり、ボタンの種類に応じてボタンを分けて表示していることがわかります。アプリケーションはボタンを 6 個作成していますが、5 番目のボタンは非表示なのでボタンの間にスペースがあるように見えます。これを実現するには、Win32 アプリケーションの場合は <b>ThumbBarUpdateButtons</b> を使用します。</p>
<p>マネージ コード開発の場合は、<strong>ThubmnailButton</strong> を非表示にすることで簡単に実現できます。Windows API Code Pack を詳しく調べると、<strong>ThubmnailButton</strong> クラスに、ツール バー ボタンの表示状態を制御する Visible プロパティがあることがわかります。Visible Set セクションの終わりに <strong>UpdateThumbnailButton</strong>() 関数があります。これは、基本的にはネイティブの <b>ThumbBarUpdateButtons</b> メソッドのラッパーです。</p>
<p>Win32 ネイティブのサンプルは<a rel="nofollow" target="_blank" href="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/developers.CodeSamples/NativeTaskbarThumbnailToolbar.zip">こちら</a>からダウンロードできます。</p>
<p>マネージ コード (WPF) のサンプルは<a rel="nofollow" target="_blank" href="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/developers.CodeSamples/ManagedTaskbarConcepts_5F00_Solution.zip">こちら</a>からダウンロードできます。</p>
<p><a rel="nofollow" target="_blank" href="http://channel9.msdn.com/learn/">Channel 9 Learning Center (英語)</a> では、他の <a rel="nofollow" target="_blank" href="http://channel9.msdn.com/learn/courses/Windows7/">Windows 7 タスク バー関連のトレーニング キット</a>も提供されています。</p>
]]></content:encoded>
			<wfw:commentRss>http://win7insider.com/2011/08/04/blog-post-windows-7-%e3%82%bf%e3%82%b9%e3%82%af-%e3%83%90%e3%83%bc%e9%96%a2%e9%80%a3%e3%81%ae%e9%96%8b%e7%99%ba-%e3%82%b5%e3%83%a0%e3%83%8d%e3%82%a4%e3%83%ab-%e3%83%84%e3%83%bc%e3%83%ab-%e3%83%90/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blog Post: Windows Phone 7 Training Course &#8211; Download it Now!</title>
		<link>http://win7insider.com/2011/07/06/blog-post-windows-phone-7-training-course-download-it-now/</link>
		<comments>http://win7insider.com/2011/07/06/blog-post-windows-phone-7-training-course-download-it-now/#comments</comments>
		<pubDate>Wed, 06 Jul 2011 21:10:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blogs]]></category>

		<guid isPermaLink="false">http://win7insider.com/2011/07/06/blog-post-windows-phone-7-training-course-download-it-now/</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<h3>Windows Phone 7 Training Course</h3>
<p>Windows Phone 7 is an amazing mobile phone operating system with its innovative user interface and functionality, as well as its great development platform upon which you can quickly and easily build games and applications.&#160; A myriad of new devices, a powerful and immersive software platform, and a new marketplace to attract developers, are all a perfect formula for high consumer demand.&#160; Developers quickly adopt the Windows Phone platform to capitalize on this growing mobile marketplace.&#160; </p>
<p>This Training Course will give you a jumpstart into the new Windows Phone world by providing you with a step-by-step explanation of the tools to use and some key concepts for programming Windows Phones. </p>
<p><a rel="nofollow" target="_blank" href="http://go.microsoft.com/?linkid=9723028"><img style="border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;border-top:0px;border-right:0px;padding-top:0px" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-51-78-metablogapi/7167.image_5F00_298573E0.png" width="269" height="35" /></a></p>
<h6></h6>
<p><strong>Target Audience:</strong></p>
<p>This training course is geared for beginners who want to get started with developing applications for the latest Windows Phone operating system. Even if you don’t know Silverlight or XNA Framework, you’ll find this Training Course useful. More seasoned Silverlight developers should also find this course useful, as it explains some of the differences between Silverlight and Silverlight for the phone. </p>
<p><strong>Audience Prerequisites:</strong></p>
<p>Experience using previous versions of Visual Studio .NET and the .NET Framework </p>
<p><strong>Technical Prerequisites:</strong></p>
<p>Windows Vista or Windows 7 </p>
<p><strong>Units:</strong></p>
<p><img alt="" src="http://msdn.microsoft.com/en-us/WP7TrainingCourse.WP7TK_unitThumbnail(en-us).png" width="100" height="75" /> <br /><a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/wp7trainingcourse_wp7gettingstarted_unit">Getting Started with Windows Phone </a></p>
<p>Windows Phone development platform supports both XNA Framework and Silverlight. This unit takes you through the step-by-step creation of your first Windows Phone Silverlight application. </p>
<p><img alt="" src="http://msdn.microsoft.com/en-us/WP7TrainingCourse.WP7TK_SL_UnitThumb(en-us).png" width="109" height="82" /> <br /><a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/wp7trainingcourse_wp7silverlight_unit">Silverlight for Windows Phone </a></p>
<p>While Silverlight runs on the phone, there are some differences between Silverlight and Silverlight for the Windows Phone, not to mention some new controls and concepts. This unit focuses on all the new Silverlight controls, concepts, and tools for Windows Phones. </p>
<p><img alt="" src="http://msdn.microsoft.com/en-us/WP7TrainingCourse.WP7TK_XNA_UnitThumb(en-us).png" width="93" height="70" /> <br /><a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/wp7trainingcourse_wp7xna_unit">XNA Framework 4.0 for Windows Phones </a></p>
<p>XNA Game Studio 4.0 supports multiple platforms, including XBox 360, several Windows OS versions, and the latest addition, Windows Phone. While this unit doesn&#8217;t offer a complete XNA Framework tutorial, it does introduce you to the basics of programming XNA Framework games with XNA Game Studio for Windows Phone. </p>
]]></content:encoded>
			<wfw:commentRss>http://win7insider.com/2011/07/06/blog-post-windows-phone-7-training-course-download-it-now/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blog Post: Azure Bootcamps &#8211; West Coast</title>
		<link>http://win7insider.com/2011/05/27/blog-post-azure-bootcamps-west-coast/</link>
		<comments>http://win7insider.com/2011/05/27/blog-post-azure-bootcamps-west-coast/#comments</comments>
		<pubDate>Fri, 27 May 2011 19:35:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blogs]]></category>

		<guid isPermaLink="false">http://win7insider.com/2011/05/27/blog-post-azure-bootcamps-west-coast/</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<div><span>
<p><span>Join us for this 1-day Azure Bootcamp, an immersive experience which will help explore and learn about how to leverage the Windows Azure platform and get started with the tools and architecture available. Register now, as space is limited!</span></p>
<p><span><span>&nbsp;</span></span></p>
<table cellpadding="0" cellspacing="0" border="0">
<tbody>
<tr>
<td nowrap width="142">
<p align="center"><span><b>DATE</b></span></p>
</td>
<td width="150" valign="top">
<p align="center"><span><b>LOCATION</b></span></p>
</td>
<td width="156" valign="top">
<p align="center"><span><b>TIME</b></span></p>
</td>
<td width="246">
<p align="center"><span><b>LINK</b></span></p>
</td>
</tr>
<tr>
<td nowrap width="142" valign="bottom">
<p align="center"><span>May 31, 2011</span></p>
</td>
<td width="150" valign="bottom">
<p align="center"><span>San Francisco, CA</span></p>
</td>
<td width="156">
<p align="center"><span>8:30 AM &ndash; 6:00 PM PST</span></p>
</td>
<td width="246" valign="top">
<p align="center"><span><a rel="nofollow" target="_blank" href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032486466&amp;Culture=en-US">1032486466</a></span></p>
</td>
</tr>
<tr>
<td nowrap width="142" valign="bottom">
<p align="center"><span>June 2, 2011</span></p>
</td>
<td width="150" valign="bottom">
<p align="center"><span>Los Angeles, CA</span></p>
</td>
<td width="156">
<p align="center"><span>8:30 AM &ndash; 6:00 PM PST</span></p>
</td>
<td width="246" valign="top">
<p align="center"><span><a rel="nofollow" target="_blank" href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032486471&amp;Culture=en-US">1032486471</a></span></p>
</td>
</tr>
<tr>
<td nowrap width="142" valign="bottom">
<p align="center"><span>June 3, 2011</span></p>
</td>
<td width="150" valign="bottom">
<p align="center"><span>Mountain View, CA</span></p>
</td>
<td width="156">
<p align="center"><span>8:30 AM &ndash; 6:00 PM PST</span></p>
</td>
<td width="246" valign="top">
<p align="center"><span><a rel="nofollow" target="_blank" href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032486469&amp;Culture=en-US">1032486469</a></span></p>
</td>
</tr>
<tr>
<td nowrap width="142" valign="bottom">
<p align="center"><span>June 6, 2011</span></p>
</td>
<td width="150" valign="bottom">
<p align="center"><span>Irvine, CA</span></p>
</td>
<td width="156">
<p align="center"><span>8:30 AM &ndash; 6:00 PM PST</span></p>
</td>
<td width="246" valign="top">
<p align="center"><span><a rel="nofollow" target="_blank" href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032486473&amp;Culture=en-US">1032486473</a></span></p>
</td>
</tr>
<tr>
<td nowrap width="142" valign="bottom">
<p align="center"><span>June 7, 2011</span></p>
</td>
<td width="150" valign="bottom">
<p align="center"><span>San Diego, CA</span></p>
</td>
<td width="156">
<p align="center"><span>8:30 AM &ndash; 5:30 PM PST</span></p>
</td>
<td width="246" valign="top">
<p align="center"><span><a rel="nofollow" target="_blank" href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032486472&amp;Culture=en-US">1032486472</a></span></p>
</td>
</tr>
<tr>
<td nowrap width="142" valign="bottom">
<p align="center"><span>June 14, 2011</span></p>
</td>
<td width="150" valign="bottom">
<p align="center"><span>Bellevue, WA</span></p>
</td>
<td width="156">
<p align="center"><span>8:30 AM &ndash; 6:00 PM PST</span></p>
</td>
<td width="246" valign="top">
<p align="center"><span><a rel="nofollow" target="_blank" href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032486474&amp;Culture=en-US">1032486474</a></span></p>
</td>
</tr>
<tr>
<td nowrap width="142" valign="bottom">
<p align="center"><span>June 16, 2011</span></p>
</td>
<td width="150" valign="bottom">
<p align="center"><span>Portland, OR</span></p>
</td>
<td width="156">
<p align="center"><span>8:30 AM &ndash; 6:00 PM PST</span></p>
</td>
<td width="246" valign="top">
<p align="center"><span><a rel="nofollow" target="_blank" href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032486475&amp;Culture=en-US">1032486475</a></span></p>
</td>
</tr>
<tr>
<td nowrap width="142" valign="bottom">
<p align="center"><span>June 21, 2011</span></p>
</td>
<td width="150" valign="bottom">
<p align="center"><span>Salt Lake City, UT</span></p>
</td>
<td width="156">
<p align="center"><span>8:30 AM &ndash; 5:00 PM GMT</span></p>
</td>
<td width="246" valign="top">
<p align="center"><span><a rel="nofollow" target="_blank" href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032486470&amp;Culture=en-US">1032486470</a></span></p>
</td>
</tr>
</tbody>
</table>
<p><span>&nbsp;</span></p>
<p><span><b>Topics Covered:</b></span></p>
<p><span>&nbsp;</span></p>
<p><span>&middot; Introduction to Cloud Computing and Azure </span></p>
<p><span>&middot; Basic Roles </span></p>
<p><span>o Hello Windows Azure VS2010 [LAB]</span></p>
<p><span>&middot; Advanced Roles </span></p>
<p><span>&middot; SQL Azure </span></p>
<p><span>o Intro to SQL Azure [LAB]</span></p>
<p><span>&middot; Diagnostics and Service Management </span></p>
<p><span>o Windows Azure Deployment VS2010 [LAB]</span></p>
<p><span>&middot; Storage Basics </span></p>
<p><span>&middot; Using Azure Tables </span></p>
<p><span>&middot; Using BLOB Storage </span></p>
<p><span>&middot; Queues </span></p>
<p><span>o Exploring Windows Azure Storage [LAB]</span></p>
<p><span>&middot; Introduction to Windows Azure AppFabric </span></p>
<p><span>o Introduction to AppFabric ACS V2 [LAB]</span></p>
<p><span>&middot; Cloud Computing Patterns &amp; Scenarios</span></p>
<p><span>&nbsp;</span></p>
<p><span><b>What do I need to bring?</b></span></p>
<p><span>&nbsp;</span></p>
<p><span>During the boot camp you will have opportunities to practice what you learn with labs. Having all of your software ready will make it easier to dive into the yummy goodness of exploring the labs. The lab package will be given to you during the event. This will need to be installed. If you want to have everything loaded into a virtual PC that would be even better.</span></p>
<p><span>&nbsp;</span></p>
<p><span>Don&#8217;t worry if you can&#8217;t get everything installed; we will have all of the bits with us at the boot camp and can help you get everything installed.</span></p>
<p><span>&nbsp;</span></p>
<p><span><b>In order to run these labs you will need to bring:</b></span></p>
<p><span>&nbsp;</span></p>
<p><span>&middot; Power strip or extension cord </span></p>
<p><span>&middot; A 30-day Azure pass. Get one by visiting <a rel="nofollow" target="_blank" href="http://bit.ly/campwestazure"><span>http://bit.ly/campwestazure</span></a>. Use promo code: <b>CAMPWEST</b>. </span></p>
<p><span>&middot; A computer or laptop: </span></p>
<p><span>o Operating Systems Supported: Windows 7 (Ultimate, Professional, and Enterprise Editions); Windows Server 2008; Windows Server 2008 R2; Windows Vista (Ultimate, Business, and Enterprise Editions) with either Service Pack 1 or Service Pack 2 </span></p>
<p><span>o Microsoft Visual Studio 2010 (full version or the free trial &#8211; <a rel="nofollow" target="_blank" href="http://bit.ly/VisualStudioTools"><span>http://bit.ly/VisualStudioTools</span></a>), Microsoft Visual Studio 2008 SP1, or Microsoft Visual Web Developer 2008 Express Edition with SP1 &#8211; * (<a rel="nofollow" target="_blank" href="http://bit.ly/VisualStudioTools"><span>http://bit.ly/VisualStudioTools</span></a>) if you use Express Edition you will not be able to complete all of the labs. </span></p>
<p><span>o SQL Server 2005 Express Edition (or above) (this is usually installed with Visual Studio): <a rel="nofollow" target="_blank" href="http://www.microsoft.com/express/sql/download"><span>http://www.microsoft.com/express/sql/download</span></a> </span></p>
<p><span>o Install the Windows Azure Tools for Microsoft Visual Studio (and some hotfixes): <a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/windowsazure/cc974146.aspx"><span>http://msdn.microsoft.com/en-us/windowsazure/cc974146.aspx</span></a> </span></p>
<p><span>o Install the AppFabric SDK: <a rel="nofollow" target="_blank" href="http://go.microsoft.com/fwlink/?LinkID=129448"><span>http://go.microsoft.com/fwlink/?LinkID=129448</span></a> </span></p>
<p><span>o Install the Windows Azure Platform Training Kit: <a rel="nofollow" target="_blank" href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=413E88F8-5966-4A83-B309-53B7B77EDF78&amp;displaylang=en"><span>http://www.microsoft.com/downloads/en/details.aspx?FamilyID=413E88F8-5966-4A83-B309-53B7B77EDF78&amp;displaylang=en</span></a></span></p>
<p> </span></div>
]]></content:encoded>
			<wfw:commentRss>http://win7insider.com/2011/05/27/blog-post-azure-bootcamps-west-coast/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blog Post: Walkthrough: Integrating your SQL Server Reporting Services report into Windows 7 Sidebar Gadget</title>
		<link>http://win7insider.com/2011/05/26/blog-post-walkthrough-integrating-your-sql-server-reporting-services-report-into-windows-7-sidebar-gadget/</link>
		<comments>http://win7insider.com/2011/05/26/blog-post-walkthrough-integrating-your-sql-server-reporting-services-report-into-windows-7-sidebar-gadget/#comments</comments>
		<pubDate>Thu, 26 May 2011 12:34:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blogs]]></category>

		<guid isPermaLink="false">http://win7insider.com/2011/05/26/blog-post-walkthrough-integrating-your-sql-server-reporting-services-report-into-windows-7-sidebar-gadget/</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>By default, after installing Window7 operation, there are many powerful and handy little tools in Sidebar<b> </b>Gadget, you can also download some customized Sidebar Gadget, such as: <a rel="nofollow" target="_blank" href="http://gallery.live.com/liveItemDetail.aspx?li=7dd3da55-7d3f-4473-8b50-6ea4b84c8172">MSDN forum helper</a>. Currently, we have some stock reports to show the real-time status of stock market, we also want to integrate SQL Reporting Services &#8211; stock report into window7&rsquo;s Sidebar Gadget rather than open the IE all the time. </p>
<p>This article will walk you through the processes of integrating SQL Server Reporting Services into Windows 7 Sidebar Gadget.</p>
<h3>Create a stock mark report and deploy it to Report Server</h3>
<ol>
<li>Open SQL Server Business Intelligence Development Studio to create a Report Server Project named StockMark.</li>
<li>Create a <a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/library/dd239383.aspx">stock report</a> named StockMarkStatus, you can also refer to the sample report I gave. </li>
<li>Deploy the stock report to your Report Server</li>
<li>Open the report on Report Server to make sure it can be open correctly. <br />Note: Please write down this report&rsquo;s URL, you will make use of this URL in the following steps. Your URL just like this http://ServerName/ReportServer?/Reportpath/ StockMarkStatus</li>
</ol>
<h3>Create Gadget&rsquo;s <a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/magazine/cc163370.aspx#S2">XML Definition File</a> and <a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/magazine/cc163370.aspx#S3">Main HTML File</a></h3>
<ol>
<li>Design a PNG image named icon, which is used in the Sidebar Gadget&rsquo;s menu</li>
<li>Open the folder C:&#92;Program Files&#92;Windows Sidebar&#92;Gadgets</li>
<li>Create a New folder named StockMarkStatus.gadget</li>
<li>Copy the image to StockMarkStatus.gadget folder</li>
<li>Create a HTML file named StockMarkStatus.html into the same folder</li>
</ol>
<table cellpadding="0" cellspacing="0" border="1">
<tbody>
<tr>
<td width="590" valign="top">
<p>&lt;html&gt;</p>
<p>&lt;head&gt;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;script language=&#8221;javascript&#8221;&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; resizes the gadget display surface</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function DoInit(timeoutPeriod) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.body.style.width = 410;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.body.style.height =240;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.body.style.margin = 0;</p>
<p>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;document.body.style.background = &#8220;gold&#8221;;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setTimeout(&#8221;location.reload(true);&#8221;, timeoutPeriod);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&lt;/script&gt; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/head&gt;</p>
<p>&nbsp;</p>
<p>&lt;body onload=&#8221;JavaScript:DoInit(10000)&#8221;&gt; </p>
<p>&lt;div&gt;</p>
<p>&lt;iframe id=&#8221;rpt&#8221; src=&#8221;http://ServerName/ReportServer?/Reportpath/ StockMarkStatus&amp;rs:Command=Render&amp;rc:Toolbar=False&#8221; </p>
<p>&nbsp; style=&#8221;BACKGROUND-COLOR:transparent&#8221; name=&#8221;doc&#8221; frameBorder=&#8221;no&#8221; width=&#8221;100%&#8221; height=&#8221;100%&#8221; scrolling=&#8221;No&#8221; /&gt;</p>
<p>&lt;/div&gt;</p>
<p>&lt;/body&gt; </p>
<p>&lt;/html&gt;</p>
<p>&nbsp;</p>
</td>
</tr>
</tbody>
</table>
<p>Note: Please change your report server URL at iframe src attribute. Change the JavaScript DoInit method parameter value based on your refreshment frequency. </p>
<ol start="6">
<li>Create a gadget.xml file using below content:</li>
</ol>
<table cellpadding="0" cellspacing="0" border="1">
<tbody>
<tr>
<td width="590" valign="top">
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243; ?&gt; </p>
<p>&lt;gadget&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;StockMarkStatus&lt;/name&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;namespace&gt;microsoft.windows&lt;/namespace&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;1.0.0.0&lt;/version&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;icons&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;icon height=&#8221;28&#8243; width=&#8221;28&#8243; src=&#8221;icon.png&#8221;/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/icons&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;hosts&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;host name=&#8221;sidebar&#8221;&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;autoscaleDPI&gt;true&lt;/autoscaleDPI&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;base type=&#8221;HTML&#8221; apiVersion=&#8221;1.0.0&#8243; src=&#8221;StockMarkStatus.html&#8221;/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;permissions&gt;Full&lt;/permissions&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;platform minPlatformVersion=&#8221;1.0&#8243;/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/host&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/hosts&gt;</p>
<p>&lt;/gadget&gt;</p>
</td>
</tr>
</tbody>
</table>
<h3>Test this tool in Windows 7 Sidebar Gadget</h3>
<ol>
<li>Right-click the windows7 desktop, then select Gadgets, you will see StockMarkStatus menu in Gadget like below: </li>
</ol>
<p>&nbsp;<a rel="nofollow" target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-33-Images/3513.wt17_2D00_1.png"><img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-33-Images/3513.wt17_2D00_1.png" border="0" /></a></p>
<ol start="2">
<li>Right-click the Icon of StockMarkStatus, then select Add button, just like other Gadget tools, you will see the stock report showing on the desktop with ten second refreshment frequency.</li>
</ol>
<p>&nbsp;<a rel="nofollow" target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-33-Images/8371.wt17_2D00_2.png"><img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-33-Images/8371.wt17_2D00_2.png" border="0" /></a></p>
<p><b>Reference:</b></p>
<p><a rel="nofollow" target="_blank" href="http://msdn.microsoft.com/en-us/magazine/cc163370.aspx#S2">Build Your Own Windows Vista Sidebar Gadget</a></p>
<p>&nbsp;</p>
<p>[<a rel="nofollow" target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-40-33-Samples/7485.Walkthrough_2D00_SSRSReportGadgetIntegration.zip">Download Sample</a>]</p>
]]></content:encoded>
			<wfw:commentRss>http://win7insider.com/2011/05/26/blog-post-walkthrough-integrating-your-sql-server-reporting-services-report-into-windows-7-sidebar-gadget/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blog Post: Rediscover security guidance from Microsoft Solution Accelerators</title>
		<link>http://win7insider.com/2011/05/12/blog-post-rediscover-security-guidance-from-microsoft-solution-accelerators/</link>
		<comments>http://win7insider.com/2011/05/12/blog-post-rediscover-security-guidance-from-microsoft-solution-accelerators/#comments</comments>
		<pubDate>Thu, 12 May 2011 07:27:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blogs]]></category>

		<guid isPermaLink="false">http://win7insider.com/2011/05/12/blog-post-rediscover-security-guidance-from-microsoft-solution-accelerators/</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>Ever wonder what happened to the security guides from Microsoft Solution Accelerators? Your go-to security guidance from Solution Accelerators hasn’t disappeared, it’s just been repackaged. The previously stand-alone Microsoft product-specific security guides are now included within the Microsoft Security Compliance Manager (SCM) tool. </p>
<p><b>To simplify:</b> Stand-alone security guides à <s>Security Compliance Management Toolkit</s> à Security Compliance Manager tool</p>
<p>Got it? </p>
<p>So, how do you get your hands on trusted guidance for Windows client and server operating systems and Microsoft applications from the Microsoft security experts? First <a rel="nofollow" target="_blank" href="http://go.microsoft.com/fwlink/?LinkId=182512">download and install the SCM tool</a>. Next, import your product baselines of choice (options include Windows 7, Windows Server 2008 R2, Internet Explorer 8, and more). Finally, select the <b>Documents</b> tab within a baseline to access the security guide for that Microsoft product. Simple, right?</p>
<p><b>Next steps: </b></p>
<p>· <a rel="nofollow" target="_blank" href="http://go.microsoft.com/fwlink/?LinkId=182512"><b>Download</b></a> and install the Security Compliance Manager tool. </p>
<p>· <b>Check out the </b><a rel="nofollow" target="_blank" href="http://go.microsoft.com/fwlink/?LinkId=201324"><b>SCM TechNet Wiki</b></a><b> </b>for more details on how to get up and running with the tool.<b> </b></p>
<p>· <a rel="nofollow" target="_blank" href="http://go.microsoft.com/fwlink/?LinkId=113940"><b>Learn more</b></a> about the Security Compliance Manager. </p>
<p>· <b>Questions?</b> Comments? Tell it to the development team: <a rel="nofollow" target="_blank" href="mailto:secwish@microsoft.com">secwish@microsoft.com</a>. </p>
<p>· <b>Looking for a specific security baseline?</b> Browse away!</p>
<p>o <a rel="nofollow" target="_blank" href="http://go.microsoft.com/fwlink/?LinkId=200483">Windows Server 2008 R2 Security Baseline</a></p>
<p>o <a rel="nofollow" target="_blank" href="http://technet.microsoft.com/en-us/library/cc514539.aspx">Windows Server 2008 Security Baseline</a></p>
<p>o <a rel="nofollow" target="_blank" href="http://technet.microsoft.com/en-us/library/cc163140.aspx">Windows Server 2003 Security Baseline</a></p>
<p>o <a rel="nofollow" target="_blank" href="http://go.microsoft.com/fwlink/?LinkId=201182">Windows 7 Security Baseline</a></p>
<p>o <a rel="nofollow" target="_blank" href="http://technet.microsoft.com/en-us/library/dd450978.aspx">Windows Vista Security Baseline</a></p>
<p>o <a rel="nofollow" target="_blank" href="http://technet.microsoft.com/en-us/library/cc163061.aspx">Windows XP Security Baseline</a></p>
<p>o <a rel="nofollow" target="_blank" href="http://go.microsoft.com/fwlink/?LinkId=201183">Internet Explorer 8 Security Baseline</a></p>
<p>o <a rel="nofollow" target="_blank" href="http://go.microsoft.com/fwlink/?LinkId=200179">Microsoft Office 2010 Security Baseline</a></p>
<p>o <a rel="nofollow" target="_blank" href="http://technet.microsoft.com/en-us/library/cc500475.aspx">Microsoft Office 2007 SP2 Security Baseline</a></p>
<p><b></b></p>
<p><b>Microsoft Solution Accelerators </b></p>
<p>SCM is just one of the tools provided by the Microsoft Solution Accelerators team. The Microsoft Assessment and Planning Toolkit, Microsoft Deployment Toolkit, and Security Compliance Manager provide tested guidance and automated tools to help you plan, securely deploy, and manage new Microsoft technologies—easier, faster, and at less cost. All are freely available, and fully-supported by Microsoft.<b> </b><a rel="nofollow" target="_blank" href="http://technet.microsoft.com/en-us/solutionaccelerators/default.aspx">Learn more.</a><b> </b></p>
<h3>&#160;</h3>
<h3><a rel="nofollow" target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-35-88-metablogapi/1588.image_5F00_7B69955F.png"><img style="border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;float:none;margin-left:auto;border-top:0px;margin-right:auto;border-right:0px;padding-top:0px" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-35-88-metablogapi/6765.image_5F00_thumb_5F00_29FF9E42.png" width="498" height="400" /></a><a rel="nofollow" name="_Screenshot"></a></h3>
<div><a rel="nofollow" target="_blank" href="http://digg.com/submit?url=http%3A%2F%2Fblogs.msdn.com%2Fb%2Fnickmac%2Farchive%2F2011%2F05%2F12%2Frediscover-security-guidance-from-microsoft-solution-accelerators.aspx&amp;title=Rediscover+security+guidance+from+Microsoft+Solution+Accelerators"><img src="http://digg.com/img/badges/100x20-digg-button.png" width="100" height="20" alt="Digg This" border="0" style="border:0" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://win7insider.com/2011/05/12/blog-post-rediscover-security-guidance-from-microsoft-solution-accelerators/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blog Post: Free for educators and STEM-D students! A scratchpad for your musical ideas: SongSmith</title>
		<link>http://win7insider.com/2011/05/08/blog-post-free-for-educators-and-stem-d-students-a-scratchpad-for-your-musical-ideas-songsmith/</link>
		<comments>http://win7insider.com/2011/05/08/blog-post-free-for-educators-and-stem-d-students-a-scratchpad-for-your-musical-ideas-songsmith/#comments</comments>
		<pubDate>Sun, 08 May 2011 10:23:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blogs]]></category>

		<guid isPermaLink="false">http://win7insider.com/2011/05/08/blog-post-free-for-educators-and-stem-d-students-a-scratchpad-for-your-musical-ideas-songsmith/</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[</p>
<p><a rel="nofollow" target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-09-37-metablogapi/0640.image_5F00_75F4DDB6.png"><img style="border-right-width:0px;padding-left:0px;padding-right:0px;float:right;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px" border="0" alt="image" align="right" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-09-37-metablogapi/5342.image_5F00_thumb_5F00_2BAA2311.png" width="179" height="244" /> </a>SongSmith, this is cool beans, no kidding.&#160; If you are thinking about writing music as a profession, or just goofing around, this is a way to scratchpad your music ideas.</p>
<p>Head over to <a rel="nofollow" title="http://research.microsoft.com/en-us/um/redmond/projects/songsmith/" target="_blank" href="http://research.microsoft.com/en-us/um/redmond/projects/songsmith/">http://research.microsoft.com/en-us/um/redmond/projects/songsmith/</a></p>
<p>Download and play with this awesome toy, tool and possibly a profitable hobby!</p>
<p>If you are not a STEM-D student or you are not an educator, then you do have to pay for this great product.&#160; However you do get a 6 hour use trial version, this means 6 hours of total time USING the product, not 6 hours from the initial starting of your application.</p>
</p>
<p> Here is what you need to use SongSmith: </p>
<p>You’ll need a Windows-based PC, running Microsoft Windows XP (with Service Pack 2 or greater), Windows Vista, or Windows 7. 1GB of RAM and a processor of at least 1GHz are also required. The Microsoft .NET Framework 3.0 is also required on Windows XP (it’s built in to Windows Vista), but the Songsmith setup program will guide you through this and any other software requirements.</p>
]]></content:encoded>
			<wfw:commentRss>http://win7insider.com/2011/05/08/blog-post-free-for-educators-and-stem-d-students-a-scratchpad-for-your-musical-ideas-songsmith/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blog Post: Free for educators and STEM-D students! A scratchpad for your musical ideas: SongSmith</title>
		<link>http://win7insider.com/2011/05/08/blog-post-free-for-educators-and-stem-d-students-a-scratchpad-for-your-musical-ideas-songsmith-2/</link>
		<comments>http://win7insider.com/2011/05/08/blog-post-free-for-educators-and-stem-d-students-a-scratchpad-for-your-musical-ideas-songsmith-2/#comments</comments>
		<pubDate>Sun, 08 May 2011 10:23:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blogs]]></category>

		<guid isPermaLink="false">http://win7insider.com/2011/05/08/blog-post-free-for-educators-and-stem-d-students-a-scratchpad-for-your-musical-ideas-songsmith-2/</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[</p>
<p><a rel="nofollow" target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-09-37-metablogapi/0640.image_5F00_75F4DDB6.png"><img style="border-right-width:0px;padding-left:0px;padding-right:0px;float:right;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px" border="0" alt="image" align="right" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-09-37-metablogapi/5342.image_5F00_thumb_5F00_2BAA2311.png" width="179" height="244" /> </a>SongSmith, this is cool beans, no kidding.&#160; If you are thinking about writing music as a profession, or just goofing around, this is a way to scratchpad your music ideas.</p>
<p>Head over to <a rel="nofollow" title="http://research.microsoft.com/en-us/um/redmond/projects/songsmith/" target="_blank" href="http://research.microsoft.com/en-us/um/redmond/projects/songsmith/">http://research.microsoft.com/en-us/um/redmond/projects/songsmith/</a></p>
<p>Download and play with this awesome toy, tool and possibly a profitable hobby!</p>
<p>If you are not a STEM-D student or you are not an educator, then you do have to pay for this great product.&#160; However you do get a 6 hour use trial version, this means 6 hours of total time USING the product, not 6 hours from the initial starting of your application.</p>
</p>
<p> Here is what you need to use SongSmith: </p>
<p>You’ll need a Windows-based PC, running Microsoft Windows XP (with Service Pack 2 or greater), Windows Vista, or Windows 7. 1GB of RAM and a processor of at least 1GHz are also required. The Microsoft .NET Framework 3.0 is also required on Windows XP (it’s built in to Windows Vista), but the Songsmith setup program will guide you through this and any other software requirements.</p>
]]></content:encoded>
			<wfw:commentRss>http://win7insider.com/2011/05/08/blog-post-free-for-educators-and-stem-d-students-a-scratchpad-for-your-musical-ideas-songsmith-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blog Post: How to install language packs using Windows Update</title>
		<link>http://win7insider.com/2011/04/07/blog-post-how-to-install-language-packs-using-windows-update/</link>
		<comments>http://win7insider.com/2011/04/07/blog-post-how-to-install-language-packs-using-windows-update/#comments</comments>
		<pubDate>Thu, 07 Apr 2011 09:53:18 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blogs]]></category>

		<guid isPermaLink="false">http://win7insider.com/2011/04/07/blog-post-how-to-install-language-packs-using-windows-update/</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><a rel="nofollow" target="_blank" href="http://windows.microsoft.com/en-gb/windows/downloads/install-languages-with-windows-update">Install language packs using Windows Update</a> for Windows 7 and Windows Vista</p>
<blockquote><p><em>“You can get additional language packs easily by using <span>Windows</span> Update. Once you turn on <span>Windows</span> Update, you can choose which languages you want to install (language packs do not update automatically). Here’s how you do it. </em></p>
<div>
<h3><em>To install language packs using <span>Windows 7</span></em></h3>
<div>
<ol>
<li>
<p><em>Click the <span>Start</span> button <img class="embedObject" alt="Picture of the Start button" src="http://res2.windows.microsoft.com/resbox/en/Windows%207/main/4/f/4f6cbd09-148c-4dd8-b1f2-48f232a2fd33/4f6cbd09-148c-4dd8-b1f2-48f232a2fd33.jpg" width="15" height="15" />, and then, in the search box, type <span><span>Windows</span> Update</span>.</em></p>
</li>
<li>
<p><em>In the list of results, click <span><span>Windows</span> Update</span>.</em></p>
</li>
<li>
<p><em>In the left pane, click <span>Check for updates</span>, and then wait while <span>Windows</span> looks for the latest updates for your computer.</em></p>
</li>
<li>
<p><em>If any updates are found, click <span>Select optional updates</span>.</em></p>
</li>
<li>
<p><em>Select the language pack that you want, and then click <span>OK</span>.</em></p>
</li>
<li>
<p><em>Click <span>Install updates</span>. If you&#8217;re prompted for an administrator password or confirmation, type the password or provide confirmation. </em></p>
</li>
</ol></div>
</p></div>
<div>
<h3><em>To install language packs using <span>Windows Vista</span></em></h3>
<ol>
<li>
<p><em>Click the <span>Start</span> button <img class="embedObject" alt="Picture of the Start button" src="http://res2.windows.microsoft.com/resbox/en/Windows%20Vista/main/4/f/4f6cbd09-148c-4dd8-b1f2-48f232a2fd33/4f6cbd09-148c-4dd8-b1f2-48f232a2fd33.png" width="15" height="15" />, click <span>All Programs</span>, and then click <span><span>Windows</span> Update</span>.</em></p>
</li>
<li>
<p><em>In the left pane, click <span>Check for updates</span>, and then wait while <span>Windows</span> looks for the latest updates for your computer. </em></p>
</li>
<li>
<p><em>If any updates are found, click <span>View available updates</span>. </em></p>
</li>
<li>
<p><em>Select the language pack that you want, and then click <span>Install updates</span>. If you are prompted for an administrator password or confirmation, type the password or provide confirmation. “</em></p>
</li>
</ol>
<p>&#160;</p>
</p></div>
</blockquote>
<p>Of course you can get them direct from our language pack pages for <a rel="nofollow" target="_blank" href="http://windows.microsoft.com/en-gb/windows/downloads/languages">Windows 7 and Windows Vista</a> and <a rel="nofollow" target="_blank" href="http://windows.microsoft.com/en-GB/windows/downloads/languages-xp">Windows XP</a></p>
<p>Rob</p>
<div>Technorati Tags: <a rel="nofollow" target="_blank" href="http://technorati.com/tags/Windows+7">Windows 7</a>,<a rel="nofollow" target="_blank" href="http://technorati.com/tags/Windows+Vista">Windows Vista</a>,<a rel="nofollow" target="_blank" href="http://technorati.com/tags/Windows+Xp+Mode">Windows Xp Mode</a>,<a rel="nofollow" target="_blank" href="http://technorati.com/tags/Language+Packs">Language Packs</a>,<a rel="nofollow" target="_blank" href="http://technorati.com/tags/MUI">MUI</a>,<a rel="nofollow" target="_blank" href="http://technorati.com/tags/LIP">LIP</a>,<a rel="nofollow" target="_blank" href="http://technorati.com/tags/language">language</a>,<a rel="nofollow" target="_blank" href="http://technorati.com/tags/Windows+Update">Windows Update</a></div>
<div></div>
]]></content:encoded>
			<wfw:commentRss>http://win7insider.com/2011/04/07/blog-post-how-to-install-language-packs-using-windows-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

