สวัสดีครับ วันนี้มีเรื่องของการใช้ API function ในการหมุนโมเด็มมาให้ลองเล่นๆกันดู
เริ่มแรกเลยให้ทำการสร้าง structure ขึ้นมาโดยตั้งชื่อว่า st_overlapped และทำการกำหนดค่าต่างๆลงไปดังนี้
Internal long
Internalhigh long
offset long
offsethigh long
hevent long
เสร็จแล้วก็เปิด window painter ขึ้นมาใหม่ ทำการกำหนด local external function ต่างๆดังนี้
function boolean WriteFile(long hFile,ref string lpBuffer,long nNumberOfBytesToWrite,ref long lpNumberOfBytesWritten,st_overlapped lpOverlapped ) library "kernel32.dll"
function boolean CloseHandle(long hObject ) library "kernel32.dll"
function long GetLastError() library "kernel32.dll"
function long CreateFileA(ref string lpszName,long fdwAccess,long fdwShareMode,long lpsa,long fdwCreate,long fdwAttrsAndFlags,long hTemplateFile ) library "kernel32.dll"
เสร็จแล้วก็ลงมือเขียนสคริปต์กันเลย
long ll_comid
long lnull
st_overlapped lst_overlapped
long ll_written
string ls_Port
string ls_Number
string ls_CRLF = "~r~n"
long GENERAL_WRITE = 1073741824
long SHARE_MODE = 0
long OPEN_EXISTING = 3
long FILE_FLAG_OVERLAPPED = 1073741824
ls_Port = "COM2"
ป้อนหมายเลขที่ต้องการตรงนี้
เราสามารถประยุดต์การใช้งานให้ยืดหยุ่นกว่านี้โดยการรับตัวเลขที่เรากำหนดเข้ามาก่อนแล้วค่อยสั่งหมุนโมเด็มแทนที่จะกำหนดแบบตายตัวลงไป
ls_Number = "ATDT 310728" + ls_CRLF
setnull(lnull)
ll_Comid = CreateFileA(ls_port,GENERAL_WRITE,SHARE_MODE,lnull,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,lnull)
IF ll_ComId >= 0 THEN
writefile(ll_ComId, ls_Number,len( ls_Number),ll_written, lst_overlapped)
messagebox("ติดต่อเรียบร้อย","กดแป้น Enter ทำการยกเลิกการติดต่อ")
writefile(ll_ComId, ls_CRLF,len(ls_CRLF),ll_written, lst_overlapped)
ELSE
messagebox(string(ll_Comid),getlasterror())
END IF
closehandle(ll_ComId)


