หลักสูตรพื้นฐานการเขียนโปรแกรม VB
เบราว์เซอร์ข้อความ APIAPI คืออะไร
ประเภทข้อมูลการประกาศฟังก์ชัน API และ "ความปลอดภัยของประเภท"
โครงสร้างคงที่
สรุปชุดฟังก์ชัน API บางชุด: ฟังก์ชันการควบคุมและข้อความ ฟังก์ชันฮาร์ดแวร์และระบบ ฟังก์ชันเมนู ฟังก์ชันการวาดภาพ
เอพีไอคืออะไร
ก่อนอื่น จำเป็นต้องบอกทุกคนว่า API คืออะไร API ที่เรียกว่าเดิมเขียนขึ้นสำหรับโปรแกรมเมอร์ C และ C++ พูดง่ายๆ ก็คือ API ถือเป็นฟังก์ชันชนิดหนึ่ง ซึ่งรวมอยู่ในไฟล์ไลบรารีลิงก์ไดนามิกเพิ่มเติมที่เรียกว่า DLL ตามคำจำกัดความมาตรฐาน API คืออินเทอร์เฟซการเขียนโปรแกรมแอปพลิเคชัน 32 บิตของ Windows เป็นชุดของฟังก์ชัน ข้อความ และโครงสร้างที่ซับซ้อนมาก ช่วยให้โปรแกรมเมอร์ใช้ภาษาการเขียนโปรแกรมประเภทต่างๆ เพื่อคอมไพล์โปรแกรมที่ทำงาน บนแอพพลิเคชั่น Windows 95 และ Windows NT อาจกล่าวได้ว่าหากคุณเคยศึกษา VC แล้ว API ก็ไม่ใช่ปัญหาสำหรับคุณ แต่ถ้าคุณไม่ได้เรียนรู้ VC หรือไม่คุ้นเคยกับโครงสร้างของ Windows95 อาจกล่าวได้ว่าการเรียนรู้ API จะเป็นสิ่งที่ยากมาก
หากคุณเปิดโฟลเดอร์ SYSTEM ของ WINDOWS คุณจะพบว่ามีไฟล์ชื่อ DLL เพิ่มเติมอีกมากมาย DLL ไม่ได้มีเพียงฟังก์ชัน API เพียงอย่างเดียว แต่ยังมีอีกหลายสิบหรือหลายร้อยด้วยซ้ำ เราทุกคนสามารถเชี่ยวชาญมันได้หรือไม่ คำตอบคือไม่: เป็นไปไม่ได้ที่จะเชี่ยวชาญมัน แต่จริงๆ แล้ว เราไม่จำเป็นต้องเชี่ยวชาญทั้งหมดเลยจริงๆ เราแค่ต้องมุ่งเน้นไปที่การเรียนรู้ฟังก์ชัน API ที่มาพร้อมกับระบบ Windos เท่านั้น อย่างไรก็ตาม ฟังก์ชันที่ทำซ้ำฟังก์ชันของ VB เองก็ควรละทิ้งเช่นกัน ตัวอย่างเช่น VB
คำสั่ง etAttr สามารถรับคุณสมบัติของไฟล์ได้ และ SetAttr สามารถตั้งค่าคุณสมบัติของไฟล์ได้ นอกจากนี้ยังมีฟังก์ชันที่เกี่ยวข้องสำหรับ API
GetFileAttributes และ SetFileAttributes มีประสิทธิภาพใกล้เคียงกัน หลังจากคำนวณแล้วเหลือเพียง 500 หรือ 600 เท่านั้น ใช่ ค่อนข้างน้อย อย่างไรก็ตาม ฉันกล้าบอกคุณได้ว่าตราบใดที่คุณเชี่ยวชาญ 100 อย่างคุ้นเคย ระดับการเขียนโปรแกรมของคุณก็จะสูงเป็นอย่างน้อยสองเท่าของตอนนี้ แม้ว่าผู้คนจะบอกว่า VB และ WINDOWS มีความสัมพันธ์ใกล้ชิดกัน แต่ฉันคิดว่า API นั้นใกล้กว่ากัน
หน้าต่าง. หากคุณเรียนรู้ API ประโยชน์แรกคือความเข้าใจสถาปัตยกรรม WINDOWS ของคุณ กำไรนี้ไม่ใช่เรื่องง่าย
จะเกิดอะไรขึ้นถ้าคุณไม่พึ่งพา API ฉันบอกคุณได้เลยว่าส่วนใหญ่เป็นหนังสือการเขียนโปรแกรมขั้นสูง (แน่นอนว่าไม่ใช่เพราะชื่อหนังสือเป็น "ขั้นสูง" แต่เป็น "ขั้นสูง" ใน "เนื้อหาของ หนังสือเล่มนี้" ในตอนต้น) หนังสือมีไว้สำหรับผู้อ่านที่มีพื้นฐาน VB ที่แน่นอน) และคำถามแรกมักจะเริ่มต้นด้วย API ดังนั้นอาจกล่าวได้ว่าถ้าคุณไม่เรียนรู้ API คุณก็อาจจะอยู่ในระดับจูเนียร์และไม่สามารถปีนขึ้นไปได้ วิธีเดียวที่จะขอความช่วยเหลือจากคนอื่นได้ ฉันกำลังจะตาย มาช่วยฉัน ฉันควรทำอย่างไรกับสิ่งนั้น ฉันควรทำอย่างไรกับสิ่งนั้น คุณรำคาญไหม แน่นอนว่าตอนนี้มีคนดี ๆ มากเกินไปในโลกออนไลน์ (รวมทั้งข้าพเจ้าด้วย อิอิ) แต่ท่านควรเข้าใจว่าด้วยวิธีนี้ท่านจะไม่สามารถสร้างผลงานดี ๆ ไว้ในมือได้ เนื่องจากหากไม่มีความรู้นี้ คุณจะไม่สามารถสร้างแนวคิดการออกแบบโดยรวมในใจของคุณได้
เบราว์เซอร์ข้อความ API [กลับมา]
ฟังก์ชัน API จำนวนมากมีความยาวมาก ต้องการดูว่ามีลักษณะอย่างไร นี่คือฟังก์ชัน APIDdeClientTransaction เป็นตัวอย่าง:
ประกาศ FunctionDdeClientTransactionLib "user32" (pDataAsByte, ByValcbDataAsLong, ByValhConvAsLong, ByValhszItemAsLong, ByValwFmtAsLong, ByValwTypeAsLong, ByValdwTimeoutAsLong, pdwResultAsLong) AsLong
ว้าว! นานขนาดนี้แล้วเหรอ? หากคุณไม่เคยสัมผัสกับ API ฉันคิดว่าคุณคงถูกข่มขู่ คุณอาจกำลังคิดว่าคุณควรเรียนรู้ต่อหรือไม่ แต่ไม่ต้องกังวล โชคดีที่นักออกแบบของ Microsoft ได้มอบเครื่องมือที่มีประโยชน์ให้กับเรา นี่คือ API
โปรแกรมดูข้อความ
ด้วยโปรแกรมดูข้อความ API เราสามารถค้นหาการประกาศฟังก์ชัน ประเภทโครงสร้าง และค่าคงที่ที่โปรแกรมต้องการได้อย่างง่ายดาย จากนั้นคัดลอกไปยังคลิปบอร์ด และสุดท้ายวางลงในส่วนของโค้ดของโปรแกรม VB ในกรณีส่วนใหญ่ ตราบใดที่เรากำหนดสามลักษณะของฟังก์ชัน โครงสร้าง และค่าคงที่ที่โปรแกรมต้องการ เราก็สามารถเพิ่มพวกมันลงในส่วนของโปรแกรมผ่านการดำเนินการข้างต้นบนเบราว์เซอร์ข้อความ API เพื่อให้สามารถนำไปใช้ในโปรแกรมได้ . การทำงาน. คำถามเหล่านี้เป็นคำถามสามัญสำนึกพื้นฐานที่สุดสำหรับการเรียนรู้ API และยังมีเนื้อหาน้อยกว่าเนื้อหาระบบขนาดใหญ่ของ API มาก เราจะเสียพลังงานไปที่ไหนในอนาคต (ซึ่งไม่สูญเปล่าเลย) นั่นคือ:
เมื่อใดควรใช้ฟังก์ชันใด เมื่อใดควรใช้ชนิดโครงสร้างใด เมื่อใดควรใช้ค่าคงที่ใด
การประกาศฟังก์ชัน API
ลองคิดย้อนกลับไป ใน VB จะประกาศฟังก์ชันได้อย่างไร ฉันคิดว่าหากคุณอ่านบทความนี้อยู่ คุณจะสามารถตอบคำถามนี้ได้อย่างแน่นอน นี่คือการประกาศฟังก์ชั่นที่คุณควรคุ้นเคย:
FunctionSetFocus (ByValhwndAsLong) AsLong
นั่นคือบรรทัดโค้ดนี้กำหนดฟังก์ชันชื่อ SetFocus ฟังก์ชันนี้มีพารามิเตอร์ประเภทข้อมูลแบบยาวและส่งผ่านตามค่า (ByVal) หลังจากดำเนินการฟังก์ชันแล้ว ข้อมูลแบบยาวจะถูกส่งกลับ
การประกาศฟังก์ชัน API ก็คล้ายกันมากเช่นกัน ตัวอย่างเช่น ฟังก์ชัน SetFocus ใน API จะเขียนดังนี้:
ประกาศ FunctionSetFocusLib "user32" นามแฝง "SetFocus" (ByValhwndAsLong) AsLong
มันซับซ้อนกว่าเล็กน้อย ใช่ มันซับซ้อนกว่าเล็กน้อย แต่ฉันบอกได้เลยว่ายกเว้นส่วนพิเศษเหล่านี้ ส่วนอื่นๆ ก็ยังคงเหมือนกับที่คุณเรียนมาก่อนหน้านี้ เช่นเดียวกับการเรียกใช้ฟังก์ชันในโปรแกรม ชอบ:
ดิมเดลแอสลอง
dl&=SetFoucs(Form1.Hwnd)
แต่สิ่งหนึ่งที่ชัดเจน มันไม่เหมือนกับโปรแกรมที่คุณเขียนเองโดยที่สามารถมองเห็นกลไกการทำงานได้ และไม่เหมือน VB
เช่นเดียวกับฟังก์ชันในตัว คุณสามารถดูการใช้งานได้จากวิธีใช้ออนไลน์ของ VB วิธีเดียวคือการเรียนรู้และค้นหาข้อมูลอื่นที่ไม่ใช่ VB
คำสั่ง Declare ใช้เพื่อประกาศการอ้างอิงถึงขั้นตอนภายนอกในไลบรารีลิงก์แบบไดนามิก (DLL) ในระดับโมดูล สำหรับสิ่งนี้ คุณเพียงแค่ต้องจำไว้ว่าการประกาศฟังก์ชัน API ใดๆ จะต้องเขียนคำสั่งนี้
Iib ระบุไลบรารีลิงก์แบบไดนามิกหรือทรัพยากรโค้ดที่มีขั้นตอนหรือฟังก์ชันที่ประกาศไว้ กล่าวอีกนัยหนึ่ง มันอธิบายคำถามว่าฟังก์ชันหรือกระบวนการมาจากไหน
ดังตัวอย่างข้างต้น SetFocusLib "user32" บ่งชี้ว่าฟังก์ชัน SetFocus มาจากไฟล์ user32.dll ไฟล์ไลบรารีลิงก์ไดนามิก dll หลักคือ:
การจัดการ user32.dllWindows สร้างและจัดการอินเทอร์เฟซผู้ใช้ของแอปพลิเคชัน
อินเทอร์เฟซอุปกรณ์กราฟิก GDI32.dll สร้างเอาต์พุตกราฟิกสำหรับอุปกรณ์ Windows
บริการระบบ Kernel32.dll เข้าถึงทรัพยากรคอมพิวเตอร์ของระบบปฏิบัติการ
โปรดทราบว่าเมื่อไฟล์ DLL ไม่ได้อยู่ในโฟลเดอร์ Windows หรือ System จะต้องระบุแหล่งที่มาของไฟล์ในฟังก์ชัน (
เส้นทาง). ตัวอย่างเช่น SetFocusLib "c:/Mydll/user32"
นามแฝงในการประกาศฟังก์ชันเป็นทางเลือก บ่งชี้ว่าขั้นตอนที่จะเรียกมีชื่ออื่น (นามแฝง) ในไลบรารีลิงก์แบบไดนามิก (DLL) ตัวอย่างเช่น นามแฝง "SetFocus" ระบุว่าชื่ออื่นของฟังก์ชัน SetFocus ใน User32.dll คือ
ตั้งโฟกัส เหตุใดทั้งสองชื่อจึงเหมือนกัน แน่นอนว่าอาจแตกต่างกันด้วย ในหลายกรณี ชื่อฟังก์ชันที่อธิบายโดยนามแฝง กล่าวคือ อักขระตัวสุดท้ายของนามแฝงมักจะเป็นอักขระ A ตัวอย่างเช่น ชื่ออื่นของฟังก์ชัน SetWindowsText คือ
SetWindowsTextA แสดงเป็นนามแฝง "SetWindowsTextA" A นี้เป็นเพียงหลักการตั้งชื่อที่นักออกแบบใช้ ซึ่งระบุว่าฟังก์ชันนี้เป็นของเวอร์ชัน ANSI
ดังนั้นการใช้นามแฝงคืออะไร ในทางทฤษฎี นามแฝงจัดเตรียมวิธีการทำงานสำหรับการเรียก API ด้วยชื่ออื่น หากคุณระบุนามแฝง แม้ว่าเราจะเรียกใช้ฟังก์ชันตามฟังก์ชันหลังคำสั่ง Declare แต่นามแฝงจะเป็นตัวเลือกแรกสำหรับการเรียกใช้ฟังก์ชันจริง ตัวอย่างเช่น การประกาศสองฟังก์ชัน (ฟังก์ชัน ABCD) ต่อไปนี้ถูกต้อง และจะเรียกใช้ฟังก์ชัน SetFocus เดียวกัน:
ประกาศ FunctionSetFocusLib "user32" "SetFocus" (ByValhwndAsLong) AsLong
ประกาศ ABCDSetFocusLib "user32" นามแฝง "SetFocus" (ByValhwndAsLong) AsLong
ควรสังเกตว่าเมื่อเลือกนามแฝง คุณควรใส่ใจกับตัวพิมพ์ของนามแฝง หากคุณไม่เลือกนามแฝง ชื่อฟังก์ชันจะต้องคำนึงถึงตัวพิมพ์และไม่สามารถเปลี่ยนแปลงได้ แน่นอน ในหลายกรณี เนื่องจากการประกาศฟังก์ชันนั้นมาจาก API โดยตรง
มันถูกคัดลอกมาจากเบราว์เซอร์ข้อความ ดังนั้นโอกาสที่ข้อผิดพลาดนี้จะเกิดขึ้นจึงมีน้อยมาก แต่คุณจำเป็นต้องรู้สิ่งนี้
การแจ้งเตือนครั้งสุดท้าย การประกาศ API (รวมถึงโครงสร้างและค่าคงที่) จะต้องวางไว้ในส่วน "การประกาศทั่วไป" ของแบบฟอร์มหรือโมดูล
ประเภทข้อมูลและ "ความปลอดภัยของประเภท"
ประเภทข้อมูลที่ใช้ในฟังก์ชัน API นั้นโดยพื้นฐานแล้วจะเหมือนกับประเภทข้อมูลใน VB แต่เนื่องจากฟังก์ชัน API ของ WIN32 จึงไม่มี Integer อยู่
ชนิดข้อมูล อีกประเด็นหนึ่งคือประเภทข้อมูลบูลีนไม่สามารถมองเห็นได้ในฟังก์ชัน API ประเภทข้อมูล Variant จะปรากฏในรูปแบบ Any ในฟังก์ชัน API เช่น DataAsAny แม้ว่าความหมายโดยนัยก็คืออนุญาตให้ส่งพารามิเตอร์ประเภทใดก็ได้เป็นพารามิเตอร์ของฟังก์ชัน API นี้ แต่ก็มีข้อเสียบางประการในการดำเนินการดังกล่าว เหตุผลก็คือ การดำเนินการนี้จะปิดการตรวจสอบประเภททั้งหมดของพารามิเตอร์เป้าหมาย สิ่งนี้จะสร้างโอกาสในการเกิดข้อผิดพลาดในการเรียกพารามิเตอร์ประเภทต่างๆ ตามธรรมชาติ
เพื่อบังคับใช้การตรวจสอบประเภทที่เข้มงวดและหลีกเลี่ยงปัญหาที่กล่าวมาข้างต้น วิธีหนึ่งคือการใช้เทคโนโลยี Alias ที่กล่าวมาข้างต้นในฟังก์ชัน ตัวอย่างเช่น สามารถใช้วิธีการประกาศอื่นสำหรับฟังก์ชัน API GetDIBits ดังนี้:
ต้นแบบของฟังก์ชัน GetDIBits:
PublicDeclareFunctionGetDIBitsLib "gdi32" นามแฝง "GetDIBits" (ByValaHDCAsLong, ByValhBitmapAsLong, ByValnStartScanAsLong, ByValnNumScansAsLong, lpBitsAsAny, lpBIAsBITMAPINFO, ByValwUsageAsLong) AsLong
การปรับเปลี่ยนฟังก์ชัน GetDIBits:
PublicDeclareFunctionGetDIBitsLongLib "gdi32" นามแฝง "GetDIBits" (ByValaHDCAsLong, ByValhBitmapAsLong, ByValnStartScanAsLong, ByValnNumScansAsLong, lpBitsAsLong, lpBIAsBITMAPINFO, ByValwUsageAsLong) AsLong
จากความรู้ที่เรียนมาก่อนหน้านี้ในหลักสูตรนี้ เราสามารถรู้ได้ว่าฟังก์ชัน GetDIBits ต้นแบบหรือฟังก์ชัน GetDIBitsLong ที่แก้ไขแล้ว จะเรียกใช้ฟังก์ชัน GetDIBits ดั้งเดิมที่ระบุโดย Alias หรือไม่ แต่คุณควรเห็นว่าความแตกต่างระหว่างทั้งสองคือเราบังคับให้พารามิเตอร์ lpBits เป็นแบบยาวในฟังก์ชันที่แก้ไข วิธีนี้จะช่วยลดโอกาสที่จะเกิดข้อผิดพลาดในการเรียกใช้ฟังก์ชัน วิธีการนี้เรียกว่าการประกาศ "ประเภทที่ปลอดภัย"
ประเภทข้อมูลที่มักพบเห็นในฟังก์ชัน API ได้แก่ Long, String, Byte, Any.... (แค่นั้นแหละ)
คงที่
ไม่มีอะไรพิเศษเกี่ยวกับค่าคงที่ API โปรดดูรหัสต่อไปนี้ใน VB:
Msg=MsgBox("สวัสดี",vbOKยกเลิก)
เรารู้ว่าค่าของค่าคงที่ vbOKCancel เท่ากับ 1 เราสามารถเขียนโค้ดด้านบนในลักษณะนี้ได้โดยไม่กระทบต่อการทำงานของโค้ด:
Msg=MsgBox("สวัสดี",1)
แต่คุณอาจไม่เต็มใจที่จะเลือกตัวเลือกหลัง เพราะมันจะทำให้เข้าใจโค้ดได้ยาก API ก็ใช้แนวทางนี้เช่นกัน เพียงแต่ว่าค่าคงที่ API จะต้องเริ่มต้นและประกาศก่อนเหตุการณ์ ซึ่ง VB เองไม่สามารถเข้าใจได้ เนื้อหายังคงมาจาก API
เบราว์เซอร์ข้อความ แบบฟอร์มเฉพาะมีดังนี้:
PublicConstABM_ACTIVATE=&H6
PublicConstRIGHT_CTRL_PRESSED=&H4
PublicConstRPC_E_SERVER_DIED=&H80010007
ส่วนตัวConstRPC_S_CALL_FAILED_DNE=1727&
ในการเริ่มต้นค่าคงที่ บางโปรแกรมใช้ Global เช่น GlobalConstABM_ACTIVATE=&H6 แต่ฉันคิดว่า Public สามารถแทนที่มันได้อย่างสมบูรณ์ ฉันเคยใช้ Global มาก่อน แต่ตอนนี้ไม่มากนัก หากคุณใช้อันนี้ตอนนี้และอันนั้นตอนนี้ คุณจะไม่สามารถรักษาความสอดคล้องระหว่างโปรแกรมได้ หรืออย่างน้อยมันก็ดูอึดอัด
โครงสร้าง[กลับ]
โครงสร้างเป็นภาษาของ C และ C++ โดยทั่วไปเรียกว่าชนิดข้อมูลที่กำหนดเองใน VB เพื่อนๆ หลายๆ คนคงทราบกันดีอยู่แล้ว ในฟิลด์ API ฉันชอบเรียกมันว่าโครงสร้าง เนื่องจากฉันไม่ได้กำหนดประเภทโครงสร้างต่างๆ ของ API เลย (
กำหนดเอง)
ใน VB โครงสร้าง API ยังถูกกำหนดโดยคำสั่ง TYPE....ENDTYPE ตัวอย่างเช่น ใน API โครงสร้างจุดถูกกำหนดดังนี้:
ประเภทสาธารณะPOINTAPI
ค่าพิกัด XAsLong' ของจุดบนพิกัด X (abscissa)
YAsLong'ค่าพิกัดของจุดบนพิกัด Y (พิกัด)
ประเภทสิ้นสุด
อีกตัวอย่างหนึ่ง คำจำกัดความของโครงสร้างสี่เหลี่ยม (Rect) ใน API เป็นดังนี้:
PublicTypeRECT
พิกัด LeftAsLong'X ของมุมซ้ายบนของสี่เหลี่ยม
พิกัด Y ของ TopAsLong' ที่มุมซ้ายบนของสี่เหลี่ยม
พิกัด RightAsLong'X ของมุมขวาล่างของสี่เหลี่ยม
พิกัด Y ของ BottomAsLong' ที่มุมขวาล่างของสี่เหลี่ยม
ประเภทสิ้นสุด
เนื้อหานี้ยังสามารถคัดลอกได้จากเบราว์เซอร์ข้อความ API ชื่อตัวแปรในโครงสร้างเหล่านี้สามารถเปลี่ยนแปลงได้ตามต้องการโดยไม่ส่งผลกระทบต่อโครงสร้าง กล่าวอีกนัยหนึ่ง ตัวแปรสมาชิกเหล่านี้เป็นเสมือนทั้งหมด ตัวอย่างเช่น โครงสร้าง POINTAPI สามารถเปลี่ยนได้ดังต่อไปนี้:
ประเภทสาธารณะPOINTAPI
MyXAsLong'ค่าพิกัดของจุดบนพิกัด X (abscissa)
MyYAsLong'ค่าพิกัดของจุดบนพิกัด Y (พิกัด)
ประเภทสิ้นสุด
อย่างไรก็ตาม โดยทั่วไปแล้ว สิ่งนี้ไม่จำเป็น โครงสร้างนั้นเป็นชนิดข้อมูล ดังนั้น เมื่อใช้งาน คุณจะต้องประกาศตัวแปรเฉพาะให้เป็นประเภทโครงสร้างก่อนจึงจะสามารถใช้โครงสร้างในโปรแกรมได้จริง วิธีการประกาศของโครงสร้างจะเหมือนกับวิธีการประกาศของข้อมูลอื่น ตัวอย่างเช่น คำสั่งต่อไปนี้จะประกาศตัวแปร MyPoint เป็นประเภทโครงสร้าง POINTAPI:
MyPointAsPOINTAPI
การอ้างอิงตัวแปรสมาชิกในโครงสร้างนั้นง่ายมาก เพียงเพิ่ม "." หลังชื่อโครงสร้าง จากนั้นเขียนตัวแปรสมาชิกที่จะอ้างอิง สิ่งนี้เหมือนกับการอ้างอิงคุณสมบัติของวัตถุใน VB ตัวอย่างเช่น ถ้าเรากำหนดค่าของตัวแปร X ในโครงสร้าง MyPoint ที่ประกาศข้างต้นให้กับตัวแปร Temp&
รหัสมีดังนี้:
อุณหภูมิ&=MyPoint.X
อย่างไรก็ตาม โปรดทราบว่าคุณต้องไม่คิดว่า MyPoint ในตัวอย่างข้างต้นเป็นค่า ไม่ใช่ค่า แต่เป็นที่อยู่ (
ตัวชี้) ค่านิยมและที่อยู่เป็นแนวคิดที่แตกต่างกันโดยสิ้นเชิง ข้อกำหนดของโครงสร้างถูกส่งผ่านโดยการอ้างอิงถึงฟังก์ชัน WINDOWS เช่น API ทั้งหมด
ในฟังก์ชัน โครงสร้างจะถูกส่งผ่านโดย ByRef (ByRef เป็นประเภทเริ่มต้นในคำสั่ง Declare) สำหรับการผ่านโครงสร้าง อย่าพยายามใช้ ByVal คุณจะไม่ได้อะไรเลย เนื่องจากชื่อโครงสร้างเป็นตัวชี้ไปยังโครงสร้างจริงๆ (ที่อยู่แรกของโครงสร้าง) คุณจึงสามารถถ่ายโอนชื่อโครงสร้างเฉพาะได้ (ดูสรุป ฉันใช้แบบอักษรสีแดงเพื่อเน้นวิธีการถ่ายโอนนี้)
เนื่องจากโครงสร้างถ่ายโอนตัวชี้ ฟังก์ชันจะอ่านและเขียนโครงสร้างโดยตรง คุณลักษณะนี้เหมาะมากสำหรับการโหลดผลลัพธ์ของการทำงานของฟังก์ชันลงในโครงสร้าง
สรุป[กลับมา]
มีขั้นตอนต่อไปนี้เพื่อสรุปสิ่งที่ได้เรียนรู้ในบทเรียนนี้ เริ่ม VB สร้างโปรเจ็กต์ใหม่ เพิ่มปุ่มคำสั่ง คัดลอกโค้ดต่อไปนี้ลงในส่วนของโค้ด แล้วรัน
PrivateDeclareFunctionGetCursorPosLib "ผู้ใช้ 32" (lpPointAsPOINTAPI) AsLong
PrivateTypePOINTAPI'กำหนดโครงสร้างจุด
ค่าพิกัด XAsLong' ของจุดบนพิกัด X (abscissa)
YAsLong'ค่าพิกัดของจุดบนพิกัด Y (พิกัด)
ประเภทสิ้นสุด
SubPrintCursorPos()
ดิมเดลเอเอสลอง
DimMyPointASPINTAPI
dl&=GetCursorPos(MyPoint)'เรียกใช้ฟังก์ชันเพื่อรับพิกัดเมาส์หน้าจอ
Debug.Print"X="&Str(MyPoint.X)&"และ"&"Y="&Str(MyPoint.Y)
สิ้นสุดย่อย
PrivateSubCommand1_คลิก()
พิมพ์เคอร์เซอร์Pos
สิ้นสุดย่อย
ผลลัพธ์ที่ได้คือ (การรันแต่ละครั้งอาจได้รับผลลัพธ์ที่แตกต่างกัน ซึ่งจะถูกกำหนดโดยตำแหน่งของตัวชี้เมาส์บนหน้าจอเมื่อมีการเรียกใช้ฟังก์ชัน):
X=240และY=151
ในโปรแกรม ฟังก์ชัน GetCursorPos ใช้เพื่อรับตำแหน่งของตัวชี้เมาส์บนหน้าจอ
ในตัวอย่างข้างต้น คุณจะพบว่าเนื้อหาของโครงสร้าง MyPpint ที่ส่งผ่านเป็นพารามิเตอร์มีการเปลี่ยนแปลงอย่างมากหลังจากการเรียกใช้ฟังก์ชัน นี่เป็นเพราะความจริงที่ว่าโครงสร้างถูกส่งผ่านโดย ByRef
ชุดฟังก์ชัน API บางชุด [return]
WindowsAPI
1. ฟังก์ชั่นการควบคุมและข้อความ
AdjustWindowRect กำหนดลักษณะหน้าต่าง คำนวณขนาดหน้าต่างที่จำเป็นเพื่อให้ได้สี่เหลี่ยมพื้นที่ไคลเอนต์เป้าหมาย
AnyPopup กำหนดว่ามีป๊อปอัปบนหน้าจอหรือไม่
ArrangeIconicWindows จัดเรียงหน้าต่างลูกย่อเล็กสุดของหน้าต่างหลัก
ฟังก์ชั่นอินพุตเธรดการเชื่อมต่อ AttachThreadInput
BeginDeferWindowPos เริ่มกระบวนการสร้างชุดตำแหน่งหน้าต่างใหม่
BringWindowToTop นำหน้าต่างที่ระบุไปที่ด้านบนของรายการหน้าต่าง
CascadeWindows จัดเรียงหน้าต่างในลักษณะเรียงซ้อน
ChildWindowFromPointส่งกลับค่าหมายเลขอ้างอิงของหน้าต่างลูกแรกในหน้าต่างหลักที่ประกอบด้วยจุดที่ระบุ
ClientToScreen กำหนดพิกัดหน้าจอของจุดในหน้าต่างที่แสดงโดยพิกัดพื้นที่ไคลเอ็นต์
CloseWindow ย่อหน้าต่างที่ระบุให้เล็กสุด
CopyRect คัดลอกเนื้อหาสี่เหลี่ยม
DeferWindowPos ฟังก์ชันนี้ระบุตำแหน่งหน้าต่างใหม่สำหรับหน้าต่างเฉพาะ
DestroyWindowล้างหน้าต่างที่ระบุและหน้าต่างลูกทั้งหมด
DrawAnimatedRects แสดงให้เห็นชุดของสี่เหลี่ยมแบบไดนามิก
EnableWindow อนุญาตหรือปิดใช้งานอินพุตเมาส์และคีย์บอร์ดทั้งหมดในหน้าต่างที่ระบุ
EndDeferWindowPos จะอัพเดตตำแหน่งและสถานะของหน้าต่างทั้งหมดที่ระบุพร้อมกันเมื่อมีการเรียกใช้ DeferWindowPos
EnumChildWindows ระบุหน้าต่างลูกสำหรับหน้าต่างหลักที่ระบุ
EnumThreadWindows ระบุหน้าต่างที่เกี่ยวข้องกับงานที่ระบุ
EnumWindows ระบุหน้าต่างหลักทั้งหมดในรายการหน้าต่าง
EqualRect กำหนดว่าโครงสร้างสี่เหลี่ยมสองโครงสร้างเหมือนกันหรือไม่
FindWindow ค้นหาหน้าต่างระดับบนสุดแรกในรายการหน้าต่างที่ตรงตามเกณฑ์ที่ระบุ
FindWindowEx ค้นหาหน้าต่างย่อยแรกในรายการหน้าต่างที่ตรงกับเงื่อนไขที่ระบุ
FlashWindow กะพริบหน้าต่างที่ระบุ
GetActiveWindowได้รับหมายเลขอ้างอิงของหน้าต่างที่ใช้งานอยู่
GetCapture รับหมายเลขอ้างอิงของหน้าต่างที่อยู่บนเธรดอินพุตปัจจุบันและมีการจับเมาส์ (ได้รับกิจกรรมของเมาส์)
GetClassInfo ได้รับสำเนาของโครงสร้าง WNDCLASS (หรือโครงสร้าง WNDCLASSEX) ซึ่งประกอบด้วยข้อมูลที่เกี่ยวข้องกับคลาสที่ระบุ
GetClassLong ได้รับรายการตัวแปรแบบยาวของคลาสหน้าต่าง
GetClassName รับชื่อคลาสสำหรับหน้าต่างที่ระบุ
GetClassWord ได้รับตัวแปรจำนวนเต็มสำหรับคลาสหน้าต่าง
GetClientRect ส่งคืนขนาดของสี่เหลี่ยมในพื้นที่ไคลเอนต์ของหน้าต่างที่ระบุ
GetDesktopWindow ได้รับหมายเลขอ้างอิงหน้าต่าง (หน้าต่างเดสก์ท็อป) ที่แสดงถึงหน้าจอทั้งหมด
GetFocus รับหมายเลขอ้างอิงของหน้าต่างพร้อมโฟกัสอินพุต
GetForegroundWindowได้รับหมายเลขอ้างอิงของหน้าต่างด้านหน้า
GetLastActivePopup รับหมายเลขอ้างอิงไปยังหน้าต่างแบบผุดขึ้นที่เปิดใช้งานล่าสุดในหน้าต่างหลักที่กำหนด
GetLastError กำหนดเป้าหมายฟังก์ชัน api ก่อนหน้านี้ ใช้ฟังก์ชันนี้เพื่อรับข้อมูลข้อผิดพลาดเพิ่มเติม
GetParent กำหนดหน้าต่างหลักของหน้าต่างที่ระบุ
GetTopWindowค้นหารายการหน้าต่างภายในสำหรับหมายเลขอ้างอิงของหน้าต่างแรกที่เป็นของหน้าต่างที่ระบุ
GetUpdateRectได้รับสี่เหลี่ยมที่อธิบายส่วนของหน้าต่างที่ระบุที่จำเป็นต้องปรับปรุง
GetWindowได้รับหมายเลขอ้างอิงของหน้าต่างที่มีความสัมพันธ์เฉพาะกับหน้าต่างต้นฉบับ
GetWindowContextHelpId รับรหัสฉากวิธีใช้ที่เกี่ยวข้องกับหน้าต่าง
GetWindowLongรับข้อมูลจากโครงสร้างของหน้าต่างที่ระบุ
GetWindowPlacementได้รับข้อมูลสถานะและตำแหน่งที่ตั้งของหน้าต่างที่ระบุ
GetWindowRect ได้รับสี่เหลี่ยมช่วงของหน้าต่างทั้งหมด เส้นขอบของหน้าต่าง แถบชื่อเรื่อง แถบเลื่อน เมนู ฯลฯ ล้วนอยู่ภายในสี่เหลี่ยมนี้
GetWindowTextได้รับข้อความชื่อเรื่องของฟอร์มหรือเนื้อหาของตัวควบคุม
GetWindowTextLengthตรวจสอบความยาวของข้อความชื่อหน้าต่างหรือเนื้อหาการควบคุม
GetWindowWordได้รับข้อมูลเกี่ยวกับโครงสร้างหน้าต่างที่ระบุ
InflateRect เพิ่มหรือลดขนาดของสี่เหลี่ยม
ฟังก์ชัน IntersectRect จะโหลดสี่เหลี่ยมลงใน lpDestRect ซึ่งเป็นจุดตัดของสี่เหลี่ยมสองรูป lpSrc1Rect และ lpSrc2Rect
InvalidateRect บล็อกทั้งหมดหรือบางส่วนของพื้นที่ไคลเอ็นต์ของหน้าต่าง
IsChild กำหนดว่าหน้าต่างเป็นหน้าต่างย่อยหรือหน้าต่างรองของหน้าต่างอื่น
IsIconic กำหนดว่าหน้าต่างถูกย่อเล็กสุดหรือไม่
IsRectEmpty กำหนดว่าสี่เหลี่ยมว่างเปล่าหรือไม่
IsWindow กำหนดว่าหมายเลขอ้างอิงหน้าต่างถูกต้องหรือไม่
IsWindowEnabled กำหนดว่าหน้าต่างทำงานอยู่หรือไม่
IsWindowUnicodeกำหนดว่าหน้าต่างเป็นหน้าต่าง Unicode หรือไม่ ซึ่งหมายความว่าหน้าต่างจะได้รับตัวอักษร Unicode สำหรับข้อความที่เป็นข้อความทั้งหมด
IsWindowVisible กำหนดว่าหน้าต่างจะมองเห็นได้หรือไม่
IsZoomed กำหนดว่าหน้าต่างขยายใหญ่สุดหรือไม่
LockWindowUpdate จะล็อกหน้าต่างที่ระบุและป้องกันไม่ให้อัปเดต
MapWindowPoints แปลงจุดในพิกัดพื้นที่ไคลเอนต์ของหน้าต่างหนึ่งไปยังระบบพิกัดพื้นที่ไคลเอนต์ของหน้าต่างอื่น
MoveWindow เปลี่ยนตำแหน่งและขนาดของหน้าต่างที่ระบุ
OffsetRect ทำให้สี่เหลี่ยมเคลื่อนที่โดยใช้ออฟเซ็ตที่ระบุ
OpenIcon จะคืนค่าโปรแกรมที่ย่อเล็กสุดและเปิดใช้งาน
PtInRect กำหนดว่าจุดที่ระบุอยู่ภายในสี่เหลี่ยมหรือไม่
RedrawWindow วาดใหม่ทั้งหมดหรือบางส่วนของหน้าต่าง
ReleaseCapture ปล่อยการจับเมาส์สำหรับแอปพลิเคชันปัจจุบัน
ScreenToClient กำหนดพิกัดพื้นที่ไคลเอ็นต์ของจุดที่ระบุบนหน้าจอ
ScrollWindow ทั้งหมดหรือบางส่วนของพื้นที่ไคลเอนต์ของหน้าต่างเลื่อน
ScrollWindowEx เลื่อนทั้งหมดหรือบางส่วนของพื้นที่ไคลเอนต์ของหน้าต่าง ขึ้นอยู่กับตัวเลือกเพิ่มเติม
SetActiveWindowเปิดใช้งานหน้าต่างที่ระบุ
SetCapture ตั้งค่าการจับเมาส์ไปยังหน้าต่างที่ระบุ
SetClassLong ตั้งค่ารายการตัวแปรแบบยาวสำหรับคลาสหน้าต่าง
SetClassWordตั้งค่ารายการสำหรับคลาสหน้าต่าง
SetFocusAPI ตั้งค่าโฟกัสอินพุตไปที่หน้าต่างที่ระบุ หากจำเป็น หน้าต่างจะถูกเปิดใช้งาน
SetForegroundWindow ตั้งค่าหน้าต่างเป็นหน้าต่างด้านหน้าของระบบ
SetParentระบุพาเรนต์ใหม่ของหน้าต่าง
SetRect ตั้งค่าเนื้อหาของสี่เหลี่ยมที่ระบุ
SetRectEmpty ตั้งค่าสี่เหลี่ยมเป็นสี่เหลี่ยมว่างเปล่า
SetWindowContextHelpId ตั้งค่ารหัสฉากวิธีใช้ (บริบท) สำหรับหน้าต่างที่ระบุ
SetWindowLong ตั้งค่าข้อมูลสำหรับหน้าต่างที่ระบุในโครงสร้างหน้าต่าง
SetWindowPlacement ตั้งค่าสถานะหน้าต่างและข้อมูลตำแหน่ง
SetWindowPosระบุตำแหน่งใหม่และสถานะสำหรับหน้าต่าง
SetWindowTextตั้งค่าข้อความชื่อเรื่องของหน้าต่างหรือเนื้อหาของตัวควบคุม
SetWindowWord ตั้งค่าข้อมูลสำหรับหน้าต่างที่ระบุในโครงสร้างหน้าต่าง
ShowOwnedPopups แสดงหรือซ่อนหน้าต่างป๊อปอัปทั้งหมดที่เป็นของหน้าต่างที่ระบุ
ShowWindow ควบคุมการมองเห็นของหน้าต่าง
ShowWindowAsync คล้ายกับ ShowWindow
SubtractRect โหลดสี่เหลี่ยม lprcDst ซึ่งเป็นผลมาจากการลบ lprcSrc2 จากสี่เหลี่ยม lprcSrc1
TileWindows จัดเรียงหน้าต่างตามลำดับไทล์
UnionRect โหลดสี่เหลี่ยมเป้าหมาย lpDestRect ซึ่งเป็นผลมาจากการรวมกันของ lpSrc1Rect และ lpSrc2Rect
UpdateWindow บังคับให้มีการอัพเดตหน้าต่างทันที
ValidateRect ตรวจสอบพื้นที่ไคลเอ็นต์ของหน้าต่างทั้งหมดหรือบางส่วน
WindowFromPointส่งกลับหมายเลขอ้างอิงไปยังหน้าต่างที่ประกอบด้วยจุดที่ระบุ ละเว้นหน้าต่างที่ปิดบัง ซ่อน และโปร่งใส
2.ฟังก์ชั่นฮาร์ดแวร์และระบบ
ActivateKeyboardLayout เปิดใช้งานรูปแบบแป้นพิมพ์ใหม่ รูปแบบแป้นพิมพ์จะกำหนดตำแหน่งและความหมายของปุ่มบนแป้นพิมพ์กายภาพ
เสียงบี๊บใช้เพื่อสร้างเสียงธรรมดา
CharToOem แปลงสตริงจากชุดอักขระ ANSI เป็นชุดอักขระ OEM
ClipCursor จำกัดตัวชี้ไปยังพื้นที่ที่ระบุ
ConvertDefaultLocale แปลงตัวระบุท้องถิ่นพิเศษเป็น ID ท้องถิ่นจริง
CreateCaret สร้างเครื่องหมายรูปหมวก (เคอร์เซอร์) ตามข้อมูลที่ระบุ และเลือกเป็นเครื่องหมายรูปหมวกเริ่มต้นสำหรับหน้าต่างที่ระบุ
DestroyCaret ล้าง (ทำลาย) เครื่องหมายรูปหมวก
EnumCalendarInfo ระบุข้อมูลปฏิทินที่มีอยู่ในสภาพแวดล้อม "ท้องถิ่น" ที่ระบุ
EnumDateFormats ระบุรูปแบบวันที่แบบยาวและแบบสั้นที่มีอยู่ในการตั้งค่า "ท้องถิ่น" ที่ระบุ
EnumSystemCodePages ระบุโค้ดเพจที่ติดตั้งหรือได้รับการสนับสนุนบนระบบ
EnumSystemLocales ระบุการตั้งค่า "ภายในเครื่อง" ที่ระบบได้ติดตั้งหรือให้การสนับสนุน
EnumTimeFormats ระบุรูปแบบเวลาที่ใช้กับสถานที่ที่ระบุ
ExitWindowsEx ออกจากหน้าต่างและรีสตาร์ทด้วยตัวเลือกเฉพาะ
ExpandEnvironmentStringsขยายสตริงสภาพแวดล้อม
FreeEnvironmentStrings แปลบล็อกสตริงสภาพแวดล้อมที่ระบุ
GetACP กำหนดหน้ารหัส ANSI ที่มีผลใช้บังคับในปัจจุบัน
GetAsyncKeyState กำหนดสถานะของคีย์เสมือนที่ระบุเมื่อมีการเรียกใช้ฟังก์ชัน
GetCaretBlinkTimeกำหนดความถี่การกะพริบของเคอร์เซอร์รูปหมวก
GetCaretPos กำหนดตำแหน่งปัจจุบันของเครื่องหมายรูปหมวก
GetClipCursor รับสี่เหลี่ยมที่อธิบายพื้นที่การตัดที่ระบุในปัจจุบันสำหรับตัวชี้เมาส์
GetCommandLine รับตัวชี้ไปยังบัฟเฟอร์บรรทัดคำสั่งปัจจุบัน
GetComputerNameได้รับชื่อของคอมพิวเตอร์เครื่องนี้
GetCPInfoได้รับข้อมูลที่เกี่ยวข้องกับโค้ดเพจที่ระบุ
GetCurrencyFormat จัดรูปแบบตัวเลขตามรูปแบบสกุลเงินสำหรับการตั้งค่า "ท้องถิ่น" ที่ระบุ
GetCursor รับหมายเลขอ้างอิงของตัวชี้เมาส์ที่เลือกในปัจจุบัน
GetCursorPos รับตำแหน่งปัจจุบันของตัวชี้เมาส์
GetDateFormat จัดรูปแบบวันที่ของระบบในรูปแบบ "ท้องถิ่น" ที่ระบุ
GetDoubleClickTime กำหนดช่วงเวลาระหว่างการคลิกเมาส์สองครั้งติดต่อกันซึ่งจะถูกประมวลผลเป็นเหตุการณ์ดับเบิลคลิก
GetEnvironmentStringsจัดสรรและส่งกลับหมายเลขอ้างอิงไปยังบล็อกหน่วยความจำที่ประกอบด้วยการตั้งค่าสตริงสภาพแวดล้อมปัจจุบัน
GetEnvironmentVariableรับค่าของตัวแปรสภาพแวดล้อม
GetInputState กำหนดว่ามีเหตุการณ์เมาส์หรือคีย์บอร์ดที่ค้างอยู่ (รอการประมวลผล) หรือไม่
GetKBCodePage จะถูกแทนที่ด้วย GetOEMCP ทั้งสองฟังก์ชันจะเหมือนกันทุกประการ
GetKeyboardLayoutได้รับหมายเลขอ้างอิงที่อธิบายรูปแบบแป้นพิมพ์ของแอปพลิเคชันที่ระบุ
GetKeyboardLayoutList รับรายการรูปแบบแป้นพิมพ์ทั้งหมดที่ใช้ได้กับระบบ
GetKeyboardLayoutName รับชื่อของรูปแบบแป้นพิมพ์ที่ใช้งานอยู่ในปัจจุบัน
GetKeyboardState รับสถานะปัจจุบันของแต่ละคีย์เสมือนบนแป้นพิมพ์
GetKeyboardType รับข้อมูลเกี่ยวกับแป้นพิมพ์ที่ใช้งานอยู่
GetKeyNameText กำหนดชื่อคีย์ที่กำหนดให้กับโค้ดสแกน
GetKeyState กำหนดสถานะของคีย์เสมือนที่ระบุสำหรับคีย์ที่ได้รับการประมวลผลเมื่อข้อมูลถูกป้อนครั้งล่าสุด
GetLastError กำหนดเป้าหมายฟังก์ชัน api ก่อนหน้านี้ ใช้ฟังก์ชันนี้เพื่อรับข้อมูลข้อผิดพลาดเพิ่มเติม
GetLocaleInfo ได้รับข้อมูลที่เกี่ยวข้องกับ "สถานที่" ที่ระบุ
GetLocalTime รับวันที่และเวลาท้องถิ่น
GetNumberFormat จัดรูปแบบตัวเลขในรูปแบบเฉพาะสำหรับ "สถานที่" ที่ระบุ
GetOEMCP กำหนดหน้ารหัส windows เพื่อแปลงระหว่างชุดอักขระ OEM และ ANSI
GetQueueStatus กำหนดประเภทข้อความที่ค้างอยู่ (รอการประมวลผล) ในคิวข้อความของแอปพลิเคชัน
GetSysColorกำหนดสีของวัตถุที่แสดงหน้าต่างที่ระบุ
GetSystemDefaultLangID รับรหัสภาษาเริ่มต้นของระบบ
GetSystemDefaultLCID รับ "สถานที่" ระบบเริ่มต้นปัจจุบัน
GetSystemInfo ได้รับข้อมูลที่เกี่ยวข้องกับแพลตฟอร์มฮาร์ดแวร์พื้นฐาน
GetSystemMetricsส่งคืนข้อมูลที่เกี่ยวข้องกับสภาพแวดล้อมของ windows
GetSystemPowerStatus รับข้อมูลที่เกี่ยวข้องกับสถานะพลังงานของระบบปัจจุบัน
GetSystemTime ได้รับเวลาของระบบปัจจุบัน เวลานี้ใช้รูปแบบ "เวลาโลกเชิงพิกัด" (เช่น UTC หรือที่เรียกว่า GMT)
GetSystemTimeAdjustment ซิงโครไนซ์นาฬิการะบบภายในกับแหล่งสัญญาณนาฬิกาภายนอก
GetThreadLocale รับ ID ภายในเครื่องของเธรดปัจจุบัน
GetTickCount ใช้เพื่อดูระยะเวลา (มิลลิวินาที) ที่ผ่านไปนับตั้งแต่เริ่ม Windows
GetTimeFormat จัดรูปแบบเวลาของระบบในรูปแบบเฉพาะสำหรับ "สถานที่" ที่ระบุในปัจจุบัน
GetTimeZoneInformation ได้รับข้อมูลที่เกี่ยวข้องกับการตั้งค่าโซนเวลาของระบบ
GetUserDefaultLangID รับรหัสภาษาเริ่มต้นสำหรับผู้ใช้ปัจจุบัน
GetUserDefaultLCID รับการตั้งค่า "ท้องถิ่น" เริ่มต้นของผู้ใช้ปัจจุบัน
GetUserNameได้รับชื่อของผู้ใช้ปัจจุบัน
GetVersion จะกำหนดเวอร์ชัน Windows และ DOS ที่ใช้งานอยู่ในปัจจุบัน
GetVersionEx รับข้อมูลเวอร์ชันที่เกี่ยวข้องกับแพลตฟอร์มและระบบปฏิบัติการ
HideCaret ซ่อนเครื่องหมายรูปหมวก (เคอร์เซอร์) ในหน้าต่างที่ระบุ
IsValidCodePage กำหนดว่าโค้ดเพจถูกต้องหรือไม่
IsValidLocale กำหนดว่าตัวระบุในเครื่องนั้นถูกต้องหรือไม่
ฟังก์ชัน keybd_event จำลองการทำงานของแป้นพิมพ์
LoadKeyboardLayout โหลดรูปแบบแป้นพิมพ์
MapVirtualKey ดำเนินการสแกนโค้ดและการแปลงอักขระที่แตกต่างกันตามประเภทการแมปที่ระบุ
MapVirtualKeyEx ดำเนินการสแกนโค้ดและการแปลงอักขระที่แตกต่างกันตามประเภทการแมปที่ระบุ
MessageBeep เล่นเสียงของระบบ แผนการกระจายเสียงของระบบถูกกำหนดไว้ในแผงควบคุม
mouse_event จำลองเหตุการณ์เมาส์
OemKeyScan กำหนดรหัสสแกนและสถานะคีย์ Shift ของอักขระ ASCII ในชุดอักขระ OEM
OemToChar แปลงสตริงจากชุดอักขระ OEM เป็นชุดอักขระ ANSI
SetCaretBlinkTime ระบุความถี่การกะพริบของเครื่องหมายรูปหมวก (เคอร์เซอร์)
SetCaretPos ระบุตำแหน่งของเครื่องหมายรูปหมวก
SetComputerName ตั้งชื่อคอมพิวเตอร์ใหม่
SetCursor ตั้งค่าตัวชี้เมาส์ที่ระบุเป็นตัวชี้ปัจจุบัน
SetCursorPos กำหนดตำแหน่งของตัวชี้
SetDoubleClickTime กำหนดช่วงเวลาระหว่างการคลิกเมาส์สองครั้งติดต่อกันที่ระบบพิจารณาเหตุการณ์การดับเบิลคลิก
SetEnvironmentVariable ตั้งค่าตัวแปรสภาพแวดล้อมเป็นค่าที่ระบุ
SetKeyboardState ตั้งค่าสถานะปัจจุบันของแต่ละคีย์เสมือนบนแป้นพิมพ์
SetLocaleInfo เปลี่ยนข้อมูลการตั้งค่า "ท้องถิ่น" ของผู้ใช้
SetLocalTime ตั้งเวลาท้องถิ่นปัจจุบัน
SetSysColors ตั้งค่าสีของวัตถุที่แสดงในหน้าต่างที่ระบุ
SetSystemCursor เปลี่ยนแปลงตัวชี้ระบบมาตรฐาน
SetSystemTime ตั้งเวลาระบบปัจจุบัน
SetSystemTimeAdjustment จะเพิ่มค่าการสอบเทียบเป็นระยะเพื่อซิงโครไนซ์นาฬิการะบบภายในกับแหล่งสัญญาณนาฬิกาภายนอก
SetThreadLocale ตั้งค่าภาษาสำหรับเธรดปัจจุบัน
SetTimeZoneInformation ตั้งค่าข้อมูลโซนเวลาของระบบ
ShowCaret แสดงเครื่องหมายรูปหมวก (เคอร์เซอร์) ในหน้าต่างที่ระบุ
ShowCursor ควบคุมการมองเห็นของตัวชี้เมาส์
SwapMouseButton กำหนดว่าจะสลับฟังก์ชั่นของปุ่มเมาส์ซ้ายและขวาหรือไม่
SystemParametersInfo รับและตั้งค่าพารามิเตอร์ระบบ windows จำนวนมาก
SystemTimeToTzSpecificLocalTime แปลงเวลาของระบบเป็นเวลาท้องถิ่น
ToAscii แปลงคีย์เสมือนเป็นอักขระ ASCII ตามรหัสสแกนและข้อมูลแป้นพิมพ์ปัจจุบัน
ToUnicode แปลงคีย์เสมือนเป็นอักขระ Unicode โดยอิงตามรหัสสแกนและข้อมูลแป้นพิมพ์ปัจจุบัน
UnloadKeyboardLayout จะยกเลิกการโหลดรูปแบบแป้นพิมพ์ที่ระบุ
VkKeyScan กำหนดรหัสคีย์เสมือนและสถานะของปุ่ม Shift ตามอักขระ ASCII ในชุดอักขระ Windows
เกิน
3.ฟังก์ชั่นเมนู
AppendMenu เพิ่มรายการเมนูให้กับเมนูที่ระบุ
CheckMenuItem จะตรวจสอบหรือยกเลิกการเลือกรายการเมนูที่ระบุ
CheckMenuRadioItem ระบุว่ารายการเมนูถูกทำเครื่องหมายว่าเป็นรายการ "วิทยุ"
CreateMenu สร้างเมนูใหม่
CreatePopupMenu สร้างเมนูป๊อปอัปที่ว่างเปล่า
DeleteMenu ลบรายการเมนูที่ระบุ
DestroyMenu ลบเมนูที่ระบุ
DrawMenuBar วาดเมนูใหม่สำหรับหน้าต่างที่ระบุ
enableMenuitem อนุญาตหรือปิดใช้งานรายการเมนูที่ระบุ
getMenu ได้รับที่จับของเมนูในหน้าต่าง
GetMenuCheckMarkDimensions ส่งคืนขนาดของเครื่องหมายเมนู
getMenucontexthelpid ได้รับรหัสฉากช่วยเหลือของเมนู
GetMenudeFaultItem กำหนดรายการในเมนูที่เป็นรายการเริ่มต้น
getMenuitemCount ส่งคืนจำนวนรายการ (รายการเมนู) ในเมนู
getMenuitEmid ส่งคืนรหัสเมนูของรายการที่อยู่ที่ตำแหน่งที่ระบุในเมนู
getMenuitEminfo ได้รับข้อมูลเฉพาะที่เกี่ยวข้องกับรายการเมนู
getMenuitEmrect โหลดข้อมูลพิกัดหน้าจอของรายการเมนูที่ระบุในสี่เหลี่ยมผืนผ้า
GetMenustate ได้รับข้อมูลที่เกี่ยวข้องกับสถานะของรายการเมนูที่ระบุ
GetMenustring ได้รับสตริงของรายการเมนูที่ระบุ
GetSubmenu ได้รับที่จับของเมนูป๊อปอัพซึ่งอยู่ที่ตำแหน่งที่ระบุในเมนู
GetSystemMenu ได้รับที่จับของเมนูระบบของหน้าต่างที่ระบุ
Hilitemenuitem ควบคุมสถานะการไฮไลต์ของรายการเมนูระดับบนสุด
InsertMenu แทรกรายการเมนูที่ตำแหน่งที่ระบุในเมนูย้ายรายการอื่น ๆ ตามต้องการ
InsertMenuitem แทรกรายการเมนูใหม่
Ismenu กำหนดว่าที่จับที่ระบุเป็นที่จับเมนู
LoadMenu โหลดเมนูจากโมดูลหรืออินสแตนซ์แอปพลิเคชันที่ระบุ
LoadMenuIndirect โหลดเมนู
MenuitemFrompoint กำหนดรายการเมนูที่มีจุดที่ระบุบนหน้าจอ
Modifymenu เปลี่ยนรายการเมนู
RemoveMenu ลบรายการเมนูที่ระบุ
SetMenu ตั้งค่าเมนูหน้าต่าง
SetMenucontexthelpid ตั้งค่ารหัสฉากช่วยเหลือของเมนู
SetMenudeFaultItem ตั้งค่ารายการเมนูเป็นรายการเริ่มต้น
SetMenuitemBitMaps ตั้งค่าบิตแมปเฉพาะที่จะใช้ในรายการเมนูที่ระบุแทนสัญลักษณ์ตรวจสอบมาตรฐาน (√)
SetMenuitEminfo ตั้งค่าข้อมูลที่ระบุสำหรับรายการเมนู
TrackPopupMenu แสดงเมนูป๊อปอัพทุกที่บนหน้าจอ
trackpopupmuex นั้นคล้ายกับ trackpopupupmenu ยกเว้นว่ามีฟังก์ชั่นเพิ่มเติม
เกิน
ต่อไปนี้เป็นคำจำกัดความหลายประเภทเกี่ยวกับฟังก์ชั่นเมนู
menuiteminfo โครงสร้างนี้มีข้อมูลเกี่ยวกับรายการเมนู
tpmparams โครงสร้างนี้ใช้โดยฟังก์ชั่น trackpopupmuex เพื่อรองรับฟังก์ชั่นเพิ่มเติม
4. ฟังก์ชั่นการวาด
Abortpath ทิ้งเส้นทางทั้งหมดที่เลือกไว้ในฉากอุปกรณ์ที่ระบุ ยกเลิกการสร้างเส้นทางใด ๆ ที่กำลังดำเนินอยู่
Anglearc วาดเส้นที่มีส่วนโค้งเชื่อมต่อ
ArcDraw anc
startPath เริ่มสาขาเส้นทาง
cancelDC ยกเลิกการวาดภาพยาวในเธรดอื่น
คอร์ดวาดคอร์ด
CloseNhmetafile ปิดฉากอุปกรณ์ metafile ที่ได้รับการปรับปรุงและส่งคืนที่จับไปยัง metafile ที่สร้างขึ้นใหม่
ปิดการกำหนดค่าเมื่อวาดเส้นทางให้ปิดตัวเลขที่เปิดอยู่ในปัจจุบัน
CloseMetafile ปิดฉากอุปกรณ์ metafile ที่ระบุและส่งคืนที่จับไปยัง metafile ที่สร้างขึ้นใหม่
Copyenhmetafile ทำสำเนา (สำเนา) ของ metafile ที่ได้รับการปรับปรุงที่ระบุไว้
Copymetafile ทำสำเนาของ metafile ที่ระบุ (มาตรฐาน)
CoreBrushIndirect สร้างแปรงตามโครงสร้างข้อมูลการบันทึก
CreateDibpatternbrush สร้างแปรงโดยใช้บิตแมปที่ไม่ขึ้นกับอุปกรณ์เพื่อระบุสไตล์แปรง (รูปแบบ)
createenhmetafile สร้างฉากอุปกรณ์ metafile ขั้นสูง
CreateHatchBrush สร้างแปรงด้วยรูปแบบเงา
CreateMetafile สร้างฉากอุปกรณ์ metafile
CreatePatternbrush สร้างแปรงโดยใช้บิตแมปที่ระบุรูปแบบแปรง
createPencreates แปรงที่มีสไตล์ความกว้างและสีที่กำหนด
CreatePenIndirect สร้างปากกาตามโครงสร้าง logpen ที่ระบุ
CreateSolidBrush สร้างแปรงที่มีสีทึบ
deleteenhmetafile ลบ metafile ที่เพิ่มขึ้นที่ระบุไว้
deleteMetafile ลบ metafile ที่ระบุ
DeleteObject ลบวัตถุ GDI และทรัพยากรระบบทั้งหมดที่ใช้โดยวัตถุจะถูกปล่อยออกมา
Drawedge วาดเส้นขอบสี่เหลี่ยมโดยใช้สไตล์ที่ระบุ
ฟังก์ชั่นการหลบหนี drawescape ส่งข้อมูลโดยตรงไปยังไดรเวอร์อุปกรณ์แสดงผล
DrawFocusRect ดึงสี่เหลี่ยมผืนผ้าโฟกัส
DrawFrameControl ดึงการควบคุมมาตรฐาน
Drawstate ใช้เอฟเฟกต์ที่หลากหลายกับการทำงานของภาพหรือการวาดภาพ
วงรีวาดวงรีที่ล้อมรอบด้วยสี่เหลี่ยมผืนผ้าที่ระบุ
endpath หยุดการกำหนดเส้นทาง
enumenhmetafile แสดงรายการ metafile แต่ละรายการสำหรับ metafile ที่ปรับปรุงแล้ว
enummetafile ระบุบันทึก metafile แต่ละรายการสำหรับ windows metafile มาตรฐานมาตรฐาน
enumobjects ระบุแปรงและแปรงที่สามารถใช้กับฉากอุปกรณ์ที่ระบุได้
ExtCreatePen สร้างแปรงขยาย (ประดับหรือเรขาคณิต)
extfloodfill เติมพื้นที่ด้วยแปรงที่เลือกในปัจจุบันในฉากอุปกรณ์ที่ระบุ
FillPath ปิดรูปร่างที่เปิดอยู่ในเส้นทางและเติมด้วยแปรงปัจจุบัน
Fillrect เติมสี่เหลี่ยมด้วยแปรงที่ระบุ
Flattenpath แปลงเส้นโค้งทั้งหมดในเส้นทางสู่ส่วนบรรทัด
Floodfill เติมพื้นที่ในฉากอุปกรณ์ที่ระบุด้วยแปรงที่เลือกในปัจจุบัน
Framerect วาดเส้นขอบรอบสี่เหลี่ยมโดยใช้แปรงที่ระบุ
Gdicomment เพิ่มข้อความแสดงความคิดเห็นไปยังฉากอุปกรณ์ metafile ที่ได้รับการปรับปรุง
Gdiflush ดำเนินการวาดภาพที่รอดำเนินการใด ๆ
gdigetBatchLimit กำหนดจำนวนคำสั่งการวาด GDI ในคิว
gdisetBatchLimit ระบุจำนวนคำสั่งการวาด GDI ที่สามารถเข้าคิวได้
GetArcdirection กำหนดทิศทางการวาดรูปปัจจุบันเมื่อวาดส่วนโค้ง
GetBkColor ได้รับสีพื้นหลังปัจจุบันของฉากอุปกรณ์ที่ระบุ
GetBkMode ได้รับโหมดการเติมพื้นหลังปัจจุบันสำหรับฉากอุปกรณ์ที่ระบุ
GetBrushorgex กำหนดจุดเริ่มต้นของแปรงที่เลือกในปัจจุบันในฉากอุปกรณ์ที่ระบุ
getCurrentObject ได้รับวัตถุที่เลือกในปัจจุบันของประเภทที่ระบุ
GetCurrentPositionex ได้รับตำแหน่งปากกาปัจจุบันในฉากอุปกรณ์ที่ระบุ
getenhmetafile ได้รับที่จับ metafile ของ metafile ที่ปรับปรุงแล้วที่มีอยู่ในไฟล์ดิสก์
getenhmetafilebits คัดลอก metafile ที่เพิ่มขึ้นที่ระบุไปยังบัฟเฟอร์หน่วยความจำ
getenhmetafiledescription ส่งคืนคำอธิบายของ metafile ที่ปรับปรุงแล้ว
getenhmetafileheader ได้รับส่วนหัว metafile ของ metafile ที่ปรับปรุงแล้ว
getenhmetafilepaletteentries ได้รับทั้งหมดหรือบางส่วนของจานสี metafile ที่ได้รับการปรับปรุง
getMetafile ได้รับการจัดการ metafile ของ metafile ที่มีอยู่ในไฟล์ดิสก์
getMetafilebitsex คัดลอก metafile ที่ระบุไปยังบัฟเฟอร์หน่วยความจำ
GetMiterLimit ได้รับการตั้งค่าความลาดชัน (MITER) ของฉากอุปกรณ์
GetNearestColor ได้รับสีทึบใกล้เคียงกับสีที่ระบุมากที่สุดตามความสามารถในการแสดงผลของอุปกรณ์
getObjectapi ได้รับโครงสร้างที่อธิบายวัตถุที่ระบุ
getObjectType กำหนดประเภทของวัตถุ GDI ที่อ้างอิงโดยที่จับที่ระบุ
GetPath ได้รับชุดข้อมูลที่กำหนดเส้นทางปัจจุบัน
GetPixel ได้รับค่า RGB ของพิกเซลในฉากอุปกรณ์ที่ระบุ
GetPolyFillMode ได้รับโหมดโพลีกอนสำหรับฉากอุปกรณ์ที่ระบุ
getrop2 รับโหมดการวาดปัจจุบันสำหรับฉากอุปกรณ์ที่ระบุ
GetStockObject ได้รับวัตถุโดยธรรมชาติ (สต็อก)
GetSyscolorbrush ได้รับแปรงสำหรับสีของระบบมาตรฐานใด ๆ
Getwinmetafilebits แปลง metafile ขั้นสูงเป็น metafile windows มาตรฐานโดยการเติมบัฟเฟอร์ด้วยข้อมูลสำหรับ metafile มาตรฐาน
Invertrect กลับรูปสี่เหลี่ยมผืนผ้าที่ระบุในฉากอุปกรณ์โดยการกลับค่าค่าของแต่ละพิกเซล
Linedda ระบุจุดทั้งหมดในส่วนบรรทัดที่ระบุ
Lineto ใช้ปากกาปัจจุบันเพื่อวาดเส้นจากตำแหน่งปัจจุบันไปยังจุดที่ระบุ