【備忘録ペ〜ジ】


PC用赤外線リモコン(PC-OP-RS1、Kuro-RS、他)について

(気が向くままに、勝手に更新)

【備忘録ペ〜ジ】トップへ戻る
1.赤外線リモコン(PC-OP-RS1,Kuro-RS)とは
2.特徴
3.プロトコル
4.現在の運用方法
5.64ビット版ドライバ
6.所感・他
7.PC-OP-RS1のポート番号を取得するには



1.赤外線リモコン(PC-OP-RS1,Kuro-RS)とは


  パソコンに、TVとかビデオとかのリモコンボタンデータを学習(受信)させて、

  そのデータを送信しなおすことができる、

  ソフトウェアリモコンが構築できるUSB機器といった物。



  補足すると、事前にリモコンからの赤外線データをファイル化できるので、

  アプリが必要に応じてそのファイルを読み込んで、赤外線に変換して送信することが可能になる。



  なので、赤外線のデータフォーマットなど知らない、「おととい、・・・・!」 レベルの当方でも、

  リモコンボタンに対応したファイルさえできてれば、擬似リモコンの構築が実現可能。




  同じハードであるが、下記の2社からブランド名を変えて販売されている。



  
BUFFALLO PC-OP-RS1

  http://buffalo.jp/products/catalog/item/p/pc-op-rs1/





  玄人志向 Kuro-RS

  http://www.kuroutoshikou.com/modules/display/?iid=928











  なお、同梱されているソフトウェアは異なるので確認が必要。

  価格はPC-OP-RS1の方が安い。



PC-OP-RS1 概観

  当方は、安いほうのPC-OP-RS1を購入。

  (同梱アプリは使用しておらず、自作ソフトにて運用。)








2.特徴



  PC-OP-RS1は、パソコンにUSB接続。

  アプリ(プログラム)からは、COMMポートI/Fのやりとりで、データ送受信を行う。




  長所:

   ・赤外線リモコン(TV、ビデオ、照明など)なら登録可。


   ・リモコンボタンを複数回押さなければならない操作でも、バッチ化により、1回の制御が可能。


   ・送信先は4つ。(出力先は、コマンドにより振り分け)


   ・COMMポートを操作できるプログラムが書ければ自作ソフトの稼動も可能




  短所:

   ・240バイト/1コマンドのため、エアコンには不向き。

    (エアコンは、1度にたくさんの情報を送っているようで、データ長がもっと必要。ハード的に無理。)


   ・送信出力が弱いのかそれとも指向性が強いのか(照射角度が狭すぎるのか)、受信機側の近くに送信LEDを設置する必要がある。


   ・4つの送出LEDがあるのだが、USB接続(COMMポートI/F)なので、制御できるPC及び受信機器までの距離が限定される。

    (送出用LEDは、長めのコードではあるが配線もみっともない。部屋が変われば、別のセットを購入するのが現実的。)






3.プロトコル


  プロトコルについては、下記の通り。

  (1)通信環境

   接続 : USB(COMMポート I/F)

   115200,N,8,1

   フロー制御:なし (これをRTS/CTSにしてて、ハマッた・・・。)




  (2)コマンド


     コマンド         PC側       方向   PC-OP-RS1/Kuro-RS
 
LED-On 69h('i') ->
<- 4Fh('O')(ON) or 59h('Y')(OFF)
 
 
IR-Receive 72h('r') ->
<- 59h('Y')
・・・
(リモコンデータ受信)
・・・
<- 53h('S')
<- Data 240 Bytes
<- 45h('E')
 
 
IR-Send 00h(NULL)
強制Dummy
->
69h('i')
(LED-On)
->
<- 4Fh('O')(ON) or 59h('Y')(OFF)
74h('t') ->
<- 59h('Y')
31h or 32h or 33h or 34h
( CHx '1' 〜 '4' )
-> CH [1] : A-黄
CH [2] : A-黒
CH [3] : B-黄
CH [4] : B-黒
<- 59h('Y')
Data 240 Bytes ->
<- 45h('E')



  以下は、ネットを徘徊してると、先人方々のすばらしきカキコミがあったので、勝手ながら転記させていただいた事項。


  ・コマンド [ 63h('c') ] は、受信待ちキャンセル用らしい。

   だけど、無応答に陥った時、うまくキャンセルできないことも。



  ・無応答になってしまったときは、

   デバイスの再オープン、Dummy(00h)出してLEDコマンドを出してみて、エラーなら63h('c')を出すのが

   いいかも。

   (それでもダメなら接続し直し・・・か。)



  ・データ送信前には、NULL(00h)を出して、LED-On(69h)出してから、74h('t')がいいとのこと。

   (デバイス接続直後に、一発目がNGになるのを回避できる。)




4.現在の運用方法


  「TVの電源ON補助機」。

  別途のTVリモコンソフト(自作)に機能付加して使用。



  TV横に置いている録画サーバ機にPC-OP-RS1をつないで、

  MediaConvertorソフトで、RS-232C <-> TCP/IPの変換をして

  無線LANのノートPCクライアントから操作。



  なぜ、「電源ON補助機」かというと、当方使用のAQUOS(TV)に依存する話で、

  AQUOSは、TV-OFF状態にして30分ぐらい経過すると、232Cを介して送れるAQUOS専用コマンドが受け付けられなくなってしまう。

  これをONにするためだけにしか使ってないという、なんとも悲しい用途。



  こんなことなら、普通にリモコン使うほうが多いわけで。

  (実質、開店休業。もうすぐ閉店。)





5.64ビット版ドライバ


  当方の使用環境は、未だ32ビット環境なので、64ビット版とは無縁。

  いつの日か使う日が来ればと、期待だけの、勝手な覚え書き。(正しくはコピペ書き。)




  作業は、3つ。

  ・x64ドライバダウンロード
  ・INFファイルに追記
  ・ドライバインストール



  (1)x64ドライバダウンロード

   
フューチャー・テクノロジ・デバイス・インターナショナル社(FTDI) http://www.ftdichip.com/
     (Future Technology Device International Ltd.)


   ドライバダウンロードページ(VCP) http://www.ftdichip.com/Drivers/VCP.htm


   ここから、64ビット版ドライバ(x64)を選択しダウンロード。展開もしておく。

   (ファイル名は、CDM99999_WHQL_Certified.zip。99999にはバージョンが入る。)



   で、ダウンロードドライバには、VCP版ととD2XX版がある。

   Virtual COM Port Drivers(仮想COMポート)ドライバと、

   Direct Drivers(デバイスに直接にアクセスできる)ドライバ。

   ここでは、VCP版。

   (正直なところ、よくわかっていません。はぃ。D2XXだと細かな制御ができるるのかと。)




  (2)INFファイルに追記

    上記でダウンロードしたファイルを展開して、

    INFファイル(2ファイル)に、PC-OP-RS1情報(VID=0411 PID=00b3)を追記する。


    (a) FTDIBUS.INF (追記3箇所)

     [FtdiHw]
     %USB\VID_0403&PID_6001.DeviceDesc%=FtdiBus.NT,USB\VID_0403&PID_6001
     %USB\VID_0403&PID_6010&MI_00.DeviceDesc%=FtdiBus.NT,USB\VID_0403&PID_6010&MI_00
     %USB\VID_0403&PID_6010&MI_01.DeviceDesc%=FtdiBus.NT,USB\VID_0403&PID_6010&MI_01
     %USB\VID_0403&PID_6011&MI_00.DeviceDesc%=FtdiBus.NT,USB\VID_0403&PID_6011&MI_00
     %USB\VID_0403&PID_6011&MI_01.DeviceDesc%=FtdiBus.NT,USB\VID_0403&PID_6011&MI_01
     %USB\VID_0403&PID_6011&MI_02.DeviceDesc%=FtdiBus.NT,USB\VID_0403&PID_6011&MI_02
     %USB\VID_0403&PID_6011&MI_03.DeviceDesc%=FtdiBus.NT,USB\VID_0403&PID_6011&MI_03
     %USB\VID_0403&PID_6014.DeviceDesc%=FtdiBus.NT,USB\VID_0403&PID_6014
     %USB\VID_0411&PID_00b3.DeviceDesc%=FtdiBus.NT,USB\VID_0411&PID_00b3 (<−追加)



     [FtdiHw.NTamd64]
     %USB\VID_0403&PID_6001.DeviceDesc%=FtdiBus.NTamd64,USB\VID_0403&PID_6001
     %USB\VID_0403&PID_6010&MI_00.DeviceDesc%=FtdiBus.NTamd64,USB\VID_0403&PID_6010&MI_00
     %USB\VID_0403&PID_6010&MI_01.DeviceDesc%=FtdiBus.NTamd64,USB\VID_0403&PID_6010&MI_01
     %USB\VID_0403&PID_6011&MI_00.DeviceDesc%=FtdiBus.NTamd64,USB\VID_0403&PID_6011&MI_00
     %USB\VID_0403&PID_6011&MI_01.DeviceDesc%=FtdiBus.NTamd64,USB\VID_0403&PID_6011&MI_01
     %USB\VID_0403&PID_6011&MI_02.DeviceDesc%=FtdiBus.NTamd64,USB\VID_0403&PID_6011&MI_02
     %USB\VID_0403&PID_6011&MI_03.DeviceDesc%=FtdiBus.NTamd64,USB\VID_0403&PID_6011&MI_03
     %USB\VID_0403&PID_6014.DeviceDesc%=FtdiBus.NTamd64,USB\VID_0403&PID_6014
     %USB\VID_0403&PID_6014.DeviceDesc%=FtdiBus.NTamd64,USB\VID_0403&PID_00b3 (<−追加)



     [Strings]
     Ftdi="FTDI"
     DESC="CDM Driver Package - Bus/D2XX Driver"
     DriversDisk="FTDI USB Drivers Disk"
     USB\VID_0403&PID_6001.DeviceDesc="USB Serial Converter"
     USB\VID_0403&PID_6010&MI_00.DeviceDesc="USB Serial Converter A"
     USB\VID_0403&PID_6010&MI_01.DeviceDesc="USB Serial Converter B"
     USB\VID_0403&PID_6011&MI_00.DeviceDesc="USB Serial Converter A"
     USB\VID_0403&PID_6011&MI_01.DeviceDesc="USB Serial Converter B"
     USB\VID_0403&PID_6011&MI_02.DeviceDesc="USB Serial Converter C"
     USB\VID_0403&PID_6011&MI_03.DeviceDesc="USB Serial Converter D"
     USB\VID_0403&PID_6014.DeviceDesc="USB Serial Converter"
     SvcDesc="USB Serial Converter Driver"
     ClassName="USB"
     USB\VID_0411&PID_00b3.DeviceDesc="BUFFALO RemoteStation PC-OP-RS1" (<−追加)



    (b) FTDIPORT.INF (追記3箇所)

     [FtdiHw]
     %VID_0403&PID_6001.DeviceDesc%=FtdiPort.NT,FTDIBUS\COMPORT&VID_0403&PID_6001
     %VID_0403&PID_6010.DeviceDesc%=FtdiPort.NT,FTDIBUS\COMPORT&VID_0403&PID_6010
     %VID_0403&PID_6011.DeviceDesc%=FtdiPort.NT,FTDIBUS\COMPORT&VID_0403&PID_6011
     %VID_0403&PID_6014.DeviceDesc%=FtdiPort.NT,FTDIBUS\COMPORT&VID_0403&PID_6014
     %VID_0411&PID_00b3.DeviceDesc%=FtdiPort.NT,FTDIBUS\COMPORT&VID_0411&PID_00b3 (<−追加)


     [FtdiHw.NTamd64]
     %VID_0403&PID_6001.DeviceDesc%=FtdiPort.NTamd64,FTDIBUS\COMPORT&VID_0403&PID_6001
     %VID_0403&PID_6010.DeviceDesc%=FtdiPort.NTamd64,FTDIBUS\COMPORT&VID_0403&PID_6010
     %VID_0403&PID_6011.DeviceDesc%=FtdiPort.NTamd64,FTDIBUS\COMPORT&VID_0403&PID_6011
     %VID_0403&PID_6014.DeviceDesc%=FtdiPort.NTamd64,FTDIBUS\COMPORT&VID_0403&PID_6014
     %VID_0411&PID_00b3.DeviceDesc%=FtdiPort.NTamd64,FTDIBUS\COMPORT&VID_0411&PID_00b3 (<−追加)


     [Strings]
     FTDI="FTDI"
     DESC="CDM Driver Package - VCP Driver"
     DriversDisk="FTDI USB Drivers Disk"
     PortsClassName = "Ports (COM & LPT)"
     VID_0403&PID_6001.DeviceDesc="USB Serial Port"
     VID_0403&PID_6010.DeviceDesc="USB Serial Port"
     VID_0403&PID_6011.DeviceDesc="USB Serial Port"
     VID_0403&PID_6014.DeviceDesc="USB Serial Port"
     SvcDesc="USB Serial Port Driver"
     SerEnum.SvcDesc="Serenum Filter Driver"
     USB\VID_0411&PID_00b3.DeviceDesc="BUFFALO RemoteStation PC-OP-RS1" (<−追加)



  (3)ドライバインストール


   デバイスマネージャで、ダメダメマークが付いているPC-OP-RS1デバイスのドライバを更新。

   「ディスク使用」で、展開したフォルダを指定。





6.所感・他 (グチやら勝手な戯言、ナンデモあり)



  利用用途が、TVリモコンの代用レベルだと、期待の割にはそうでもなかった機器。


  おもしろい物という感覚はあるのだが、アイデアが出てこないというのは悲しいことで

  箱に戻して、片付けちゃいそうである。



  テスタ作ってみたり、既設のTVリモコンソフトに絡ませてはみたものの、それはそれで終わってしまった。

  (作っている途中はおもしろかったんだけど、日常までの使用には至らず。)



  照明も、送信出力部分を近くにしてみたけれどNGだった。

  (照明リモコンの出力強ぇなと感服。   というより、PC-OP-RS1弱すぎ。)



  用途事例があれば、是非とも御教示をお願いしたいところ。


  (ホントに、TV電源ON補助機にしかなっていない訳で。)





  −−−〇−−−〇−−−〇−−−〇−−−〇−−−〇−−−


  あらためて、これ使ってなんかできないかなぁと、・・・。


  で、乏しい頭に浮かんだのは、

  帰宅10分前にエアコンのスイッチを携帯のWEB画面からONにできればなんて、

  つまらぬこと。


  その上、2回押してたら、OFFになっちゃうことも、わからない(笑)。


  でも、そこは押下直後にWEBカメラでエアコン写して、画像をサーバにアップでも、

  携帯へメールにて送りつけておけば、ON/OFFぐらいの判定はできそうである。

  (現在のステータスを先に確認したいことから、定期的なUPも必要になるけど。)



  エアコンの稼動ランプ部分を明示できれば、自動判定だってOKになるはず。

  (普通に動体検知レベルでできるんじゃないかと。)


  それに温度計も写せばいいんじゃない・・・、





  もしくは、こんなUSB温度計取り付けて、・・・・






  と勝手な思い込みもプラスされてきたところで、


  「御他聞にもれず」 撃沈されることに。


  当方のエアコンのリモコンからも、240バイトを越えるデータが送出されているようで、

  PC-OP-RS1で無理だったことを、自身で実証してしまった次第。




  この思い上がりは、暗礁に乗り上げるどころか、体当たりして気絶。













  −−−〇−−−〇−−−〇−−−〇−−−〇−−−〇−−−


  ・赤外線送出が弱すぎ!に関しては、出力アップの改造が行った方がいらっしゃるようで、

   7mぐらいOKとのこと。


   改良事例もブログ上で丁寧にきちんと公開されているのだが

   回路図も部品もよくわからない当方にとっては、ただただ、うらやましい限り。



  ・受光感度アップのために、基板上の受光モジュールに覆われているシールドを取っ払った、

   先人の方がいらっしゃる。

   でも、受信レベルが良くなり過ぎで、いろんなモノを拾うらしく、前面部分の取り除きがベストらしい。



  ・インタフェイスも、LAN <-> USBのメディアコンバータなど市販されているので、

   当方みたいにサーバPCなどを介在せず、そちらを導入してもよいかもしれない。

   (ただし、未確認。)



  ・高額すぎて、当方には無縁な商品だけれど、こんなのがある。

  



  ・Wiiリモコンにも赤外線センサーがあって、プログラム書籍が出てた。

  




  −−−〇−−−〇−−−〇−−−〇−−−〇−−−〇−−−



  視点を変えて、外部機器に赤外線を一生懸命送ることをメインにするのではなくて、

  受信した赤外線に反応するという方向で何か・・・。



  赤外線の解析などは、ネットを徘徊すると、

  スペシャリストの方々がいろいろ書かれているので、しばらくはお勉強。


  (といっても、当方にとっては難しい内容も多く、 苦労しそう。  あきらめモード。ハィ。)




  −−−〇−−−〇−−−〇−−−〇−−−〇−−−〇−−−


  結局、PC-OP-RS1絡みの自作ソフトで、残ったものは、

   ・PC-OP-RS1テスタ (普通に、LED・送信・受信)
   ・赤外線データエディタ (ビットエディタ)
   ・TVリモコンもどき


  どれも、日常的には「???」。

  「あってもなくても、別にィ〜」と言うレベルである。




  
PortListイメージ クリックで拡大
  あと、PC-OP-RS1の接続有無判定やら確認を兼ねて、

  ポート情報を表示するプログラムを書いてた。

  (ステップ数は、知れてるサイズだけど。)






  WMI ( Windows Management Instrumentation )を参照して、シリアルポート情報を表示。

  (これが、一番まともなソフトになったかも。)


  簡単に言ってしまえば、WMI から、デバイスマネージャやらタスクマネージャと同じような情報を得られる。

  (他にも、情報いっぱいありすぎザクザクなのだが、ここではポートに関する事項限定で・・・)




  この、WMI 表示ツールの作成のおかげがあってか、TVリモコンもどきソフトにも、

   ・PC-OP-RS1の接続有無
   ・COMポート番号の自動取得
   ・電源ON赤外線送信

  を組み込む踏ん切りがついた次第。



  この表示ソフトでは、


  ・Win32_SerialPort、Win32_PnPEntity と Win32_POTSModem から取得できたプロパティ値の表示とポート番号抽出

    Win32_SerialPort から取得できたプロパティ一覧の表示。
    Win32_PnPEntity から取得できたプロパティ一覧の表示。
    Win32_POTSModem から取得できたプロパティ一覧の表示。

    Win32_SerialPort から、DeviceIDプロパティ(COMxx)を参照してポート番号取得。
    Win32_PnPEntity からは、Nameプロパティに含まれるCOMxxからポート番号抽出。
    Win32_POTSModem から、AttachedToプロパティ(COMxx)を参照してポート番号取得。

    PC-OP-RS1も、Win32_PnPEntity の Captionプロパティ、Nameプロパティをを見ると、
    デバイスマネージャ上での表記と同じく、
    「BUFFALO RemoteStation PC-OP-RS1 (COMx)」と取得できていることがわかる。

    ポート順にソートされて渡されるわけでもないので、
    ポートセットから一度取得して、オブジェクトの配列上で並べ換えしてる...。



  ・シリアル / USB / エミュレーション / モデム のポート種別を判別


    Win32_SerialPort の PNPDeviceIDプロパティより、「PNP0501」文字列有無で、シリアル/エミュのポート判別。

    エミュのポートは、com0com で生成された仮想ポートで確認。

    ( com0com は、仮想ポート2つをクロスでつないだように見せかけてくれる、

      ヌルモデムとかヌルケーブルとか呼ばれる類のエミュレートソフトウェア(ドライバ?)。

      Null-modem emulator (com0com)    http://com0com.sourceforge.net/ )



    上記、Win32_SerialPort、Win32_PnPEntity と Win32_POTSModem から、取得できたポート番号に基づいて、

    全ポート番号情報を生成、

    そこから、シリアル、エミュとモデムの分を排除した結果をUSBポートとして判別。



  ・USBポート抜き挿しやポート増減を自動検知して再表示

    SysInfoを利用させてもらい、DeviceArraival と DeviceRemoveComplete のイベント通知から

    ポート情報の再取得・再表示をしてる(だけ)。


    感心したのは、com0comセットアップで、ポート名の変更完了の直後に、

    このイベントが通知されたようで、勝手にポート情報が再表示されたこと。


    com0com・Windows・SysInfoといい、ちょっとびっくり。



  ・わからなかったのは、Win32_POTSModemToSerialPort クラス


    Win32_POTSModemとは別に、Win32_POTSModemToSerialPort がある。

    このクラスの中に、Antecedentプロパティがあって、モデムが使用するCOMポートらしいんだけれど、

    当方のテスト環境では、どのPCからも、なんも情報が取れず、確認しようがなかった次第。

    (モデムのPCIカードとか、挿せばいいんだろうか。...って、どこにしまいこんだか。)





  と、うだうだ書いてて、余計によくわからない。(笑)。



  PC-OP-RS1とは直接関係ないけど、これはこれで、いいお勉強をさせていただいた。

  ソースを見返しても、特に難易度の高い所があるということもなく、である。

  ホントに、ネット上で詳しく丁寧に説明されている先人の方々・先生方々に感謝。



  MS の WMICodeCreator なんかにもお世話になった。

  (「Microsoftさんも、このような便利ツール必要だったのねぇ。」と勝手に納得。)





  有効なシリアルポート番号を取得するだけであれば、レジストリを参照したほうがいいかも。

   HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOM




  余談だけど、COMポートの最大数は256 となっている。

  (デバイスマネージャのプロパティの詳細設定画面では、ホントに256までコンボで選択できる)

  当方も、試しに、com0comの仮想ポートに、255と256を割り当ててみたけれどOKになる。


  256ポートも必要な環境って、どんな用途?

  物理的に構築したテスト環境を想像すると、とんでもないケーブルとぐろ状態が浮かんでくる。

  PCのスペックにも関連するだろうけど、1200BPSぐらいだったら、通信できるのかな。




  で、今になってもRS-232Cなのか、まだまだ、RS-232Cなのか。???。



  シリアルしかなかった頃は、ポート番号なんて仕様の段階で決め打ちに近く、

  簡単に現調できるインタフェイスがあれば良しとされてた。

  (一度、設定して確認取れれば、変更なんてありえないし。)


  今は、USB抜き挿しで、ポート番号も変わってしまうケースも多々あるので、

  総当り攻撃(ドアノック方式)で、全ポートもしくは一定範囲のポートに、コンコンしてるソフトも多いのかなぁと勝手な推測。



  WMI の参照か、レジストリ参照で、ドアノックは回避をおススメする次第。(たわごとです。)


  −−−〇−−−〇−−−〇−−−〇−−−〇−−−〇−−−



7.PC−OP-RS1のポート番号を取得するには ( GetRemoteStationPort( ) )


  「 PC−OP-RS1のポート番号を取得したい 」


   痛い所をズバリ突かれたメールを頂いた。



    初めて、御連絡をさせて頂きます。

    (・・・中略・・・)

    デバイスマネージャ以外での確認方法と、プログラム(VB6)からで

    簡単にPC−OP-RS1のポート番号を取得したいのですが、

    アドバイス等をいただけないでしょうか。


    (メールの掲載許可を頂いた上で、記しています。)





  不定期に、ポート番号が変わってしまうんだそうである。



  勝手な戯言を上記でダラダラ書いてきたが、

  「どぉすりゃいいの?」の肝心な部分の記述が欠落してた・・・。

  当方も、ポート表示ツール(
6.所感・他 の後半あたり)の作成に至ったきっかけは同じ。





  で、デバイスマネージャ以外の確認方法とVB6から・・・


 (1)VBS での表示


   下記、内容をメモ帳でもなんでもいいので、コピって、PC-OP-RS1.VBSという名前にでもして保存。

   ( WMICodeCreatorで生成されたコードに少し手を加えたもの )

               strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT Name FROM Win32_PnPEntity WHERE Name Like '%PC-OP-RS1%(COM%)'",,48)

For Each objItem in colItems
     Wscript.Echo "-----------------------------------"
     Wscript.Echo "Win32_PnPEntity instance"
     Wscript.Echo "-----------------------------------"
     Wscript.Echo "Name: " & objItem.Name
Next

Set colItems = Nothing
Set objWMIService = Nothing

    実行

      実行は、DOSプロンプトから。

      cscript PC-OP-RS1.vbs と打ち込んで、Enter。


    実行結果

      PC-OP-RS1・VBS取得イメージ クリックで拡大



    雛形はこんな感じ。

    あとは、スクリプトを必要に応じて変更して、

    パイプでもリダイレクトでも次のプログラムに渡すなり、

    なんなりと。




  (2)VB6

    VB6 だと、こんな感じ。

    (もっといいコードがあれば、そちらを推奨。)
         
'
'  Function Name ----- GetRemoteStationPort
'  Description ----- PC-OP-RS1 割当ポート番号の取得
'  Return Code ----- 割当COMポート番号数値文字
'接続されていないときは、""(文字列長0)
'複数のPC-OP-RS1が接続されているときは、カンマで区切られた形式 ex "1,2" 等
'( 昇順などの並び換えは、呼び出し元で行うこと。 )
'  Created by ----- www.chikadon.com
'  Author ----- www.chikadon.com
'  Comment ----- 引数 strComputer の省略値は、ローカル(',')
'ここにIPアドレスとか他のPC名も指定できるけど、
'相手先がリモートデスクトップサービスをしていないと使えない
'(リモートデスクトップを許可するときはセキュリティ面で要注意)
'
Function GetRemoteStationPort( Optional ByVal strComputer As String = "." ) As String

     Const WMI_QUERY = "SELECT Name FROM Win32_PnpEntity WHERE Name Like '%PC-OP-RS1%(COM%)'"
     Const wbemFlagReturnImmediately = &H10
     Const wbemFlagForwardOnly = &H20
     Const QUERY_FLAG = wbemFlagReturnImmediately + wbemFlagForwardOnly
     Const DELIMITOR = ","

     Dim objWMIService As Object
     Dim colItems As Object
     Dim objItem As Object
     Dim strPort As String
     Dim strWk As String
     Dim strDelimitor As String

     '  WMI 接続
     Set objWMIService = GetObject( "winmgmts:\\" & strComputer & "\root\CIMV2" )

     '  Win32_PnpEntityに問合せ
     Set colItems = objWMIService.ExecQuery( WMI_QUERY , , QUERY_FLAG )

     strPort = ""
     strDelimitor = ""

     '  オブジェクトスキャン
     For Each objItem In colItems

          '  Nameプロパティ参照
          strWk  =  objItem.Name

          '  確認用に表示してみる
         Debug.Print "Win32_PnpEntity Name : " & strWk

          '  「BUFFALO RemoteStation PC-OP-RS1 (COMxx)」から、(COMxx)を抽出
         strWk  =  Mid$( strWk  ,  InStr(  strWk  ,  "(COM"  )  )

          '  (COMxx)から、xxを抽出
          strWk  =  Replace( strWk ,  "(COM"  ,  ""  )
          strWk  =  Replace( strWk ,  ")"  ,  ""  )

          '  取得できたポート番号をストック
          strPort  =  strPort & strDelimitor & Trim$( strWk )

          '  複数接続に備えて、デリミタを設定
         strDelimitor  =  DELIMITOR

    Next

     '  オブジェクト解放
     Set colItems = Nothing
     Set objWMIService = Nothing

     '  抽出できたポート番号を返却
     GetRemoteStationPort = strPort

End Function




  デバイス名称なんかも同時に取得する必要があるなら、リストボックスでもコンボボックスでも渡して、

  ListとItemDataにそれぞれセットするのもいいのでは。



  メールの答えになってるかなぁ。










以上



【備忘録ペ〜ジ】トップへ戻る