โมดูลและฟีเจอร์
ปลั๊กอินสามารถขยายความสามารถให้มากกว่าการอ่านและเขียน USB พื้นฐานได้ด้วยสองระบบ ได้แก่ โมดูล (Modules) และ ฟีเจอร์ (Features) การเข้าใจความแตกต่างระหว่างทั้งสองจะช่วยให้คุณรู้ว่ามีอะไรให้ใช้บ้าง และเลือกใช้กลไกที่เหมาะกับงาน
โมดูลกับฟีเจอร์
หัวข้อที่มีชื่อว่า “โมดูลกับฟีเจอร์”| โมดูล | ฟีเจอร์ | |
|---|---|---|
| วิธีใช้งาน | import { x } from "@SignalRGB/name" | device.addFeature("name") ใน Initialize() |
| วัตถุประสงค์ | บริการยูทิลิตี (เครือข่าย การเข้ารหัส ข้อมูลระบบ) | ความสามารถของอุปกรณ์ (แบตเตอรี่ การจำลองอินพุต) |
| เนมสเปซ | ชื่อที่โมดูล export ออกมาเอง | device.featureName.* |
| อินสแตนซ์ | หนึ่งตัวต่อปลั๊กอิน | มีได้หลายตัว |
โมดูลที่มีให้ใช้
หัวข้อที่มีชื่อว่า “โมดูลที่มีให้ใช้”นำเข้าโมดูลเหล่านี้ที่ส่วนบนสุดของไฟล์ปลั๊กอิน
| พาธการนำเข้า | วัตถุประสงค์ |
|---|---|
@SignalRGB/serial | การสื่อสารผ่านพอร์ตซีเรียล/COM |
@SignalRGB/tcp | การสื่อสารผ่านซ็อกเก็ต TCP |
@SignalRGB/udp | การสื่อสารผ่านซ็อกเก็ต UDP |
@SignalRGB/base64 | การเข้ารหัสและถอดรหัส Base64 |
@SignalRGB/performance | การโปรไฟล์ประสิทธิภาพและตัวจับเวลาเฟรม |
@SignalRGB/appInfo | ข้อมูลเวอร์ชันของแอปพลิเคชัน SignalRGB |
@SignalRGB/systeminfo | ข้อมูลฮาร์ดแวร์ของระบบ |
@SignalRGB/permissions | ตรวจสอบสถานะสิทธิ์ของผู้ใช้ |
ดู การสื่อสารขั้นสูง สำหรับตัวอย่างการใช้งาน serial, tcp และ udp
ฟีเจอร์ที่มีให้ใช้
หัวข้อที่มีชื่อว่า “ฟีเจอร์ที่มีให้ใช้”เรียก device.addFeature("name") ใน export Initialize() ของคุณ ฟีเจอร์จะสร้างอ็อบเจกต์ส่วนกลางที่มีชื่อเดียวกับฟีเจอร์
| ชื่อฟีเจอร์ | เนมสเปซ | วัตถุประสงค์ |
|---|---|---|
"keyboard" | keyboard | จำลองการกดแป้นพิมพ์หรือส่งอีเวนต์คีย์บอร์ดไปยังมาโครของ SignalRGB |
"mouse" | mouse | จำลองอินพุตเมาส์หรือส่งอีเวนต์เมาส์ไปยังมาโครของ SignalRGB |
"battery" | battery | รายงานระดับแบตเตอรี่และสถานะการชาร์จสำหรับอุปกรณ์ไร้สาย |
"dtls" | dtls | UDP ที่เข้ารหัสด้วย DTLS พร้อมการยืนยันตัวตนแบบ PSK |
ฟีเจอร์คีย์บอร์ด
หัวข้อที่มีชื่อว่า “ฟีเจอร์คีย์บอร์ด”สำหรับปลั๊กอินที่เป็นตัวแทนของอุปกรณ์คีย์บอร์ด ช่วยให้คุณจำลองการกดแป้นพิมพ์จริงเข้าสู่ระบบปฏิบัติการ หรือส่งอีเวนต์ที่สามารถเรียกใช้มาโครของ SignalRGB ได้
export function Initialize() { device.addFeature("keyboard");}keyboard.sendHid(vkCode, options)
หัวข้อที่มีชื่อว่า “keyboard.sendHid(vkCode, options)”ส่งการกดแป้นพิมพ์แบบ raw ไปยังระบบปฏิบัติการโดยตรงผ่าน keybd_event ปุ่มนั้นจะปรากฏเป็นอินพุตจริงสำหรับทุกแอปพลิเคชัน — โดยข้ามระบบมาโครไปทั้งหมด
| พารามิเตอร์ | ชนิด | คำอธิบาย | ตัวอย่าง |
|---|---|---|---|
| vkCode | Number | รหัส Virtual Key ของ Windows | 0x41 (ปุ่ม A) |
| options.released | Boolean (จำเป็น) | true สำหรับการปล่อยปุ่ม, false สำหรับการกดปุ่ม | false |
keyboard.sendHid(0x41, { released: false }); // Press Akeyboard.sendHid(0x41, { released: true }); // Release Akeyboard.sendEvent(eventData, eventType)
หัวข้อที่มีชื่อว่า “keyboard.sendEvent(eventData, eventType)”ส่งอีเวนต์คีย์บอร์ดผ่านระบบมาโครของ SignalRGB มาโครที่มีทริกเกอร์ onKey สามารถจับคู่กับอีเวนต์เหล่านี้ได้ ไม่ได้จำลองการกดแป้นพิมพ์จริง — มีเพียงมาโครของ SignalRGB เท่านั้นที่เห็นอีเวนต์นี้
ระบบมาโครจะเพิ่มข้อมูลสถานะปุ่มตัวปรับแต่งแบบเรียลไทม์ (Ctrl, Shift, Alt, Win) จากคีย์บอร์ดจริงลงในอีเวนต์โดยอัตโนมัติก่อนส่งต่อ
| พารามิเตอร์ | ชนิด | คำอธิบาย | ตัวอย่าง |
|---|---|---|---|
| eventData | Object หรือ String | ข้อมูลอีเวนต์ ให้ใส่ key (ชื่อสตริง) และ keyCode (ตัวเลข) ซึ่งเป็นตัวเลือก สำหรับการจับคู่ปุ่ม | { key: "A", keyCode: 0x41 } |
| eventType | String | ป้ายกำกับประเภทอีเวนต์ | "KeyPress" |
keyboard.sendEvent({ key: "A", keyCode: 0x41, released: false }, "KeyPress");สคริปต์มาโครจะได้รับ event.Sender (UID ของปลั๊กอิน) และ event.SenderType ("Device") จึงสามารถแยกแยะอีเวนต์ที่มาจากปลั๊กอินออกจากการกดแป้นพิมพ์จากฮาร์ดแวร์จริงได้
ฟีเจอร์เมาส์
หัวข้อที่มีชื่อว่า “ฟีเจอร์เมาส์”สำหรับปลั๊กอินที่เป็นตัวแทนของเมาส์หรืออุปกรณ์ชี้ตำแหน่ง
export function Initialize() { device.addFeature("mouse");}mouse.sendHid(buttonCode, options)
หัวข้อที่มีชื่อว่า “mouse.sendHid(buttonCode, options)”ส่งอีเวนต์เมาส์แบบ raw ไปยังระบบปฏิบัติการผ่าน SendInput การเคลื่อนที่ของเมาส์ (MOUSEEVENTF_MOVE, MOUSEEVENTF_ABSOLUTE) จะถูกบล็อกเพื่อความปลอดภัย
| พารามิเตอร์ | ชนิด | คำอธิบาย |
|---|---|---|
| buttonCode | Number | แฟล็ก MOUSEEVENTF_* ของ Windows |
| options.XButton | Number | จำเป็นสำหรับอีเวนต์ปุ่ม X — 1 (X1) หรือ 2 (X2) |
| options.WheelDelta | Number | จำเป็นสำหรับอีเวนต์ลูกกลิ้ง — ค่าบวกเลื่อนขึ้น ค่าลบเลื่อนลง |
รหัสปุ่มที่ใช้บ่อย:
| รหัส | ค่าคงที่ | คำอธิบาย |
|---|---|---|
0x0002 | MOUSEEVENTF_LEFTDOWN | กดปุ่มซ้าย |
0x0004 | MOUSEEVENTF_LEFTUP | ปล่อยปุ่มซ้าย |
0x0008 | MOUSEEVENTF_RIGHTDOWN | กดปุ่มขวา |
0x0010 | MOUSEEVENTF_RIGHTUP | ปล่อยปุ่มขวา |
0x0020 | MOUSEEVENTF_MIDDLEDOWN | กดปุ่มกลาง |
0x0040 | MOUSEEVENTF_MIDDLEUP | ปล่อยปุ่มกลาง |
0x0800 | MOUSEEVENTF_WHEEL | เลื่อนแนวตั้ง |
0x01000 | MOUSEEVENTF_HWHEEL | เลื่อนแนวนอน |
0x0080 | MOUSEEVENTF_XDOWN | กดปุ่ม X (ต้องใช้ตัวเลือก XButton) |
0x0100 | MOUSEEVENTF_XUP | ปล่อยปุ่ม X (ต้องใช้ตัวเลือก XButton) |
// Left clickmouse.sendHid(0x0002, {}); // downmouse.sendHid(0x0004, {}); // up
// Scroll up one notchmouse.sendHid(0x0800, { WheelDelta: 120 });
// X1 button pressmouse.sendHid(0x0080, { XButton: 1 });mouse.sendHid(0x0100, { XButton: 1 });mouse.sendEvent(eventData, eventType)
หัวข้อที่มีชื่อว่า “mouse.sendEvent(eventData, eventType)”ส่งอีเวนต์เมาส์แบบกำหนดเองผ่านระบบมาโครของ SignalRGB สคริปต์มาโครที่มีทริกเกอร์ onMouse สามารถจับคู่กับอีเวนต์เหล่านี้ได้ ไม่ได้จำลองอินพุตเมาส์ใด ๆ ในระดับระบบปฏิบัติการ
mouse.sendEvent({ button: "LeftClick" }, "ButtonPress");ฟีเจอร์แบตเตอรี่
หัวข้อที่มีชื่อว่า “ฟีเจอร์แบตเตอรี่”สำหรับอุปกรณ์ไร้สายที่รายงานสถานะแบตเตอรี่ หลังจากเพิ่มฟีเจอร์แล้ว ให้อัปเดตระดับและสถานะแบตเตอรี่ทุกครั้งที่อุปกรณ์รายงานค่าเหล่านี้
export function Initialize() { device.addFeature("battery");}การตั้งค่าสถานะแบตเตอรี่
หัวข้อที่มีชื่อว่า “การตั้งค่าสถานะแบตเตอรี่”| เมธอด | คำอธิบาย |
|---|---|
battery.setBatteryLevel(level) | ตั้งค่าเปอร์เซ็นต์แบตเตอรี่ (0–100) |
battery.setBatteryState(state) | ตั้งค่าสถานะการชาร์จโดยใช้ค่าคงที่ของสถานะ |
ค่าคงที่ของสถานะ (เข้าถึงผ่าน battery.<name>):
| ค่าคงที่ | คำอธิบาย |
|---|---|
battery.disabled | ปิดใช้งานการรายงานแบตเตอรี่ |
battery.unknown | ยังไม่ทราบสถานะ |
battery.draining | กำลังใช้พลังงานจากแบตเตอรี่ |
battery.charging | กำลังชาร์จผ่านสาย |
battery.fullCharging | กำลังชาร์จและเต็มแล้ว |
battery.full | ชาร์จเต็ม ไม่ได้ชาร์จอยู่ |
battery.wirelessCharging | กำลังชาร์จแบบไร้สาย |
การอ่านสถานะแบตเตอรี่
หัวข้อที่มีชื่อว่า “การอ่านสถานะแบตเตอรี่”พร็อพเพอร์ตีเหล่านี้สะท้อนค่าล่าสุดที่ตั้งไว้:
| พร็อพเพอร์ตี | ชนิด | คำอธิบาย |
|---|---|---|
battery.batteryLevel | Number | ระดับปัจจุบัน (0–100) |
battery.batteryState | Number | ค่าสถานะปัจจุบัน |
battery.stateString | String | ป้ายกำกับสถานะที่มนุษย์อ่านได้ |
ตัวอย่างแบตเตอรี่
หัวข้อที่มีชื่อว่า “ตัวอย่างแบตเตอรี่”export function Initialize() { device.addFeature("battery");}
export function Render() { // Non-blocking read — check if the device sent a battery report this frame var data = device.read([], 64, 0);
if(device.getLastReadSize() > 0 && data[0] === 0x02) { var level = data[1]; // 0–100 var charging = data[2] === 0x01;
battery.setBatteryLevel(level); battery.setBatteryState( charging ? battery.charging : battery.draining ); }}