プログラミング Visual Basicで 北山 洋幸 Visual Basicは,GUIプログラムの開発に適したRADツールです.このため,コンソールプログラムを開発したい場合,C++BuilderやVisual
C++を使用していました. プログラムのダウンロードはこちらから.
|
プログラムの構造
プログラムは,通常のフォームを持ったプログラムです(図1).しかし,フォームを表示しないと同時に,すべての処理をForm_Loadの部分に記述します.Form_Loadの部分に記述しますので,フォームの表示は,表示/非常時に関係なく,使用者には見えません.
けれども,プログラムの終了時に,短時間の間使用者の目に触れる可能性があるので,プロパティを非表示にしてあります.詳しくはプログラムの説明を参照してください.
プログラムの開発
まず,フォームを示します(図2).単純に作るのも面白くないので,いくつかのコマンドを受け付けて,ネットワークの状態を表示するようにしました.
ネットワークの情報を得るために,Winsockコントロールをフォームに配置します.このコントロールは標準のコントロールではありません.そのままではコントロールを使うことができないので,「プロジェクト」→「コンポーネント」を選びます(図3).
「コンポーネント」ダイアログで,「Microsoft Winsock Control」をチェックします(図4).
すると,ツールボックスに,Winsockコントロールが現れます.このコントロールは,通常の標準コントロールのように使用できます(図5).
使用者には,コンソールプログラムに見せますので,フォームは単純にプログラムを載せておく場所として使用します.ですからフォームを使用者に見せないようにします.VisibleプロパティをFlaseにすることで,フォームを使用者が短時間でも目にする機会はなくなります(図6).
なお,変数の宣言を強制するオプションを,あらかじめオンにしておきます.このオプションをオンにしておくと,次回からプログラムの先頭に「Option
Explicit」が挿入されます.「Option Explicit」が入っていると,変数の宣言なしに変数を使用することはできません.これは,単純なタイプミスなどのケアレスミスを回避するのに役に立ちます.
ただ,既に開いているプロジェクトには「Option Explicit」が挿入されませんので,気をつけてください(図7).
プログラムの流れ
プログラムの流れを図8に示します.フォームのロード時に,コンソールを開き,ループに入ります.このため,使用者には,コンソールプログラムと映ります.
Visual Basicでコンソールプログラムを作るのは難しいため,ほとんどWindows
APIを利用します.コンソールを開くのにAllocConsole APIを,stdinやstdoutのハンドルを取得するのにGetStdHandle
APIを使います.また,コンソールへの入出力には,ReadFileとWriteFile
APIを使用します.Windows APIとVisual Basicの文字列処理に違いがあるため,コンソールとのやりとりには,多少の工夫が必要です.
Win32api.txtを活用
Visual Basicのアプリケーション内で外部プロシージャを宣言すると,Windows APIにアクセスすることができます.\Microsoft Visual Studio\Common \Tools\Winapiにあるファイル,Win32api.txtにはよく使われるWindows APIプロシージャの宣言が格納されています.このファイルの関数や型などの機能は,Visual Basicにコピーするだけで利用することができます.Win32api.txtのプロシージャの表示およびコピーは,APIビューアを使うのが便利です.
● API ビューアの使用方法
APIビューアは,テキストファイルまたはMicrosoft Jetデータベースに含まれている宣言,定数および型の一覧を表示します.必要なプロシージャを見つけたら,クリップボードにコピーして,Visual
Basicアプリケーションに貼り付けることができます(図9).
一般に,APIビューアではWin32api.txtを読み込んで,必要なWindows
APIを見つけます.APIビューアを「スタート」→「プログラム」→「Microsoft
Visual Studio 6.0」→「Microsoft Visual Studio 6.0ツール」→「APIビューア」で起動し,「ファイル」→「テキストファイルの読み込み」で,Win32api.txtを読み込みます.あるいは,「アドイン」メニューで「アドインマネージャ」を選択し,API
Viewerをロードします.「アドイン」メニューで「API
ビューア」をクリックします.そうするとAPIビューアが立ち上がります.APIビューアを頻繁に使うなら,「アドインマネージャ」で「ロード方法」の「起動時にロード」を選択しておけば,毎回APIビューアを起動する手間が省けます.
APIのDeclareは,標準モジュールで行う場合と,フォームモジュールで行う場合は異なっています.Microsoft
Visual Studio 6.0の「APIビューア」では,PrivateとPublicをラジオボタンで選べるようになりました.今回はフォームの中で使いますので,Privateを選んでおきます.
以前に比べればかなり改善されましたが,Win32 api.txtはタイプミスなどもあり,信頼できない点もあります.C++の環境をお持ちならヘルプ,あるいは,SDKや市販のAPIマニュアルなどで確認が必要です.また,使用法に従い,読み込んだDeclare文を修正したほうが,使いやすい場合もあります.今回も,一部の機能を使用しないため,読み込んだDeclare文をリスト1のように修正します.
AllocConsoleがコンソールを開くAPIです.AllocConsole APIは,呼び出したプロセスに新しいコンソールを割り付けます.コンソールをいったん開いた後はフォームロードを抜けず,キーボードの入力を待ちます.このプログラムは3つのコマンドに対応しています(表1).
これ以外のコマンドが入力された場合,単純に無視します.
以下略
copyright 1999 北山 洋幸