LoginSignup
2
1

More than 3 years have passed since last update.

プロセスが終わったことを標準出力に出力するツールを作った

Last updated at Posted at 2016-10-22

Go で Windows API をいじってみたかったのと、実用上のために、Go でコマンドラインツールを作ってみました。

shu-go/obit

概要

obit というコマンドラインツールを作りました。
現在のところ、個人的な環境の関係上、Windows オンリーです。

既に起動中のウィンドウタイトルもしくはプロセス名を渡すことで、そのプログラムが終了するまで待機するツールです。

実行例
> obit メモ帳 秘密のテキスト

obit は、引数に渡された名前(スペース区切り可)をすべて含むようなウィンドウもしくはプロセスを検索し、そのプロセスの終了まで待機します。

対象のプロセスが終了した際、obit は標準出力にそのプロセスに関する情報を出力します。
待機対象が複数の場合は、プロセスが終了する毎に出力されます。

上記の結果
秘密のテキスト.txt - メモ帳(notepad.exe)

ちなみに、obit の名前は「obituary (死亡記事)」からとっています。

開発

基本的には、DLLの呼び出しは syscall.NewLazyDLL と NewProc を使っています。
この場合、Windows API との呼び出しや戻り値の取得は uintptr を使ってすることになります。この変換が地味に面倒です。

その点、golang.org/x/sys/windows 便利ですね。
相当数の API の呼び出しがラッピングされています。自然な型を使って Windows API が呼び出せるのでコーディングがしやすいです。
ただ、カバーされていない API もあり、その場合は仕方なく上に挙げた方法で呼び出しをしています。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1