วิธีการเรียกใช้ External EXE file จาก Flash (Windows App เท่านั้น)

วันนี้มีโจทย์มาว่าใน Flash (Windows App) ต้องทำ Link ให้สามารถเปิดสิ่งต่อไปนี้ได้
1. PowerPoint file (*.ppt)
2. E-Mail Client (mailto:)
3. Windows Live Messenger (exe file)
4. Skype (exe file)
5. Google Talk (exe file)

สองตัวแรกไม่มีปัญหา
- PowerPoint file ใช้ fscommand เปิด ppt file ที่อยู่ใน fscommand folder ได้ เพราะอยู่ใน sandbox อยู่แล้ว
- mailto นี่ตรงไปตรงมาทำ URL เป็น mailto:who@where.com ก็ได้เลย

ไอ้สามตัวหลังนี่แหละที่มีปัญหา ถ้าดูตามเอกสาร fscommand ของ Adobe จะบอกไว้ชัดเลยว่า exec ของ fscommand จะเรียกได้เฉพาะไฟล์ใน fscommand folder เท่านั้น อ้าว แล้วพวก exe ข้างนอกละจะเรียกได้ไง

ตอนแรกคิดแบบง่ายเข้าว่า ทำ proxy เองเป็น .bat เช่น googletalk_proxy.bat เขียนดังนี้

1
"C:\Program Files\Google\Google Talk\googletalk.exe"

แล้วใน Flash เรียกแบบนี้

1
fscommand("exec", "googletalk_proxy.bat");

แต่ชีวิตมันไม่ง่ายเหมือนการ์ตูนแบบนั้น ดูเหมือน Flash จะมีปัญหาการเรียก .bat บนตระกูล NT เช่น 2000/XP/Vista
วิธีการมันเลยต้องซับซ้อนอีกหน่อยดังข้างล่าง

Flash <-> Proxy.exe <-> Proxy.bat <-> Any.exe

คือต้องเพิ่ม exe อีกตัวนึงเพื่อเป็น Proxy ไปเรียก .bat ซึ่ง Mr.Tim Goss ได้ทำเอาไว้ให้แล้ว
โดยหลักการมันจะเป็น naming convention คือเรียก .bat ที่ชื่อเหมือนกับ .exe ให้เอง เช่นถ้าจะเรียก GoogleTalk เราอาจตั้งชื่อไฟล์แบบนี้

googletalk_proxy.exe
googletalk_proxy.bat

โดยทั้งสองไฟล์อยู่ใน fscommand folder
จากนั้นใน googletalk_proxy.bat จะเขียนดังนี้

1
"C:\Program Files\Google\Google Talk\googletalk.exe"

แล้วใน Flash จะเรียกแบบนี้

1
fscommand("exec", "googletalk_proxy.exe");

ผมทดสอบกับอะไรบ้าง
- Flash 9 AS3
- Windows XP SP3
- Admin role user

สรุปสิ่งที่ต้องทำมีอะไรบ้าง
1. Flash ต้อง publish เป็น exe เท่านั้น
2. ไฟล์ที่เกี่ยวข้องได้แก่ proxy.bat กับ proxy.exe ต้องอยู่ใน subfolder ชื่อ fscommand โดย folder นี้อยู่ระดับเดียวกันกับไฟล์ flashapp.exe ของเรา
3. การตั้งชื่อไฟล์ proxy.exe จะเป็น naming convention ให้ตรงกับ .bat เช่น googletalk_proxy.exe จะเรียกไฟล์ googletalk_proxy.bat ให้เอง

Remarks
1. ถ้าไม่ใช้ Flash เพรียวๆ สามารถใช้ Flash Wrapper เช่น Zinc ก็สามารถแบบข้างต้นได้
2. ดูเหมือนใน AIR 2.0 จะมีความสามารถเกี่ยวกับการเรียกไฟล์ที่ดีขึ้น แต่เนื่องจากยังเป็น Beta อยู่ และผมยังไม่มีโอกาสเอา Flash CS5 มาลองด้วย เลยใช้วิธีข้างต้นไปก่อน
3. งานนี้ถ้าไม่จำเป็นต้องใช้ Flash ผมว่าใช้ VB จะ VB6 หรือ VB.NET ก็ได้ ง่ายสุด :P

Tags: ,

3 Responses to “วิธีการเรียกใช้ External EXE file จาก Flash (Windows App เท่านั้น)”

  1. สวสัดีครับ ถ้าจะทำปุ่มแฟลต เพื่อเรียกแฟลต ซึ่งเป็นคนละไปล์กัน มาแสดงในหน้าเวป หน้าเดียวกันแต่คนละไฟล์ได้มั้ยครับ

  2. createballz says:

    ต้องการเปิดแต่ตัวโฟเดอร์ต้องใช้คำสั่งอะไรครับ

  3. เอี้ยก้วย ณ แอนฟิลด์ says:

    ถ้า windows ก็

    explorer c:windows

    ถ้า mac ก็

    open /volumn1/path

Leave a Reply