(AutoHotkey)(CD/DVDのドライブを開け閉めする 編)
同じルーチンを 呼び出すごとに 「CD/DVDドライブが 開いていたら閉じる 閉じていたら開く」とトグルするというサンプルです
これは AutoHotkeyの公式ページ や 流行らせるページ に書いてあるサンプルと 基本的には 同じです
ただ 上記のサンプルでは それを 組みこんだ場所によっては 思ったように 動作しなかったりします
それは A_TimeSinceThisHotkey組み込み変数 を参照するタイミングによって起こりうる不具合です
ならば 別の方法で 時間を計測すればいいってことですね
今回は 関数の形にしてみました、 サブルーチンとして組み込む時は 適当に読み替えてください
引数には "G" とか "V" とか のように ドライブの名前を入れるだけです
これは AutoHotkeyの公式ページ や 流行らせるページ に書いてあるサンプルと 基本的には 同じです
ただ 上記のサンプルでは それを 組みこんだ場所によっては 思ったように 動作しなかったりします
それは A_TimeSinceThisHotkey組み込み変数 を参照するタイミングによって起こりうる不具合です
ならば 別の方法で 時間を計測すればいいってことですね
今回は 関数の形にしてみました、 サブルーチンとして組み込む時は 適当に読み替えてください
引数には "G" とか "V" とか のように ドライブの名前を入れるだけです
[]DiscInsertEject(DriveName)[] []{[] []; システムが起動してからの経過時間を 記録します[] []buf := DllCall("kernel32.dll\GetTickCount")[] []; 指定したドライブを開くように命令します[] []Drive, Eject, %DriveName%:[] []; もしも すでにドライブが開いていた状態だと 処理は 即座に 次の行に移りますが[] []; 閉まっていた状態だと ドライブが開いてしまうまで 処理は次に移りません[] []; その差を読み取るために 最初に記録した時間との 時間差を計測します[] []; もしも それが 一秒未満なら ドライブは すでに開いていると判断して[] []; 閉じるように命令します[] []If ( (DllCall("kernel32.dll\GetTickCount") - buf) < 1000 )[] []{[] []Drive, Eject, %DriveName%: ,1[] []}[] []Return[] []}[]呼び出す時は
[]; CD/DVDドライブの ドライブ名が Vだったら[]
[]DiscInsertEject("V")[]
ですね