TRL-MTPの使用例:第2弾です。
今回はExcelのVBAです。やりたいことは以下のとおりです。
対象となるアプリは「TRL PICKING」を想定しています。
選択されたフォルダに存在する、拡張子が「.txt」のピッキングリストファイルをスマホの指定フォルダへ送信します。
また、スマホの指定フォルダに存在する、拡張子が「.ret」というピッキング結果ファイルをPCへ受信します。
とりあえずまずはAPIなどの標準モジュールから。
「Module1」
Option Explicit
Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Const STILL_ACTIVE As Long = &H103
Const PROCESS_QUERY_INFORMATION As Long = &H400
Public Function pubProcessStart(ByVal pstrExePath As String, ByVal pstrArgs As String) As Long
Dim lngId As Long
Dim lngProcess As Long
Dim lngExitCode As Long
lngExitCode = -1
lngId = CLng(Shell(pstrExePath & " " & pstrArgs, vbNormalFocus))
lngProcess = OpenProcess(PROCESS_QUERY_INFORMATION, True, lngId)
Do
GetExitCodeProcess lngProcess, lngExitCode
DoEvents
Loop While lngExitCode = STILL_ACTIVE
CloseHandle lngProcess
pubProcessStart = lngExitCode
End Function
Public Function pubGetMtpErrorString(ByVal plngExitCode As Long) As String
Select Case plngExitCode
Case -1
pubGetMtpErrorString = "Canceled."
Case 0
pubGetMtpErrorString = "Completed."
Case 1
pubGetMtpErrorString = "Parameter error."
Case 2
pubGetMtpErrorString = "Device not found."
Case 3
pubGetMtpErrorString = "Target file or folder does not exist."
Case 4
pubGetMtpErrorString = "A file or folder with the same name exists."
Case Else
pubGetMtpErrorString = "Unexpected error."
End Select
End Function
そんでこちらがシートのほうのモジュールになります。
送信が「cmdSend()」で受信が「cmdRecv()」です。それぞれボタンかなんか配置してマクロ呼び出しを行ってください。
「Sheet1(Sheet1)」
Option Explicit
Public Sub cmdSend()
Dim strDevicePath As String
Dim strPcPath As String
Dim strArgs As String
Dim lngRet As Long
'--- ピッキングリストが存在するフォルダを指定させる
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show() Then
'--- パラメータ設定
strArgs = "/C:UL /O /M /B"
strDevicePath = " /D:" & """" & _
"PC¥Xperia Ace II¥内部共有ストレージ¥Documents¥PICKING¥Files¥<BASE_NAME>.<BASE_EXT>" & """"
strPcPath = " /A:" & """" & .SelectedItems(1) & "¥*.txt" & """"
'--- 送信(Upload)実行
lngRet = pubProcessStart("""" & ThisWorkbook.Path & "¥TrlMtp.exe""", _
strArgs & strDevicePath & strPcPath)
If lngRet <> 0 Then
Call MsgBox("UL Error.(" & lngRet & ":" & pubGetMtpErrorString(lngRet) & ")", vbCritical)
End If
End If
End With
End Sub
Public Sub cmdRecv()
Dim strDevicePath As String
Dim strPcPath As String
Dim strArgs As String
Dim lngRet As Long
'--- ピッキング結果を保存するフォルダを指定させる
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show() Then
'--- パラメータ設定
strArgs = "/C:DL /O /M /B"
strDevicePath = " /D:" & """" & _
"PC¥Xperia Ace II¥内部共有ストレージ¥Documents¥PICKING¥Files¥*.ret" & """"
strPcPath = " /A:" & """" & .SelectedItems(1) & "¥<BASE_NAME>.<BASE_EXT>" & """"
'--- 受信(Download)実行
lngRet = pubProcessStart("""" & ThisWorkbook.Path & "¥TrlMtp.exe""", _
strArgs & strDevicePath & strPcPath)
If lngRet <> 0 Then
Call MsgBox("DL Error.(" & lngRet & ":" & pubGetMtpErrorString(lngRet) & ")", vbCritical)
End If
End If
End With
End Sub
えっと、VBAは理解されている方むけの情報なので、VBAなんかわからんという方は既にご案内したショートカットとかバッチファイルのほうでやってみてください。
まあ、ちょっとコマンドライン引数のパスの部分が複雑になるんですが、詳細についてはhttp://trl.main.jp/trlmtp/をご覧ください。VB.NETとかからでも似たような感じでコールすることになるので、とりあえず使い方の説明は以上となります。
もしわからないことがあったら、個別にご質問くださいね。( ^ω^ )
※[2023/03/16:追記]URLが変更となっております。新しいURLはこちら
コメント