module

Runtime::Win32

Class methods

acquire_single_instance(name : String) : Bool
Source
close_event(handle : LibWin32::Handle) : Nil
Source
copy_utf16(target : Pointer(UInt16), capacity : Int32, value : String) : Nil

固定長の UTF-16 配列へ、終端を残して詰める。

Source
create_ready_event(name : String) : LibWin32::Handle | Nil

置き換えた側が常駐へ入ったことを伝える名前付きイベントを用意する(issue #29)。

起動より前に作る。子が知らせた後に作ると、その SetEvent を取り落とし、 常駐へ入っているのに期限まで待つことになる。

手動リセットにする。自動リセットだと、待ち始める前に来た知らせを 最初に見に行った 1 回で消費してしまい、以降は非シグナルに戻る。

同じ名前のイベントが前の置き換えから残っている場合に備えて、作った後に落としておく。 シグナルのまま渡されると、子を起動する前から「常駐へ入った」と読めてしまう。

Source
enable_per_monitor_dpi_awareness

画面ごとの DPI に追従させる。Windows 10 バージョン 1703 以降で有効になる。

Source
event_signaled?(handle : LibWin32::Handle) : Bool

今シグナルになっているかだけを見る。

期限を渡して OS の中で待つことはしない。WaitForSingleObject はスレッドを止めるため、 待っている間は他のファイバが進まず、WebSocket の接続維持まで止まる。 呼ぶ側が Crystal の sleep を挟んで見に来る。

Source
int_resource(id : UInt32) : Pointer(UInt16)

数値のリソース ID を LPCWSTR として渡すための MAKEINTRESOURCE 相当。

Source
open_with_shell(target : String) : Nil

既定のアプリケーションで開く。設定ファイル、ログフォルダ、Windows 設定画面に使う。

Source
release_single_instance

多重起動の抑止を解く(issue #10 第 2 段階)。

置き換えて新しい exe を起動するときに使う。 握ったまま起動すると、新しい側が「既に起動している」と判断して終わってしまう。 解いた後に起動が失敗した場合は取り直せるよう、握っていたかどうかを返す。

Source
signal_ready(name : String) : Nil

常駐へ入ったことを、置き換えて起動した側へ伝える(issue #29)。

渡された側かどうかは見ずに、常駐へ入るたびに知らせる。 待っている親がいなければ、その場で作ったイベントを立てて閉じるだけで終わる。 引数で渡された場合だけ知らせる形にすると、起動の経路を数えることになり、 数え漏らしたほうが黙って期限まで待たされる。

Source
utf16(value : String) : Slice(UInt16)
Source