1 คะแนน โดย qetqet910 5 시간 전 | ยังไม่มีความคิดเห็น | แชร์ทาง WhatsApp

เลยสร้างขึ้นมาเพราะเหนื่อยกับการเปิด VM หลายตัวแล้วสลับหน้าต่างไปมา

ระหว่างที่กำลังปรับตัวกับงานที่บริษัท อยู่ ๆ ก็มีความคิดนี้ขึ้นมา

พอมีงานบำรุงรักษาเข้ามาสักเคส ก็ต้องเปิดรีโมตเดสก์ท็อปไปยังเซิร์ฟเวอร์ของลูกค้า (MST),
สภาพแวดล้อมสำหรับพัฒนาที่ตรงกับเวอร์ชันของไคลเอนต์ (Hyper-V), ลูกค้าที่ต้องการสภาพแวดล้อมพิเศษ (VDI/Omnissa) ฯลฯ
หน้าจอมันวุ่นวายเกินไป.. มีวิธีที่ดีกว่านี้ไหม?

เลยลองทำขึ้นมาเอง เผื่อว่าจะช่วยทีมได้บ้างไม่มากก็น้อย

  • วิธีการทำงาน

HyperDesk ฝังเซสชัน Hyper-V (VMConnect) และ RDP ไว้ในแอปด้วยวิธี Win32 Window Swallowing
ไม่ใช่พรีวิวหรือแท็บ แต่เป็นการดูดหน้าต่างเซสชันจริงเข้ามาด้วย SetParent

  1. มุมมองที่แอ็กทีฟเพียงหนึ่งเดียว + สลับได้ทันที: แสดงเซสชันที่กำลังใช้งานแบบเต็มจอเพียงหนึ่งตัว และสลับได้ทันทีสูงสุด 4 เซสชันด้วย Alt+1~4 (หรือแท็บบนเฮดเดอร์) เซสชันที่เหลือยังคงทำงานอยู่เบื้องหลัง จึงสลับแล้วไม่หลุดการเชื่อมต่อ
  2. การส่งคีย์บอร์ด: หากโฟกัสอยู่ที่เซสชันที่แอ็กทีฟ ระบบจะส่งคีย์ลัดระดับระบบอย่างปุ่ม Win หรือ Alt+Tab เข้าไปภายใน VM
  3. ป้องกัน UI ค้าง: แม้จะมีหน้าต่างยืนยันตัวตนแบบ modal ของไคลเอนต์ภายนอกเด้งขึ้นมา Main UI ก็จะไม่ค้าง โดยใช้คิวข้อความอิสระแทน AttachThreadInput เพื่อหลีกเลี่ยง deadlock
  4. การติดตามหน้าต่าง: เมื่อมีการเปลี่ยนเลย์เอาต์ เช่น การปรับขนาดหน้าต่างแอป ตำแหน่งของหน้าต่างภายนอกที่ฝังไว้จะตามไปด้วยผ่าน requestAnimationFrame + backend delta filtering

ยังมีฟีเจอร์อำนวยความสะดวกอื่น ๆ เช่น snapshot, ชื่อเล่น/โน้ตแยกตามรีโมตแอสเซ็ต, command palette, RDP, เปิด/ปิด Hyper-V

  • สแตก / สภาพแวดล้อม

Tauri v2 + Rust + React 19
รองรับเฉพาะ Windows
หน้าแลนดิ้งเพจ : https://landinghyperdesk.netlify.app/ (Y2K)

  • สิ่งที่ยังใช้ไม่ได้

สำหรับ VMware/Omnissa Horizon มีโค้ดสำหรับรันไคลเอนต์อยู่บางส่วน แต่ยังไม่ได้ทดสอบการใช้งานจริง โดยเฉพาะ Omnissa ที่ไม่ได้เป็นตัว VM เอง แต่มีลักษณะเป็นแดชบอร์ด ทำให้จับหน้าต่างได้ยาก จึงปิดการทำงานแบบฝังไว้ในตอนนี้

เพราะเป็นโปรเจกต์ทำข้างงาน จึงยังมีหลายจุดที่ขาดไป โดยเฉพาะข้อจำกัดของวิธี Window Swallowing เอง หรือแนวทางแบบนี้จะใช้งานในงานจริงได้อย่างเสถียรหรือไม่ ก็อยากฟังความเห็นมาก ๆ ถ้าใครเคยเจอปัญหาแนวนี้เหมือนกัน ฝากช่วยแนะนำด้วย ยินดีรับทุกฟีดแบ็กอย่างเต็มที่ !

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น