Windows(32bit)のコンソールAPIについて、分かり易く解説された書籍を紹介して下さい。

 GetConsoleScreenBufferInfo()関数、SetConsoleCursorPosition()関数辺りから、コンソールアプリケーションでのマウス入力の受け取り方辺りまで、を欲しています。
 書籍の中のコード例として希望する言語はC/C++です。僕はWindowsの専門家ではありませんが、アマチュア時代とあわせて30年くらいプログラミング経験はありますので、大抵の書籍の難易度は大丈夫だと思います。
 僕の手元にある書籍では「Win32システムサービスプログラミング」(http://www.amazon.co.jp/gp/product/4894713713)の「第14章コンソール」がイメージに近いのですが、この書物の第14章を膨らませて1冊にしたようなものが見つかると嬉しいのです。
 猫でもわかる~は嫌いではない書物ですが、今回欲している内容(精度や濃さ)に対しては雑な印象になります。
 技術書を買うときは書店で手に取って…が僕の基本的な芸風なのですが、仲々良書が見つからず疲れました。皆さんから紹介して頂いた書籍を候補に、再度書店を巡ろうと思っています。どうか宜しくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2009/05/09 03:27:39
  • 終了:2009/05/12 21:17:39

回答(2件)

id:AZUY No.1

AZUY回答回数343ベストアンサー獲得回数122009/05/09 21:49:44

ポイント50pt

だれも書かないようなので、一応。

>コンソールアプリケーションでのマウス入力の受け取り方辺りまで

コンソールアプリケーションでマウス入力のAPIなんてありません。

http://ziddy.japan.zdnet.com/qa4826710.html

id:Kityo

 いいえ、出来そうですよ?

 単独のAPIで、簡単には出来ない…の意味ならそうでしょうけれども。

 質問文面の「Win32システムサービスプログラミング」にもその方法の触りが書いてありますし、同書の中身自体は信用出来ると思っています。

 フリーコマンドラインツールのbcc32と対になっているTurbo Debuggerなどは、実際にマウス入力を受け付けているWin32コンソールアプリケーションです。


 雰囲気的には、生のMS-DOSでマウスドライバとお話しする程度の苦労で、マウス入力を受け取ることが出来るだろうと踏んでいます。(ポインタの座標が、テキスト座標系で取れるといいな)


 ともあれ、AZUYさん回答ありがとうございます。

 出来れば再回答にて、良さそうな書籍を紹介して下さい。

2009/05/09 23:31:28
id:cx20 No.2

cx20回答回数607ベストアンサー獲得回数1082009/05/10 20:27:38

ポイント300pt

書籍は確認していませんが、書籍の情報(特に日本語情報)は少ないのではないかと思います。

MSDN ライブラリにしても、日本語のドキュメントには構造体の説明やサンプルコードへのリンク等が無いことが多いので、できるだけ本家(英語)を参照するようにした方が良いと思います。

(コンソール API に限らず、最新の API やニーズの少ない情報に関しては日本語訳が提供されていないのが実情ですので・・・)

■ コンソール - MSDN ライブラリ(日本語)
http://msdn.microsoft.com/ja-jp/library/cc392639.aspx

[MSDN ライブラリ]
 +-[Win32 および COM 開発]
  +-[Windows ベース サービス]
    +-[ファイルおよび入出力]
     +-[SDK ドキュメント]
       +-[ファイル入出力]
        +-[コンソール]
          +-[リファレンス]
           +-[関数] … コンソール API の説明。ただし、構造体、サンプルコードへのリンクが無い。
■ Character-Mode Applications - MSDN Library(英語)
http://msdn.microsoft.com/en-us/library/ms682010%28VS.85%29.aspx

[MSDN Library]
 +-[Win32 and COM Development]
  +-[System Services]
    +-[DLLs, Process, and Threads]
     +-[Character-Mode Applications]
       +-[About Character-Mode Applications] … コンソールアプリケーションの概要
       +-[Using the Console] … コンソールアプリケーションのサンプル
       +-[Console Reference] … コンソール API の説明。構造体、サンプルコードへのリンク有り。
        +-[Console Functions]
        +-[Console Structures]
        +-[Console WinEvents]

海外サイトでも構わないようでしたら、いくつか、チュートリアルやサンプルがありました。

  • Tutorials - Windows Console - benryves.com

■ Creating our Window(コンソールウィンドウの作成)

http://www.benryves.com/tutorials/winconsole/

■ Writing to the Console(コンソールに書き込む)

http://www.benryves.com/tutorials/winconsole/2

■ Handling Events(イベントハンドリング(キーボード、マウス))

http://www.benryves.com/tutorials/winconsole/3

■ Using the Keyboard, Mouse and Buffer(キーボード、マウス、バッファを使用する)

http://www.benryves.com/tutorials/winconsole/4

  • adrianxw.dk Win32 Tutorials Home / Working with Windows Consoles

■ Part 1 - describes consoles(コンソールについての説明)

http://www.adrianxw.dk/SoftwareSite/Consoles/Consoles1.html

■ Part 2 - naming consoles, obtaining standard handles, moving the cursor, blocks of characters and clearing the screen(コンソールのタイトルの設定、標準ハンドルの取得、カーソル移動、キャラクタ ブロックとスクリーン クリア)

http://www.adrianxw.dk/SoftwareSite/Consoles/Consoles2.html

■ Part 3 - drawing lines, boxes and grids and hiding/modifying the cursor(ライン、ボックス、グリッドの表示、カーソルの隠蔽と変更)

http://www.adrianxw.dk/SoftwareSite/Consoles/Consoles3.html

■ Part 4 - colour(色)

http://www.adrianxw.dk/SoftwareSite/Consoles/Consoles4.html

■ Part 5 - keyboard and mouse events(キーボード&マウスイベント)

http://www.adrianxw.dk/SoftwareSite/Consoles/Consoles5.html

■ Part 6 - console size issues(コンソールサイズの問題)

http://www.adrianxw.dk/SoftwareSite/Consoles/Consoles6.html

  • サンプルプログラム、ライブラリ等

■ ASCII Madness / benryves.com(アスキーアートのアニメーション)

http://www.benryves.com/products/asciimadness

■ ASCII Madness II / benryves.com(アスキーアートのアニメーション)

http://www.benryves.com/products/am2

■ CodeProject: JLib - A Windows Console Library(コンソール向け簡易ライブラリ)

http://www.codeproject.com/KB/winsdk/JLib.aspx

■ CodeProject: Basic Graphics For Your Console Applications.(コンソール向け簡易ライブラリ)

http://www.codeproject.com/KB/recipes/ConsoleAppGraphics.aspx

■ CodeGuru: Win32 Console Application Tools(コンソール向け簡易ライブラリ)

http://www.codeguru.com/cpp/w-d/console/article.php/c3959/

■ RLeez Village - コンソールユーティリティ

http://homepage2.nifty.com/rleez/program_old/console/util.html

あと、関数名が分かっていて、使用例を探したいという場合であれば「Google ソースコード検索」で探すというのも手だと思います。

w3m(テキストブラウザ)や Cygwin(Windows 上の UNIX 互換環境)等がコンソールでマウス処理を行っているようです。

■ Google ソースコード検索

http://www.google.co.jp/codesearch

id:Kityo

 詳細に調べて頂き、嬉しいです!

 MSDNも英語のほうが充実しているンですね。[Character-Mode Applications]の先を少し探りましたが、間接的ですがhomeが(0,0)位は書いてありました。

 adrianxw.dk Win32 Tutorials Home / Working with Windows Consolesも凄くいい感じですね。例の本の「第14章」よりも数倍は豊富な例で見せてくれますし、時間は掛かりそうだけれどpart5まで通読してみようかと思います。

2009/05/10 22:44:23
  • id:Kityo
     ウォッチリスト登録して下さっている皆さんも、もしかしてコンソールアプリケーションでのマウス入力やらに興味があるンでしょうか?
     コンソールアプリケーションって関心が薄い(と出版社に思われている)のか、ストレートに「Win32 コンソールプログラミング」みたいなタイトルが背表紙に書かれた書籍を売っているのを見たことないですよね?
  • id:cx20
    書籍は存じ上げませんが、コンソールでのマウス入力は可能なようです。
    下記のサイトにサンプルコードが載っていました。

    ■ Windowsのコンソール (API VC++)
    http://capsulecorp.studio-web.net/tora/c/api/Console.html

    > INPUT_RECORD ir;
    >
    > while( bCont){
    > // 入力イベントを読み込む
    > if( ReadConsoleInput( hIn, &ir, 1, &sz) ){
    > :
    > // マウス入力の場合
    > if( ir.EventType == MOUSE_EVENT){
    > SetConsoleCursorPosition( hOut, ir.Event.MouseEvent.dwMousePosition);
    >   }
    > }

    ReadConsoleInput() で INPUT_RECORD 構造体にデータ読み込み
    SetConsoleCursorPosition() でマウス座標に移動
    という感じのようです。

    INPUT_RECORD 構造体の中に MOUSE_EVENT_RECORD を内包していて、
    マウスイベント情報がセットされるようです。

    ■ INPUT_RECORD Structure (Windows)
    http://msdn.microsoft.com/en-us/library/ms683499(VS.85).aspx

    typedef struct _INPUT_RECORD {
     WORD EventType;
     union {
      KEY_EVENT_RECORD KeyEvent;
      MOUSE_EVENT_RECORD MouseEvent;
      WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent;
      MENU_EVENT_RECORD MenuEvent;
      FOCUS_EVENT_RECORD FocusEvent;
     } Event;
    } INPUT_RECORD;
  • id:GoldenDawn
    私も丸々一冊コンソールの本、と言うのは知りませんが、私がコンソールでマウスを使うアプリを作ったときは
    ハーバート・シルトの「Windows98 プログラミング」と言う本を取っかかりにしたと思います。
    (「Windows2000 プログラミング」という新版も出ているが、コンソールに関する項目は削られている)
    書いてあることは cx20 さんのコメントにあるようなことです。
    そこから msdn などを参照しながら作成しました。
  • id:Kityo
     cx20さん、コメントありがとうございます。いつのことかずいぶん前にも他の質問で絡んでますよね?
     SetConsoleCursorPosition()の使い方から見ると、コンソールでのマウスイベントはテキスト座標系で知らせてくれるみたいですね。
     実はそのURLはブラウザの別のタブでちょうど開いていたページだったりします。(^_^;

     コメントでなくて「回答」にして下されば、(書籍でなくても)数十ポイント程度は差し上げました。
     もしcx20さんがお気を悪くされないなら、「http://q.hatena.ne.jp/1241807256#c149236の分だけポイントを!」とでもダミー回答して下さいね。
     また、もしもこの質問がオープンなうちに書籍を見かける機会があったら、是非「回答」として教えて下さい。
  • id:Kityo
     GoldenDawnさんもコメントありがとうございます。
     現在はamazonでは表紙の写真が見られなくなっていますが、738ページほどの翔泳社の本⇒これ(http://www.amazon.co.jp/dp/4881356631)でしょうか?
     望んでるイメージよりも分厚いンですが、中古が手頃な値段なので買ってもいいかも…と思います。
     新版の「Windows2000 プログラミング」は、もしや以前に手に取ったことがあったかも知れません。

     個々のAPIを調べるのはリファレンス本やMSDNライブラリで充分便利なのですが、テキスト座標系の左上が(0,0)なのか(1,1)なのか【SetConsoleCursorPosition()関数の挙動から正解は前者らしいが、書籍やMicrosoftのサイトで確認したことがない】と言った話からの体系立った解説を通しの読み物として読みたい…と思っています。(xメンバーで水平方向を指定するのも直感として正しいけれど、裏づけがない)

     丸々一冊コンソールと言うのは理想ですが、コンソール関係の章立てが充実していれば充分です。
     新版ではコンソールの項目が削られていると言う情報も、有難い・有力なアドバイスです。
     前回書店巡りしたときは、Win98の表題の本は手に取らなかったですから。

     ええと…、GoldenDawnさんにもコメントではなく「回答」して欲しかったと思っています。
     本当にありがとうございます!
  • id:Kityo
     書店には行かず、ネットで目次だけ確認して「Windows98プログラミング」オーダーしてみました。
     コンソールについては直接的には1章しか割かれていないので今回欲するものとは違うのでしょうけれど、手頃な値段で買えそうだったため、とりあえず押さえておくことにしました。
     もう1点、amazonの「この商品を買った人はこんな商品も買っています」に誘導されて、アスキーアジソンウェスレイシリーズの「Win32システムプログラミング」(http://www.amazon.co.jp/gp/product/4756118356)という書籍もオーダーしました。(\1,000-.台の中古あり)
     この種のジャンルの本を手にも取らずに買うのは普段は避けているのですが、今回は手頃な値段の中古が確認出来たので、はずれ覚悟です。
     はずれ覚悟ではあるンですが、後者の書籍については「GUIだけでは、高度なプログラムは作れない」の吊り書きが素敵でした。
  • id:Kityo
     オーダーした2冊が届きました。
     GoldenDawnさんが紹介して下さった「Windows98プログラミング」が仲々良かったです。
     ありがとうございます!

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません