• ベストアンサー

 Win32 APIでのVirtual-Key Codesの疑問

 Win32 APIでのVirtual-Key Codesの疑問 開発環境はVS.NET2003です。 WinAPIでプログラミングをやっているのですが、Virtual-Key Codes(VK_○○)というやつで ALT+F4キーで終了するVKコードが無いのでここで質問させて頂きました。 ALT+F4で終わるコードなんてないんでしょうか? よろしくお願いします。

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

  • ベストアンサー
回答No.3

 こんばんは。  WM_SYSKEYDOWNメッセージの「wParam == VK_F4」で判断出来るのでは。  http://msdn.microsoft.com/en-us/library/ms646286(VS.85).aspx LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_SYSKEYDOWN: if(wParam == VK_F4) { ::MessageBox(hWnd, TEXT("test"), TEXT("test"), IDOK); } break; case WM_CLOSE: ::DestroyWindow(hWnd); return 0; case WM_NCDESTROY: ::PostQuitMessage(0); return 0; } return ::DefWindowProc(hWnd, message, wParam, lParam); }

dotneer
質問者

お礼

  WM_SYSKEYDWON内で処理をすれば可能なことなんですね。 Alt+F4なんてVKにはないよなーと考えていたんですが そういうことだったんですね。 回答、ありがとうございます。

その他の回答 (2)

回答No.2

「Alt+F4で終わるコード」 というのは、単純に「Alt+F4に相当するVK_〇〇〇」のことで、「通常、Alt+F4でプロセスが終了します」、という意味であると理解してよいですか? 質問の意図(Alt+F4で終了するようにしたいのか、逆にAlt+F4で終了しないようにしたいのか)がわからないのですが、Alt+F4で終了させるのであれば、Alt+F4が自動的にWM_CLOSE(記憶が定かではあるませんが、WM_CLOSEだったと思います)に変換されたと思いますので、単純にWM_CLOSEに対して処理を記述すればよいと思います。 ちなみにAltキー単独ではVK_MENUになるようです。

dotneer
質問者

お礼

ALT+F4だとWM_CLOSEで処理ができるんですね。 参考になりました。

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

恐らくALT+F4を押したときに WM_KEYDOWN等のメッセージが来ないということですよね? ALT+F4はOS側で消化してしまうので、WM_KEYDOWNが来ないと思います。 ALT+F4時に何かアプリに動作をさせたいのなら、 SetWindowHookExか、RegisterHotKeyで調べてみてください。 アプリをどう挙動させたいかによりますが、 GetKeyboardStateでも望みの動作が可能かもしれません。 RegisterHotKeyを使った例ですが、WndProc内で以下の処理をすればALT+F4が押されたときに メッセージボックスを表示します。 case WM_CREATE:  ::RegisterHotKey( hWnd , 1234 , MOD_ALT , VK_F4 );  break; case WM_HOTKEY: {  int hotkey_id = wParam;  if (1234 == hotkey_id)  {   ::MessageBox( hWnd , TEXT("ALT+F4が押された") , TEXT("") , MB_OK );  }  break; }

dotneer
質問者

お礼

OS側が勝手にやってくれる処理のようですね。 フック処理とかが関わってくるんですね。 参考になりました。

関連するQ&A

  • WIN版 バーチャルPC2004で

    WIN版 バーチャルPC2004で バーチャルPCからホストPCに切り替える際、通常右 Altキーを押して切り替えると思うのですが 右Altキーがありません・・・。(Dellの C400です)この場合どうしたら宜しいのでしょうか? 宜しくお願い申し上げます。

  • WIN32API CreateFileのCOMx

    WIN32API CreateFile(…"COMx"…)のCOM番号「x」)は、1~256まで可能ですか。 MS-VC++でRS-232C通信のWIN32アプリケーションを作る必要が生じてきました。 VC++6.0やVS2005のシステムは所有していますが、WIN32アプリは初心者です。 (WIN32アプリが出来たらDLLに改造するつもりです。) http://www.saluteweb.net/~oss_winapi232.html ここにどなたかが、サンプルプログラムをアップされてます。 この中の("COM1")は、"COM1"~"COM256"まで、対応しているんでしょうか。

  • メニューバーのショートカットキー(Win32API)

    リソーススクリプトとWin32APIでメニューバーの付いているウィンドウズアプリケーションを作りました。 メニュー内のポップアップはAlt+キーで開けるように"ポップアップの文字列(&H)"としておいたのですが、実際にショートカットで開こうとすると、Alt押しっぱなし+キーでは開けず、Altを押してメニューバーを選択状態にした後にキーで選択する、といった風にしか開けませんでした。 しかし多くのアプリケーションではAlt押しっぱなし+キーでもポップアップが開けます。そうする為にはWM_SYSKEYDOWNを処理してポップアップを開くようにする以外に方法はないでしょうか? 回答よろしくお願いします。

  • C++ API 全般 APIの概要は

    独学にてプログラミングを勉強しているのですが、いきづまってしまったので質問お願いします。 ※Visual Studio 2008 Express Editionsを使用しています。 まだプログラミングに関しての勉強を始めて1ヶ月程度で、最初はVB.NETから始めて、最近C++に乗り換えました。 趣味の範囲でのゲームを作ろうと思っていて、C++とDirectXでの開発を予定しています。(しかし、最終的にはゲームに限らずプログラミングの技術と知識を習得することを目標にしています。)(DirectXに関してはまだ手をつけていません。) まったく1からのスタートで、現在win32コンソールアプリケーションにてコードの勉強をしているところです。 勉強に使っている参考文献は ・VisualC++.NET逆引き大全500の極意 ・ゲームプログラマになる前に覚えて起きたい技術(これを買うには早すぎたようです…。第一章も半分くらいしか理解できません…。) サイトは ・主に「0からのゲームプログラミング」というサイトです。 http://www.plustarnet.com/aspil/Programming/ 本題の質問ですが、APIというものがいまいち理解できません。 (1)上記のような目的で使用するAPIは、標準 Windows APIというものでいいのでしょうか? (2)win32コンソールアプリケーションでは実行できるのに、win32プロジェクトでは実行できないのはなぜでしょうか? #include<windows.h> int WINAPI WinMain( HINSTANCE hInstance , HINSTANCE hPrevInstance , PSTR lpCmdLine , int nCmdShow ) { MessageBox(NULL , TEXT("Hello Wold!") , TEXT("メッセージボックス") , MB_OK); return 0; } (3)http://www.plustarnet.com/aspil/Programming/CConsole.htm このURLのコンソールAPIというのは、一般的に使われているものでしょうか?それともこのサイトのオリジナルのものでしょうか?win32コンソールアプリケーションでAPIを使うには、このURLのCConsoleクラスとうものをインクルードしないといけないのでしょうか?#include<windows.h>と宣言することによって気軽に使いたいものを使うことはできないのでしょうか? (4)#include<windows.h> とした場合、作るものが「win32コンソールアプリケーション」だったり「win32プロジェクト」だったり「windowsフォームアプリケーション」だったりで、使用方法などがまったく別になってしまうのでしょうか? (5)そもそも、上記の目的の場合APIを勉強する必要はあるでしょうか? (6)勉強をしたほうが後々に役立つ場合、どのAPIを勉強するのがいいのでしょうか?(APIといっても様々なものがあるんだなと思い質問しました。もし勘違いでAPIというものは一つしかないとしたらすみません。) なぜAPIに関してかというと、単純に上記のサイトで言語編の一番上から順に見ていったからです。 初心者すぎて質問が的外れかもしれませんがよろしくお願いします。

  • RubyでWin32APIのCreateWindow

    RubyでWin32APIのCreateWindow 初めまして。RubyでWin32APIを使ってプログラミングをしようとしています。 RubyもWin32APIも勉強を始めて間もないのですが、RubyリファレンスマニュアルのWin32APIのページやグーグル検索などを利用し一通り調べて (test.rb) require 'Win32API' createwindow = Win32API.new('user32', 'CreateWindow', %w(l p l i i i i l l l p), 'l') createwindow.call(0, "HELLO", 0xc00000, 100, 100, 100, 100, 0, 0, 0, nil) としてみました。しかしエラーで、 test.rb:2:in `initialize': GetProcAddress: CreateWindow or CreateWindo wA (RuntimeError) となりました。 rubyのバージョンは ruby 1.8.6 です。 コードのどこが間違っているのか、エラーの意味、参考になるwebサイト(rubyでWin32APIのCGIを扱っているサイト)を教えていただきたいです。 よろしくお願いします。

    • ベストアンサー
    • Ruby
  • ペイント系ソフトのレイヤーのようなGUIを作りたい

    既出かもしれませんが、質問させて下さい。 質問タイトルの通り、PhotoShopやGIMPのような レイヤーの機能を持つウィンドウ(ダイアログボックス?)や、ツールボックス を作りたいと考えています。 今、自分が用意している開発環境は    OS:Windows7  ソフトウェア開発スイート:Visual Studio 2010 C++  API:WinAPI  言語:C++ ホームページで「猫でもわかるプログラミング」さんをWinAPI開発に参考にさせていただき、 同HPと同じく、空のプロジェクトでAPIを使用しながら一からコードで作成したいと 考えています。 自身の知識としては、C/C++でDirectXを使用しての3D描画くらいで、 GUIの設計は初めてです。 調査不足かもしれませんが、質問させて下さい。 PhotoShopやGIMPのようなレイヤーやツールボックスウィンドウは、 WinAPIのみで作成されているのでしょうか? それとも、他にGUIプログラミング用のAPIがあるのでしょうか? もしあるのならば、APIや参考HPを教えて頂けたら嬉しいです。 プログラミング初心者ですが、どうかよろしくお願い致します。

  • Windows2000のAPIの使い方について

    以前、Win95、NT開発環境でAPI関数のGetOpenFileNameを使用し、 ファイルを選択するダイアログを表示するようなプログラムをVBAで作りました。 Win95、NTでは正常に動作するのですが、 Win2000ワークステーションではダイアログが表示されません。エラーもでません。2000では構造体が3つ追加されていることはわかったのですが、 実際プログラミングしてみたところ正常に作動しません。 いろいろ調べたのですがよく分からないので、サンプルのプログラム等を教えていただきたいのですが・・・。よろしくお願いします。

  • ダイアログベースでのキー入力について

    現在Win2000、VC++6.0でダイアログベースのアプリを作っています。 ボタンの存在しないダイアログにしているので、 終了するにはタスクバーから閉じるか、ALT+F4キーだけしかないと思っていましたが、 Enterキーを押すと終了してしまうことに気づきました。 このEnterキーを押すと終了してしまうのを回避するには どうしればいいのでしょうか? それと、もう一つ質問なのですが、 WM_CHARメッセージハンドラを追加しましたが、 キーを入力してもOnChar関数にやってきません。 (デバッグでブレークポインタを置いてみたのですが・・・) なにを間違えているのかが分かりません。 どうぞよろしくおねがいします。

  • APIの意味がさっぱり分かりません。

    VBAでたまにAPIと言うのを使うのですが APIの意味がさっぱり分かりません。 私がAPIを使う際は、 やりたい事をググり、見つかったページのコードをコピペしているだけです。 https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9 を読んでみたのですが よくわかりません。 簡単に言うとなんなんでしょうか? プログラミングコードではないという事はわかりました。

  • WIN32APIのリファレンスがダウンロードできるサイトのURL教えてください。それとちょっとした質問があります。

    WIN32APIリファレンスがダウンロードできるサイトと プログラミングが好きで基礎の基礎から勉強しています。 これから、ソフト開発などの業務をするには、 最低限どんなスキルが必要なのでしょうか? また、実際にプログラマー・SEで活躍なされている方や コンピュータ上級者の方で、 基礎が分かり易い、応用でこのサイトの説明は分かり易い。ソフトを開発していく上でこのサイトの情報はためになるなとかいったサイトがあれば、是非URL等または助言を 頂けないでしょうか?もちろん、システム・ソフト開発をする上等で役立つサイトならなんでもOKです。 できれば、たくさんの情報を頂きたいので、 よろしくお願いします.

専門家に質問してみよう