VBSのSendKeysを使用して、アプリを自動操作して動作確認した
VBSのSendKeysを使用して、アプリを自動操作して動作確認した
Option Explicit
dim objShell
dim objExec
main()
sub main()
logPrint("[START]" & date & " " & time)
allInitialize()
init()
startApp1()
setLot "20200414","100"
serSend "dummy_data.csv",1
AppQuit()
startApp2()
setLot "20200414","100"
serSend "dummy_data.csv",2
AppQuit()
msgbox("END")
logPrint("[END]" & date & " " & time)
end sub
sub setLot(shipdate,shipcount)
WScript.Sleep 500
objShell.SendKeys "%fs"
WScript.Sleep 500
objShell.SendKeys shipdate
WScript.Sleep 500
objShell.SendKeys "{ENTER}"
WScript.Sleep 500
objShell.SendKeys shipcount
WScript.Sleep 500
objShell.SendKeys "{ENTER}"
end sub
sub AppQuit()
WScript.Sleep 500
objShell.SendKeys "%fq"
WScript.Sleep 500
end sub
sub serSend(filename,mode)
dim datafile
dim x
set datafile = new clsText
datafile.FileName=filename
datafile.ReadFile()
for each x in datafile.LineData.Item
sendSer(datafile.csvRead(x,0))
WScript.Sleep 500
if mode = 1 then
sendSer(datafile.csvRead(x,1))
WScript.Sleep 500
end if
next
end sub
sub init()
end sub
sub startApp1()
Set objShell = WScript.CreateObject("WScript.Shell")
Set objExec = objShell.Exec("SER_CHK.exe")
' 起動を待つ
Do Until objShell.AppActivate(objExec.ProcessID)
WScript.Sleep 1000
Loop
'機種選択
objShell.SendKeys "{TAB}"
WScript.Sleep 100
objShell.SendKeys "{TAB}"
WScript.Sleep 100
objShell.SendKeys "{TAB}"
WScript.Sleep 100
objShell.SendKeys "{DOWN}"
WScript.Sleep 100
objShell.SendKeys "{TAB}"
WScript.Sleep 100
objShell.SendKeys "{ENTER}"
WScript.Sleep 100
' ダイアログの表示を待つ
Do Until objShell.AppActivate("作業者名登録")
WScript.Sleep 100
Loop
'作業者名選択
objShell.SendKeys "TEST"
WScript.Sleep 100
objShell.SendKeys "{TAB}"
WScript.Sleep 100
objShell.SendKeys "{ENTER}"
WScript.Sleep 1000
end sub
sub startApp2()
Set objShell = WScript.CreateObject("WScript.Shell")
Set objExec = objShell.Exec("SER_CHK.exe")
' 起動を待つ
Do Until objShell.AppActivate(objExec.ProcessID)
WScript.Sleep 1000
Loop
'機種選択
objShell.SendKeys "{TAB}"
WScript.Sleep 100
objShell.SendKeys "{TAB}"
WScript.Sleep 100
objShell.SendKeys "{TAB}"
WScript.Sleep 100
objShell.SendKeys "{DOWN}"
WScript.Sleep 100
objShell.SendKeys "{DOWN}"'docomo製番2
WScript.Sleep 100
objShell.SendKeys "{TAB}"
WScript.Sleep 100
objShell.SendKeys "{ENTER}"
WScript.Sleep 100
' ダイアログの表示を待つ
Do Until objShell.AppActivate("作業者名登録")
WScript.Sleep 100
Loop
'作業者名選択
objShell.SendKeys "TEST"
WScript.Sleep 100
objShell.SendKeys "{TAB}"
WScript.Sleep 100
objShell.SendKeys "{ENTER}"
WScript.Sleep 1000
end sub
sub sendSer(dSer)
logPrint("sendSer(" &dSer&")" & " " & time)
WScript.Sleep 100
objShell.SendKeys dSer
WScript.Sleep 100
objShell.SendKeys "{ENTER}"
WScript.Sleep 100
end sub
class clsText
dim LineData
dim RDobjFile
dim RDobjFso
dim WRobjFso
dim WRobjFile
dim m_FileName
Public Property Get FileName
FileName = m_FileName
End Property
Public Property Let FileName(vData)
m_FileName = vData
End Property
Private Sub Class_Initialize()
set LineData = new ArrayList
Set RDobjFso = CreateObject("Scripting.FileSystemObject")
Set WRobjFso = CreateObject("Scripting.FileSystemObject")
End Sub
Private Sub Class_Terminate()
Set RDobjFso = Nothing
Set WRobjFso = Nothing
End Sub
Public Sub Clear
LineData.Clear
end sub
public Function Count
Count = LineData.Count
end Function
public Function Items(n)
Items = LineData.Items(n)
end Function
'CSV形式の1行から指定した列を取り出す(列番号は0から)
function csvRead(str,n)
dim rdline
dim ret
rdline = split(str,",")
ret = rdline(n)
csvRead = ret
end function
'読み込んだCSVファイルのy行x列を取り出す。x,yは0始まり
function csvReadXY(x,y)
csvReadXY = csvRead(LineData.Items(y),x)
end function
public Sub Change(i,x)
LineData.Change i,x
end sub
Public Sub ReadFile
Set RDobjFile = RDobjFso.OpenTextFile(m_FileName, 1, False)
If Err.Number > 0 Then
WScript.Echo "Open Error"
Else
Do Until RDobjFile.AtEndOfStream
LineData.add RDobjFile.ReadLine
Loop
End If
RDobjFile.Close
Set RDobjFile = Nothing
end sub
Public Sub WriteFile
Set WRobjFile = WRobjFso.OpenTextFile(m_FileName, 2, True)
If Err.Number > 0 Then
WScript.Echo "Open Error"
Else
dim item
for each item in LineData.item
WRobjFile.WriteLine item
next
End If
WRobjFile.Close
Set WRobjFile = Nothing
end sub
Public Sub AppendFile
Set WRobjFile = WRobjFso.OpenTextFile(m_FileName, 8, True)
If Err.Number > 0 Then
WScript.Echo "Open Error"
Else
for each item in LineData.item
WRobjFile.WriteLine item
next
End If
WRobjFile.Close
Set WRobjFile = Nothing
end sub
'Scripting.FileSystemObjectはファイル操作をするオブジェクトです。
'OpenTextFileでファイルを開きます。
'第1パラメータ→ 必ず指定します。
'第2パラメータ→ 1:読み取り専用、2:書き込み専用、8:ファイルの最後に書き込み
'第3パラメータ→ True(規定値):新しいファイルを作成する、False:新しいファイルを作成しない
'第4パラメータ→ 0(規定値):ASCII ファイルとして開く、-1:Unicode ファイルとして開く、-2:システムの既定値で開く
'ReadLineでテキストファイルを読み込みます。
'Closeでファイルをクローズします。
sub OpenFileDialog(title)
Dim obj, filename
Set obj = CreateObject("Excel.Application")
filename = obj.GetOpenFilename("ALL File,*.*",1,title)
obj.Quit
Set obj = Nothing
If filename <> False Then
m_FileName = filename
End If
end sub
end Class
'動的配列版ArrayList
class ArrayList
private m_Item()
private m_count
public sub Add(x)
ReDim Preserve m_item(m_count)
If IsObject(x) Then
set m_item(m_count) = x
else
m_item(m_count) = x
end if
m_count = m_count + 1
end sub
public sub Change(i,x)
If IsObject(x) Then
set m_item(i) = x
else
m_item(i) = x
end if
end sub
public function Count
Count = m_count
end function
public function Clear
m_count=0
Erase m_item
end function
public function Item
Item = m_Item
end function
public function Items(n)
If IsObject(m_Item(n)) Then
set Items = m_Item(n)
else
Items = m_Item(n)
end if
end function
end class
sub allInitialize()
Dim ObjFso
Set ObjFso=WScript.CreateObject("Scripting.FileSystemObject")
' ファイルを削除
objFso.DeleteFile apppath() + "\DB\Dbl_Check.mdb",True
'ファイルをコピー
objFso.CopyFile apppath() + "\DB\Dbl_Check_空.mdb",apppath() + "\DB\Dbl_Check.mdb", True
delFiles "Z:\XXX\DSER1"
delFiles "Z:\XXX\DSER2"
delFiles "C:\Data_Backup\XXX\DSER1"
delFiles "C:\Data_Backup\XXX\DSER2"
set ObjFso = Nothing
end sub
' objShell.SendKeys "^f" ' Ctrl+Fで検索ダイアログの表示
' ' ダイアログの表示を待つ
' Do Until objShell.AppActivate("検索")
' WScript.Sleep 100
' Loop
' objShell.SendKeys "WSH~" ' WSHと入力してEnterキーを押す
' objShell.SendKeys "{ESC}" ' ダイアログを閉じる
' WScript.Sleep 100
' objShell.AppActivate(objExec.ProcessID)
' objShell.SendKeys "+{END}" ' Shift+End で行末まで選択
' objShell.SendKeys "^c" ' Ctrl+Cでコピー
' objShell.SendKeys "%{F4}" ' Alt+F4で終了
'現在のパスを返す
function apppath
dim fso
set fso = createObject("Scripting.FileSystemObject")
apppath = fso.getParentFolderName(WScript.ScriptFullName)
end function
function dir(file)
dim objFso
Set objFso = CreateObject("Scripting.FileSystemObject")
If objFso.FileExists(file) Then
'WScript.Echo "ファイルが存在します"
dir = true
else
dir = false
End If
Set objFso = Nothing
end function
'ファイル選択ダイアログを出す
function OpenFileDialog(title)
Dim obj, filename
Set obj = CreateObject("Excel.Application")
filename = obj.GetOpenFilename("ALL File,*.*",1,title)
obj.Quit
Set obj = Nothing
If filename <> False Then
OpenFileDialog = filename
End If
end function
'Include "Utility.vbs" ' 外部ファイル「Library.vbs」を取込み
'
'Sub Include(ByVal strFile)
' Dim objFSO , objStream , strDir
'
' Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
' strDir = objFSO.GetFile(WScript.ScriptFullName).ParentFolder
'
' Set objStream = objFSO.OpenTextFile(strDir & "\" & strFile, 1)
'
' ExecuteGlobal objStream.ReadAll()
' objStream.Close
'
' Set objStream = Nothing
' Set objFSO = Nothing
'End Sub
sub mkdir(path)
Dim ObjFso
Set ObjFso=WScript.CreateObject("Scripting.FileSystemObject")
If ObjFso.FolderExists(path) = False Then
ObjFso.Createfolder(path)
End If
set ObjFso = Nothing
end sub
sub copy(strCopyFile,strCopyFolder)
On Error Resume Next
Dim objFSO ' FileSystemObject
' Dim strCopyFile ' コピー対象ファイル
' Dim strCopyFolder ' コピー先フォルダ名
' strCopyFile = "C:\A*"
' strCopyFolder = "C:\Work"
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
If Err.Number = 0 Then
' コピー先フォルダが存在しないときは作成する
If objFSO.FolderExists(strCopyFolder) <> True Then
objFSO.CreateFolder(strCopyFolder)
End If
' ファイルコピー
objFSO.CopyFile strCopyFile, strCopyFolder, True
If Err.Number = 0 Then
WScript.Echo strCopyFile & " を " & _
strCopyFolder & " にコピーしました。"
Else
WScript.Echo "エラー: " & Err.Description
End If
Else
WScript.Echo "エラー: " & Err.Description
End If
Set objFSO = Nothing
end sub
sub shell(x)
'WScript.Shellオブジェクト名.Run "実行するコマンド",ウィンドウサイズ指定,同期モード指定
'
'ウィンドウサイズの指定は、コマンド実行時のウィンドウサイズを数値で指定する。
'指定できる値 実行時のウィンドウサイズ(状態)
'0 非表示
'1 通常ウィンドウ
'2 最小化
'3 最大化
'
'同期モード指定
'false:非同期
'True:同期
logPrintln("shell(" + x + ")")
dim objShell
Set objShell = CreateObject("WScript.Shell")
objShell.Run x,0,false
Set objShell = Nothing
end sub
sub logPrintln(s)
logPrint(s & vbcrlf)
end sub
sub logPrint(s)
dim objFsoWR
dim objFileWR
dim LogFile
dim SerialFieldNo
LogFile = apppath & "\log.log"
Set objFsoWR = CreateObject("Scripting.FileSystemObject")
Set objFileWR = objFsoWR.OpenTextFile(LogFile, 8, True)
If Err.Number > 0 Then
WScript.Echo "Open Error"
Else
objFileWR.WriteLine s
End If
objFileWR.Close
Set objFileWR = Nothing
Set objFsoWR = Nothing
end sub
sub delFiles(folder)
'// INIT
Dim FSO
Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
'// メイン処理開始
'WScript.Echo "日時" & vbTab & "サイズ" & vbTab & "ファイル名" & vbTab & "フォルダパス"
logPrintln "getFiles(" + folder + ")"
logPrintln "FindFolder(" + folder + ")"
If FSO.FolderExists(folder) Then
FindFolder FSO.GetFolder(folder)
end if
'// 後処理
Set FSO = Nothing
end sub
'//===================================================================
'// サブフォルダも再帰してファイルを削除
Sub FindFolder(ByVal objMainFolder)
Dim objSubFolder
Dim objFile
Dim ObjFso
Set ObjFso=WScript.CreateObject("Scripting.FileSystemObject")
'// フォルダがあれば再帰
For Each objSubFolder In objMainFolder.SubFolders
FindFolder objSubFolder
Next
'// フォルダの中のファイル情報を表示 : 日時 サイズ ファイル名 フォルダパス
For Each objFile In objMainFolder.files
'WScript.Echo objFile.DateLastModified & vbTab & objFile.Size & vbTab & objFile.Name & vbTab & objFile.ParentFolder
logPrintln objFile.DateLastModified & vbTab & objFile.Size & vbTab & objFile.Name & vbTab & objFile.ParentFolder
objFso.DeleteFile objFile.ParentFolder & "\" & objFile.Name,true
Next
set ObjFso = Nothing
End Sub
コメント
コメントを投稿