• ベストアンサー

ポートをたたくプログラム

周辺機器のポートを制御してハードウェアを制御したことを実感したいのですが、どうすれば良いのかいまいちよくわかりません。Win32APIで直接ポートをたたくような関数ありますか?(どうも見つかりません)というかアセンブラじゃないとそういうことはできないのですか? また良い練習になるようなプログラムの題材があれば教えてください。 PCの環境は Windows98かWindows2000のVC++ です。

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

  • ベストアンサー
noname#25358
noname#25358
回答No.1

 Win32API を使うなら、CreateIoCompletionPort、PostQueuedCompletionStatus、GetQueuedCompletionStatus、もしくはDeviceIoControlや、CreateFile(+ReadFile & WriteFile)などがあります。  標準関数なら _outp() というのがあります。  詳しいことはマイクロソフトのオンラインMSDNに出ているんじゃないでしょうか。

参考URL:
http://www.microsoft.com/japan/developer/library/

関連するQ&A

  • COM1ポート IRQが変わる

    RS232Cを使ってPCと制御機器の通信プログラムを作成しています。 使用言語はVC++6.0です。 CreateFile関数でCOM1ポートをOpenして使用したいのですが オープン出来ずエラーになります。 コントロールパネルのデバイスマネージャから COM1ポートのIRQを見ると4となっています。 (通常そうだと思いますが。) そこで、一度、COM1ポートを無効してPC再起動 再起動後、COM1ポートを削除してハードウエアをスキャン。 その後、COM1ポートが出ますが、その時IRQは7になっています。 その状態ではCreateFile関数を使ったCOM1ポートのオープンは 出来ます。 しかし、再度、PCを再起動するとIRQが4に戻って ポートが開けない状態になります。 また、ポートを削除して・・・IRQを7にするとポートが開ける。 再起動する度に変更したIRQが4になり、上手く使いこなせません この現象について、アドバイスいただける方いましたら よろしくおねがいします。

  • VC++でwin32APIを作っているのですが・・・

    こんにちは。私はwin32APIを勉強しているc言語初心者です。 私はMicrosoft Visual C++ 2008を使ってc言語のwin32APIをプログラミングしているのですが、独学でやっているので物凄く邪道なwin32APIプログラミングをしているような気がするのです。 ・c言語のプログラムを書いて、C++のwin32APIプロジェクトとしてビルドする。 ・ヘッダーファイルにwin32API関数がなかったので、自分のwindowOSからwin32API関数を探し出してVC++2008のなかのincludeフォルダ内にコピー&ペーストして使えるようにした。 これって邪道ですか?一応何の問題もなくwin32APIプログラムが作れるのですが、もっと正規なやり方があるでしょうか。回答よろしくお願いします。

  • COMポートが存在するかどうかを調べるには?

    Windows APIでプログラムしています。 とあるCOMポートが存在するかどうかをチェックしたいと思っています。今まではCreateFile関数でポートを開いてみて、INVALID_HANDLEを返したらポートは存在しないというロジックを使っていたのですが、すでにポートが開いている状態でCreateFileを再び使うとINVALID_HANDLEを返してしまうので、ポートは存在するのに「存在しない」という判定になってしまうトラブルが起きました。 他の方法でポートの存在を確認する方法はありますか?

  • 時間差と取得するためにはWin32API関数の何を使えばいいですか?

    VC++を使っています。 プログラム上で、ある2点間の時間差(経過時間)を得たいのですが、 Win32API関数で、何を使えばいいのでしょうか? SYSTEMTIME構造体で返される時刻関数は、時間差を計算しずらそうなので。。。

  • パラレルポートを使ったステッピングモータ角度制御について教えてください

    windows98でパラレルポートを使ってステッピングモーターを角度制御したいと考えています。しかし、プログラムがわかりません。 何か参考になるものはないでしょうか。 言語はVC++6.0を使用します。 任意の値を与えることにより、その角度に駆動させたいのです。 (たとえば1だったら1.8°、2だったら3.6°、3だったら5.4°といった具合に) ソースなんかがあるとうれしいです。よろしくお願いします。

  • VC++でウィンドウを作る場合・・・

    えっと、VC++初心者です。 VC++でウィンドウを作るのに色んな方法があるようですが、 WIN32APIの Create関数(CreateEX関数含む)と CreateWindow関数(CreateWindowEX関数含む)の 使い分けの違いがよく分かりません。 どういったときにどちらを使うのがよいのでしょうか? どうぞ宜しくお願いします。

  • pingを行うプログラム

    Windows2000,VB6.0(sp5)の環境下でpingを行うプログラムの開発をしています。 API関数のIcmpSendEchoを使っているのですが、エラー時の処理がうまく制御できません。 この関数の返り値が"0"なら、エラー。"0"以外なら正常終了というようなことが HELPに書いてあったのですが、結果を"正常終了","タイムアウト","異常終了" の3つで判別するにはどのようにしたらいいのでしょうか? ご存知の方がいましたら教えてください。 よろしくお願いします。

  • 他のアプリが起動しているプログラムの、コマンドラインを取得したい

    あるwinアプリ(1)が、コンソールプログラム(2)を起動中だとして、 他のwinアプリ(3)が、(1)が起動している(2)のコマンドラインパラメータを取得する方法はあるのでしょうか? もし、あるようでしたらその方法を、教えて頂けないでしょうか。 winアプリ(3)は、VC6作成の、win32APIアプリです。 よろしくお願い致します。

  • VB6でシリアルポートの制御

    VB6のコントロールまたは、VB6で使用可能なAPIを使って、シリアルポートの内、DTRとRTS信号線を常にHigh(ON)の状態にすることは可能でしょうか? RS-232CからRS-422へ変換して機器を制御するのですが、変換器がこの信号線を電源として動作するので、常にHigh(ON)の状態にしたいのです。 よろしくお願いします。

  • windowsプログラムのデバッグ

     最近VCでwin32API Applicationを作り始めたのですが イベントに対する挙動をチェックしたいのですが方法がわかりません。  今まではConsoleプログラムだけなのでプログラムが動かなかった場合、どこまで動いているのかprintfで チェックしていたのですがwindowsプログラムの場合どうすればそのような動作チェックができるのでしょうか。  プログラム自体はwaveIn、waveOut系を使った録音・再生するだけのプログラムです。 具体的なバグは録音終了を表すMM_WIM_DATAメッセージが 送られてきた場合に再生ボタンを使用可したいのですが 設定した録音時間の3秒をすぎても使用可能になりません。 デバッグ方法がわかればMM_WIM_DATAが本当に行われているのか、 行われていた場合どこでとまっているのか、がわかると思うので教えて頂きたいです。 【開発環境】 環境:VC++6.0ProffessionalEditon OS:Windows2000 【その他】 C言語の知識は入門書を一通り理解できる程度。 リソースファイルは使用しておりません。

専門家に質問してみよう