![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
WINAPI WinMain(HINSTANCE hI,HINSTANCE,LPSTR,int nCS)
{
WNDCLASSwc;
HWNDhW;
MSGms;
wc.lpszClassName="goo";
wc.lpfnWndProc=(WNDPROC)WinProcedure;
wc.hInstance=hI;
wc.style=CS_HREDRAW|CS_VREDRAW;
wc.cbClsExtra=NULL;
wc.cbWndExtra=NULL;
wc.hIcon=LoadIcon(NULL,IDI_EXCLAMATION);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName=NULL;
RegisterClass(&wc);
hW=CreateWindow
(
"goo",
"教えてgoo",
WS_OVERLAPPED|WS_CAPTION|WS_THICKFRAME
|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_SYSMENU,
0,
0,
640,
480,
NULL,
NULL,
hI,
NULL
);
ShowWindow(hW,nCS);
UpdateWindow(hW);
while(GetMessage(&ms,NULL,NULL,NULL))
{
TranslateMessage(&ms);
DispatchMessage(&ms);
}
return (ms.wParam);
}
のプログラムが2回目に起動したとき1回目の起動を強制終了するにはどうしたらいいのでしょうか?
No.2ベストアンサー
- 回答日時:
>何か問題はないでしょうか?
追加するものとしては、それでいいと思いますが、なぜ WM_DESTROY を送るのですか?
WM_DESTROY は DestroyWindow が送るメッセージなので、DestroyWindow が実行されなくなります。
×ボタンを押した時に「終了しますか?」とか「保存しますか?」と聞いてくるようなアプリは、WM_CLOSE にその処理を入れることになりますが、強制終了させる場合には表示させたくないので、例えば WM_FORCE_EXIT のようなメッセージを #define などで作成し、そのメッセージを受けて、アプリの終了処理を実行するような感じになると思います。
No.1
- 回答日時:
最も簡単な方法は、FindWindow でウィンドウを探して、WM_CLOSE を送ることです。
(起動されているが、まだウィンドウが作成されていない場合は見つかりません)
この回答への補足
WINAPI WinMain(HINSTANCE hI,HINSTANCE,LPSTR,int nCS)
{
WNDCLASS wc;
HWND hW,hPW;//hPWを追加
MSG ms;
hPW=FindWindow("goo","教えてgoo");//追加
if(hPW!=NULL)SendMessage(hPW,WM_DESTROY,0,0);//追加
wc.lpszClassName ="goo";
wc.lpfnWndProc =(WNDPROC)WinProcedure;
wc.hInstance =hI;
wc.style =CS_HREDRAW|CS_VREDRAW;
wc.cbClsExtra =NULL;
wc.cbWndExtra =NULL;
wc.hIcon =LoadIcon(NULL,IDI_EXCLAMATION);
wc.hCursor =LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground =(HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName =NULL;
RegisterClass(&wc);
hW=CreateWindow
(
"goo",
"教えてgoo",
WS_OVERLAPPED|WS_CAPTION|WS_THICKFRAME
|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_SYSMENU,
0,
0,
640,
480,
NULL,
NULL,
hI,
NULL
);
ShowWindow(hW,nCS);
UpdateWindow(hW);
while(GetMessage(&ms,NULL,NULL,NULL))
{
TranslateMessage(&ms);
DispatchMessage(&ms);
}
return (ms.wParam);
}
上記のように1行修正2行追加しました
それらしい動作をしているみたいですが確信が持てません
何か問題はないでしょうか?
よろしくお願いします
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- Visual Basic(VBA) VBA 配列を使ったコードに直していただけますか 4 2023/05/06 15:18
- FX・外国為替取引 mql4のコンパイルエラー箇所の修正お願いします。 1 2023/03/15 16:14
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- MySQL SHOW CREATE TABLE posts;これって何ですか? 3 2022/08/28 22:57
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コンソールアプリケーションの...
-
フレームワーク「4.8.1」で、[S...
-
必須コンポーネントと起動条件...
-
VB.NETで起動させたExcelの多重...
-
vcxprojファイルの修正法???
-
Vba アプリケーションが立ち上...
-
MFCアプリケーションでの終了コ...
-
outlookが強制終了してしまう
-
Console Applicationをタスクト...
-
自分自身を更新するプログラム
-
VB.NETでMessageBoxを表示した...
-
VB6での二重起動(複数起動)の制...
-
外字文字の登録
-
アプリケーションエラー 0xc00...
-
OSによるWinExecの動...
-
VB6の強制終了について
-
初回接続の遅い原因について
-
VisualBasic2008を使用してます...
-
pccNTmon.exeとntrtscan.exeの違い
-
VBA初心者です。ExcelのVBAで他...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Vba アプリケーションが立ち上...
-
フレームワーク「4.8.1」で、[S...
-
コンソールアプリケーションの...
-
VBSでのSendKeysでの画面の最小化
-
実行時のコマンドプロンプトを...
-
VB.NETでMessageBoxを表示した...
-
イラストレーターCS4のシリアル...
-
Windowsプログラムのビジー状態...
-
Accessフォームからの外部アプ...
-
pccNTmon.exeとntrtscan.exeの違い
-
初回接続の遅い原因について
-
Java Web Start アプリケーショ...
-
C#でGUI・CUIの判断する仕方を...
-
Console Applicationをタスクト...
-
現在起動中のアプリケーション...
-
vb6で異なるのプロジェクト間で...
-
VB.NETでフォームアクティブの...
-
自分自身を更新するプログラム
-
MFCアプリケーションでの終了コ...
-
対象のアプリケーションが終了...
おすすめ情報