ภาษาเบสิก และกรณีศึกษา
เว็บเพจสำรอง (Backup webpages) : thaiall.com | thaiabc.com
ปรับปรุง : 2557-01-16 (ส่วนรายละเอียดของวีบี)
กลับสารบัญ (Back to Content)
ภาษาโปรแกรม (Program Language) # คือ วิธีการมาตรฐานในการสื่อสารสำหรับแสดงคำสั่งไปยังคอมพิวเตอร์ ภาษาโปรแกรมกำหนดไวยากรณ์และการตีความหมายจากโปรแกรมคอมพิวเตอร์ที่เขียนขึ้น ภาษาโปรแกรมทำให้โปรแกรมเมอร์สามารถระบุอย่างชัดเจนถึงข้อมูลที่คอมพิวเตอร์จะทำงาน และวิธีการที่คอมพิวเตอร์จะประมวลผลข้อมูลเหล่านั้น
ภาษาเบสิค (Basic Language) คือ ภาษาคอมพิวเตอร์ที่พัฒนาโดยจอห์น เคมเมนี (John Kemeny) และ ธอมัส เคิรตส์ (Thomas Kurtz) แห่งวิทยาลัยดาร์ทเมิร์ท (Dartmouth College) ในปีค.ศ. 1963
วิชวลเบสิก (Visual Basic) คือ ภาษาคอมพิวเตอร์สำหรับสร้างโปรแกรมประยุกต์ (Application) ที่ใช้งานได้อย่างหลากหลายบนระบบปฏิบัติการวินโดว์ และสามารถเรียกใช้วัตถุที่ตัวแปลภาษาเตรียมไว้ให้บริการ
Programming :: VB :: VB.NET :: ASP.NET :: GWBasic :: ASP ::
ตอนที่ 4 :
ใช้ API ของระบบ Windows
ตัวอย่างการดูวิธีประกาศ API เพื่อเรียกใช้ใน VB
ต้องเปิดแฟ้ม WIN32API.TXT สำหรับการเปิดครั้งแรก
Download : chap301.zip
บทที่ 301 : ใช้ GetFreeSpaceA ของ kernel32
เนื่องจากแฟ้ม c:\windows\system\kernel32.dll มีฟังก์ชันต่าง ๆ ที่ถูกเตรียมให้เราเรียกใช้ VB สามารถเรียกฟังก์ชันมาใช้ได้ ตัวอย่างข้างล่างนี้เรียก GetDiskFreeSpaceA มาใช้ (ชื่อฟังก์ชันต้องใหญ่เล็กตามที่กำหนด) ในแต่ละฟังก์ชันมีตัวแปรที่จะนำมาใช้ได้ หากไม่ทราบว่ามีฟังก์ชันอะไร สามารถเรียกโปรแกรม API Text Viewer ของ Microsoft Visual Basic ให้ตรวจสอบแฟ้มต่าง ๆ ว่ามีบริการอะไรบ้าง เมื่อเรียกแฟ้ม File, Load Text File... แล้วเลือกแฟ้ม win32api.txt โปรแกรมจะแสดง Item ให้เลือก เพื่อให้ผู้พัฒนาคัดลอกไปใช้
ตัวอย่างข้างล่างนี้: จะเรียกฟังก์ชันให้ทำงาน เมื่อมีการกดปุ่ม command1 แล้วส่งค่าให้กับ text1 แสดงผลต่อไป
    ตัวอย่าง 1 : ทุกอย่างในฟอร์ม
    Private Declare Function getdiskfreespacea _
    Lib "kernel32" Alias "GetDiskFreeSpaceA" (ByVal _
      iprootpathname As String, _
      ipsectorspercluster As Long, _
      ipbytespersector As Long, _
      ipnumberoffreeclusters As Long, _
      iptotalnumberofclusters As Long _
    ) As Long

    Private Sub Command1_Click()
    result = getdiskfreespacea("c:\", sectors, bytes, freecluster, totcluster)
    Text1 = Format(sectors * bytes * freecluster, "##,###") & " Bytes"
    Text1 = Text1 & "(" & sectors & "*" & bytes & "*" & freecluster & ")"
    msgbox app.path
    End Sub


    ตัวอย่าง 2 : แยกประกาศในโมดูล และในฟอร์ม
    ' in module1 (if in form will be error)
    Public Type SYSTEMTIME
    wYear As Integer
    wMonth As Integer
    wDayOfWeek As Integer
    wDay As Integer
    wHour As Integer
    wMinute As Integer
    wSecond As Integer
    wMilliseconds As Integer
    End Type
    Public Declare Sub GetSystemTime Lib "kernel32" (lpSystemTime As SYSTEMTIME)

    ' in form1
    Private Sub Command1_Click()
    Dim x As SYSTEMTIME
    GetSystemTime x
    MsgBox x.wMilliseconds
    End Sub
แบบฝึกหัด
? ให้เปลี่ยนเป็น drive อื่น เพราะปัจจุบันมักมีหลาย Drive กันแล้ว
? ให้เรียก GetSystemInfo จาก kernel32
? แสดง Current Directory ด้วย app.path ใน text box
? ลองเรียกใช้ API ตัวอื่นดูสิครับ

Download : chap302.zip และ tping.exe
บทที่ 302 : ใช้ icmp.dll ช่วย ping เพื่อตรวจสอบ host ในเครือข่าย class C
เนื่องจากแฟ้ม c:\windows\system\icmp.dll มีฟังก์ชันต่าง ๆ ที่ถูกเตรียมให้เราเรียกใช้ VB สามารถเรียกฟังก์ชันมาใช้ได้ ตัวอย่างข้างล่างนี้ เพื่อตรวจสอบเลข IP ในเครือข่าย โปรแกรมมี option เรื่องความเร็วในช่อง speed หาต้องการให้เร็วขึ้นให้เปลี่ยน 1000 เป็น 100 และถ้าไม่เปลี่ยนช่อง IP ending จะ ping เพียงเลขเดียวคือเลขที่กำหนด แต่ถ้าแก้ IP ending จะต้องแก้ให้เลขสูงไว้ เพราะโปรแกรมจะ ping ตั้งแต่เลขที่กำหนดไปถึงเลขที่ระบุ หากพบจะแสดงในหน้าต่างด้านบน เลขที่ไม่พบ จะแสดงในหน้าต่างด้านล่าง แต่การแสดงผลของโปรแกรมยังมีปัญหาอยู่บ้าง แต่มิใช่เรื่องใหญ่จึงไม่ได้ปรับ code อีกครั้ง
    คำสั่งควรทราบ
    List2.Clear
    List3.Clear
    If List1.ListCount > 255 Then j = List1.ListCount - 255 Else j = 1
    For i = List1.ListCount To j Step -1
      List1.ListIndex = i - 1
      If (Mid(List1, 1, 1) = "[") Then 
        List2.AddItem List1 
      Else 
        List3.AddItem List1
      End if
    Next
    .
    .
    If Command1.Caption = "START &PING" Then
      checkip
      Timer1.Interval = Text6
      Command1.Caption = "STOP &PING"
    Else
      Command1.Caption = "START &PING"
      Timer1.Interval = 0
    End If
    
แบบฝึกหัด
? ถ้านำไปใช้จะพบปัญหา ให้แก้ปัญหาเรื่องการแสดงผล
? ให้ปรับโปรแกรมกำหนด IP ยืดหยุ่นมากขึ้น ถ้าใช้ในองค์การใหญ่
? ท่านเข้าใจตัวอย่าง code ข้างล่างนี้ว่าอย่างไร
 Dim buff As String
 Open "c:\test.txt" For Input As #1
 filestr = ""
   Do Until EOF(1)
     Line Input #1, TempStr
     filestr = filestr & TempStr & Chr$(13) & Chr$(10)
   Loop
 Close #1
 Text1.Text = filestr
 ' Open App.Path & "\output.txt" For Output As #2
 ' Print #2, s_Student, s_Grade
 

บทที่ 303 : ฟอร์มโปร่งแสง และเชื่อมต่อกับ server ผ่าน Hidden IE
โปรแกรมนี้ได้มาจาก http://juicystudio.com เพียงนำ code นี้ไปใส่ form ก็ทำให้เป็น transparent form พอสร้างปุ่มสักปุ่มหนึ่ง แล้วใส่คำว่า unload me ในปุ่ม ก็จะเห็นปุ่มลอยอยู่กลางจอเฉย ๆ (ปุ่มชื่อ cmdExit) เพราะไม่มี background มาเป็นข้อจำกัดไงครับ เป็นการใช้ api ที่ windows เตรียมไว้ให้ใช้
ต่อมาก็นำโปรแกรมนี้มาเพิ่มส่วนของ Microsoft Internet Control เพื่อสั่งเปิดเว็บ และส่งค่าผ่าน URL เป็นหมายเลข Address ของเครื่อง Server แล้วก็เก็บข้อมูลการเปิดเครื่องในเครือข่ายเพื่อนำไปวิเคราะห์ และพัฒนาบริการให้ดีขึ้น ในส่วนของ form_load คือส่วนที่เพิ่มจากการซ่อนฟอร์มครับ
    Source code ที่ใช้งาน
    ตัวอย่าง open.php
    <?
    $f = fopen("log.txt","a");
    fputs($f, $_GET["q"].",".$_GET["n"]."\n");
    fclose($f);
    ?>
    ตัวอย่าง list.php
    <?
    $ar = file("log.txt");
    foreach ($ar as $v) echo $v."<br>"; 
    ?>
    
แบบฝึกหัด
? ทำแบบที่ผมทำ อย่าแปลกใจ เพราะโปรแกรมนี้แทบไม่เห็นผล
? สร้างปุ่ม close form มา 1 ปุ่ม
? ทำ ball วิ่งเต็มจอ นำมาจากบทที่ 16 ได้เลย
? แก้ไขให้ open.php และ list.php ทำงานร่วมกับ .MDB หรือ MySQL


แนะนำเว็บใหม่ : ผลการจัดอันดับ
รักลำปาง : thcity.com : korattown.com : topsiam.com : มหาวิทยาลัยโยนก
ศูนย์สอบ : รวมบทความ : ไอทีในชีวิตประจำวัน : ดาวน์โหลด : yourname@thaiall.com
ติดต่อ ทีมงาน ชาวลำปาง มีฝันเพื่อการศึกษา Tel.08-1992-7223