เล่น Application Programming Interface (API) - SendMessage

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

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

การประกาศฟังค์ชั่นของ SendMessage มีดังนี้คือ

Declare Function SendMessage Lib "User32" Alias "SendMessageA" & _
(ByVal hWnd As Long, & ByVal wMsg As Long, & _
ByVal wParam As Long, lParam As Long)
As Long


เมื่อ :

hWnd
คือ Handle ของคอนโทรลปลายทางที่เราต้องการส่ง Message ไปให้
wMsg คือ ตัวเมสเสจที่การส่ง
wParam และ lParam คือ พารามิเตอร์เสริม ซึ่งมีหน้าที่ และ ความหมายแตกต่างกันไปใน Message แต่ละชนิด

0 comments:

Post a Comment