9

質問ではありませんが、パーソナルコミュニケーションズ(PCOMM)とWinactorの相性が悪いので、違うRPAを使うような記事を見かけましたので、本当は、相性抜群なことを記載しておきます。

IBMからホスト・アクセス・クラス・ライブラリーが用意されています。(Excelのマクロでも使用可能)

このライブラリーを使用することで、簡単に、PCOMMを制御することができます。

VBScriptを使用することで、下記のことが簡単にできます。

1)カーソルの位置(行, 列)を指定して、文字を送信

2)画面の範囲(行, 列開始, 行, 列終了 )を指定して、表示されている文字を取得

3)PCOMM固有の実行キー、PFキーの送信

4)PCOMM画面が、入力可能状態か確認(ホストの動きが遅いと待ちが発生しますので、入力可能になるまで、待機するときに使用)

上記のことができれば、PCOMMの制御は簡単に行えます。

PCOMM用のノードを作成しましたが、どのようにUPするのかわかりませんので、テキストで残しておきます。

1)VBScript

myGYO = !行!
myRETU = !列!
myMOJI = !文字列!

Dim oCONL, oPSOBJ

Set oPSOBJ = CreateObject("PCOMM.autECLPS")
Set oCONL = CreateObject("PCOMM.autECLConnList")

oCONL.Refresh
' PCOMMのハンドルを取得
For i = 1 To oCONL.Count
  If oCONL(i).ConnType = "DISP3270" Then
    oPSOBJ.SetConnectionByHandle (oCONL(i).Handle)
    Exit For
  End If
Next

oPSOBJ.SetCursorPos myGYO, myRETU  '指定した場所にカーソル移動
oPSOBJ.SendKeys myMOJI  '文字列の送信

Set oPSOBJ = Nothing
Set oCONL = Nothing

2) VBScript

myGYO = !行!
myST = !開始!
myED = !終了!
myMOJI = ""

Dim oCONL, oPSOBJ

Set oPSOBJ = CreateObject("PCOMM.autECLPS")
Set oCONL = CreateObject("PCOMM.autECLConnList")

oCONL.Refresh
' PCOMMのハンドルを取得
For i = 1 To oCONL.Count
  If oCONL(i).ConnType = "DISP3270" Then
    oPSOBJ.SetConnectionByHandle (oCONL(i).Handle)
    Exit For
  End If
Next

myMOJI = oPSOBJ.GetTextRect(myGYO, myST, myGYO, myED)  '指定した範囲の文字列を取得

Set oPSOBJ = Nothing
Set oCONL = Nothing

setUmsVariable $文字列$ , myMOJI

3)VBScript

Dim oCONL, oPSOBJ

Set oPSOBJ = CreateObject("PCOMM.autECLPS")
Set oCONL = CreateObject("PCOMM.autECLConnList")

oCONL.Refresh
' PCOMMのハンドルを取得
For i = 1 To oCONL.Count
  If oCONL(i).ConnType = "DISP3270" Then
    oPSOBJ.SetConnectionByHandle (oCONL(i).Handle)
    Exit For
  End If
Next

'下の2行で実行キー送信  PFキーは、[PF1]..[PF24] を送信

oPSOBJ.SendKeys ("[FLDEXT]")
oPSOBJ.SendKeys ("[ENTER]")

Set oPSOBJ = Nothing
Set oCONL = Nothing

4)VBScript

Dim oOIAOBJ, oPSOBJ

Dim myWAIT

Set oOIAOBJ = CreateObject("PCOMM.autECLOIA")
Set oCONL = CreateObject("PCOMM.autECLConnList")

oCONL.Refresh

For i = 1 To oCONL.Count
  If oCONL(i).ConnType = "DISP3270" Then
    oOIAOBJ.SetConnectionByHandle (oCONL(i).Handle)
    Exit For
  End If
Next

'0:使用可能

'それ以外:使用不可

myWAIT = oOIAOBJ.InputInhibited

Set oOIAOBJ = Nothing
Set oCONL = Nothing

setUmsVariable $状態$ , myWAIT

s2600onfire 回答した質問
回答とコメントは、会員登録(無料)で閲覧できるようになります。