Windows API Code Pack とは

Download Report

Transcript Windows API Code Pack とは

セッション ID: T7-401

Windows API Code Pack による アプリケーション開発

~より便利な Windows 7 対応アプリを 構築するには~ マイクロソフト株式会社 デベロッパー & プラットフォーム統括本部 デベロッパー エバンジェリスト 田中達彦

3

セッションの目的とゴール

Session Objectives and Takeaways セッションの目的 Windows API Code Pack により、 既存のアプリケーションに Windows 7 の 機能を簡単に追加できることをご理解いただく セッションのゴール 既存アプリケーションに Windows 7 の 機能を追加できるようになる 既存アプリケーションの生産性を、 Code Pack を使用して高められるようになる

4

アジェンダ

Windows API Code Pack とは Code Pack による機能追加 アプリケーションの再起動と修復 電源処理 タスク バーの活用 まとめ

5

アジェンダ

Windows API Code Pack とは Code Pack による機能追加 アプリケーションの再起動と修復 電源処理 タスク バーの活用 まとめ

6

Windows API Code Pack とは?

.NET Framework 3.5 でサポートしていない Windows 7 の機能を使用するための ライブラリ .NET Framework 3.5

WPF WCF ASP.NET

WF ADO.NET

その他 Win32 API タスク バー センサー その他

7

Code Pack と .NET Framework

.NET Framework のアプリケーション Windows API Code Pack ライブラリ public void SetProgressState(TaskbarProgressBarState state) { CoreHelpers.ThrowIfNotWin7(); TaskbarList.SetProgressState(OwnerHandle, (TBPFLAG)state); } [ComImportAttribute()] COM ラッパー [GuidAttribute("c43dc798-95d1-4bea-9030-bb99e2983a1a")] [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)] internal interface ITaskbarList4 { [PreserveSig] void SetProgressState(IntPtr hwnd, TBPFLAG tbpFlags); Win32 API HRESULT SetProgressState( HWND hwnd, TBPFLAG tbpFlags );

8

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 という組み合わせも可能

9

API Code Pack の入手方法

以下の Web サイトにて提供 http://code.msdn.microsoft.com/windowsapicodepack/ API Code Pack に含まれるもの ライブラリのソース コード サンプルプログラム (C# と Visual Basic)

10

API Code Pack の内容

アプリケーション サービス コントロール ダイアログ 拡張言語サービス ネットワーク センサー シェル タスク バー DirectX

11

API Code Pack の内容

アプリケーション サービス アプリケーションの再起動と修復 予期せぬエラーの発生時に、未保存のデータを 修復する バッテリーの状態の検知 電源管理

12

API Code Pack の内容

コントロール エクスプローラー ブラウザー ダイアログ コモン ダイアログ タスク ダイアログ

13

API Code Pack の内容

拡張言語サービス 中国語の簡体字と繁体字などの相互変換 广东气象台 廣東氣象臺 ネットワーク ネットワーク接続の検知 ネットワーク ID やドメイン タイプなどの取得

14

API Code Pack の内容

センサー 利用可能なセンサーの取得 繋がったセンサーの状態変更取得 特定のセンサーの取り出し 現在値の取得

15

API Code Pack の内容

シェル 機知のフォルダーの取得 検索 ストック アイコン WPF グラス ウインドウ タスク バー サムネイル ジャンプ リスト

API Code Pack の内容

DirectX Direct 2D Direct 3D 10/11 ※ DirectX SDK が必要 16

17

アジェンダ

Windows API Code Pack とは Code Pack による機能追加 アプリケーションの再起動と修復 電源処理 タスク バーの活用 まとめ

18

アプリケーションの再起動と修復

予期せぬエラーによりクラッシュしたとき、 入力していたデータを修復

19

修復の仕組み

実行 再起動用コードの登録 修復用メソッドの登録 クラッシュ 修復用メソッド による データの保存 再起動 再起動か どうかの判定 (再起動の場合) データの復元

20

アプリケーション実行時の流れ

アプリケーションの起動 システムによる再起動か NO どうかの判定 コマンド ライン オプション使用し、 再起動かどうかを 判別する YES データの復元 アプリケーションの実行 再起動用コードの登録 修復用メソッドの登録 ファイルに 保存しておいた データを復元する

21

アプリケーション実行時の流れ

クラッシュ 修復用メソッドが 自動的に呼び出される システムにより 再起動される フィールドに 保持されている データを保存する 注: テキスト ボックスな どのコントロールが保持 しているデータは保存で きない

アプリケーションの 再起動と修復

修復用メソッドの登録

C# Windows Error Reporting の機能を使用 そもそもはアプリケーションのエラーを 作成元に伝える仕組み 予期せぬエラーの発生時に、 修復用メソッドを呼び出すように指定できる RecoveryData data = new RecoveryData (new RecoveryCallback (RecoveryProcedure), null); RecoverySettings new settings = RecoverySettings (data, 0); 青い字のコードは API Code Pack で 提供している機能 23 ApplicationRestartRecoveryManager .

RegisterForApp licationRecovery (settings);

24

再起動用コードの登録

C# ApplicationRestartRecoveryManager .

RegisterForApp licationRestart ( new RestartSettings ("/restart", RestartRestrictions .

NotOnReboot | RestartRestrictions .

NotOnPatch )); 再起動時の コマンド ライン オプション 再起動のオプション (この例ではリブート等の場 合には再起動しない)

再起動時の判別

C# if(System.Environment.GetCommandLineArgs().Length > 1 && System.Environment.GetCommandLineArgs()[1] == "/restart") { RecoverLastSession(); } コマンド ライン オプションの値によって 通常起動か再起動かを判別する 25

26

再起動/修復時の注意事項

アプリケーション起動後 60 秒間は再起動しない テキスト ボックスなどの コントロールに保持されている データは保存できない デバッガーから起動した場合は 再起動できない

27

再起動/修復のタスク一覧

再起動用コードの登録 修復用メソッド (コールバック ルーチン) の作成 修復用メソッドの登録 起動時の再起動かどうかの判断 再起動時にデータを修復するコードの作成

28

アジェンダ

Windows API Code Pack とは Code Pack による機能追加 アプリケーションの再起動と修復 電源処理 タスク バーの活用 まとめ

29

電源管理

バッテリー駆動の判別や、バッテリーの 残量を検知 バッテリーの残量が少ない場合の対処例 自動保存の機能の追加 データのアップデート等を減らす CD/DVD へのアクセスを減らす バックグラウンドのタスクを減らす 不必要なタスクを実行しない

バッテリーの残量

C# バッテリーで稼働しているかどうかの検知 if ( PowerManager.PowerSource

{ == // バッテリーで稼働している場合 } PowerSource.Battery

) バッテリー残量の検知 if ( PowerManager.BatteryLifePercent

{ // バッテリー残量が 20% 未満の場合 < 20) } 30

バッテリーの検知

32

アジェンダ

Windows API Code Pack とは Code Pack による機能追加 アプリケーションの再起動と修復 電源処理 タスク バーの活用 まとめ

33

タスク バーの進化

ITaskbarList ITaskbarList2 ITaskbarList3 ITaskbarList4

34

タスク バーの進化

ITaskbarList ITaskbarList2 フル スクリーンの検知 ITaskbarList3 ITaskbarList4 サムネイルの表示 プログレス バー オーバーレイ アイコン ジャンプ リスト タブ プロパティ

Windows 7 のタスク バー

サムネイル サムネイル ツール バー ジャンプ リスト 35 アクティブ 非実行 実行 複数実行

36

プログレス バー

作業の進捗をアイコン上に展開 作業の状態に合わせ、緑、黄色、赤のプ ログレス バーをアイコンに表示 進捗状態はアプリケーション側で指定

プログレス バーの実装

// 色を指定 TaskbarManager.Instance.SetProgressState

( TaskbarProgressBarState.Normal

); // 値を指定 TaskbarManager.Instance.SetProgressValue

( CPUtime, 100); TaskbarProgressBarState.Normal

TaskbarProgressBarState.Paused

TaskbarProgressBarState.Error

37 C#

オーバーレイ アイコン

38 アイコン上に別の小さなアイコンを表示 アプリケーションの状態が変化した時などに使 用 メールが届いたとき 時間のかかる処理が終了したとき タスク バー上で状態の変化を知ることが できる Windows Live Messenger の例 サインアウト オンライン 取り込み中 退席中

オーバーレイ アイコンの実装

C# if (mailcount == 0) { windowsTaskbar.

SetOverlayIcon (Handle, null, ""); } else { windowsTaskbar.

SetOverlayIcon (Handle, this.Icon, " 未読メールあり "); } 指定した アイコンを表示 アイコンを表示し ないとき 39

プログレス バーと オーバーレイ アイコン

41

サムネイル

タスク バーのアイコン上 にマウスを合わせたとき、 アプリケーションの 縮小画面を表示 MDI/TDI の アプリケーションにも 対応させることができる

42

サムネイル ツール バー

アプリケーションを 直接操作できるアイコン アイコンを 7 つまで 設定することが可能

43

サムネイルのクリッピング

サムネイルに、 特定の部分のみを 表示させる機能 アプリケーション全体を 表示させたくない時にも使 用できる

クリッピングの実装

C# TabbedThumbnail preview = TaskbarManager.Instance.

TabbedThumbnail.GetThumbnailPreview

( tabControl1.SelectedTab); preview.

ClippingRectangle = new Rectangle( thumbX, thumbY, 200, 119); 44

サムネイルとクリッピング

46

ジャンプ リスト

• • • 最近使ったもの/ よく使うもの 項目自体を表示 させないことも可能 デフォルトでは、 いつも表示と 最近使ったものを 表示する JumpPath JumpTask カスタマイズを 開発者が行う

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

ジャンプ リスト

49

アジェンダ

Windows API Code Pack とは Code Pack による機能追加 アプリケーションの再起動と修復 電源処理 タスク バーの活用 まとめ

まとめ

50 アプリケーションの再起動と修復 予期せぬエラーが発生してしまっても、 データがなくならない 電源管理 バッテリーが少なくなってもあわてない タスク バーの活用 サムネイルやジャンプリストを活用し、 生産性の向上を実現 簡単に実装できます アプリケーションの価値が上がります

51

Appendix

Windows のバージョン チェック Visual Basic のソース コード .NET Framework 4 でのサポート

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

53

Appendix

Windows のバージョン チェック Visual Basic のソース コード .NET Framework 4 でのサポート

修復用メソッドの登録

VB p23 Windows Error Reporting の機能を使用 そもそもはアプリケーションのエラーを 作成元に伝える仕組み 予期せぬエラーの発生時に、情報を修復するため のメソッドを呼び出すように指定できる Dim data As New RecoveryData (New _ RecoveryCallback (AddressOf RecoveryProcedure), _ Nothing) Dim settings As New RecoverySettings (data, 0) 54 ApplicationRestartRecoveryManager .

RegisterForAppli cationRecovery (settings) 青い字のコードは API Code Pack で提供している機能

55

再起動用コードの登録

VB p24 ApplicationRestartRecoveryManager .

RegisterForApp licationRestart (New RestartSettings ("/restart", RestartRestrictions.NotOnReboot

RestartRestrictions.NotOnPatch

)) Or 再起動時の コマンド ライン オプション 再起動のオプション (この場合はリブート等の場 合には再起動しない)

再起動時の判別

VB p25 If System.Environment.GetCommandLineArgs().Length _ > 1 AndAlso _ System.Environment.GetCommandLineArgs()(1) = _ "/restart" Then RecoverLastSession() End If コマンド ライン オプションの値によって 通常起動か再起動かを判別する 56

バッテリーの残量

VB p30 バッテリーで稼働しているかどうかの検知 If PowerManager.PowerSource

Then = ' バッテリーで稼働している場合 PowerSource.Battery

End If _ バッテリー残量の検知 If PowerManager.BatteryLifePercent

' バッテリー残量が 20% 未満の場合 < 20 Then End If 57

プログレス バーの実装

' 色を指定 TaskbarManager.Instance.SetProgressState

( ' TaskbarProgressBarState.Normal

) 値を指定 TaskbarManager.Instance.SetProgressValue

( CPUtime, 100) TaskbarProgressBarState.Normal

TaskbarProgressBarState.Paused

TaskbarProgressBarState.Error

58 VB p37

オーバーレイ アイコンの実装

If mailcount = 0 Then windowsTaskbar.

SetOverlayIcon ( _ Me.Handle, Nothing, Nothing) Else windowsTaskbar.

SetOverlayIcon (Me.Handle, _ Me.Icon, " 未読メールあり ") End If VB p39 指定した アイコンを表示 アイコンを表示し ないとき 59

クリッピングの実装

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 のバージョンチェック

Windows 7 以上で動作させる場合 VB 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

63

Appendix

Windows のバージョン チェック Visual Basic のソース コード .NET Framework 4 でのサポート

64

.NET Framework 4 でのサポート

System.Windows.Shell 名前空間 JumpList クラス、JumpTask クラス等によるジャン プ リストの操作 System.Windows 名前空間 TaskbarItemInfo プロパティによる タスク バーの状態の取得

Windows 7 の最新機能を 実装したアプリケーションを大募 集!! 投稿いただいたアプリケーションはマイ クロソフトサイトでご紹介 詳しくは、9月2日に” ”上に公開される キャンペーンページをチェック!

66

関連セッション

T7-302: Windows Presentation Foundation 4 ~ ビジュアル ステートを使った カスタム コントロールの作り方 ~ T6-302: Visual Studio 2010 の 新しいテスト機能による ソフトウェア品質の向上 T6-304: Expression Blend 4 でデザインする Silverlight 4 アプリケーション T6-310: ユーザー エクスペリエンス デザイン ~ UX をデザインする手法とプロセス ~

67

リファレンス

どうして 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

ご清聴ありがとうございました。

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.