タスクマネージャに表示するダイアログの変更

このQ&Aのポイント
  • 開発環境: Visual Studio 2008 Pro 現在メインウィンドウのOnInitDialog()内から複数のダイアログを順次モーダル表示させ、OnInitDialog()を抜ける時には自身のウィンドウに対してWM_CLOSEを送ることでアプリを終了させるプログラムを作成しております。
  • このやり方だと、モーダル画面等で処理中にはタスクマネージャーにアプリケーションが表示されません。特定のダイアログに対してウィンドウスタイルを変更すれば解決できるかと思い、(1)メインウィンドウのOnInitDialog()開始直後に自身のウィンドウスタイルからWS_EX_APPWINDOWを削除。(2)代わりにメインウィンドウとして認識させたいダイアログに対してWS_EX_APPWINDOWを設定。
  • 上記の処理を試してみましたが、タスクマネージャーに表示させることができませんでした。必要な処理などに誤りがあるのでしょうか?もしご存知の方がいらっしゃいましたらどうかご教示いただけます様お願い致します。
回答を見る
  • ベストアンサー

タスクマネージャに表示するダイアログの変更

開発環境: Visual Studio 2008 Pro 現在メインウィンドウのOnInitDialog()内から複数のダイアログを順次モーダル表示させ、 OnInitDialog()を抜ける時には自身のウィンドウに対してWM_CLOSEを送ることでアプリを 終了させるプログラムを作成しております。 ですがこのやり方だと、モーダル画面等で処理中にはタスクマネージャーにアプリケーションが 表示されません。 特定のダイアログに対してウィンドウスタイルを変更すれば解決できるかと思い、 (1)メインウィンドウのOnInitDialog()開始直後に自身のウィンドウスタイルからWS_EX_APPWINDOWを削除。 (2)代わりにメインウィンドウとして認識させたいダイアログに対してWS_EX_APPWINDOWを設定。 上記の処理を試してみましたが、タスクマネージャーに表示させることができませんでした。 必要な処理などに誤りがあるのでしょうか? もしご存知の方がいらっしゃいましたらどうかご教示いただけます様お願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • wathavy
  • ベストアンサー率22% (505/2263)
回答No.1

今テストしていました。 空っぽのダイアログを作成して、OnOKをオーバーライドして、そこにSleep(2000);を入れて、OnInitDialogからOnOKをオーバーライドした関数を呼び出しますと、タスクマネージャーに登録されずに、スリープして終了しました。 試しに、OnInitDilalogで、タイマーを作成して、タイマーから、銃器オーバーライドした関数を呼び出しました。今度は、タスクマネージャーに表示されます。(プロセスの方だけですが) なので、OnInitDialogから終了しに行くと、タスクマネージャーには登録されない仕組みになっているのではないでしょうか?

wmpg2009
質問者

お礼

>>wathavy様 テストプログラムまで作っていただきありがとうございます。 ようやく自己解決に至りました。 タスクマネージャーに表示するためにウィンドウスタイルにEX_APPWINDOWを設定してダイアログを 表示するところまではあっていたのですが、そのダイアログのプロパティで「タスクバー」が表示設定おらず、 キャプションがなかったため、この状態だとダイアログが表示されていてもタスクマネージャーで表示されないようでした。 Windows Mobile向けアプリで試しにタスクバーをとったスタイルで設定していたのを、すっかり忘れておりました。 設定を戻すことで無事タスクマネージャーに表示されるようになりました。 今後とも何卒よろしくお願い致します。

関連するQ&A

  • タスクマネージャが使えません!!

    Windows2000Professionalを使っていて、 アカウントは自分しかいないのですが、 タスクマネージャを見ようと思って、Ctrl+Alt+Deleteを押しても、 「タスクマネージャ」のボタンが押せない状態になっています。 ためしにCtrl+Shift+Escを押してみると、 「タスク マネージャは管理者によって使用不可にされています。」 とダイアログが表示されてしまいます。 自分専用のパソコンなのに、管理者は誰なんでしょうか? 回答よろしくお願いします。

  • タスクバーやタスクマネージャーのタスク欄に表示されない

    ボタンのクリックやLANでデータを受信すると、次の画面へ遷移する(又は最初の画面へ戻る)プログラムを作成しているのですが、最初のダイアログを ShowWindow(SW_HIDE) している為、タスクバーやタスクマネージャーのタスク欄に表示されず、他のウインドウがアクティブになると、ALT+Tabキーでしかそのウインドウを前に出せません。 VC++を始めて5ヶ月で得た知識や自分力量を考えて、以下のように作成したのですが、何か良い方法はないでしょうか? (1)最初のダイアログの OnInitDialog() で画面を制御するスレッド(以降、画面制御)とLANデータを受信するスレッドを生成 (2)画面制御は、最初の画面をモーダレスで表示(Create) (3)最初のダイアログを ShowWindow(SW_HIDE) で不可視にする。 (4)最初の画面は、あるボタンがクリックされると画面制御にPostMessage()で通知し、画面を閉じる。 (5)画面制御は、2番目の画面を同様にモーダレスで表示(Create) ※LANデータを受信した場合は、画面制御へメッセージキューでデータを渡し、必要に応じてその時表示している画面へ別のメッセージキューでデータを渡しています。 ※あとは、ボタンクリックやLANデータの受信で次の画面へ遷移したり、最初の画面へ戻る。(表示される画面は常に1つ) Windows XP Pro SP3 Visual C++ 6.0 SP6 他の人の回答に、親ウインドウを不可視にすると、タスクバーに表示されないというような事が書いてありましたが、何か良い方法はないものでしょうか? どなたか助言をお願いします。

  • タスクマネージャーが×で消せなくなった

    タスクマネージャーの表示がおかしくなり、×で消せなくなりました。 それと、タスクマネージャーってネットワークとか、色々とタブがあったと思うのですが、それも無くなってしまいました。 簡単に言うと、ウィンドウの上の青い部分(×とか、ウィンドウを大きくするやつとかが消えたと言うことです。

  • タスク マネージャ

    Windows 2000、Windows XP の場合、タスク マネージャは、キーボードの Ctrl キーと Alt キーを押しながら Delete キーを押し、次に [タスク マネージャ] をクリックすると表示することができます。 http://support.microsoft.com/kb/878587/ja に上記のように書いてありますが、次に [タスク マネージャ] をクリックすると表示することができます。の部分がわかりません。どこにクリックできる[タスク マネージャ] があるのでしょうか。

  • タスクマネージャーの表示がおかしいのですが

    初めて質問させていただきます。お願いします。 さて、Windows XP Pro を使用しているのですが タスクマネージャーの表示がおかしいんです タスクマネージャを呼び出すと 実行中のアプリが表示される処だけしか表示されないんです。 通常ですと、タスクの他に、 CPUの使用率が出るタブ ネットワークの使用率が出るタブ等 タブが4ヶぐらいあって選択できるはずですが 選択できる処が表示されません。 また、下にコマンドボタンがあると思うのですが これも表示されません。 「OK」「Close」みたいなコマンドボタンはありません。 要するに、通常のタブを切り替える処の中身(サブフォームでしょうか)しか表示されていない状況です。 同様のトラブルにみまわれ、修復や回避された方はいらっしゃらないでしょうか? できれば、Windowsの再インストールは避けたいのですが よろしくお願いします

  • ダイアログの非表示が遅い

    ダイアログの非表示が遅い Windows CE上で動作するソフトを作成中で、約2cm×2cmほどのボタンだけのダイアログが1つ(メインのダイアログ)、約2cm×1cmほどのボタンだけのダイアログが3つあります。(ダイアログの大きさは、それぞれのボタンと同じサイズで、メイン以外はモーダレスです。) その中の1つを押すと、別の全画面サイズのダイアログを表示し、そのダイアログ上のボタンを押すと、元のボタンだけになるようにしています。 全て、メインのダイアログのOnInitDiarog()で生成しておき、ShowWindow(SW_SHOW)で表示し、ShowWindow(SW_HIDE)で非表示にしているのですが、全画面サイズのダイアログを非表示にする際、表示が消える前に、ボタンのダイアログが表示されてしまい、見た目がかなり悪いのです。 Windows CEは遅いと聞いた事はあるのですが、どうにか対処する方法はないのでしょうか? どなたか助言をお願い致します。 環境は以下の通りです。 ・Windows CE 5.0 ・Visual C++ 2005 ・MFCスマートデバイス 以上、よろしくお願いします。

  • タスクマネージャが表示されません。

    os : Windows xp Media Center タスクマネージャーが表示されなくなってしまいました。 C:\WINDOWS\system32を開き、「taskmgr.exe」を確認しましたがないようです。 表示させる方法はありますでしょうか。 よろしくお願いします。

  • タスクマネージャが・・・

    こんばんは。 XPを使っているのですが、タスクマネージャの表示が急におかしくなりました。 下の部分だけが切れて表示されています。 具体的には「切断」「ログオフ」「メッセージの送信」ボタンのみ表示されていて上(というか、タスクマネージャのウィンドウほとんど)がありません。 PF使用量などがぜんぜんわかりません。 OSを再インストールするしかないでしょうか? 他には特にWindowsで動作がおかしいところはありません。 何卒よろしくお願いします。

  • MFC モーダルダイアログ表示中に

    MFCでプログラムを組んでいます。 以下のような状態なのですが、解決できる方法はありますか? (1) メインアプリケーションクラス(CWinAppクラスの派生クラス)から、フレームウィンドウを表示。 表示方法:CreateNewFrame()実行 → InitialUpdateFrame()実行 (2) (1)で表示されたウィンドウからモーダルダイアログを表示。 表示方法:モーダルダイアログクラスのDoModal()実行。 (3) メインアプリケーションクラスから(1)で表示されたウィンドウに対して、WM_CLOSEをSendMessage()。 (3)の実行後 (1)、(2)で表示された画面は両方とも閉じますが、モーダルダイアログでアサートします。 目的は、両方の画面が表示されている状態でメインアプリケーションを終了するときに、両方の画面をアサートすることなく閉じることです。 そもそもモーダルダイアログを外部から閉じること自体できるのかどうかわからないのですが、 もしできないとしたら、目的を達成するためにはどうすれば良いのでしょうか? よろしくお願いします。

  • ダイアログを閉じるとメモリー消費が増える

    メインウインドーに例えばA、Bという2個のモーダルダイアログを開くようにしていますが、Aのみで開いたり閉じたりするとメモリー消費が200kバイトづつ毎回増えてしまいます。 しかし、最初にBを一回開いて閉じておけば、その後は何回Aを開いてもメモリーは増えません。 また、メモリーの増えるタイミングはAのダイアログを開いた時ではなく閉じた時点で増えます。 解決策を教えてください。 //子ウィンドー作成 hwDialog_o = CreateWindowEx(0, "CDialog", "", WS_OVERLAPPED| WS_SYSMENU| WS_CAPTION| WS_BORDER| WS_VISIBLE| WS_CLIPCHILDREN| WS_EX_TOPMOST,//WS_CLIPCHILDRENでチラツキ防止 i, j, 660, 180, NULL, NULL, h_Inst, NULL); ShowWindow(hwDialog_o, nWinMode); UpdateWindow(hwDialog_o); // メインウインドウを無効化してモーダルに EnableWindow(hwnd,FALSE); ・ ・   色々と処理 ・ // メインウインドウを有効にしてモーダル解除 EnableWindow(hwnd,TRUE); BringWindowToTop(hwnd); return;

専門家に質問してみよう