Enviar búsqueda
Cargar
Win32 APIをてなずけよう
•
5 recomendaciones
•
9,378 vistas
Kouji Matsui
Seguir
プロ生@名古屋 2015.12.12 http://www.kekyo.net/2015/12/12/5418
Leer menos
Leer más
Software
Denunciar
Compartir
Denunciar
Compartir
1 de 26
Descargar ahora
Descargar para leer sin conexión
Recomendados
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
Masahiro Nishimi
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
UnityTechnologiesJapan002
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
Shigenori Sagawa
設計と実装で 抑えておきたい サービスクラスと例外
設計と実装で 抑えておきたい サービスクラスと例外
Takuya Sato
グルーミングしながら進めるプロダクト開発
グルーミングしながら進めるプロダクト開発
Takafumi ONAKA
ミクシィ 21卒向け Android研修
ミクシィ 21卒向け Android研修
akkuma
Recomendados
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
Masahiro Nishimi
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
UnityTechnologiesJapan002
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
Shigenori Sagawa
設計と実装で 抑えておきたい サービスクラスと例外
設計と実装で 抑えておきたい サービスクラスと例外
Takuya Sato
グルーミングしながら進めるプロダクト開発
グルーミングしながら進めるプロダクト開発
Takafumi ONAKA
ミクシィ 21卒向け Android研修
ミクシィ 21卒向け Android研修
akkuma
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化
DeNA
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
BIGLOBE Inc.
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
どこに何を書くのか?
どこに何を書くのか?
pospome
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
増田 亨
例外設計における大罪
例外設計における大罪
Takuto Wada
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
増田 亨
ユーザーストーリー駆動開発で行こう。
ユーザーストーリー駆動開発で行こう。
toshihiro ichitani
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
Atsushi Nakada
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
増田 亨
【Swift】 それ、enumとstructでやってみましょう!!
【Swift】 それ、enumとstructでやってみましょう!!
Yu Tanaka
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
Oss貢献超入門
Oss貢献超入門
Michihito Shigemura
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Akihiro Suda
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
凝集度と責務
凝集度と責務
Toshinori Chiba
不健康なIt戦士を健康的にするアレの話
不健康なIt戦士を健康的にするアレの話
Kouji Matsui
抽象太郎ものがたり そして伝説へ
抽象太郎ものがたり そして伝説へ
Kouji Matsui
Más contenido relacionado
La actualidad más candente
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化
DeNA
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
BIGLOBE Inc.
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
どこに何を書くのか?
どこに何を書くのか?
pospome
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
増田 亨
例外設計における大罪
例外設計における大罪
Takuto Wada
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
増田 亨
ユーザーストーリー駆動開発で行こう。
ユーザーストーリー駆動開発で行こう。
toshihiro ichitani
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
Atsushi Nakada
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
増田 亨
【Swift】 それ、enumとstructでやってみましょう!!
【Swift】 それ、enumとstructでやってみましょう!!
Yu Tanaka
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
Oss貢献超入門
Oss貢献超入門
Michihito Shigemura
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Akihiro Suda
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
凝集度と責務
凝集度と責務
Toshinori Chiba
La actualidad más candente
(20)
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
どこに何を書くのか?
どこに何を書くのか?
Redisの特徴と活用方法について
Redisの特徴と活用方法について
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
例外設計における大罪
例外設計における大罪
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
ユーザーストーリー駆動開発で行こう。
ユーザーストーリー駆動開発で行こう。
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
【Swift】 それ、enumとstructでやってみましょう!!
【Swift】 それ、enumとstructでやってみましょう!!
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Oss貢献超入門
Oss貢献超入門
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
凝集度と責務
凝集度と責務
Destacado
不健康なIt戦士を健康的にするアレの話
不健康なIt戦士を健康的にするアレの話
Kouji Matsui
抽象太郎ものがたり そして伝説へ
抽象太郎ものがたり そして伝説へ
Kouji Matsui
SourceTreeで始めよう! Gitへの乗り換え指南
SourceTreeで始めよう! Gitへの乗り換え指南
Kouji Matsui
式の体を成して無い式を式の体を成すように式と式木で何とかする式
式の体を成して無い式を式の体を成すように式と式木で何とかする式
Kouji Matsui
ポイントをおさえて移行しよう!Git乗り換え超初級
ポイントをおさえて移行しよう!Git乗り換え超初級
Kouji Matsui
プロ生ちゃんをひろっちゃう!
プロ生ちゃんをひろっちゃう!
Kouji Matsui
.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組み
Kouji Matsui
真Intermediate languageのキホン
真Intermediate languageのキホン
Kouji Matsui
Async deepdive before de:code
Async deepdive before de:code
Kouji Matsui
async/awaitダークサイド is 何
async/awaitダークサイド is 何
Kouji Matsui
Final LINQ Extensions II
Final LINQ Extensions II
Kouji Matsui
メタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらば
Kouji Matsui
Hello! intermediate language
Hello! intermediate language
Kouji Matsui
Bluetoothでgo!
Bluetoothでgo!
Kouji Matsui
Destacado
(14)
不健康なIt戦士を健康的にするアレの話
不健康なIt戦士を健康的にするアレの話
抽象太郎ものがたり そして伝説へ
抽象太郎ものがたり そして伝説へ
SourceTreeで始めよう! Gitへの乗り換え指南
SourceTreeで始めよう! Gitへの乗り換え指南
式の体を成して無い式を式の体を成すように式と式木で何とかする式
式の体を成して無い式を式の体を成すように式と式木で何とかする式
ポイントをおさえて移行しよう!Git乗り換え超初級
ポイントをおさえて移行しよう!Git乗り換え超初級
プロ生ちゃんをひろっちゃう!
プロ生ちゃんをひろっちゃう!
.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組み
真Intermediate languageのキホン
真Intermediate languageのキホン
Async deepdive before de:code
Async deepdive before de:code
async/awaitダークサイド is 何
async/awaitダークサイド is 何
Final LINQ Extensions II
Final LINQ Extensions II
メタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらば
Hello! intermediate language
Hello! intermediate language
Bluetoothでgo!
Bluetoothでgo!
Similar a Win32 APIをてなずけよう
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門
Yasuhiko Yamamoto
Let’s play windows 10 io t on raspberry pi !
Let’s play windows 10 io t on raspberry pi !
Masuda Tomoaki
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
Yasuhiko Yamamoto
福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介
Mori Shingo
Friendly
Friendly
Takaaki Suzuki
みゆっき☆Think#3 「androidに触ってみるよ!」
みゆっき☆Think#3 「androidに触ってみるよ!」
techtalkdwango
C#でiPhoneアプリ開発 with MonoTouch
C#でiPhoneアプリ開発 with MonoTouch
Shin Ise
ソースが書けなくてもAndroidアプリをクリック(GUI)開発したい
ソースが書けなくてもAndroidアプリをクリック(GUI)開発したい
Yukio Saito
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
Kishi Shundo
Windows IoT Core and Robot Arm
Windows IoT Core and Robot Arm
Masuda Tomoaki
わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」
わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」
Yasuhiko Yamamoto
ET2016 Smart Japan Alliance Llilum 161118
ET2016 Smart Japan Alliance Llilum 161118
Atomu Hidaka
Android0422
Android0422
takahiko_takahashi
Cod2012 デバッグ講座
Cod2012 デバッグ講座
Masuda Tomoaki
[2001/05/30] .NET Developers Conference 2001 May / C#の生産性とパフォーマンス
[2001/05/30] .NET Developers Conference 2001 May / C#の生産性とパフォーマンス
Tatsuhiko Tanaka
Soracom ug
Soracom ug
Yoshinori Hayashi
Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...
Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...
74th
Windows io t core on raspberry pi meets ロボットアーム
Windows io t core on raspberry pi meets ロボットアーム
Masuda Tomoaki
mbedとwindows 8.1
mbedとwindows 8.1
Nobuaki Aoki
Azure Remote Renderingを試す
Azure Remote Renderingを試す
Takahiro Miyaura
Similar a Win32 APIをてなずけよう
(20)
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門
Let’s play windows 10 io t on raspberry pi !
Let’s play windows 10 io t on raspberry pi !
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介
Friendly
Friendly
みゆっき☆Think#3 「androidに触ってみるよ!」
みゆっき☆Think#3 「androidに触ってみるよ!」
C#でiPhoneアプリ開発 with MonoTouch
C#でiPhoneアプリ開発 with MonoTouch
ソースが書けなくてもAndroidアプリをクリック(GUI)開発したい
ソースが書けなくてもAndroidアプリをクリック(GUI)開発したい
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
Windows IoT Core and Robot Arm
Windows IoT Core and Robot Arm
わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」
わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」
ET2016 Smart Japan Alliance Llilum 161118
ET2016 Smart Japan Alliance Llilum 161118
Android0422
Android0422
Cod2012 デバッグ講座
Cod2012 デバッグ講座
[2001/05/30] .NET Developers Conference 2001 May / C#の生産性とパフォーマンス
[2001/05/30] .NET Developers Conference 2001 May / C#の生産性とパフォーマンス
Soracom ug
Soracom ug
Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...
Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...
Windows io t core on raspberry pi meets ロボットアーム
Windows io t core on raspberry pi meets ロボットアーム
mbedとwindows 8.1
mbedとwindows 8.1
Azure Remote Renderingを試す
Azure Remote Renderingを試す
Más de Kouji Matsui
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理
Kouji Matsui
Making archive IL2C #6-55 dotnet600 2018
Making archive IL2C #6-55 dotnet600 2018
Kouji Matsui
Matrix signal controller and BrainPad overview
Matrix signal controller and BrainPad overview
Kouji Matsui
Fun with BrainPad
Fun with BrainPad
Kouji Matsui
What's Functional?
What's Functional?
Kouji Matsui
Pitfall for WioLTE
Pitfall for WioLTE
Kouji Matsui
How to make the calculator
How to make the calculator
Kouji Matsui
Write common, run anywhere
Write common, run anywhere
Kouji Matsui
Locality of Reference
Locality of Reference
Kouji Matsui
Nespのコード生成
Nespのコード生成
Kouji Matsui
C#でわかる こわくないMonad
C#でわかる こわくないMonad
Kouji Matsui
You will be assimilated. Resistance is futile.
You will be assimilated. Resistance is futile.
Kouji Matsui
How to meets Async and Task
How to meets Async and Task
Kouji Matsui
Beachhead implements new opcode on CLR JIT
Beachhead implements new opcode on CLR JIT
Kouji Matsui
Thread affinity and CPS
Thread affinity and CPS
Kouji Matsui
Async DeepDive basics
Async DeepDive basics
Kouji Matsui
continuatioN Linking
continuatioN Linking
Kouji Matsui
Final LINQ extensions III
Final LINQ extensions III
Kouji Matsui
Final LINQ Extensions
Final LINQ Extensions
Kouji Matsui
Más de Kouji Matsui
(19)
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理
Making archive IL2C #6-55 dotnet600 2018
Making archive IL2C #6-55 dotnet600 2018
Matrix signal controller and BrainPad overview
Matrix signal controller and BrainPad overview
Fun with BrainPad
Fun with BrainPad
What's Functional?
What's Functional?
Pitfall for WioLTE
Pitfall for WioLTE
How to make the calculator
How to make the calculator
Write common, run anywhere
Write common, run anywhere
Locality of Reference
Locality of Reference
Nespのコード生成
Nespのコード生成
C#でわかる こわくないMonad
C#でわかる こわくないMonad
You will be assimilated. Resistance is futile.
You will be assimilated. Resistance is futile.
How to meets Async and Task
How to meets Async and Task
Beachhead implements new opcode on CLR JIT
Beachhead implements new opcode on CLR JIT
Thread affinity and CPS
Thread affinity and CPS
Async DeepDive basics
Async DeepDive basics
continuatioN Linking
continuatioN Linking
Final LINQ extensions III
Final LINQ extensions III
Final LINQ Extensions
Final LINQ Extensions
Win32 APIをてなずけよう
1.
Win32 APIを 手なずけよう! 2015.12.12 プロ生@名古屋
KOUJI MATSUI (@KEKYO2)
2.
自己紹介 けきょ (@kekyo2) ロードバイク乗り Microsoft MVP
for Visual Studio and Development Technology 認定スクラムマスター・スクラムプロダクトオーナー Center CLRオーガナイザー
3.
今日のお題 .NETからWin32 APIを使って、.NETだけでは難しいことをしよう
4.
巷ではUWPが流行ってますが… デスクトップアプリケーションが避けられない場面は あるはずです!! ◦ 最近はやりのIoT (Out
of box unitと通信する) ◦ Microsoft KinectやIntel RealSenseカメラ ◦ USB機器(libusb) ◦ OpenGL / DirectX ◦ サードパーティ製ライブラリ群 … そしてWin32 API
5.
Win32 APIとなかよくする と言いながら、C++でがりがり書くのは色々つらい。 C#から、どうやってWin32 APIにアクセスするか? これが出来れば、いろんなことに応用できる!!
6.
デスクトップを駆けるプロ生ちゃん ウインドウの上を走ってくよ~
7.
WPFだけではどうにもならない… デスクトップ上のどこにウインドウがあるのか? 表示されているウインドウが全て列挙出来れば、ウインドウ の上の縁の座標が分かる。 あとは計算で何とかなりそう? ②ウインドウの上辺が分かるので ③上に乗るような感じで 横に移動させる ①ウインドウの座標が分かれば
8.
落ちた時の着地点 落ちた時の着地点は、現在位置→次の位置(等加速度運動)で 決まる線分と、ウインドウ上辺が交差するところ。 ①現在の座標 ②次の座標 ③ウインドウの上辺と交差する座標 →全てのウインドウを検査する
9.
考え方はおk?
10.
ウインドウを調べる デスクトップ上のウインドウを全て列挙するには、 「EnumWindows」APIを使います。 https://msdn.microsoft.com/ja-jp/library/cc410851.aspx 又は、EnumWindowsでググる
11.
C#からWin32 APIは直接呼べません EnumWindowsを呼べば、すべてのウインドウの位置が分かる。 でもC#のコードで”EnumWindows”と書いても、もちろん呼び 出せない。 こういう時には、「P/Invoke」という機能を使います。
12.
P/Invokeするには Win32 APIに対応するP/Invokeの定義をC#で書きます。 EnumWindows APIの定義 (C言語による) EnumWindows
APIの定義 (P/Invoke C#)
13.
P/Invokeの定義 APIがどのDLLに定義されているか? (DllImport属性) API名はほとんどの場合 C言語のAPI名と同じ 引数と戻り値の並びは同じだけど、 型は要注意 ぴよぴよ
14.
どうやって書けば? そんなP/Invoke初心者のために「pinvoke.net」 コミュニティベースで、Win32 APIの P/Invoke定義を蓄積
15.
pinvoke.net 例:「EnumWindows dllimport」とかでググると、大抵トップ に出てくる。 コミュニティベースの定義なので、定義の質はまちまち。 複数載ってたりする(俺はこんな定義は我慢ならない、と 思ったのかも)ので、良さげなやつを選択する。 この定義をベースに、細かく修正するという手法はアリ。 主に型定義によるばらつきが多い感ある あと、過剰な属性か足りないか…
16.
EnumWindows P/Invokeの詳細 コールバック関数はデリゲート として定義できる SetLastErrorでエラーコードを返す APIの場合は、これを追加する
17.
EnumWindowsを使う EnumWindowProcデリゲートに相当する実装。 列挙されたウインドウハンドルをリストに蓄積します。 APIが失敗するとfalseを返すので、その場合は GetHRForLastWin32Errorでエラーコードを取得して、 対応する例外をThrowExceptionForHRでスローします。
18.
ウインドウの矩形を得るには ウインドウハンドルからウインドウ の矩形座標を得るには、 GetWindowRect APIを使います。 RECT構造体が必要 (LPRECTはRECTへのポインタ)
19.
ウインドウの矩形を得るには RECT構造体のP/Invoke表現です。 これもpinvoke.netで探せます。 ウインドウハンドルからウインドウ の矩形座標を得るには、 GetWindowRect APIを使います。
20.
GetWindowRectを使う 呼び出すだけ。エラー処理は EnumWindowsと同じ。
21.
その他必要なAPI ウインドウが可視状態かどうか → IsWindowVisible ◦
見えていないウインドウは除外します。 デスクトップ全体の矩形を取得する → SystemParametersInfo ◦ 画面外まで移動したかどうかを判定するのに使います。 ウインドウの矩形を再設定する → SetWindowPos ◦ プロ生ちゃんアイコンの移動に使用します。 (WPFデータバインディングでの移動に不備があるため)
22.
WPFウインドウからハンドルを得る WPFのウインドウクラスからウインドウハンドルを取得すれば、 WPFウインドウに対して、Win32 APIを適用できます。 WindowInteropHelperクラスを使って、 Windowクラスのハンドルを操作 内部でSetWindowPos APIを呼び出す
23.
総仕上げ デスクトップ上のウインドウ群の矩形座標が手に入ったので 上辺群を抽出 歩行中と落下中をステートマシンで管理 落下中は交点座標を計算 → 結果が得られれば着地! 上辺の左端を超えたら落下 画面外に出たら最初の座標にリセット アイコン(透過PNG)で透過ウインドウを作って表示 歩行時はアイコンを切り替えてアニメーション タイマーで定期的にステートマシンを実行
24.
デモ
25.
もっと面白くするために アニメーションパターンを増やしたいね(レベル低) ◦ せっかく色々イメージがあるので… 反対にも移動したいね(レベル低) ◦ 上辺の端まで来たら気まぐれで反転するとか ちゃんと終われるようにしたい(レベル低) ◦
タスクトレイに常駐! ウインドウ移動に追従したいね(レベル中) ◦ ウインドウを移動したら、上辺に乗っかったまま移動とか ウインドウのZオーダーを認識したい(レベル高) ◦ 裏に回っているウインドウにも着地してしまうよ ◦ 手前ウインドウにさえぎられて移動できない場合は反転とか
26.
ご清聴ありがとうございました! GitHub: Pronama.InteropDemo https://github.com/kekyo/Pronama.InteropDemo スライドはブログに上げます http://www.kekyo.net/ 第五回Center CLR年末会やります
(2015.12.26) 名古屋市 中生涯学習センター https://centerclr.doorkeeper.jp/events/34349
Descargar ahora