วันอังคารที่ 14 มกราคม พ.ศ. 2557

การเขียน Batch File เชื่อมต่อ VB6 ตอนที่ 1

โดยทั่วไปแล้วหากพูดถึงเรื่องเขียนโปรแกรมสมัยนี้...คนส่วนใหญ่เบนเข็มไปศึกษา JAVA และ C++ เป็นส่วนใหญ่ เพราะมันเห็นผลเรื่องเงินหากเขียน แอฟขึ้นมาสักตัว...มียอดดาวน์โหลดเงินก็เข้ากระเป๋าเพียงลงทุนไม่กีพันบาท...จึงทำให้เนื้อหาเกี่ยวกับ VB6 และ Batch เป็นอะไรที่โบราณหากจะศึกษา (แต่ยังไงผมก็ยังดื่อแพ่ง...สอนเขียนโปรแกรมพวกนี้) โดยคนเหล่านั้นลืมมองไปว่า...พื้นฐานแต่ละคนมีไม่เท่ากัน...หรือเนื้อหาที่เน้นแต่ธุรกิจอย่างเดียว...มันไม่สนับสนุนด้านการศึกษาของบ้านเราเท่าไร...
      ว่ากันเรื่อง VB6 ทำไมต้องเขียนแบตช์ไฟล์เพื่อเชื่อมต่อกับ VB6 ด้วย ทำไมไม่เป็น VB.NET?
      คำตอบคือ...ถ้าคุณคิดจะเขียนด้วย VB.NET คุณไม่ต้องเขียนแบตช์แล้ว...มันมีคำสั่ง Console ให้ใช้งานเยอะแยะ...เรียกใช้งานแสงสีเสียงฟังก์ชั่นครบ...ยิ่งกว่า PowerShell เสียอีก
      และทำไมต้องเป็น VB6 กับ แบตช์ไฟล์?
      คำตอบคือ คุณจะหาอะไรง่าย ฟรีๆ ก็ทำงานได้ไม่แพ้กัน...ก็ต้องมันนี้แหละ...เหมือนคุณหิวตอนเช้า อาหารเช้า ก็ต้องเป็น แฮม กับ ไข่ดาว...มันเป็นของคู่กัน
ว่าแล้วก็มา...เริ่มเขียนกัน...ก่อนอื่น คุณต้องรู้ก่อนว่า...ภาษาทั้งสองเขียนไม่เหมือนกัน...***โดยสิ้นเชิง...และมันทำงานในคนละส่วนกัน...(จึงทำให้ Batch อยู่ในภาษาระดับ Console ส่วน VB6 อยู่บน Explorer Windows ที่มี GUI ครบ) การเขียนโปรแกรมเพื่อเชื่อมสองภาษานี้เพื่อ อาศัยขอดีของแต่ละภาษามาแลกเปลี่ยนกัน หรือทำมันให้ดีขึ้น
      มันติดต่อกันได้อย่างไร?
      ตอบ ผ่าน Argument และ Parameter ของ กันและกันดีที่สุด ไม่แนะนำให้เขียนติดต่อสื่อสารผ่านทาง Environment เพราะยุ่งยาก...ต้องเขียนตัวดักรอสถานะการณ์ เขียนคำสั่งขึ้นมายากกว่า...เข้าใจยากกว่า
เริ่มเลย

1. เปิด VB6 Portable ขึ้นมา...
1.1 ดาวน์โหลด VB6 Portable ก่อน form GoogleDrive (VB6 Portable)
1.2 คลิก VbProtable6.REG หรือ แฟ้มรูปลูกบาตร์สีฟ้า เพื่อให้ VB6 สามารถสร้าง .EXE ได้
1.3 เรียก VB6 ทำงาน


2.เลือก Standard EXE เพื่อให้มันสร้างแฟ้ม .EXE ของวินโดวส์


3. คลิกเครื่องมือ และสร้างมันขึ้นมาทีละตัวตามตัวอย่าง


4. กำหนด Properties แต่ละตัวให้ได้รูปแบบตามตัวอย่าง...(ถ้าใครไม่มีพื้นฐาน...ควรศึกษาก่อน)

5. วางโค้ดลงไปในฟอร์ม...ตามนี้
Private Sub Command1_Click() ' คลิกและทำงาน
    Dim OK As Boolean ' กำหนดตัวแปรเพื่อดูสถานะ OK
    Dim sArgs() As String ' กำหนดตัวแปรสำหรับรับ Argument
    Dim iLoop As Integer ' กำหนดตัวแปรนับ Parameter
    sArgs = Split(Command$, " ") ' ใช้ฟังก์ชั่น Split ตัดคำเก็บไว้ในอาเรย์
    OK = False ' ไม่ OK
    For iLoop = 0 To UBound(sArgs) ' วนจนกว่าข้อมูลในอาเรย์ เป็น 0
        If sArgs(iLoop) = Text1.Text Then OK = True ' ถ้า Argument ตรงกับ Text1.Text จริง OK
    Next ' ถัดไป
    If OK Then ' เมื่อ OK
        Shell "cmd /c LogIn.BAT OK" ' เรียก cmd รัน LogIn.BAT พารามิเตอร์  OK
        End ' ปิด .EXE
    Else '  ถ้าไม่
        MsgBox "รหัสผ่านไม่ถูกต้อง" ' แสดงข้อความ
    End If ' จบ
End Sub


6. สร้างแฟ้ม .EXE และคัดลอกไปยังตำแหน่งที่จะทดสอบ Batch File

7. สร้าง LogIn.BAT เพื่อติดต่อการทำงานระหว่างกัน
if "%1"=="OK" goto :OK
rem ถ้าพารามิเตอร์ VB6 ส่งมาเป็น OK ไปที่ OK
project1.exe 12345
rem เรียก project1.exe และ รหัสผ่าน (12345)
goto :EOF
rem จบคำสั่ง
:OK
rem ตำแหน่ง OK
msg %username% รหัสผ่านถูกต้อง
rem แสดงข้อความว่ารหัสถูกต้อง

จากโปรแกรมด้านบน...มันสามารถติดต่อสื่อสารระหว่างกันได้...โดย แบตช์ไฟล์รอการตอบกับก่อนขั้นตอนแรกจากนั้นเรียก .EXE ที่สร้างจาก VB6 พร้อมส่งค่ารหัสผ่านไปให้ (ทำไมไม่เก็บไว้ที่ VB6 เพราะถ้าเก็บไว้ใน .EXE มันไม่สามารถเปลี่ยนแปลงรหัสผ่านภายหลังได้นั่นเอง) จากนั้น .EXE จะทำงานรอการกรอกรหัสผ่าน ถ้ากรอกไม่ถูกต้อง ให้ VB6 แจ้งทันที...แต่ถ้าถูกต้องจะปิดตัวเองพร้อมส่งค่ากลับมาที่ แบตช์ไฟล์ แบตช์ไฟล์จะตรวจสอบและกระโดดไปยังตำแหน่งที่ต้องการทันที

      จะเห็นได้ว่า แบตช์ไฟล์เองก็สามารถติดต่อสื่อสารกับ .EXE ได้
      และทำไมไม่ติดต่อสื่อสารกับ VBScript ในแบบเดียวกัน?
      ตอบ ทำอย่างนั้นไม่ได้เพราะ VBScript นั้นทำงานผ่าน WScript.EXE อีกที...ซึ่งมีการเรียกพารามิเตอร์และอาร์กิวเมนต์ระหว่างกันอยู่แล้ว...การทำงานระหว่าง Batch File กับ VBScript ให้ทำงานผ่าน Environment ตามที่เสนอไปในตอนแรกๆ ให้ย้อนกลับไปดูเอา...

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

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