MicroGDS 機能と特長

Windows PowerShellによる「オブジェクト名の一覧表示」サンプル

Windowsの新しいコマンドラインシェルである「Windows PowerShell」を使って、MicroGDSの制御、およびオブジェクト名を取得するカスタマイズサンプルをご紹介します。

Windows PowerShellによる
「オブジェクト名の一覧表示」サンプル実行イメージ

 


ここでは、従来のカスタマイズ手法であるCadlinkライブラリ(cadlnk60.dll)とは異なった、.NETライブラリ(mgdsnet.dll)を利用したアプリケーションとしてご紹介します。

※Windows PowerShell 1.0およびMicroGDS 10.0で.NETライブラリを使ってカスタマイズをする場合は、Microsoft .NET Framework 2.0がインストールされている必要があります。

用途

指定ファイルの優先ウィンドウ上のオブジェクトを検索し、オブジェクト名称を取得します。

注意点

Windows PowerShellはセキュリティ上の理由から、デフォルトではスクリプトファイルの実行が無効になっています。以下の手順で実行ポリシーを変更してください。

  1. スタートメニューからWindows PowerShellを実行します。
  2. 起動したWindows PowerShellのウィンドウ内で、実行ポリシーをRemoteSignedに設定します。
    Set-ExecutionPolicy RemoteSigned

※RemoteSignedはインターネット経由でダウンロードしたスクリプトのみ証明書を要求します。他のオプションにはRestricted(すべてのスクリプトを実行させない)、AllSigned(すべてのスクリプトに証明書を要求)、Unrestricted(すべてのスクリプトを実行可、ただしインターネット経由でダウンロードしたコードは実行確認のみあり) があります。

使い方

  1. Windows PowerShellのウィンドウ内でスクリプトファイルを実行します。
    C:\script\Get-Ocd-List.ps1
  2. MicroGDSを起動していない場合は、MicroGDSが起動され、サンプルのMANファイル内に存在するオブジェクト名称を表示してからMicroGDSを終了します。既にMicroGDSを起動している場合は、ファイルのみを開いてオブジェクト名称を表示し、MicroGDSを終了せずにファイルのみを閉じます。

作り方

例)「C:\script」フォルダにスクリプトファイルを保存する場合

  1. エクスプローラを使って、ローカルディスクに「C:\script」フォルダを作成します。
  2. スタートメニューからメモ帳を起動します。
  3. メモ帳の文書内にソースを入力します(コピー/ペーストします) 。
  4. ファイル名を「C:\script\Get-Ocd-List.ps1」として保存します。
  5. メモ帳を終了します。
ソース解説
  1. 使用する変数の宣言、初期化を行ないます。MicroGDS 10.0のインストール先を変更している場合は、DllおよびサンプルMANファイルのパス名を変更してください。
  2. Windows PowerShell内でMicroGDSの.NETライブラリを使用できるようにロードします。
  3. MicroGDSの起動数を取得します。起動されていない場合はMicroGDSを起動します。既に起動している場合は、そのMicroGDSのセッションを取得して利用します。
  4. MicroGDSと通信を開始します。
  5. ファイルを開き、順にオブジェクトを検索して名称を出力します。検索が終了したらファイルを閉じます。MicroGDSを起動した場合はここでMicroGDSも終了させます。
  6. MicroGDSと通信を切断します。

サンプルソース

### Windows PowerShellを使ったMicroGDSのカスタマイズ例

# 変数の宣言
[string]$TarDllFile = "C:\Program Files\Informatix\MicroGDS 10.0\Custom\MGDSNet.dll";
[string]$TarManFile = "C:\Program Files\Informatix\MicroGDS 10.0\Sample Drawings\Office.man";
[int]$mg_timeout = 100000
[int]$RetVal = 0
[int]$bStat = 0
[bool]$IsBoot = $false

# MGDSNet.dllをロードする
[void][Reflection.Assembly]::LoadFile($TarDllFile)

# MicroGDSの起動数を取得
$RetVal = [Informatix.MGDS.Cad]::GetSessionCount()
if ($RetVal -lt 1)
{
   # MicroGDSを起動する
   $sid = [Informatix.MGDS.Cad]::StartMicroGDS(
      [Informatix.MGDS.StartFileType]::MAN, $mg_timeout)
   $IsBoot = $true
}
else
{
   # 既存のMicroGDSを利用する
   [int[]]$sessionId = 0
   $RetVal = [Informatix.MGDS.Cad]::GetSessionIDs($sessionId, 1);
   if ($RetVal -eq 0)
   {
      Write-Output "... 初期化可能なMicroGDSがありません。"
      return
   }
   $sid = $sessionId[0]
}

# MicroGDSと通信開始
$mg_cv = New-Object Informatix.MGDS.Conversation
[void]$mg_cv.Start($sid, $mg_timeout)

# ファイルを開く
$RetVal = [Informatix.MGDS.Cad]::OpenMANFile($TarManFile, $true)

# オブジェクトの情報を取得
for($bStat = [Informatix.MGDS.Cad]::ObjectScan("H");
   $bStat -eq 1; $bStat = [Informatix.MGDS.Cad]::ObjectNext())
{
   $objname = ""
   [Informatix.MGDS.Cad]::GetCurObjName([ref]$objname)
   Write-Output "... $objname"
}

# ファイルを閉じる
$bArg = [Informatix.MGDS.Save]::DoNotSave
if ($IsBoot -eq $true)
{
   $RetVal = [Informatix.MGDS.Cad]::Exit($bArg, $bArg)
}
else
{
   $RetVal = [Informatix.MGDS.Cad]::CloseFile($bArg)
}

# MicroGDSと通信切断
[void]$mg_cv.Stop