一般保護違反(General Protection Fault)のメッセージボックスのOKボタンをプログラムから押させたいというリクエストがあったので、
EnumWindowとかSendMessageとか使ったプログラムを作成。
(今時Win32API使うんかい!!ってツッコミは無しで(^^ゞ)
しかし、対象プログラムはサーバ上でサービスから別プロセスで起動されてるとのこと。
・・・デスクトップ空間違うじゃん!!
とりあえず、ネット検索しまくりで「OpenWindowStation()」と「OpenDesktop()」のサンプル見つけたまではいいけど、
テスト環境作ってみて、「実環境と一緒なのかどうか不明!」ってことに気付く。
となると、いろんなデスクトップ空間で動かせるかチェックしたいところ。
「Desktop Heap Information Monitor Tool 」とかで、"WinSta0/Default"とか"SAWinSta/SADesktop"とかが存在するのは
確認できたけど、
どーやってGPFエラーメッセージボックスを意図的に違うデスクトップ空間に出力すんの!!
いや、サービスのプロパティで「デスクトップとの対話をサービスに許可」チェックを入れるとか入れないとかは知ってますけど、
逆に"SAWinSta/SADesktop"に出そうとするとどうすればいいの???
(サービスプログラム自身は"SAWinSta/SADesktop"とかに表示してるのは確認してますよ。
でも、GPFエラーのメッセージボックスはログインしていると"WinSta0/Default"に表示するんですよね)
プログラムのサブシステム(Console/Window)とかでも動作が違うのかな??
まぁ、結論は"WinSta0/Winlogon"にはアクセスできないから100%はあきらめろってことで。(;一_一)