Win32 APIをてなずけよう – プログラミング生放送勉強会 第38回@名古屋

WP_20151212_17_51_06_Pro_LIプログラミング生放送勉強会 第38回@名古屋、今年もやってきました。「Win32 APIをてなずけよう」というお題で登壇してきました。

今回もギリギリまでかかりましたが、何とか形にできてよかったです。
普段は言語系に生息していますが、プロ生は総合力が試される良い機会だと思っています。きちんと形にするのは大変だ…

等身大のコレには、プロ生ちゃんの中の人のサインが!このサインには重大な意味があるらしいです…


.NETとWin32 APIの融合

Pronama.InteropDemoセッション中でも説明しましたが、WindowsのクライアントサイドはこれからUWPが環境の主役となっていくと思いますが、一方で制限された環境故に外部との連携にはどうしても大きなリソースを必要としてしまいます。

例えば、IoTデバイスであればRaspberry PiやBluetooth LEを持ったデバイス等であれば、UWPにもWiFiやBLE APIがあるので通信が可能ですが、生USBデバイスなどの、もっと軽量なデバイスとの通信のニーズもあるかと思います。また、C言語インターフェイスしか持たないサードパーティ製のライブラリなどもそうです。これらを.NET上で簡単に有効活用するための方法の一つとして、P/Invokeを紹介しました。

内容は、P/Invokeを使用してC#からWin32 APIを呼び出し、最終的にプロ生ちゃんをデスクトップのウインドウ上を走らせてジャンプさせる、というネタです。このセッションではWin32 APIを主眼に置いて、どうやってアプリを成立させるかと言う事を背景に解説しましたが、P/Invoke自体は定義さえ出来れば、Win32に限らず他のライブラリにも応用できるため、前述のターゲットも視野に入れることが出来ます。

ところで、セッション中は解説しませんでしたが、このビデオを見て気が付いた方は居るでしょうか? Visual Studioの上辺を走っている時だけ、ちょっと宙に浮いている気がしませんか?

これは、Visual Studioのウインドウ外周に光彩(ぼんやり光るヴェールのようなもの)のエフェクトがあり、このエフェクトを表示するために、外周を取り囲むように半透明のウインドウがあるからです(つまり、理論的にはバグではないです)。
詳しくはぐらばくさんの記事を見てもらうとして、これを無視するのもちょっと難しい課題ですね。究極的には、人間の目で見てそこに「上辺」があるかどうか、だと思いますが、それを言い始めると半透明だったらどうするんだとか、矩形じゃないウインドウはどうするんだとか、色々ありそうです。

さて、P/Invokeの説明を主体にしていますが、実際に作ったコードはほかの肉付けが大きかったです。ソースコードにはコメントを多数入れて、サンプルじゃなくて現実的なコードを作るにはどうしたらよいか、という事に注意しています。

ソースコードはGitHubに上げてあるので、スライドの最後で紹介した改良を試したりしてみてください。

オリジナルスライドはこちら:Win32 APIをてなずけよう.pptx

それではまた!