Changes between Version 3 and Version 4 of Windows的な問題


Ignore:
Timestamp:
Jul 2, 2005, 2:25:29 AM (12 years ago)
Author:
rryu
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Windows的な問題

    v3 v4  
    33== Alt+F4対策を行うとシャットダウンできなくなる ==
    44
    5 編集中のウインドウをうっかり閉じてしまって残念な思いをしたので、とりあえずポインタだけ。
     5Windows自身の仕様なのかSystem.Windows.Formsの問題なのかは謎ですが、ウインドウのコントロールボックスとクローズボタンを非表示にしただけではユーザーがウインドウを閉じてしまうことを防ぐことができません。システムメニューが表示されないにもかかわらず、Alt+F4というキー操作は依然として有効だからです。
     6
     7Alt+F4によるウインドウのクローズ操作に対抗するには、System.Windows.Forms.Form.Closingイベントを捕捉してクローズをキャンセルするしかありません。が、今度はシャットダウンができなくなるという問題が発生します。おそらくどんなときでもクローズをキャンセルしてしまうからでしょう。そこで今度はMicrosoft.Win32.SystemEvents.SessionEndingイベントを捕捉して、シャットダウンを検出して、そこで強制クローズフラグを立てるということを行うことで、シャットダウン時だけは閉じれるようにします。
     8
     9これでうまくいきそうに思えますが、実は駄目です。その秘密はここにあるようです。
    610
    711http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfmicrosoftwin32systemeventsclasssessionendingtopic.asp
    812
    9 WM_QUERYENDSESSION
    10 System.Windows.Forms.Form.Closing
    11 Microsoft.Win32.SystemEvents.SessionEnding
     13  "''Windows フォームでシステムのログオフまたは再起動を検出するために SessionEnding を使用している場合、このイベントの前に System.Windows.Forms.Form.Closing イベントが発生するかどうかを確実に知ることはできません。''"
     14
     15この問題の対処方法として、WndProc()でWM_QUERYENDSESSIONイベントを捕捉して、そこでフラグを立てるという方法が紹介されています。これでうまく行くという事は、少なくともWindows的にはウインドウを閉じようとする前に確実にWM_QUERYENDSESSIONイベントが飛んできているということになります。そもそも誰がウインドウを閉じようとしているのか。全く謎です。
     16