ฟีเจอร์หนึ่งที่สำคัญมากของลินุกซ์ คือ ความสามารถในการปรับแต่งปุ่มเปลี่ยนภาษาให้เป็นปุ่มอะไรก็ได้ รวมถึงปุ่ม Caps Lock (ปุ่มที่มักสร้างความสับสนเวลาพิมพ์รหัสผ่านต่างๆ เสมอ) และส่วนตัวผมเองแล้วจะมีคอมพิวเตอร์สองเครื่อง เครื่องหนึ่งเป็นวินโดวส์ และเครื่องหนึ่งเป็นลินุกซ์เพื่อเรียนรู้หลายระบบปฎิบัติการไปพร้อมๆ กัน และข้อขัดใจที่สุดของวินโดวส์คือมันบังคับให้เปลี่ยนภาษาคีย์บอร์ดด้วยปุ่ม Alt+Shift หรือปุ่ม grave accent (~
) เท่านั้น ซึ่งทั้งสองตัวไม่ใช่ตัวเลือกที่ผมสะดวก
ทางออกที่ง่ายๆ ของการปรับให้ใช้ Caps Lock ได้อีกครั้งคือการใช้โปรแกรม Auto Hotkeys (ดู nuuneoi.com) แต่จากการใช้งานจริงพบว่ามีข้อจำกัดเช่นไม่สามารถใช้ในบางหน้าจอเช่นจอล็อกอินได้ รวมถึงมีปัญหากับบางหน้าเว็บอยู่เสมอๆ
ทางออกหนึ่งที่ผมคิดไว้ คือ หากเราสามารถสร้างคีย์บอร์ดที่ยิงสัญญาณปุ่ม Alt+Shift ได้เองทุกครั้งที่มีการเปิดไฟ Caps Lock ก็จะสามารถกำหนดปุ่มเปลี่ยนภาษาเป็น Caps Lock แทนได้ ที่จริงแล้วด้วยแนวคิดนี้เราสามารถเปลี่ยนปุ่ม Caps Lock เป็นปุ่มใดๆ แทนก็ได้
จากการค้นคว้าระยะเวลาหนึ่ง แนวคิดของเรื่องนี้ก็เป็นจริง โดยสิ่งที่ผมต้องการคือไมโครคอนโทรลเลอร์ที่ไม่มีอินพุตใดๆ แต่มีส่วนสื่อสาร USB ในตัว และพบว่าอุปกรณ์แนวนี้มีอยู่จำนวนมากในตลาด เพราะมันคือ PlayStation Jailbreak ที่ภายในเป็นชิป AT90USB162 ต่อกับพอร์ต USB เพื่อส่งคำสั่ง USB ที่เป็นบั๊กของเครื่อง PlayStation 3 ให้สามารถรันซอฟต์แวร์จากผู้ผลิตอื่นที่ไม่ใช่โซนี่ได้ ในกรณีของผม ผมสั่ง ps3ukey มาลองใช้งาน โดยที่ตัวเครื่องไม่มีเฟิร์มแวร์มาให้ (น่าจะเพื่อเลี่ยงปัญหาทางกฎหมายในหลายประเทศ)
ชิป AT90USB162 นั้นเป็นชิปที่น่าสนใจ ในตัวมันเองมี bootloader มาให้ในตัว ทำให้สามารถเขียนโปรแกรมลงไปใหม่ได้ผ่าน USB ทันที หากรีเซ็ตชิปโดยหากดึงสัญญาณขา HWB (Hardware Boot) เป็น 0 ขณะที่กำลังรีเซ็ต คอมพิวเตอร์จะมองเห็นเป็นอุปกรณ์ USB เฉพาะของทาง Atmel เองและสามารถลงไดร์เวอร์เพื่อลงเฟิร์มแวร์ใหม่ได้ทางโปรแกรม FLIP ของทาง Atmel หรือโปรแกรม dfu-programmer ที่เป็นโอเพนซอร์สในลินุกซ์หลายดิสโทร (โดยส่วนตัวผมว่าการลง dfu-programmer บนลินุกซ์ง่ายกว่ามาก)
แม้ว่าตัวชิป 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 รุ่น 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 ที่ใช้ในบทความนี้ แล้วส่งคำสั่งตามต้องการโดยที่ผู้ใช้จริงเป็นผู้ล็อกอินระบบให้
Comments
ว้าว!! น่าสนใจมากครับ
ยกนิ้วให้เลยครับ ^^
ตรง "พัฒนาต่อ" มีคำว่า อุณภูมิ-->อุณหภูมิ ครับ
ฟิด => ฟิค
Triple ญ ครับ
ตรง Code ที่ 2 มี </em> เกินมาครับ
{syntaxhighlighter "brush:plain"}if (LEDReport & HID_KEYBOARD_LED_CAPSLOCK){{/syntaxhighlighter}
เยี่ยมครับ!
อยากถามว่าในกรณีนี้ใช้ Caps lock เป็นตัวเปลี่ยนภาษา แล้วถ้าเกิดในสถานการณ์ที่เราต้องการกดปุ่ม Caps lock จริงๆ จะสามารถทำได้มั้ยครับ
ผมเดาว่า ถอดตัวนี้ออกครับ แล้ว Caplock จะกลับมาใช้ได้
ถอดแล้วได้แน่นอนครับ เพียงแต่ว่าผมยังไม่เคยเจอสถานการณ์ที่ต้องเปิดไฟ 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 เปลี่ยนภาษาได้
แบบนี้ก็รัดกุมดีนะครับ
นึกถึง 8051 ขึ้นมาทันที
ตรง </em>LEDReport แท็กเกินมารึเปล่าครับ
ประเทืองปัญญาดีมากครับ ขอบคุณครับ
แวมไพร์ปัญญาดีมากเหมือนกันครับ ขอบคุณครับ
ตึกโป๊ะ!!
ซูโม่ปัญญาดีมากเหมือนกันครับ ขอบคุณครับ
//เล่นด้วย
^
^
that's just my two cents.
เคยบอกแล้วครับ อย่าเอาอายุมาโชว์กันมาก อย่าอวดครับ
ผมมั่นใจว่าอายุผมเยอะเหมือนกัน ... แก่น่ะแหละครับ = =
บอกตรงๆ อายุ 17 ยังไม่เข้าใจมุกเลยครับ
+1 ยังไม่เก็ทมุขด้วยคน -*-
เป็นแผ่นเพลงผี mp3 ครับ
ปล.ผมพึ่ง 19 นะ แต่ยังทัน -..-
ชื่อแผ่นผีเมือก่อนล่ะครับ ระบบ 20 up นั้นล่ะ(มีเพลงด้วยนะ)
ปัญญามยุราดีมากเหมือนกันครับ ขอบคุณครับ
น่าเล่นมากครับ
สอบถามเพิ่มนิดนึง ใน Windows ต้องลง Driver หรือเปล่าครับ ถ้าไม่นี่เรื่อง brute force เข้าหน้า log-in Windows ก็มีสิทธิ์ทำได้จริงเหมือนกันนะ
แต่ผมยังสงสัยอยู่อย่างนึง ทำไมเวลาพิมพ์รหัสผิดติดกันหลาย ๆ ครั้งมันต้องใช้เวลาตรวจรหัสผ่านนานขึ้น - -" บางทีนานจนเหมือนเครื่องค้างเลย
ก็มันใช้กัน brute force ไงครับ โดยการหน่วงเวลา
คือสงสัยว่าแค่หน่วงเวลากันดื้อ ๆ เลยเหรอครับ? หรือมันมี algorithm อะไรซับซ้อนกว่านั้นมั้ย? อย่างน้อยถ้าหน่วงเวลากันดื้อ ๆ ก็น่าจะขึ้นบอกเวลาใส่รหัสผิดหลาย ๆ รอบสักหน่อย ประมาณว่าผิดบ่อยไปแล้วนะ
แต่เห็นเวลาถอดรหัสกันตรง ๆ มันก็ไม่มีปัญหาอะไร รัวได้อย่างใจหมาย - -"
หน่วงเวลานี่แหละครับวิธีป้องกันชั้นยอด จากที่จะมั่วได้นาทีละเป็นร้อยเป็นพันครั้ง ก็เหลือแค่ไม่ถึงสิบครั้ง
ด้วยความเคารพ อยากได้สักตัวแม้ตอนนี้จะไม่มี PS3
มันไม่ง่ายเลยที่จะทำ GIF ให้มีขนาดน้อยกว่า 20kB
+1
เคยคิดจะทำเป็นเครื่องช่วยตี Pangya (เกมส์ online) ตอนนี้มี hardware น่ารักๆแบบนี้ขายก็น่าสนใจ :D
:: DigiKin8 ::
+1
ผมเห็นแล้วอยากทำโปรแกรม Robot Mouse & Keyboard เลย ตัวโปรแกรมเหมือนมันจะโดนตรวจจับได้ง่าย ถ้าทำเป็นคีย์แบบนี้สงสัยจะทะลุได้หมด
สมัยเกมส์ Gunbound ผมเอา Microcontroller PIC ยัดเข้าไปใน Mouse ให้มันคลิกซ้ายทุกวินาที เพื่อให้มันเข้าเกมเองได้ แล้วเอากระดาษยัดปุ่ม space bar ไว้ให้มันยิงสุดแรงตลอด เอาไว้เป็นคู่ซ้อม ช่วยปั้มแต้ม
อ่านตอนแรกก็มีความสงสัยว่าทำไมถึงควรจะเขียนโปรแกรมลงในระดับ Hardware ด้วยเพราะสามารถทำการ Intercept ข้อมูลที่ตัว Windows ได้(คือรับ Input มาเป็น Caplock แต่เราให้มันทำอย่างอื่นแทน คล้ายๆกับ Key config ในเกม/โปรแกรมต่างๆ)เวลาเลิกการใช้งานได้ได้ง่ายกว่าเพียงแค่ทำการปิดโปรแกรมที่เขียนไว้แต่มีข้อเสียบางอย่างเช่น อาจจะมีปัญหากับบางโปรแกรมที่ทำงานซ้อนกัน และจำเป็นต้อง run โปรแกรมก่อนจึงจะใช้งานได้ (ไม่ได้ลองกับ Win 8)
พออ่านถึงย่อหน้าสุดท้ายถึงบางอ้อเลย
ผมใช้ 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 ;)
ในกรณีของผม ผมต้องการใช้ปุ่ม grave accent เพื่อพิมพ์ครับ
lewcpe.com, @wasonliw
grave accent นี่สำคัญมากสำหรับสาย linux/unix ฮะ
ผมเก็บ grave accent ไว้ใช้กับ US-International Keyboard ครับ
แล้วถ้าอยากใช้ 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 ไม่ใช่เหรอครับ
[Blog ZeroEngine] [@ZeroEngines]
grave คือ (`) ถูกแล้วครับ มันเอาไว้เขียนโปรแกรม จึงไม่ควรเอามาใช้เป็นปุ่มเปลี่ยนภาษา (แต่ user ทั่วไปคงไม่ได้ใช้ เลยเอามาใช้เปลี่ยนภาษากัน)
ผมไม่ชอบใช้ ` ด้วยสามสาเหตุครับ คือหนึ่ง บางทีมันต้องใช้คีย์นั้น (คีย์ไทยก็ใช้นะ ขี้เกียจเปลี่ยนภาษา) ข้อสอง มันใกล้ Esc มาก เผลอไปโดนประจำ โดยเฉพาะสมัยเล่นเอ็ม โดนแล้วหน้าคุยปิดเลย ข้อสุดท้าย มันไม่สากลแล้วเดี๋ยวนี้ - -" เน้นใช้ตาม default ที่เค้าให้มาแทน
ผมว่า ตามท่านว่ามาอ่ะถูกแล้ว
แต่พอดีว่า ~ กับ ` มันอยู่ปุ่มเดียวกัน เลยเรียกปนกัน
^
^
that's just my two cents.
ส่วน (~) เรียกว่า -> tilde
ผมพิมพ์ผิดครับ ;-)
ทดลองเขี่ยนให้มันกดปุ่ม Ctrl+Alt+Del แล้ว Enter
ให้ทำงานทุกครั้งที่ไฟ Num lock ติด
^
^
that's just my two cents.
ให้มันทำงานทุกครั้งที่กดปุ่ม Left Shift + Right Ctrl + Scroll lock + Num lock + F6 + Windows key
อยากเห็นท่ากดจัง (ต้องมีซัก 8 มือ ถึงจะกดได้)
คิดว่ามือเป็นตะคริวแน่ๆ ครับ
Laptop สองมือกดได้ครับ บ้าจี้ทำตามไปแล้ว (T^T)
คีย์บอร์ดปรกติกดได้ครับ แต่ท่าพิลึกน่าดูยากขนาดนี้เอาเมาส์จิ้มเอาเหอะ
คีย์บอร์ดคอมก็ทำได้ครับ.. ผมก็บ้าจี้ทำตามไปแล้วด้วยเหมือนกัน (>_<)
~~~~~~~~~
(ลบๆๆๆๆ)
~