ชุมชนคนรักภาษาเบสิค - Visual Basic Community

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 2037|ตอบกลับ: 0

มาทำความรู้จักกับ Application Programming Interface (API)

[คัดลอกลิงก์]

252

กระทู้

367

โพสต์

3066

เครดิต

ผู้ดูแลระบบ

Rank: 9Rank: 9Rank: 9

เครดิต
3066

Application Programming Interface หรือ API คำๆนี้ค่อนข้างจะถูกนำมาใช้งานกันเยอะมากในปัจจุบัน ทำให้คนรุ่นใหม่แบบแอดมิน (บุ๋ย ... 5555+) ค่อนข้างจะงงและสับสนเล็กน้อย โดยเฉพาะสาย Web Application เอาคำนี้มาใช้ร่วมกันกับ Win Application ซึ่งแอดมินยังแอบคิดในใจว่าพวกสายเว็บเขาคิดหาคำอื่นมาใช้ไม่ได้อีกแล้วหรือยังไง 5555+ ... ขอสรุปสั้นๆให้สำหรับสาย Win กับคำว่า API คือ การนำเอาขีดความสามารถในตัวระบบปฏิบัติการ Windows มาใช้งานให้เกิดประสิทธิภาพมากยิ่งขึ้น เพื่อเสริมสมรรถนะและขีดความสามารถให้กับแอพพลิเคชั่นของเรา ... ส่วนสาย Web ก็จะมีความหมายที่คล้ายๆกัน แต่แยกออกไปแล้วแต่ผู้ผลิตเขาจะอนุเคราะห์ให้มา เช่น Google API หรือ Facebook API เป็นต้น

Windows API แท้จริงแล้วก็คือ แก่นของ Windows หรือ Windows API เปรียบเสมือนกับ MS-DOS.SYS สำหรับระบบปฏิบัติการ (Operating System - OS) ของ MS-DOS นั่นเอง โดยที่มันจะเก็บอยู่ในรูปแบบของ Dynamics Link Libraries อยู่ในไฟล์ที่มีนามสกุล DLL ซึ่งในขณะที่ Windows กำลังรันอยู่ ไฟล์เหล่านี้จะถูกโหลดขึ้นมาด้วย และคงอยู่ในหน่วยความจำอยู่อย่างนั้น แต่ละโปรแกรมย่อยใน API จะมีตัวตน (Instance) เพียงตัวเดียว ไม่ว่าจะมีกี่โปรแกรมเรียกใช้มันก็ตามที การทำงานในลักษณะนี้เรียกว่า Dynamic Linking ซึ่งแตกต่างจากการเรียกโปรแกรมย่อย ข้อดีของการทำ Dynamic Linking ก็คือ ประหยัดทรัพยากรระบบ ซึ่งในที่นี้ก็คือ หน่วยความจำ และ ฮาร์ดดิสต์ เนื่องจากแต่ละโปรแกรม ใช้โค้ดจากโปรแกรมย่อยร่วมกัน ตามที่ได้กล่าวมาแล้ว ข้อดีอีกข้อหนึ่ง คือ มีมาตรฐานการติดต่อผู้ใช้เหมือนกัน เราจะสังเกตได้ว่า เมนูของแต่ละโปรแกรมของ Windows มีลักษณะเหมือนกัน ไดอะล็อกซ์สำหรับจัดเก็บไฟล์ หรือ เปิดไฟล์ก็มีรูปร่างเหมือนกัน ทั้งนี้ก็เพราะการเรียกใช้โปรแกรมย่อย API ชุดเดียวกันนั่นเอง

การเรียกใช้งาน API Text Viewer


ตัวอย่างในการเรียกใช้งาน API ด้วย SendMessage

การประกาศโปรแกรมย่อย API
สามารถเขียนไว้ที่ส่วนของการ Declaration เหมือนการประกาศตัวแปรในตัวโมดูล (Module) ใดโมดูลหนึ่งก็ได้ แต่โดยทั่วไปจะไว้รวมกันที่ใดที่หนึ่งในโมดูล .BAS เราอาจสร้างโมดูลขึ้นมาโมดูลหนึ่ง สำหรับจัดเก็บการประกาศฟังค์ชั่น และ ซับรูทีนของ API โดยเฉพาะก็ได้ ในการทำงานของ Windows นั้น Control หรือ ที่เรียกกันว่า Object แต่ละตัวนั้น มีการสื่อสารกันด้วยเมสเสจ (Message) เช่น เมื่อเราใช้ Method Clear กับลิสต์บ็อกซ์ (ListBox) จะเกิด Message "ลบรายการของตัวเองทั้งหมด" ไปให้กับ ListBox ตัวนั้น เป็นต้น แต่ Microsoft Visual Basic ไม่สามารถส่ง Message เองได้ ตัวมันจะต้องใช้ฟังค์ชั่น API เพื่อส่ง Message ออกไปยัง Control (หรือ Object) โดยใช้ฟังค์ชั่น SendMessage  ซึ่งจะช่วยเพิ่มเติมขีดความสามารถให้กับ Visual Basic ได้ในหลายๆด้าน ...

ข้อมูลเพิ่มเติมจาก MSDN

ตัวอย่างการใช้งาน API ขั้นพื้นฐาน ...
การประกาศฟังค์ชั่นของ SendMessage มีดังนี้คือ  
  1. Private Declare Function SendMessage Lib "User32" Alias "SendMessageA" ( _
  2.     ByVal hWnd As Long, _
  3.     ByVal wMsg As Integer, _
  4.     ByVal wParam As Integer, _
  5.     lParam As Any _
  6.     ) As Long
คัดลอกไปที่คลิปบอร์ด
เมื่อ :
hWnd คือ Handle ของคอนโทรลปลายทางที่เราต้องการส่ง Message ไปให้
wMsg คือ ตัวเมสเสจที่การส่ง
wParam และ lParam คือ พารามิเตอร์เสริม ซึ่งมีหน้าที่ และ ความหมายแตกต่างกันไปใน Message แต่ละชนิด

ตัวอย่างการค้นหาคำใน ListBox ด้วยการใช้ API (Visual Basic 6.0 - SP6)

พื้นฐานทั่วไปของ ListBox Control มันเป็นการนำข้อมูลมาแสดงผลเท่านั้น แต่ไม่สามารถทำการค้นหาตัวมันเองได้ ดังนั้นเราจึงต้องนำ API มาใช้งาน โดยอาศัยเทคนิคของฟังค์ชั่น SendMessage (ปกติแล้ว Control หรือ Object แต่ละตัวนั้นมีการพูดคุยหรือติดต่อสื่อสารกันได้ ก็เพราะ SendMessage นี่แหละครับ) ด้วย LB_FINDSTRING (ListBox Find String - &H18F) สำหรับ ListBox เพื่อระบุตำแหน่งในส่วนที่ตรงกันกับตัวอักษรที่เราคีย์เข้าไป ดังนั้น Message ที่เราส่งไปยัง List Box มันก็คือ ค่าเลขจำนวนเต็มคงที่ (Constant) ในที่นี้ก็คือ 18F ฐานสิบหกนั่นเอง โดยที่ฟังค์ชั่น:

SendMessage(hWnd, LB_FINDSTRING, wParam, lParam)
  1. Option Explicit

  2. Private Declare Function SendMessage Lib "User32" Alias "SendMessageA" ( _
  3.     ByVal hWnd As Long, _
  4.     ByVal wMsg As Integer, _
  5.     ByVal wParam As Integer, _
  6.     lParam As Any _
  7.     ) As Long
  8.    
  9. Const LB_FINDSTRING = &H18F

  10. '// ส่วนของโค้ดที่จะอยู่ในฟอร์ม -Form1
  11. Private Sub Form_Load()
  12.     List1.Clear
  13.     ' เพิ่มรายการ (Item) เข้าไปไว้ใน ListBox
  14.    
  15.     List1.AddItem "Apples"
  16.     List1.AddItem "Banana"
  17.     List1.AddItem "Bread"
  18.     List1.AddItem "Break"
  19.     Text1.Text = ""
  20. End Sub

  21. '// เกิดเหตุการณ์เปลี่ยนแปลงใน TextBox

  22. Private Sub Text1_Change()
  23.     List1.ListIndex = SendMessage(List1.hWnd, LB_FINDSTRING, -1, ByVal Text1.Text)
  24. End Sub
คัดลอกไปที่คลิปบอร์ด
Conslusion: การใช้งาน Win API ค่อนข้างยากต่อการทำความเข้าใจพอสมควร แต่ก็ต้องค่อยๆศึกษาเรียนรู้กันไป ครั้นพอสักระยะเราจะจับจุดมันได้เองแหละครับ ... สวัสดี

สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด
ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|G2GNet.com  

GMT+7, 2020-9-21 04:11 , Processed in 0.588945 second(s), 4 queries , File On.

Powered by Discuz! X3.3 R20170401, Rev.54

© 2001-2017 Comsenz Inc.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้