いわゆる、キーを押したときのスキャンコードを取得する
には MapVirtualKey でいいのでしょうか?
具体的にどういうふうに使うのかわかりません。
押したキーコードが画面に表示、または変数に入る、
というふうにしたいんです。
ヘルプをみてもなんだかちんぷんかんぷんです(泣)。
OS はWindows2000 VC6++ を使用しています。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

Windowsプログラミングの話ですよね?この質問。



てことは、メッセージループの中で、
WM_CHARをひろってそのときのwParamを見れば
キャラクタコードが入ってるはずですよ。

MapVirtualKeyってのはうろ覚えですが確か
キャラクタコードを仮想キーコードに変換する、じゃなきゃその逆、
みたいな関数だったと記憶しています。
自分Win98なんで2000のAPIはよく知りませんが。

もしかして「メッセージループって何?」ってな時は参考URLをどうぞ。
「猫でもわかるプログラミング」という滅法わかりやすいサイトです。

参考URL:http://www.kumei.ne.jp/c_lang/

この回答への補足

なんとか目星がつきました。
ヒントをいただきまして、本当に
ありがとうございました。

補足日時:2001/11/13 18:21
    • good
    • 0
この回答へのお礼

似たようなソースを入手し、例えば抜き出した以下で、
仮想キーコードらしきものが取れているようなんですが、
test = HIBYTE(GetAsyncKeyState( VK_LSHIFT ));

その次に
test2 = MapVirtualKey(test, 0)
・・・とやると、スキャンコードと別の数値が返って
来るので悩んでいるところだったりします。
2日いろいろやってるんですが・・・
URLを教えていただきありがとうございました。

お礼日時:2001/11/13 16:30

UINT MapVirtualKey(


UINT uCode, // 仮想キーコードまたはスキャンコード
UINT uMapType // 実行したい変換の種類
);

uMapType = 0をセットして、uCodeに仮想キーを設定すれば戻り値として
スキャンコードが返されます

この回答への補足

なんとか目星がつきました。
ヒントをいただきまして、本当に
ありがとうございました。

補足日時:2001/11/13 18:20
    • good
    • 0
この回答へのお礼

ありがとうございます。マイクロソフトのHPで
確認しました。しかし、以下で仮想キーコードらしき
ものが取れているようなんですが、
test = HIBYTE(GetAsyncKeyState( VK_LSHIFT ));

その次に
test2 = MapVirtualKey(test, 0)
・・・とやると、test2 に本来のスキャンコードと別の
数値が返って来るので悩んでいるところだったりします。
( VK_LSHIFT = 2a だが、128 が返って来る )
今も頭いたいです・・・

お礼日時:2001/11/13 16:38

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QC++とC#

C,C++と進みC#
Visual C#がありますが
C++とC#の違いを教えてください.
C++とJAVAをたしたようなもの
なのでしょうか?

Aベストアンサー

文法/構文上の類似点は多々ありますが、「別物」です。
その相違について掲示板で列挙できるものではありません。
# 本を読んでください。

Qvc++6.0 と vc++2500

vc++6.0で

ifstream ifs("userkey.dat");
ifs.getline(oc_user1, 63);

となっていてコンパイルできていたのですが

2005にしたら
コンパイルできません
どうしたらコンパイルできますか

6.0と2005の違いを知るには何を読んだらいいでしょうか?

Aベストアンサー

std::ifstream ifs("userkey.dat");
ifs.getline(oc_user1, 63);

としてみてはいかがでしょうか。

QC#とC++/CLIの連携について

C#とC++/CLIの連携について
C++/CLI側にC#で作成した変数を渡したいのですが、やり方がわかりません。

そもそも一つのソリューションにC++/CLIとC#を混在することはできるのでしょうか。
やはりC++/CLI側はDLLにして、C#がそのDLLを利用するのでしょうか。

Aベストアンサー

.NETの各種言語は混在することができます。
たとえば、C#でGUIの設計をし.NET用DLLを作成し、内部処理をC++でWin32APIを使って書き、C++/CLIでラップして、GUIと結び付ける、とかもできます。

「変数を渡す」というのが表現として良く分かりませんが、変数というよりはクラスを共有する感じになるかと思います。

とはいえC++/CLIはネイティブコードとマネージドコードを混ぜれるがゆえに、逆に色々と問題があるので、ちゃんとネットや本で調べたほうが良いかと思います。

QVC++6.0からVC++.NET2005へ移植

VC++6.0で作成したプログラムをVC++.NET2005に移植しました。
ビルドを行うと『fatal error LNK1104:ファイル'mfc42.lib'を開くことができません。』のエラーが出てしまいます。
ソリューションのプロパティを見てもどこで「mfc42.lib」の参照を定義しているのか分かりません。
どこで「mfc42.lib」の参照を定義しているのか教えてください。また、対策を教えてください。

Aベストアンサー

VC++.NET2005のエディションをお教えください。
Express Editionでは、リソースエディタがない、
ATL, MFCが使えないなどの制限がいくつか存在します。

また、VC2005などでは.NET Frameworkの開発が前提となっており
WIN32APIを使用する場合などについては、Platform SDKを
インストールする必要があります。

QC++ C# 語源

C++とC#(C++++)はかなり大雑把に言うとCの拡張版ですが、なぜ+が二個単位なのでしょうか。
C → C++ → C#
C+とC+++は存在しないのでしょうか。
C → C+ → C++ → C+++ → C#
もし存在しないのであれば、どのような理由でそうなったのでしょうか。

Aベストアンサー

C/C++のインクリメント演算子が、++だからじゃないでしょうか。

QVC++とVC++.NETその違いと最初に始めるならどっち?

学校でC言語の授業がスタートします。
別の言語のプログラムなら結構やりましたがC並びにVBは初めて(結構ワクワクしてます)

そして、この授業受ける人にVS6.0が教材として配布されたのですが(すでに家の部屋の片隅にありました(^^;)

他に必要な機材あるとの事でパソコン屋さんにいったついでに例のソフトあるのか見に言ってみました。
そしたらVS6.0がないΣ(゜Д゜;)
そのかわり、VS.NETがありました。「.NET?」首をかしげて店員さんに聞きます「.NETってなんですか?」でも「ちょっとそこまでは…」と首かしげて冷や汗だしてました。(当たり前ですよね)

じゃぁ「.NET」ってなぁにとなりますよね。うーんいったいなんだろう?何もしらない私はもちろんわかりません。

でも、「最新版だからいいのは確かだよね^^;」と思います。学校ではVS6.0使いますが、私は他の友達よりいい作品をたくさん家でつくって「エッヘン<( ̄^ ̄)>」となりたいです。(これは技術の向上にも役立ち一石二鳥ですからね。)

じゃあ質問です。

・VC++(又はVS6.0)とVC++.NET(又はVS.NET)その違いはなぁに?

・最初からVC++.NET(又はVS.NET)で初めていいのですか?

非常に悩む部分です。もうすぐC言語の授業があじまります。また授業で習ったことを生かして自分の趣味とお友達作りにも役立てたいなぁと思ってます。

どうか相談おねがいします。

学校でC言語の授業がスタートします。
別の言語のプログラムなら結構やりましたがC並びにVBは初めて(結構ワクワクしてます)

そして、この授業受ける人にVS6.0が教材として配布されたのですが(すでに家の部屋の片隅にありました(^^;)

他に必要な機材あるとの事でパソコン屋さんにいったついでに例のソフトあるのか見に言ってみました。
そしたらVS6.0がないΣ(゜Д゜;)
そのかわり、VS.NETがありました。「.NET?」首をかしげて店員さんに聞きます「.NETってなんですか?」でも「ちょっとそこま...続きを読む

Aベストアンサー

そもそもVS6はとっくの昔に販売終了しています。
新規購入なら自動的に.NETとなります。

#> この授業受ける人にVS6.0が教材として配布されたのですが
# いいのかそんなことして? > せんせえ


問題ありません。少なくとも数年前までは、学校にはこういったライセンス形態がありました。


それとVisual Studio 2003ってそんなに高いですか?
学生専用版は確かアマゾンで3800円でしたが。プログラムをするなら、あれはどう見ても買い得だと思います。

参考URL:http://www.amazon.co.jp/exec/obidos/ASIN/B0002ERS18/249-3944748-4369905

QC#でできてC++でできないことは?(C#のメリットとは?)

これから新しい言語として、C#もしくはC++の勉強をしたいと
考えています。

C#にできてC++にできないこと、あるいはその逆でC++にはできて
C#ではできない。ということがあれば、教えていただけないでしょうか?

感覚としてはC++であれば何でもできるという感じではあるのですが、
C#を使うメリットってどんなことがありますか?
やはり、ビジュアル開発(コントロールのDrag&Dropで画面開発ができる)
の簡単さというところがC#でのメリットでしょうか?

ちなみに私はこれまで、C -> VB -> Java といった順で言語を習得
してきました。

Aベストアンサー

>C#にできてC++にできないこと
無いでしょう。
基本的にC/C++の場合コンパイラの種類に依りますが
内部にアセンブラを書くこともできますから
C/C++で出来ないことはC#でも出来ません。
(勿論#1さんの言われるように言語レベルの仕様で出来ない事はあります。)

簡単さでいうとC#です。VB6の開発経験があるとのことですが
VC#だとVBのフォームを作成するような感じでインターフェースを
作っていけます。(一応VC++でも可能)

一方C#で出来ないことですが
当然ですがフレームワークに依存しないソフトを作る事が出来ません。
Javaで作ったソフトがJREを必要とするのと同じです。
他にはCPUの特殊な命令(SSEやMMX)を呼び出すとかドライバの開発等も出来ません。

ちなみにVC++でもフレームワークは使えるので
フレームワークのガベージコレクション等を使うことは可能です。
(ただフレームワークを使うならC#の方が簡単です。)

QVC++2005 VC++6.0で使えた関数がつかえない?(たとえば、GetModuleFileNameとか、、)

VC++超超初心者です。

いままであったVC++6.0で利用できていた、VC++2005で
GetModuleFileNameができなくなりました。
(利用できないことなんて、ないと思いますが、、、)

何か宣言とかinclude文とか必要なのでしょうか。

すみませんが、よろしくお願いします。

Aベストアンサー

VC++2005無料版にはPlatformSDKが別になっているのでそのままでは使えません
別にPlatformSDKをインストールしてVC++2005の設定を変える必要があります
VC++2008では無料版にもSDKが付属しています

QC#でCのコンソール出力の取得

C#でCのコンソール出力の取得
Cで作成したDLLをC#で利用しています。このときDLLファイルはC言語のprintfを使用しています。この出力内容を取得して、C#でテキストボックス等に表示する方法はありませんでしょうか。

Aベストアンサー

使ったこと無いのですが
Googleで調べたところ以下のWebページがヒットしました。

@IT
.NET TIPS
コンソール・アプリケーションの出力を取り込むには?[C#、VB]
http://www.atmarkit.co.jp/fdotnet/dotnettips/657redirectstdout/redirectstdout.html

参考URL:http://www.atmarkit.co.jp/fdotnet/dotnettips/657redirectstdout/redirectstdout.html

QVC++の自動キー入力プログラム

SendInput()関数を使ってキーを自動入力することに
関して質問したばかりなのですが、

当方のWin XP PRO SP2の場合使うことはできないのでしょうか?
(MDSNにはNT SP4以降と書いてありました。)

この場合は古い関数か何かがあるのでしょうか?

ちなみにそのPCでデバッグをかけると
 lpKey は定義されていない」
というエラーをはじめ変数がほとんどはじかれます。

Aベストアンサー

★アドバイス
>の部分までで、キー入力されたことになっているのでしょうか?
 ↑
 いいえキー入力されたことにはなりません。
 単にINPUT構造体にデータをセットしただけです。
 SendInput()関数を実行して初めて『S』キーが押されたのと同じになります。
・SendInput()関数の戻り値を調べてみましたか?
 ifで分岐して正常、エラーのどちらが表示されますか?
 MessageBox()などで確認して下さい。
 エラーならINPUT構造体のセット内容の不正かも知れません。
 私の載せたサンプルは『マルチバイト文字』を想定した書き方です。
 オプション設定で『Unicode文字』を使う設定ですか?


人気Q&Aランキング

おすすめ情報