セッション ID: T7-401 Windows API Code Pack による アプリケーション開発 ~より便利な Windows 7 対応アプリを 構築するには~ マイクロソフト株式会社 デベロッパー & プラットフォーム統括本部 デベロッパー エバンジェリスト 田中達彦 セッションの目的とゴール Session Objectives and Takeaways セッションの目的 Windows API Code Pack により、 既存のアプリケーションに Windows 7 の 機能を簡単に追加できることをご理解いただく セッションのゴール 既存アプリケーションに Windows 7 の 機能を追加できるようになる 既存アプリケーションの生産性を、 Code Pack を使用して高められるようになる 3 アジェンダ Windows API Code Pack とは Code Pack による機能追加 アプリケーションの再起動と修復 電源処理 タスク バーの活用 まとめ 4 アジェンダ Windows API Code Pack とは Code Pack による機能追加 アプリケーションの再起動と修復 電源処理 タスク バーの活用 まとめ 5 Windows API Code Pack とは? .NET Framework 3.5 でサポートしていない Windows 7 の機能を使用するための ライブラリ .NET Framework 3.5 6 Win32 API WPF WCF タスク バー ASP.NET ADO.NET センサー WF その他 その他 Code Pack と .NET Framework .NET Framework のアプリケーション Windows API Code Pack ライブラリ public void SetProgressState(TaskbarProgressBarState state) { CoreHelpers.ThrowIfNotWin7(); TaskbarList.SetProgressState(OwnerHandle, (TBPFLAG)state); } COM ラッパー [ComImportAttribute()] [GuidAttribute("c43dc798-95d1-4bea-9030-bb99e2983a1a")] [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)] internal interface ITaskbarList4 { [PreserveSig] void SetProgressState(IntPtr hwnd, TBPFLAG tbpFlags); Win32 API 7 HRESULT SetProgressState( HWND hwnd, TBPFLAG tbpFlags ); API Code Pack の対象開発者 .NET Framework 2.0/3.0/3.5 をお使いの方 上記の .NET Framework で提供していない Windows 7 の機能を実装可能 会社の方針で .NET Framework 4 を まだ使用できない方 ランタイムの配布の許可が下りない場合など Visual Studio 2010 + .NET Framework 2.0 + API Code Pack という組み合わせも可能 8 API Code Pack の入手方法 以下の Web サイトにて提供 http://code.msdn.microsoft.com/windowsapicodepack/ API Code Pack に含まれるもの ライブラリのソース コード サンプルプログラム (C# と Visual Basic) 9 API Code Pack の内容 アプリケーション サービス コントロール ダイアログ 拡張言語サービス ネットワーク センサー シェル タスク バー DirectX 10 API Code Pack の内容 アプリケーション サービス アプリケーションの再起動と修復 予期せぬエラーの発生時に、未保存のデータを 修復する バッテリーの状態の検知 電源管理 11 API Code Pack の内容 コントロール エクスプローラー ブラウザー ダイアログ コモン ダイアログ タスク ダイアログ 12 API Code Pack の内容 拡張言語サービス 中国語の簡体字と繁体字などの相互変換 广东气象台 廣東氣象臺 ネットワーク ネットワーク接続の検知 ネットワーク ID やドメイン タイプなどの 取得 13 API Code Pack の内容 センサー 利用可能なセンサーの取得 繋がったセンサーの状態変更取得 特定のセンサーの取り出し 現在値の取得 14 API Code Pack の内容 シェル 機知のフォルダーの取得 検索 ストック アイコン WPF グラス ウインドウ タスク バー サムネイル ジャンプ リスト 15 API Code Pack の内容 DirectX Direct 2D Direct 3D 10/11 ※ DirectX SDK が必要 16 アジェンダ Windows API Code Pack とは Code Pack による機能追加 アプリケーションの再起動と修復 電源処理 タスク バーの活用 まとめ 17 アプリケーションの再起動と修復 予期せぬエラーによりクラッシュしたとき、 入力していたデータを修復 18 修復の仕組み 実行 再起動用コードの登録 修復用メソッドの登録 クラッシュ 修復用メソッド による データの保存 19 再起動 再起動か どうかの判定 (再起動の場合) データの復元 アプリケーション実行時の流れ アプリケーションの起動 システムによる再起動か どうかの判定 NO YES データの復元 アプリケーションの実行 再起動用コードの登録 修復用メソッドの登録 20 コマンド ライン オプション使用し、 再起動かどうかを 判別する ファイルに 保存しておいた データを復元する アプリケーション実行時の流れ クラッシュ 修復用メソッドが 自動的に呼び出される システムにより 再起動される 21 フィールドに 保持されている データを保存する 注: テキスト ボックス などのコントロールが 保持しているデータは 保存できない アプリケーションの 再起動と修復 修復用メソッドの登録 C# Windows Error Reporting の機能を使用 そもそもはアプリケーションのエラーを 作成元に伝える仕組み 予期せぬエラーの発生時に、 修復用メソッドを呼び出すように指定できる RecoveryData data = new RecoveryData(new RecoveryCallback(RecoveryProcedure), null); RecoverySettings settings = 青い字のコードは API Code Pack で new RecoverySettings(data, 0); 提供している機能 ApplicationRestartRecoveryManager.RegisterForApp licationRecovery(settings); 23 再起動用コードの登録 C# ApplicationRestartRecoveryManager.RegisterForApp licationRestart( new RestartSettings("/restart", RestartRestrictions.NotOnReboot | RestartRestrictions.NotOnPatch)); 再起動時の コマンド ライン オプション 24 再起動のオプション (この例ではリブート等の 場合には再起動しない) 再起動時の判別 C# if(System.Environment.GetCommandLineArgs().Length > 1 && System.Environment.GetCommandLineArgs()[1] == "/restart") { RecoverLastSession(); } コマンド ライン オプションの値によって 通常起動か再起動かを判別する 25 再起動/修復時の注意事項 アプリケーション起動後 60 秒間は再起動しない テキスト ボックスなどの コントロールに保持されている データは保存できない デバッガーから起動した場合は 再起動できない 26 再起動/修復のタスク一覧 再起動用コードの登録 修復用メソッド (コールバック ルーチン) の作成 修復用メソッドの登録 起動時の再起動かどうかの判断 再起動時にデータを修復するコードの作成 27 アジェンダ Windows API Code Pack とは Code Pack による機能追加 アプリケーションの再起動と修復 電源処理 タスク バーの活用 まとめ 28 電源管理 バッテリー駆動の判別や、バッテリーの 残量を検知 バッテリーの残量が少ない場合の対処例 自動保存の機能の追加 データのアップデート等を減らす CD/DVD へのアクセスを減らす バックグラウンドのタスクを減らす 不必要なタスクを実行しない 29 バッテリーの残量 C# バッテリーで稼働しているかどうかの検知 if (PowerManager.PowerSource == PowerSource.Battery) { // バッテリーで稼働している場合 } バッテリー残量の検知 if (PowerManager.BatteryLifePercent < 20) { // バッテリー残量が 20% 未満の場合 } 30 バッテリーの検知 アジェンダ Windows API Code Pack とは Code Pack による機能追加 アプリケーションの再起動と修復 電源処理 タスク バーの活用 まとめ 32 タスク バーの進化 ITaskbarList ITaskbarList2 ITaskbarList3 ITaskbarList4 33 タスク バーの進化 ITaskbarList ITaskbarList2 フル スクリーンの検知 ITaskbarList3 サムネイルの表示 プログレス バー オーバーレイ アイコン ジャンプ リスト ITaskbarList4 34 タブ プロパティ Windows 7 のタスク バー サムネイル サムネイル ツール バー ジャンプ リスト アクティブ 35 非実行 実行 複数実行 プログレス バー 作業の進捗をアイコン上に展開 作業の状態に合わせ、緑、黄色、赤の プログレス バーをアイコンに表示 進捗状態はアプリケーション側で指定 36 プログレス バーの実装 C# // 色を指定 TaskbarManager.Instance.SetProgressState( TaskbarProgressBarState.Normal); // 値を指定 TaskbarManager.Instance.SetProgressValue( CPUtime, 100); TaskbarProgressBarState.Normal TaskbarProgressBarState.Paused TaskbarProgressBarState.Error 37 オーバーレイ アイコン アイコン上に別の小さなアイコンを表示 アプリケーションの状態が変化した時など に使用 メールが届いたとき 時間のかかる処理が終了したとき タスク バー上で状態の変化を知ることが できる Windows Live Messenger の例 サインアウト 38 オンライン 取り込み中 退席中 オーバーレイ アイコンの実装 C# if (mailcount == 0) { windowsTaskbar.SetOverlayIcon(Handle, null, ""); } else { windowsTaskbar.SetOverlayIcon(Handle, this.Icon, "未読メールあり"); } 指定した アイコンを表示 39 アイコンを表示 しないとき プログレス バーと オーバーレイ アイコン サムネイル タスク バーのアイコン上 にマウスを合わせたとき、 アプリケーションの 縮小画面を表示 MDI/TDI の アプリケーションにも 対応させることができる 41 サムネイル ツール バー アプリケーションを 直接操作できるアイコン アイコンを 7 つまで 設定することが可能 42 サムネイルのクリッピング サムネイルに、 特定の部分のみを 表示させる機能 アプリケーション全体を 表示させたくない時にも 使用できる 43 クリッピングの実装 C# TabbedThumbnail preview = TaskbarManager.Instance. TabbedThumbnail.GetThumbnailPreview( tabControl1.SelectedTab); preview.ClippingRectangle = new Rectangle( thumbX, thumbY, 200, 119); 44 サムネイルとクリッピング ジャンプ リスト 最近使ったもの/ よく使うもの • 項目自体を表示 させないことも可能 • デフォルトでは、 いつも表示と 最近使ったものを 表示する JumpPath JumpTask • カスタマイズを 開発者が行う 46 JumpTask の実装 C# jumpList = JumpList.CreateJumpList(); jumpList.AddUserTasks( new JumpListLink(Path.Combine(systemFolder, "notepad.exe"), "メモ帳を開く") { IconReference = new IconReference( Path.Combine(systemFolder, "notepad.exe"), 0), Arguments = "c:\\autoexec.bat" }); コマンド ライン オプションを指定し、 特定の機能を起動させること可能 47 ジャンプ リスト アジェンダ Windows API Code Pack とは Code Pack による機能追加 アプリケーションの再起動と修復 電源処理 タスク バーの活用 まとめ 49 まとめ アプリケーションの再起動と修復 予期せぬエラーが発生してしまっても、 データがなくならない 電源管理 バッテリーが少なくなってもあわてない タスク バーの活用 サムネイルやジャンプリストを活用し、 生産性の向上を実現 簡単に実装できます アプリケーションの価値が上がります 50 Appendix Windows のバージョン チェック Visual Basic のソース コード .NET Framework 4 でのサポート 51 Windows のバージョンチェック C# Windows 7 以上で動作させる場合 if(Environment.OSVersion.Version.Major > 6) || (Environment.OSVersion.Version.Major == 6 && Environment.OSVersion.Version.Minor >= 1)) { // Windows 7 のバージョンは 6.1 } Windows Vista 以上で動作させる場合 if (Environment.OSVersion.Version.Major >= 6) { // Windows Vista のバージョンは 6 } 52 Appendix Windows のバージョン チェック Visual Basic のソース コード .NET Framework 4 でのサポート 53 修復用メソッドの登録 VB p23 Windows Error Reporting の機能を使用 そもそもはアプリケーションのエラーを 作成元に伝える仕組み 予期せぬエラーの発生時に、情報を修復する ためのメソッドを呼び出すように指定できる Dim data As New RecoveryData(New _ RecoveryCallback(AddressOf RecoveryProcedure), _ Nothing) Dim settings As New RecoverySettings(data, 0) ApplicationRestartRecoveryManager.RegisterForAppli cationRecovery(settings) 54 青い字のコードは API Code Pack で提供している機能 再起動用コードの登録 VB p24 ApplicationRestartRecoveryManager.RegisterForApp licationRestart(New RestartSettings("/restart", RestartRestrictions.NotOnReboot Or RestartRestrictions.NotOnPatch)) 再起動時の コマンド ライン オプション 55 再起動のオプション (この場合はリブート等の 場合には再起動しない) 再起動時の判別 VB p25 If System.Environment.GetCommandLineArgs().Length _ > 1 AndAlso _ System.Environment.GetCommandLineArgs()(1) = _ "/restart" Then RecoverLastSession() End If コマンド ライン オプションの値によって 通常起動か再起動かを判別する 56 バッテリーの残量 VB p30 バッテリーで稼働しているかどうかの検知 If PowerManager.PowerSource = PowerSource.Battery _ Then ' バッテリーで稼働している場合 End If バッテリー残量の検知 If PowerManager.BatteryLifePercent < 20 Then ' バッテリー残量が 20% 未満の場合 End If 57 プログレス バーの実装 VB p37 ' 色を指定 TaskbarManager.Instance.SetProgressState( TaskbarProgressBarState.Normal) ' 値を指定 TaskbarManager.Instance.SetProgressValue( CPUtime, 100) TaskbarProgressBarState.Normal TaskbarProgressBarState.Paused TaskbarProgressBarState.Error 58 オーバーレイ アイコンの実装 If mailcount = 0 Then windowsTaskbar.SetOverlayIcon( _ Me.Handle, Nothing, Nothing) Else windowsTaskbar.SetOverlayIcon(Me.Handle, _ Me.Icon, "未読メールあり") End If 指定した アイコンを表示 59 アイコンを表示 しないとき VB p39 クリッピングの実装 VB p44 Dim preview As TabbedThumbnail = _ TaskbarManager.Instance.TabbedThumbnail. _ GetThumbnailPreview(tabControl1.SelectedTab) preview.ClippingRectangle = New Rectangle( _ thumbX, thumbY, 200, 119); 60 JumpTask の実装 VB p47 jumpList = JumpList.CreateJumpList() jumpList.AddUserTasks( _ New JumpListLink(Path.Combine(systemFolder, _ "notepad.exe"), "メモ帳を開く") With _ { _ .IconReference = New IconReference( _ Path.Combine(systemFolder, "notepad.exe"), 0), _ .Arguments = "c:\autoexec.bat" _ }) コマンド ライン オプションを指定し、 特定の機能を起動させること可能 61 Windows のバージョンチェック VB Windows 7 以上で動作させる場合 p52 If Environment.OSVersion.Version.Major > 6 OrElse _ Environment.OSVersion.Version.Major = 6 AndAlso _ Environment.OSVersion.Version.Minor >= 1 Then ' Windows 7 のバージョンは 6.1 End If Windows Vista 以上で動作させる場合 If Environment.OSVersion.Version.Major >= 6 Then ' Windows Vista のバージョンは 6 End If 62 Appendix Windows のバージョン チェック Visual Basic のソース コード .NET Framework 4 でのサポート 63 .NET Framework 4 でのサポート System.Windows.Shell 名前空間 JumpList クラス、JumpTask クラス等による ジャンプ リストの操作 System.Windows 名前空間 TaskbarItemInfo プロパティによる タスク バーの状態の取得 64 Windows 7 の最新機能を 実装したアプリケーションを 大募集!! 投稿いただいたアプリケーションは マイクロソフトサイトでご紹介 詳しくは、9月2日に” ”上に公開される キャンペーンページをチェック! 関連セッション T7-302: Windows Presentation Foundation 4 ~ ビジュアル ステートを使った カスタム コントロールの作り方 ~ T6-302: Visual Studio 2010 の 新しいテスト機能による ソフトウェア品質の向上 T6-304: Expression Blend 4 でデザインする Silverlight 4 アプリケーション T6-310: ユーザー エクスペリエンス デザイン ~ UX をデザインする手法とプロセス ~ 66 リファレンス どうして Windows 7 を選ぶのか? http://windows.microsoft.com/ja-JP/windows7/products/why-choose/ Windows API Code Pack http://code.msdn.microsoft.com/windowsapicodepack/ .NET 開発コード サンプル集 Code Recipe http://msdn.microsoft.com/ja-jp/samplecode.recipe.aspx 67 ご清聴ありがとうございました。 T7-401 アンケートにご協力ください。 © 2010 Microsoft Corporation. All rights reserved. Microsoft, Windows and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
© Copyright 2024 ExpyDoc