実装をすると,生れ出づる悩み(全体攻撃+強化全消し)

とりあえず研究室で論文読む時間を削って(こら)常駐アプリとしての実装の続き.

  • なんかSetForeGroundWindow()で無理矢理アクティベートするのは分かったが,サイドバーが左右のどちらにあるかを判別するのが分からない.サイドバー自体のHWNDが得られれば楽勝なのだが,いかんせんEnumWindows()で探しても全然出てこない.仕方がないので,EnumWindows()に列挙される2つ目を,「多分サイドバーの上の矢印ボタン部分の座標なんだろうなぁ」とか思って判別することにした.
  • マウスが外れた時のDeactivateをSetForegroundWindow(WindowFromPoints(マウス位置))でやってたら,WindowFromPointsの返すHWNDがExplorerのウィンドウの時にどうもうまくいかない.これはサイドバーがExplorerからは隠されない仕様によるようだ.しょうがないので,ShowWindow(hWnd,SW_HIDE)でサイドバーを一時的に消……,ちょっとまて,どのウィンドウを隠せばいいんだ?.……結局初めに「表示されている」*1ウィンドウを隠せばいいことが分かるのに試行錯誤1時間かかった.
  • どうも実行結果が安定しないと思ったら,サイドバーのVisible状態が狂ってる状態でデバッグしてた.そりゃおかしいわけだ.ということで,終了時にサイドバーをアクティブにして終了するようにした.

ということで,大体実装完了.あと残ってる事柄は,

  • アプリからサイドバー起動すればVisible状態なんて関係なくね?
  • 公開する?置き場所が無いけど…….

くらいかねぇ.

*1:IsWindowVisible()がtrueを返す