Development

ฟีเจอร์หนึ่งที่สำคัญมากของลินุกซ์ คือ ความสามารถในการปรับแต่งปุ่มเปลี่ยนภาษาให้เป็นปุ่มอะไรก็ได้ รวมถึงปุ่ม Caps Lock (ปุ่มที่มักสร้างความสับสนเวลาพิมพ์รหัสผ่านต่างๆ เสมอ) และส่วนตัวผมเองแล้วจะมีคอมพิวเตอร์สองเครื่อง เครื่องหนึ่งเป็นวินโดวส์ และเครื่องหนึ่งเป็นลินุกซ์เพื่อเรียนรู้หลายระบบปฎิบัติการไปพร้อมๆ กัน และข้อขัดใจที่สุดของวินโดวส์คือมันบังคับให้เปลี่ยนภาษาคีย์บอร์ดด้วยปุ่ม Alt+Shift หรือปุ่ม grave accent (~) เท่านั้น ซึ่งทั้งสองตัวไม่ใช่ตัวเลือกที่ผมสะดวก

ทางออกที่ง่ายๆ ของการปรับให้ใช้ Caps Lock ได้อีกครั้งคือการใช้โปรแกรม Auto Hotkeys (ดู nuuneoi.com) แต่จากการใช้งานจริงพบว่ามีข้อจำกัดเช่นไม่สามารถใช้ในบางหน้าจอเช่นจอล็อกอินได้ รวมถึงมีปัญหากับบางหน้าเว็บอยู่เสมอๆ

ทางออกหนึ่งที่ผมคิดไว้ คือ หากเราสามารถสร้างคีย์บอร์ดที่ยิงสัญญาณปุ่ม Alt+Shift ได้เองทุกครั้งที่มีการเปิดไฟ Caps Lock ก็จะสามารถกำหนดปุ่มเปลี่ยนภาษาเป็น Caps Lock แทนได้ ที่จริงแล้วด้วยแนวคิดนี้เราสามารถเปลี่ยนปุ่ม Caps Lock เป็นปุ่มใดๆ แทนก็ได้

ฮาร์ดแวร์: Atmel AT90USB162

จากการค้นคว้าระยะเวลาหนึ่ง แนวคิดของเรื่องนี้ก็เป็นจริง โดยสิ่งที่ผมต้องการคือไมโครคอนโทรลเลอร์ที่ไม่มีอินพุตใดๆ แต่มีส่วนสื่อสาร USB ในตัว และพบว่าอุปกรณ์แนวนี้มีอยู่จำนวนมากในตลาด เพราะมันคือ PlayStation Jailbreak ที่ภายในเป็นชิป AT90USB162 ต่อกับพอร์ต USB เพื่อส่งคำสั่ง USB ที่เป็นบั๊กของเครื่อง PlayStation 3 ให้สามารถรันซอฟต์แวร์จากผู้ผลิตอื่นที่ไม่ใช่โซนี่ได้ ในกรณีของผม ผมสั่ง ps3ukey มาลองใช้งาน โดยที่ตัวเครื่องไม่มีเฟิร์มแวร์มาให้ (น่าจะเพื่อเลี่ยงปัญหาทางกฎหมายในหลายประเทศ)

ชิป AT90USB162 นั้นเป็นชิปที่น่าสนใจ ในตัวมันเองมี bootloader มาให้ในตัว ทำให้สามารถเขียนโปรแกรมลงไปใหม่ได้ผ่าน USB ทันที หากรีเซ็ตชิปโดยหากดึงสัญญาณขา HWB (Hardware Boot) เป็น 0 ขณะที่กำลังรีเซ็ต คอมพิวเตอร์จะมองเห็นเป็นอุปกรณ์ USB เฉพาะของทาง Atmel เองและสามารถลงไดร์เวอร์เพื่อลงเฟิร์มแวร์ใหม่ได้ทางโปรแกรม FLIP ของทาง Atmel หรือโปรแกรม dfu-programmer ที่เป็นโอเพนซอร์สในลินุกซ์หลายดิสโทร (โดยส่วนตัวผมว่าการลง dfu-programmer บนลินุกซ์ง่ายกว่ามาก)

ซอฟต์แวร์: LUFA

แม้ว่าตัวชิป AT90USB162 จะมีส่วนสื่อสารด้วย USB อยู่ในตัวก็ตาม แต่การเรียกฟังก์ชั่นการทำงานของฮาร์ดแวร์โดยตรงก็ยังเป็นเรื่องยาก และต้องเข้าใจพื้นฐานการทำงานของโปรโตคอล USB โดยไม่จำเป็น ในส่วนนี้มีโครงการโอเพนซอร์สที่ชื่อว่า LUFA (Lightweight USB Framework for AVRs) ที่ช่วยจัดการการทำงานในระดับล่างให้

ตัว LUFA เองนั้นมีฐานข้อมูลของชิป และบอร์ดพัฒนาต่างๆ จำนวนมาก หากเราพัฒนาแอพพลิเคชั่นบนชิปและบอร์ดที่ความสามารถใกล้เคียงกัน ก็มีความเป็นไปได้ว่าจะสามารถย้ายซอฟต์แวร์ไปรันบนแพลตฟอร์มอื่นๆ ได้โดยเปลี่ยนเพียงค่าคอนฟิคเท่านั้น

ตัว LUFA เฟรมเวิร์คสำหรับการพัฒนาอุปกรณ์ USB มาให้สองแบบ คือ ClassDriver และ LowLevel สำหรับการพัฒนาทั่วไปนั้นการใช้ ClassDriver จะเขียนโค้ดสั้นกว่าและเข้าใจง่ายกว่ามาก ในส่วนของโครงการเดโมนั้นมีการสร้างคีย์บอร์ดจากบอร์ดพัฒนามาให้เรียบร้อย ทำให้เราสามารถสร้างจอยสติ๊กที่ส่งค่าเป็นคีย์บอร์ด WASD ได้

ในลินุกซ์นั้นการคอมไพล์โครงการเหล่านี้ทำได้ง่ายๆ ด้วยการติดตั้งแพ็กเกจ gcc-avr และ avr-libc พร้อมกับแพ็กเกจ build-essential (สำหรับการ make) เสียก่อน จากนั้นก็สั่ง make ได้เลย

ดัดแปลง

โครงการเดโมของ LUFA สำหรับการเดโมคีย์บอร์ดนั้นจะใช้ชิป AT90USB1287 ที่อยู่บนบอร์ด USBKEY ของ Atmel เอง เริ่มต้นสิ่งที่ต้องแก้ คือ makefile ที่ชื่อชิป (ช่อง MCU) ต้องเปลี่ยนเป็น at90usb162 ส่วนบอร์ดนั้นเนื่องจากเราไม่ได้ใช้ความสามารถอื่น เช่น LED ก็ไม่จำเป็นต้องเปลี่ยน

ไฟล์ที่ต้องแก้ต่อมาคือ Keyboard.h ที่จะต้องคอมเมนต์หรือลบสามไฟล์ออก เพื่อให้คอมไพล์ผ่าน

{syntaxhighlighter brush:cpp} #include <LUFA/Drivers/USB/USB.h>
//#include <LUFA/Drivers/Board/Joystick.h>
//#include <LUFA/Drivers/Board/Buttons.h>
//#include <LUFA/Drivers/Board/LEDs.h>{/syntaxhighlighter}

จากนั้นกลับมาดูที่ไฟล์ Keyboard.c สิ่งแรกที่เราต้องทำคือการคอมเมนต์หรือลบฟังก์ชั่นที่เกี่ยวกับ LED, joystick และ button ออกทั้งหมดตามที่เราคอมเมนต์ไฟล์ header ทิ้งไป เช่น ฟังก์ชั่นที่เกี่ยวกับ LED

ในการทำงานจริงเราต้องการเพิ่มกระบวนการสองอย่าง ได้แก่ การตรวจสอบว่ามีการกด Caps Lock หรือไม่ผ่านทางสัญญาณไฟ Caps Lock สังเกตว่าเมื่อเรากด Caps Lock บนคีย์บอร์ดตัวหนึ่ง ไฟจะติดบนคีย์บอร์ดทุกตัว เพราะระบบปฎิบัติการจะยิงข้อความไปบอกให้คีย์บอร์ดทุกตัวเปิดไฟ เราจะอาศัยพฤติกรรมนี้ในการเปลี่ยนปุ่ม Caps Lock เป็นปุ่มเปลี่ยนภาษา ภายใต้เฟรมเวิร์ค ClassDriver นั้นกำหนดให้ฟังก์ชั่น CALLBACK_HID_Device_ProcessHIDReport เป็นฟังก์ชั่นรับคำสั่งจากเครื่องแม่ (USB Host)

{syntaxhighlighter brush:cpp}static bool isGotCapLockSignal = false;
static bool isCancelledCaplock = false;
void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo,
const uint8_t ReportID,
const uint8_t ReportType,
const void* ReportData,
const uint16_t ReportSize)
{
uint8_t LEDMask = LEDS_NO_LEDS;
uint8_t* LEDReport = (uint8_t*)ReportData;
if (*LEDReport & HID_KEYBOARD_LED_CAPSLOCK){
PORTD = 0xFF;
isGotCapLockSignal = true;
}else{
PORTD = 0x00;
}
}{/syntaxhighlighter}

เริ่มต้นจากการสร้างตัวแปรสองตัว เพื่อเก็บสถานะว่าเราได้รับคำสั่งให้เปิดไฟ Caps Lock หรือไม่ ถ้าได้รับก็จะส่งสัญญาณ Caps Lock กลับไป เพื่อล้างคำสั่งเดิมทิ้ง หลังจากล้างคำสั่งแล้วจึงส่งคำสั่งใหม่ตามที่เราต้องการ (ในกรณีนี้คือคำสั่งเปลี่ยนภาษา) สำหรับฟังก์ชั่นในการส่งสัญญาณการกดปุ่มบนคีย์บอร์ด ในเฟรมเวิร์ค ClassDriver จะใช้ชื่อฟังก์ชั่น CALLBACK_HID_Device_CreateHIDReport

{syntaxhighlighter brush:cpp}bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo,
uint8_t* const ReportID,
const uint8_t ReportType,
void* ReportData,
uint16_t* const ReportSize)
{
USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData;
static uint8_t sendcount = 0;
uint8_t UsedKeyCodes = 0;
if(isGotCapLockSignal){
KeyboardReport->KeyCode[UsedKeyCodes++] = HID_KEYBOARD_SC_CAPS_LOCK;
isGotCapLockSignal = false;
isCancelledCaplock = true;
PORTD = 0xFF;
PORTB = 0xFF;
}else if(isCancelledCaplock){
KeyboardReport->Modifier = HID_KEYBOARD_MODIFIER_LEFTSHIFT | HID_KEYBOARD_MODIFIER_LEFTALT;
if(sendcount < 50){
PORTD = 0x00;
PORTB = 0xFF;
sendcount++;
}else{
isGotCapLockSignal = false;
isCancelledCaplock = false;
sendcount = 0;
}
}else{
PORTD = 0x00;
PORTB = 0x00;
}
*ReportSize = sizeof(USB_KeyboardReport_Data_t);
return true;
}{/syntaxhighlighter}

ฟังก์ชั่นนี้จะทำหน้าที่สองอย่างได้แก่ส่งสัญญาณ Caps Lock เมื่อได้รับสัญญาณให้เปิดไฟ ซึ่งหลังจากส่งสัญญาณกลับไป ก็จะได้รับสัญญาณให้ปิดไฟตามมา จากนั้นจึงเข้าสู่ช่วงคำสั่ง Alt+Shift เพื่อเปลี่ยนภาษา จากการทดลองพบว่าจะต้องเปลี่ยนภาษานานเป็นระยะเวลาหนึ่ง หากกระบวนการเร็วเกินไป จะกลายเป็นเปลี่ยนภาษาไปมา ในกรณีนี้คือให้ส่งสัญญาณเปลี่ยนภาษาไป 50 รอบคำสั่ง

การแฟลชโปรแกรมใน Ubuntu

ใน Ubuntu รุ่น 12.10 ที่ผมใช้งาน ไม่รู้จักชิป AT90USB162 นี้แต่แรก ทำให้ต้องเขียนกฎการใช้งานใหม่ ลงในไฟล์ /etc/udev/rules.d/60-at90usb162.rules

# This file gives all users permission to update firmware for an AT90USB162
# device in DFU mode
SUBSYSTEM=="usb", SYSFS{idVendor}=="03eb", SYSFS{idProduct}=="2ffa", GROUP="users", MODE="0666"

หลังจากนั้นสั่ง service udev restart เป็นอันเรียบร้อย

เมื่อ make เฟิร์มแวร์ที่เราต้องการเสร็จแล้ว จะได้ไฟล์ออกมาจำนวนมาก แต่ไฟล์ที่ใช้งานจริงๆ คือ ไฟล์ Keyboard.nex เอาไว้สำหรับอัพโหลดขึ้นชิป เมื่อเสียบ dongle เข้าสู่บอร์ด หากไม่แน่ใจให้กดปุ่มโปรแกรมบนบอร์ดอีกครั้ง แล้วตรวจสอบสถานะด้วยคำสั่ง

sudo dfu-programmer at90usb162 get

หากมีการตอบกลับเลขรุ่น bootloader ก็แสดงว่าใช้งานได้แล้ว สามารถสั่งคำสั่งแฟลชเฟิร์มแวร์ลงไปต่อได้

sudo dfu-programmer at90usb162 erase
sudo dfu-programmer at90usb162 flash Keyboard.hex
sudo dfu-programmer at90usb162 reset

ตัว dongle ก็จะได้รับเฟิร์มแวร์ใหม่พร้อมใช้งาน

พัฒนาต่อ

แม้โครงการนี้จะพัฒนาขึ้นจากความรำคาญเล็กๆ แต่ในความเป็นจริงแล้วการเรียนรู้การพัฒนาอุปกรณ์ USB ด้วยตัวเองเปิดความเป็นไปได้จำนวนมาก เช่น การพัฒนาอุปกรณ์อินพุตอัตโนมัติรูปแบบต่างๆ ที่เราเห็นจำนวนมากได้แก่ เครื่องอ่านบาร์โค้ด และบัตรแม่เหล็กต่างๆ เราอาจจะพัฒนาเครื่องบันทึกค่าต่างๆ ในสิ่งแวดล้อมเช่นอุณหภูมิแล้วส่งค่าผ่านทาง USB สามารถบันทึกค่าลงโปรแกรม notepad ได้โดยง่าย ตลอดจนเราอาจจะสำรวจความปลอดภัยในรูปแบบต่างๆ เช่น การที่โปรแกรมบนเดสก์ทอปไม่มีการป้องกันการโจมตีแบบ brute force แฮกเกอร์อาจจะส่งรหัสผ่านมาเป็นสัญญาณคีย์บอร์ดอย่างรวดเร็วเป็นจำนวนมากๆ ได้

อุปกรณ์เช่นนี้ยังทำให้การออกแบบระบบรักษาความปลอดภัย ต้องคำนึงถึงการปิดพอร์ต USB ที่ไม่ใช้งานทั้งหมด แฮกเกอร์ที่อาจจะเป็นคนภายในด้วยกันเองอาจจะเสียบพอร์ต USB เอาไว้เพื่อตั้งเวลาให้ทำงานเมื่อถึงเวลาที่ต้องการ หรือมีสัญญาณกระตุ้นบางอย่าง เช่น ไฟ Caps Lock ที่ใช้ในบทความนี้ แล้วส่งคำสั่งตามต้องการโดยที่ผู้ใช้จริงเป็นผู้ล็อกอินระบบให้

Hiring! บริษัทที่น่าสนใจ

Carmen Software company cover
Carmen Software
Hotel Financial Solutions
Next Innovation (Thailand) Co., Ltd. company cover
Next Innovation (Thailand) Co., Ltd.
We are web design with consulting & engineering services driven the future stronger and flexibility.
KKP Dime company cover
KKP Dime
KKP Dime บริษัทในเครือเกียรตินาคินภัทร
Kiatnakin Phatra Financial Group company cover
Kiatnakin Phatra Financial Group
Financial Service
Fastwork Technologies company cover
Fastwork Technologies
Fastwork.co เว็บไซต์ที่รวบรวม ฟรีแลนซ์ มืออาชีพจากหลากหลายสายงานไว้ในที่เดียวกัน
Thoughtworks Thailand company cover
Thoughtworks Thailand
Thoughtworks เป็นบริษัทที่ปรึกษาด้านเทคโนโยลีระดับโลกที่คว้า Great Place to Work 3 ปีซ้อน
Iron Software company cover
Iron Software
Iron Software is an American company providing a suite of .NET libraries by engineer for engineers.
CLEVERSE company cover
CLEVERSE
Cleverse is a Venture Builder. Our team builds several tech companies.
Nipa Cloud company cover
Nipa Cloud
#1 OpenStack cloud provider in Thailand with our own data center and software platform.
Bangmod Enterprise company cover
Bangmod Enterprise
The leader in Cloud Server and Hosting in Thailand.
CIMB THAI Bank company cover
CIMB THAI Bank
MOVING FORWARD WITH YOU - CIMB is the leading ASEAN Bank
Bangkok Bank company cover
Bangkok Bank
Bangkok Bank is one of Southeast Asia's largest regional banks, a market leader in business banking
MuvMi (Urban Mobility Tech Co.,Ltd.) company cover
MuvMi (Urban Mobility Tech Co.,Ltd.)
Shape the future of urban mobility towards affordable, clean, and safe solutions
T.N. Digital Solution Co., Ltd. company cover
T.N. Digital Solution Co., Ltd.
TNDS has been involving in every first move of banking’s major digital transformation.
KBTG - KASIKORN Business-Technology Group company cover
KBTG - KASIKORN Business-Technology Group
KBTG - "The Technology Company for Digital Business Innovation"
Siam Commercial Bank Public Company Limited company cover
Siam Commercial Bank Public Company Limited
"Let's start a brighter career future together"
Icon Framework co.,Ltd. company cover
Icon Framework co.,Ltd.
Global Standard Platform for Real Estate แพลตฟอร์มสำหรับธุรกิจอสังหาริมทรัพย์ครบวงจร มาตรฐานระดับโลก
REFINITIV company cover
REFINITIV
The Financial and Risk business of Thomson Reuters is now Refinitiv
H LAB company cover
H LAB
Re-engineering healthcare systems through intelligent platforms and system design.
The Gang Technology Co., Ltd. company cover
The Gang Technology Co., Ltd.
We're a Digital Agency that helps our customers transform their business into digital with ease.
LTMH company cover
LTMH
LTMH มุ่งเน้นการพัฒนาผลิตภัณฑ์ที่สามารถช่วยพันธมิตรของเราให้บรรลุเป้าหมาย
Seven Peaks company cover
Seven Peaks
We Drive Digital Transformation
Wisesight (Thailand) Co., Ltd. company cover
Wisesight (Thailand) Co., Ltd.
The Best Choice For Handling Social Media · High Expertise in Social Data · Most Advanced and Secure
MOLOG Tech company cover
MOLOG Tech
We are Modern Logistic Platform, Specialize in WMS, OMS and TMS.
Data Wow Co.,Ltd company cover
Data Wow Co.,Ltd
We enable our clients to realize increased productivity by solving their most complex issues by Data
LINE Company Thailand company cover
LINE Company Thailand
LINE, the world's hottest mobile messaging platform, offers free text and voice messaging + Call
LINE MAN Wongnai company cover
LINE MAN Wongnai
Join our journey to becoming No.1 food platform in Thailand

เยี่ยมครับ!

อยากถามว่าในกรณีนี้ใช้ Caps lock เป็นตัวเปลี่ยนภาษา แล้วถ้าเกิดในสถานการณ์ที่เราต้องการกดปุ่ม Caps lock จริงๆ จะสามารถทำได้มั้ยครับ

ถอดแล้วได้แน่นอนครับ เพียงแต่ว่าผมยังไม่เคยเจอสถานการณ์ที่ต้องเปิดไฟ caplock ตอนใช้งานเลย - -"

อ้อ แต่ปุ่ม caplock ผมใช้นะ ใช้สลับโหมดคีย์บอร์ดญี่ปุ่น กดไม่ได้นี่มีงานงอก

ผมใช้ Caps lock ตอนเขียนโปรแกรมครับ โดยเฉพาะเวลาเขียนชื่อพวก Constance ต่างๅ ผมชอบตั้งเป็น Capital letter ทั้งหมด

อยากรู้ว่าที่คุณใช้ Capslock สลับโหมดคีย์บอดญี่ปุ่น สลับโหมดอะไรหรอครับ ロマンジ=>漢字? หรือว่าแค่เปลี่ยนจากภาษาอื่นไปเป็นภาษาญี่ปุ่น?

ที่ถามเพราะผมลองกดดู ผลลัพธ์เหมือนกับคีย์บอร์ดภาษาอังกฤษ อยากรู้เฉยๆ เผื่อได้เทคนิกใหม่

ผมถนัดใช้นิ้วก้อยค้าง Shift เลยอ่ะครับ - -" ยาวแค่ไหนก็กดค้างไว้ยังงั้น

Ctrl + Caplock => ひらがな、Alt+Caplock => カタカナ อ่ะครับ เห็นมัน default มาแบบนี้ก็เลยจำไว้ใช้

มีที่ไหนรวม ๆ เทคนิคคีย์บอร์ดญี่ปุ่นไหมครับ? ผมไม่รู้จะหาจากไหน นั่งแกะเอาเองจากหน้าตั้งค่าปุ่มลัดของวินโดว์

เพิ่งรู้ว่า Ctrl-Capslock ก็ใช้ได้ ขอบคุณสำหรับความรู้ครับ

คีย์บอร์ดที่ผมใช้บ่อยๆ ก็มีตามนี้ครับ

ロマンジ => ひらがな OR ひらがな => ロマンジ = Alt+`

カタカナ => ひらがな = F6

ひらがな => カタカナ = F7

半角カタカナ = F8

Hand Writing = F5 ต้องพิมพ์ตัวญี่ปุ่นก่อนตัวนึง

ได้ของใหม่เพียบเลย โดยเฉพาะ F5 ปกติผมต้องไปคลิกขวามาจาก language bar - -"

ปกติใช้แค่ ALT+`, CTRL+Cap lock, ALT+Cap lock ขอบคุณครับ

แล้วเครื่องผมเอาคีย์บอร์ดอังกฤษออกไปเลย เวลาเปลี่ยนภาษาแล้วมันเกะกะครับ ต้องกดข้ามไปข้ามมา ใช้ ロマンジ พิมพ์แทนเอาตลอดเลย

จริง ๆ ผมยังสงสัยเลยว่าทำไมเค้าต้องใส่คีย์บอร์ด ロマンジ มาให้ด้วย (-.-)a

Caplock ใช้กับภาษาอังกฤษเท่านั้นครับ คงไม่มีใครใช้ caps lock กับภาษาไทย

ถ้าเป็นเครื่องแมค เมื่อเราอยู่ในโหมดคีย์บอร์ดภาษาไทย จะใช้ capslock เปลี่ยนกลับเป็นอังกฤษได้ แต่ถ้าคีย์บอร์ดอยู่ในโหมดอังกฤษ Capslock ก็จะทำหน้าที่ตัวใหญ่ของมัน ต้องใช้ comd + space bar เปลี่ยนกลับเป็นคีย์บอร์ดไทยก่อนถึงจะใช้ caplock เปลี่ยนภาษาได้

แบบนี้ก็รัดกุมดีนะครับ

เคยบอกแล้วครับ อย่าเอาอายุมาโชว์กันมาก อย่าอวดครับ

ผมมั่นใจว่าอายุผมเยอะเหมือนกัน ... แก่น่ะแหละครับ = =

น่าเล่นมากครับ

สอบถามเพิ่มนิดนึง ใน Windows ต้องลง Driver หรือเปล่าครับ ถ้าไม่นี่เรื่อง brute force เข้าหน้า log-in Windows ก็มีสิทธิ์ทำได้จริงเหมือนกันนะ

แต่ผมยังสงสัยอยู่อย่างนึง ทำไมเวลาพิมพ์รหัสผิดติดกันหลาย ๆ ครั้งมันต้องใช้เวลาตรวจรหัสผ่านนานขึ้น - -" บางทีนานจนเหมือนเครื่องค้างเลย

คือสงสัยว่าแค่หน่วงเวลากันดื้อ ๆ เลยเหรอครับ? หรือมันมี algorithm อะไรซับซ้อนกว่านั้นมั้ย? อย่างน้อยถ้าหน่วงเวลากันดื้อ ๆ ก็น่าจะขึ้นบอกเวลาใส่รหัสผิดหลาย ๆ รอบสักหน่อย ประมาณว่าผิดบ่อยไปแล้วนะ

แต่เห็นเวลาถอดรหัสกันตรง ๆ มันก็ไม่มีปัญหาอะไร รัวได้อย่างใจหมาย - -"

หน่วงเวลานี่แหละครับวิธีป้องกันชั้นยอด จากที่จะมั่วได้นาทีละเป็นร้อยเป็นพันครั้ง ก็เหลือแค่ไม่ถึงสิบครั้ง

ผมเห็นแล้วอยากทำโปรแกรม Robot Mouse & Keyboard เลย ตัวโปรแกรมเหมือนมันจะโดนตรวจจับได้ง่าย ถ้าทำเป็นคีย์แบบนี้สงสัยจะทะลุได้หมด

สมัยเกมส์ Gunbound ผมเอา Microcontroller PIC ยัดเข้าไปใน Mouse ให้มันคลิกซ้ายทุกวินาที เพื่อให้มันเข้าเกมเองได้ แล้วเอากระดาษยัดปุ่ม space bar ไว้ให้มันยิงสุดแรงตลอด เอาไว้เป็นคู่ซ้อม ช่วยปั้มแต้ม

อ่านตอนแรกก็มีความสงสัยว่าทำไมถึงควรจะเขียนโปรแกรมลงในระดับ Hardware ด้วยเพราะสามารถทำการ Intercept ข้อมูลที่ตัว Windows ได้(คือรับ Input มาเป็น Caplock แต่เราให้มันทำอย่างอื่นแทน คล้ายๆกับ Key config ในเกม/โปรแกรมต่างๆ)เวลาเลิกการใช้งานได้ได้ง่ายกว่าเพียงแค่ทำการปิดโปรแกรมที่เขียนไว้แต่มีข้อเสียบางอย่างเช่น อาจจะมีปัญหากับบางโปรแกรมที่ทำงานซ้อนกัน และจำเป็นต้อง run โปรแกรมก่อนจึงจะใช้งานได้ (ไม่ได้ลองกับ Win 8)
พออ่านถึงย่อหน้าสุดท้ายถึงบางอ้อเลย

ZeventhSense Mon, 11/03/2013 - 11:52

ผมใช้ caps lock เปลี่ยนภาษาด้วยการแก้ไข registry ครับ ไม่ต้องลงโปรแกรม, ไม่มีปัญหาหน้าจอล็อคอิน (windows8), ยังไม่เคยเจอปัญหากับเวบไหน และสามารถใช้ปุ่ม grave accent (~) เพื่อเปลี่ยนภาษาได้ด้วย (คนอื่นมาใช้คอมเรา จะได้ไม่งง)

วิธีนี้สามารถใช้ได้กับ windows xp และ windows 8 (windows อื่นยังไม่เคยทำครับ)

1.กด win + r พิมพ์ regedit

2.ไปที่ hkey_local_machine > system > current control set > control > keyboard layout

3.click ขวาที่พื้นที่ว่างด้านขวามือ เลือก new > binary value ตั้งชื่อว่า Scancode Map

4.ใส่โค้ดตามนี้ 00 00 00 00 00 00 00 00 02 00 00 00 29 00 3a 00 00 00 00 00 (ไม่ต้องเคาะวรรค มันจะเว้นวรรคให้เอง)

5.ตั้งค่าให้ปุ่ม grave accent (~) ให้เป็นปุ่มเปลี่ยนภาษา

6.restart ;)

แล้วถ้าอยากใช้ caps lock ขึ้นมานี่ต้องกดปุ่มอะไรครับ หรือต้องไปเปลี่ยน registry ให้กลับเป็นเหมือนเดิม (ในลิกนุกซ์เท่าที่ผมเคยใช้ คือ ubuntu, debian, fedora ใช้ shift + caps lock แทน)

ผมนึกว่า (`) เรียกว่า grave accent ซะอีก
ส่วน (~) เรียกว่า tiled

พอดีเคยหาคำอ่าน

http://en.wikipedia.org/wiki/Grave_accent
http://www.giss.nasa.gov/tools/latex/ltx-401.html

ท่านใดพอจะทราบไหมครับว่าทำไมถึงเรียก (~) ว่า grave accent

อย่างในของ windows เองก็ใช้ (`) ว่า grave accent ไม่ใช่เหรอครับ

grave คือ (`) ถูกแล้วครับ มันเอาไว้เขียนโปรแกรม จึงไม่ควรเอามาใช้เป็นปุ่มเปลี่ยนภาษา (แต่ user ทั่วไปคงไม่ได้ใช้ เลยเอามาใช้เปลี่ยนภาษากัน)

ผมไม่ชอบใช้ ` ด้วยสามสาเหตุครับ คือหนึ่ง บางทีมันต้องใช้คีย์นั้น (คีย์ไทยก็ใช้นะ ขี้เกียจเปลี่ยนภาษา) ข้อสอง มันใกล้ Esc มาก เผลอไปโดนประจำ โดยเฉพาะสมัยเล่นเอ็ม โดนแล้วหน้าคุยปิดเลย ข้อสุดท้าย มันไม่สากลแล้วเดี๋ยวนี้ - -" เน้นใช้ตาม default ที่เค้าให้มาแทน