Início
Conheça mais
Enviar pesquisa
Carregar
Entrar
Cadastre-se
Anúncio
Win32 APIをてなずけよう
Denunciar
Kouji Matsui
Seguir
F#, IL, metaprogramming, C#, LINQ. Microsoft MVP for VS and DevTech. CSM, CSPO. Bicycle rider. em self employed
12 de Dec de 2015
•
0 gostou
5 gostaram
×
Seja o primeiro a gostar disto
mostrar mais
•
9,145 visualizações
visualizações
×
Vistos totais
0
No Slideshare
0
De incorporações
0
Número de incorporações
0
Check these out next
技術記事を書く&楽しむチームの作り方
Takafumi ONAKA
心理的安全性の構造 デブサミ2019夏 structure of psychological safety
Tokoroten Nakayama
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
Yoshiki Hayama
TDD のこころ @ OSH2014
Takuto Wada
正しいものを正しくつくる
toshihiro ichitani
フロー効率性とリソース効率性について #xpjug
Itsuki Kuroda
グルーミングしながら進めるプロダクト開発
Takafumi ONAKA
WayOfNoTrouble.pptx
Daisuke Yamazaki
1
de
26
Top clipped slide
Win32 APIをてなずけよう
12 de Dec de 2015
•
0 gostou
5 gostaram
×
Seja o primeiro a gostar disto
mostrar mais
•
9,145 visualizações
visualizações
×
Vistos totais
0
No Slideshare
0
De incorporações
0
Número de incorporações
0
Baixar agora
Baixar para ler offline
Denunciar
Software
プロ生@名古屋 2015.12.12 http://www.kekyo.net/2015/12/12/5418
Kouji Matsui
Seguir
F#, IL, metaprogramming, C#, LINQ. Microsoft MVP for VS and DevTech. CSM, CSPO. Bicycle rider. em self employed
Anúncio
Anúncio
Anúncio
Recomendados
「ユーザーを理解するって言うほどカンタンじゃないよね」 UXデザイン・UXリサーチをもう一度ちゃんと理解しよう!
Yoshiki Hayama
7K visualizações
•
140 slides
開発速度が速い #とは(LayerX社内資料)
mosa siru
57.7K visualizações
•
18 slides
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
Tokoroten Nakayama
162.5K visualizações
•
67 slides
「ウチの事業部の商品をWebサイト・アプリで目立たせて!」私だけじゃなかった! 社内政治と落としどころの見つけ方
Yoshiki Hayama
3K visualizações
•
87 slides
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
22.3K visualizações
•
40 slides
テストとリファクタリングに関する深い方法論 #wewlc_jp
kyon mm
20.5K visualizações
•
63 slides
Mais conteúdo relacionado
Apresentações para você
(20)
技術記事を書く&楽しむチームの作り方
Takafumi ONAKA
•
8.8K visualizações
心理的安全性の構造 デブサミ2019夏 structure of psychological safety
Tokoroten Nakayama
•
187.2K visualizações
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
Yoshiki Hayama
•
51.3K visualizações
TDD のこころ @ OSH2014
Takuto Wada
•
15.6K visualizações
正しいものを正しくつくる
toshihiro ichitani
•
35K visualizações
フロー効率性とリソース効率性について #xpjug
Itsuki Kuroda
•
100.1K visualizações
グルーミングしながら進めるプロダクト開発
Takafumi ONAKA
•
10.9K visualizações
WayOfNoTrouble.pptx
Daisuke Yamazaki
•
3K visualizações
アジャイルな見積りと計画づくり勉強会
Arata Fujimura
•
4.1K visualizações
つたわるスライド
Kazuyoshi Goto
•
1.8K visualizações
例外設計における大罪
Takuto Wada
•
66.4K visualizações
「顧客の声を聞かない」とはどういうことか
Yoshiki Hayama
•
131.9K visualizações
40歳過ぎてもエンジニアでいるためにやっていること
onozaty
•
31.7K visualizações
あなたの手元の本よりいい方法がある! UXデザインのプロはこうやってユーザーのインサイトを確実に見つける
Yoshiki Hayama
•
4.5K visualizações
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
•
64.1K visualizações
「DX完全に理解した」「DXわけがわからないよ」なユーザ企業の方へ
YoheiGibo
•
499 visualizações
心理的安全性を 0から80ぐらいに上げた話
Yusuke Hisatsu
•
101.5K visualizações
マイクロにしすぎた結果がこれだよ!
mosa siru
•
131.3K visualizações
5分でわかった気になるインセプションデッキ
Takao Oyobe
•
88.9K visualizações
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
Yoshiki Hayama
•
48.8K visualizações
Similar a Win32 APIをてなずけよう
(20)
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門
Yasuhiko Yamamoto
•
3.4K visualizações
Let’s play windows 10 io t on raspberry pi !
Masuda Tomoaki
•
1.4K visualizações
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
Yasuhiko Yamamoto
•
3.7K visualizações
福井スマートフォンハッカソン Titanium Mobileの紹介
Mori Shingo
•
1.3K visualizações
Friendly
Takaaki Suzuki
•
4.3K visualizações
みゆっき☆Think#3 「androidに触ってみるよ!」
techtalkdwango
•
575 visualizações
C#でiPhoneアプリ開発 with MonoTouch
Shin Ise
•
5K visualizações
ソースが書けなくてもAndroidアプリをクリック(GUI)開発したい
Yukio Saito
•
3.1K visualizações
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
Kishi Shundo
•
6.8K visualizações
Windows IoT Core and Robot Arm
Masuda Tomoaki
•
615 visualizações
わんくま名古屋#25(20121201) 「Win8ストア・アプリ WP8アプリ、両面撃破作戦」
Yasuhiko Yamamoto
•
1.4K visualizações
ET2016 Smart Japan Alliance Llilum 161118
Atomu Hidaka
•
141 visualizações
Android0422
takahiko_takahashi
•
518 visualizações
Cod2012 デバッグ講座
Masuda Tomoaki
•
454 visualizações
[2001/05/30] .NET Developers Conference 2001 May / C#の生産性とパフォーマンス
Tatsuhiko Tanaka
•
254 visualizações
Soracom ug
Yoshinori Hayashi
•
31 visualizações
Platform io で シュッと arduino 開発を高速化しよう speed up your arduino development with p...
74th
•
186 visualizações
Windows io t core on raspberry pi meets ロボットアーム
Masuda Tomoaki
•
659 visualizações
.NET Coreから概観する.NETのOSSへの取り組み
Kouji Matsui
•
5.6K visualizações
mbedとwindows 8.1
Nobuaki Aoki
•
2.3K visualizações
Anúncio
Mais de Kouji Matsui
(20)
パターンでわかる! .NET Coreの非同期処理
Kouji Matsui
•
20.9K visualizações
Making archive IL2C #6-55 dotnet600 2018
Kouji Matsui
•
980 visualizações
Matrix signal controller and BrainPad overview
Kouji Matsui
•
265 visualizações
Fun with BrainPad
Kouji Matsui
•
472 visualizações
What's Functional?
Kouji Matsui
•
269 visualizações
Pitfall for WioLTE
Kouji Matsui
•
549 visualizações
How to make the calculator
Kouji Matsui
•
735 visualizações
Write common, run anywhere
Kouji Matsui
•
435 visualizações
Locality of Reference
Kouji Matsui
•
1.3K visualizações
Nespのコード生成
Kouji Matsui
•
2.9K visualizações
C#でわかる こわくないMonad
Kouji Matsui
•
22.6K visualizações
You will be assimilated. Resistance is futile.
Kouji Matsui
•
717 visualizações
How to meets Async and Task
Kouji Matsui
•
3.4K visualizações
Beachhead implements new opcode on CLR JIT
Kouji Matsui
•
18.1K visualizações
Async deepdive before de:code
Kouji Matsui
•
24.1K visualizações
Thread affinity and CPS
Kouji Matsui
•
1.3K visualizações
Async DeepDive basics
Kouji Matsui
•
386 visualizações
continuatioN Linking
Kouji Matsui
•
29.1K visualizações
真Intermediate languageのキホン
Kouji Matsui
•
8.3K visualizações
式の体を成して無い式を式の体を成すように式と式木で何とかする式
Kouji Matsui
•
9.1K visualizações
Último
(20)
国外学历【约克大学研究生文凭毕业证留学生首选】
1w53dacxz
•
2 visualizações
在哪里可以做《邦德大学文凭证书|毕业证》
kjds1245
•
2 visualizações
留信网认证可查【奥克兰大学文凭证书毕业证购买】
ihh14ds
•
2 visualizações
☀️【波恩大学毕业证成绩单留学生首选】
bjd42as
•
2 visualizações
留信网认证可查【俄亥俄大学文凭证书毕业证购买】
1lkjhg
•
2 visualizações
在哪里可以做《俄克拉荷马大学文凭证书|毕业证》
lobd15
•
2 visualizações
留信网认证可查【莱比锡大学文凭证书毕业证购买】
khh123kj
•
2 visualizações
☀️【密德萨斯大学毕业证成绩单留学生首选】
25mjhd12
•
6 visualizações
☀️【斯旺西大学毕业证成绩单留学生首选】
25mjhd12
•
2 visualizações
測量支援ソフト「みとおしえ」「みとおしえクラウド」の紹介
ssuserbceee8
•
48 visualizações
留信网认证可查【马努卡理工学院文凭证书毕业证购买】
ihh14ds
•
2 visualizações
留信网认证可查【俄克拉荷马大学文凭证书毕业证购买】
1lkjhg
•
2 visualizações
国外学历【尼尔森理工学院研究生文凭毕业证留学生首选】
jsad789
•
2 visualizações
①【利兹贝克特大学毕业证文凭学位证书|工艺完美复刻】
love445ds
•
2 visualizações
JSUG Info Vol.13
Draft One
•
0 visão
国外学历【奥克兰商学院研究生文凭毕业证留学生首选】
jsad789
•
2 visualizações
Jitera Inc.Company presentation_v5.pdf
SoshiSuzuki2
•
170 visualizações
留信网认证可查【威得恩大学文凭证书毕业证购买】
32lkhng
•
2 visualizações
①【密德萨斯大学毕业证文凭学位证书|工艺完美复刻】
0987hgh789
•
2 visualizações
①【南十字星大学毕业证文凭学位证书|工艺完美复刻】
vgh215w
•
2 visualizações
Anúncio
Win32 APIをてなずけよう
Win32 APIを 手なずけよう! 2015.12.12 プロ生@名古屋
KOUJI MATSUI (@KEKYO2)
自己紹介 けきょ (@kekyo2) ロードバイク乗り Microsoft MVP
for Visual Studio and Development Technology 認定スクラムマスター・スクラムプロダクトオーナー Center CLRオーガナイザー
今日のお題 .NETからWin32 APIを使って、.NETだけでは難しいことをしよう
巷ではUWPが流行ってますが… デスクトップアプリケーションが避けられない場面は あるはずです!! ◦ 最近はやりのIoT (Out
of box unitと通信する) ◦ Microsoft KinectやIntel RealSenseカメラ ◦ USB機器(libusb) ◦ OpenGL / DirectX ◦ サードパーティ製ライブラリ群 … そしてWin32 API
Win32 APIとなかよくする と言いながら、C++でがりがり書くのは色々つらい。 C#から、どうやってWin32 APIにアクセスするか? これが出来れば、いろんなことに応用できる!!
デスクトップを駆けるプロ生ちゃん ウインドウの上を走ってくよ~
WPFだけではどうにもならない… デスクトップ上のどこにウインドウがあるのか? 表示されているウインドウが全て列挙出来れば、ウインドウ の上の縁の座標が分かる。 あとは計算で何とかなりそう? ②ウインドウの上辺が分かるので ③上に乗るような感じで 横に移動させる ①ウインドウの座標が分かれば
落ちた時の着地点 落ちた時の着地点は、現在位置→次の位置(等加速度運動)で 決まる線分と、ウインドウ上辺が交差するところ。 ①現在の座標 ②次の座標 ③ウインドウの上辺と交差する座標 →全てのウインドウを検査する
考え方はおk?
ウインドウを調べる デスクトップ上のウインドウを全て列挙するには、 「EnumWindows」APIを使います。 https://msdn.microsoft.com/ja-jp/library/cc410851.aspx 又は、EnumWindowsでググる
C#からWin32 APIは直接呼べません EnumWindowsを呼べば、すべてのウインドウの位置が分かる。 でもC#のコードで”EnumWindows”と書いても、もちろん呼び 出せない。 こういう時には、「P/Invoke」という機能を使います。
P/Invokeするには Win32 APIに対応するP/Invokeの定義をC#で書きます。 EnumWindows APIの定義 (C言語による) EnumWindows
APIの定義 (P/Invoke C#)
P/Invokeの定義 APIがどのDLLに定義されているか? (DllImport属性) API名はほとんどの場合 C言語のAPI名と同じ 引数と戻り値の並びは同じだけど、 型は要注意 ぴよぴよ
どうやって書けば? そんなP/Invoke初心者のために「pinvoke.net」 コミュニティベースで、Win32 APIの P/Invoke定義を蓄積
pinvoke.net 例:「EnumWindows dllimport」とかでググると、大抵トップ に出てくる。 コミュニティベースの定義なので、定義の質はまちまち。 複数載ってたりする(俺はこんな定義は我慢ならない、と 思ったのかも)ので、良さげなやつを選択する。 この定義をベースに、細かく修正するという手法はアリ。 主に型定義によるばらつきが多い感ある あと、過剰な属性か足りないか…
EnumWindows P/Invokeの詳細 コールバック関数はデリゲート として定義できる SetLastErrorでエラーコードを返す APIの場合は、これを追加する
EnumWindowsを使う EnumWindowProcデリゲートに相当する実装。 列挙されたウインドウハンドルをリストに蓄積します。 APIが失敗するとfalseを返すので、その場合は GetHRForLastWin32Errorでエラーコードを取得して、 対応する例外をThrowExceptionForHRでスローします。
ウインドウの矩形を得るには ウインドウハンドルからウインドウ の矩形座標を得るには、 GetWindowRect APIを使います。 RECT構造体が必要 (LPRECTはRECTへのポインタ)
ウインドウの矩形を得るには RECT構造体のP/Invoke表現です。 これもpinvoke.netで探せます。 ウインドウハンドルからウインドウ の矩形座標を得るには、 GetWindowRect APIを使います。
GetWindowRectを使う 呼び出すだけ。エラー処理は EnumWindowsと同じ。
その他必要なAPI ウインドウが可視状態かどうか → IsWindowVisible ◦
見えていないウインドウは除外します。 デスクトップ全体の矩形を取得する → SystemParametersInfo ◦ 画面外まで移動したかどうかを判定するのに使います。 ウインドウの矩形を再設定する → SetWindowPos ◦ プロ生ちゃんアイコンの移動に使用します。 (WPFデータバインディングでの移動に不備があるため)
WPFウインドウからハンドルを得る WPFのウインドウクラスからウインドウハンドルを取得すれば、 WPFウインドウに対して、Win32 APIを適用できます。 WindowInteropHelperクラスを使って、 Windowクラスのハンドルを操作 内部でSetWindowPos APIを呼び出す
総仕上げ デスクトップ上のウインドウ群の矩形座標が手に入ったので 上辺群を抽出 歩行中と落下中をステートマシンで管理 落下中は交点座標を計算 → 結果が得られれば着地! 上辺の左端を超えたら落下 画面外に出たら最初の座標にリセット アイコン(透過PNG)で透過ウインドウを作って表示 歩行時はアイコンを切り替えてアニメーション タイマーで定期的にステートマシンを実行
デモ
もっと面白くするために アニメーションパターンを増やしたいね(レベル低) ◦ せっかく色々イメージがあるので… 反対にも移動したいね(レベル低) ◦ 上辺の端まで来たら気まぐれで反転するとか ちゃんと終われるようにしたい(レベル低) ◦
タスクトレイに常駐! ウインドウ移動に追従したいね(レベル中) ◦ ウインドウを移動したら、上辺に乗っかったまま移動とか ウインドウのZオーダーを認識したい(レベル高) ◦ 裏に回っているウインドウにも着地してしまうよ ◦ 手前ウインドウにさえぎられて移動できない場合は反転とか
ご清聴ありがとうございました! GitHub: Pronama.InteropDemo https://github.com/kekyo/Pronama.InteropDemo スライドはブログに上げます http://www.kekyo.net/ 第五回Center CLR年末会やります
(2015.12.26) 名古屋市 中生涯学習センター https://centerclr.doorkeeper.jp/events/34349
Anúncio