วันเสาร์ที่ 26 กรกฎาคม พ.ศ. 2557

การเขียน Batch File เพื่อแสดงผลใน HTML Application ตอน 1

บางครั้ง...การแสดงผลภาษาไทยนั้นทำได้ไม่ค่อยดีใน Console ผมจึงหาวิธีให้แบทต์ไฟล์แสดงผลผ่านภาษา VBScript ภายใน HTML Application ก็ต้องยอมรับว่า...ติดปัญหาตรงที่มันไม่สามารถรับคีย์บอร์ดและรับสถานกาณ์บน CMD ได้ทั้งหมด...แต่ก็สามารถแสดงผลเป็นภาษาไทยได้อย่างที่ตั้งใจ...สามารถสร้าง Log File หรือ Dir /s แบบเรียวทามต์ได้...โดยไม่ติดปัญหาหรือรอการแสดงผลของแบตช์ไฟล์ให้จบ..เสียก่อน...โปรแกรมนี้สามารถ แคปเจอร์หน้าจอขณะทำงาน...
ดูตัวอย่างนะครับ...

คัดลอกคำสั่งไปสร้างเป็น LAN.BAT เพื่อทดสอบ...
@echo off
echo ทดสอบปิงในวงแลน
for /l %%a in (1,1,255) do (
  for /f "tokens=1,2,3,4,*" %%b in ('ping 192.168.1.%%a -n 1') do (
    if "%%b"=="Request" ( echo [ไม่สามารถเรียกได้  ] 192.168.1.%%a )
    if "%%b"=="Reply"   ( if "%%e"=="Destination" echo [ไม่ได้เชื่อมต่อ    ] 192.168.1.%%a)
    if "%%b"=="Reply"   ( if "%%e"=="bytes=32"    echo [เชื่อมต่อได้แล้ว  ] 192.168.1.%%a)
  )
)

ส่วนคำสั่งของ HTML Application ก็สร้างในพาทเดียวกัน...ชื่อ MS_DOS.HTA
<html>
<head>
<title>My HTML Application</title>
 <hta:application
     applicationname="MyHTA"   
     border="thick"
     borderstyle="normal"
     caption="My HTML Application"
     contextmenu="no"
     icon="myicon.ico"
     maximizebutton="no"
     minimizebutton="yes"
     navigable="no"
     scroll="no"
     selection="no"
     showintaskbar="yes"
     singleinstance="yes"
     sysmenu="yes"
     version="1.0"
     windowstate="maximize" >
  <script language="VBScript">
  Sub Window_onLoad()
runMS_DOS
  End Sub   

  Sub runMS_DOS()
    Dim objCap 
Dim objShell
Dim objStdOut
    Set objShell=CreateObject("wscript.shell")
    Set objCap=objShell.Exec("cmd /c " & "LAN.BAT")
    Do Until objCap.Status
      strHtml=objCap.StdOut.ReadLine
      frmData.document.write "<font face=&#34MS Sans Serif&#34 size=2>" & strHtml & "</font><br>"  
      frmData.focus
      Call ForceRefresh()
      frmData.Scrollto 0, 99999999
    Loop
    MsgBox "เสร็จเรียบร้อย" 
  End Sub

  Function ForceRefresh()
    Set oShell = CreateObject("WScript.Shell")
    oShell.Run "cmd /c", 0, True  
  End Function
  sub checkEnter
    With window.event
      if .keycode = 13 then
        runMS_DOS
      Else
        .cancelbubble = false
        .returnvalue = true
      End if
    End With
  End sub

  </script>
 </head>
 <body bgcolor="Black" color="Green">
   <iframe id="frmData" scrolling="Yes" width="100%" height="80%" frameborder="1" style="background: Black;">
   <div id="divTest"></div> 
   </iframe>
 </body>
</html>


ผลการทำงาน...

โปรแกรมจะเลื่อน Scroll ลงไปเรื่อย...จึงทำให้ทราบผลการทำงานของแบตช์ทันที...

โปรแกรมนี้...ขอเสียคือ...การหยุดประมวลผลระหว่าง...ทำงานจะส่งผลให้มันไม่สามารถทำงานได้...จนกว่า...จะมีการเซ็ตค่า Handle ใหม่...(มันไม่สามารถทำงานครั้งที่สอง...ถ้าไม่ล็อกออฟออกไป...ให้มันรีเซ็ต Handle ใหม่อีกครั้ง...)

สีแดงที่ขีดไว้ในคำสั่ง HTA คือการเรียกคำสั่ง Batch file หรือ DOS Command สามรถเปลี่ยนตามใจชอบเพื่อให้โปรแกรมของคุณ แสดงผลได้ในภาษาที่ต้องการ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น