[教學] WinLIRC - DIY 紅外線遙控電腦(更新 2011-08-09)

本帖最後由 C_Law 於 2011-8-9 20:59 編輯

更新:

2011-08-09
4# 加入更多 AutoHotkey 的使用說明。

2011-08-01
4# 加入部份有關 AutoHotkey 的使用說明。

2011-07-24
修改 1#、2# 以配合 WinLIRC 0.9.0 的改動。

2011-07-22
這篇教學都還未寫完,WinLIRC 昨天又出新版(ver. 0.9.0 2011-07-21),雖然我還未試用過,但粗略地看過說明文件,新版已解決了兩個 Bug:
1.使用 Audio 接收器時,Plugin Setup 版面新增 Invert audio signal 選項,如果電腦錄得上下倒轉的波形,可以用這個新功能以軟件方式修正,無需用我修改過帶有硬件反相器的線路。
2.解決了 AudioDeviceName 太長的問題。
稍後會改寫教學。

WinLIRC─自製紅外線遙控電腦

這題目集電腦軟件、硬件、DIY、電子於一身,我都不知該放到那一個討論區,姑且放在 DIY 區,如果版主認為不適合,請遷移到其它討論區。

WinLIRC(freeware)源自 LIRC(Linux Infrared Remote Control),它本來是一個運行於 Linux 作業系統的紅外線遙控收發軟件,WinLIRC 就是將它的 Windows 版本。

有不少 Windows 的多媒體播放軟件都支援 WinLIRC(例如 DVB Viewer、KMPlayer、Media Player Classic),用家透過 WinLIRC 就可以用一般家庭電器的紅外線遙控器去控制這些軟件。即使並非直接支援 WinLIRC 的軟件,也可以配合其它軟件(例如 AutoHotkey)去控制。

除此之外,WinLIRC 更可以發射紅外線遙控訊號,例如配合 Windows 的工作排程,在預定時間控制有線電視解碼器轉台。不過本篇教學只會集中講解接收部份,暫時不會講發射部份。

本篇教學主要分以下四個部份:
1. 紅外線接收器
2. 設定 WinLIRC
3. 設定直接支援 WinLIRC 的軟件
4. 配合 AutoHotkey 控制非直接支援 WinLIRC 的軟件

1. 紅外線接收器
目前WinLIRC 的最新版本是 0.9.0(2011-07-21),它支援多款接收器,當中包括兩款很容易自製的接收器:Com Port 接收器、Audio 接收器,只要對電子焊接有認識就能自製。

由於近年的電腦主機板已不再附帶 Com Port,而一般 USB→Com Port 轉換器的時脈分析能力不足,無法正確讀取遙控訊號,所以本篇教學不會講解 Com Port 接收器的製作方法,如有興趣自製 Com Port 接收器及發射器,請自行參巧 LIRC 的官方網頁。
http://www.lirc.org/receivers.html
http://www.lirc.org/transmitters.html

如果電腦主機板附帶 Com Port 或是有 PCI/PCI-e 的 Com Port 卡,而且打算用 WinLIRC 的發射功能,就需要用 Com Port 接收器,因為 WinLIRC 還未支援以 Audio 方式發射紅外線遙控訊號。以下是 LIRC 官方網頁的接收/發射器:

1a. 自製 Audio 接收器
Audio 接收器是經電腦的 Mic-in、Line-in 之類的音效輸入接口將紅外線遙控訊號輸入到電腦,這些接口已是現今電腦的基本設備,就算低階的 Netbook 都起碼有一個 Mic-in,即使所有音效輸入口已被佔用,也可以加插一個 USB 外置音效卡增加輸入口,所以任何電腦都應該可以用 Audio 接收器。以下是 WinLIRC 官方網頁的 Audio 接收器:
http://winlirc.sourceforge.net/audioreciever.html

我建議在接收器和電腦之間加上可變電阻 VR1,避免有太大電壓輸入到電腦,以下是我修改過的線路圖、零件圖及底板圖:






底板圖的綠色線是底板背面(焊接面)的連線。接收器的電源是來自電腦的 USB 插座,可以將一條有 USB Type-A Male 插頭的 USB 線剪開,用萬用錶電阻量程分辨出四條線芯(雖然一條標準 USB 線內各條線芯的顏色應該是:紅=+5V、白=Data-、綠=Data+、黑=Gnd,但市面上很多 USB 線都沒依從這顏色規格,所以剪開 USB 線後即使見到這四個顏色的電線,仍然要用萬用錶檢查一次),用膠紙將 Data- 及 Data+ 的線芯分開獨立包好,然後將 +5V 和 Gnd 兩條線芯焊接到底板。

1b. 基本測試
完成焊接後不要急於將接收器接駁到電腦,因為 USB 電源線的 Gnd 和 Audio 線的 Gnd 是互相連接,萬一焊接時誤將 USB 線的 +5V 和 Gnd 掉亂了,接駁到電腦後等於直接將電腦的 +5V 和 Gnd 短路,後果可大可小,有可能對電腦造成破壞性損害,所以必需先確定焊接正確才可將接收器接駁到電腦。

先翻轉線路板(面對焊接面),將萬用錶調校到 200kΩ 量程,將黑針指向 3.5mm 插頭的 Sleeve(Gnd),紅針指向 +5V(線路板的 4A 位置),這時應量得數十 kΩ 至無限大的電阻值(視乎 IC1 的形號)。黑針保持不變,將紅針分別指向 Audio 線的Gnd(4B),以及 USB 線的 Gnd(4C),這兩個位置都應該量得 0Ω 阻值。將紅黑針對掉再重做以上三個測試,應該量得相同結果。


之後將線路板翻回正面(面對零件),將萬用錶調校到 DC20V 量程後把黑針指向 3.5mm 插頭的 Sleeve(Gnd),將 USB 線插到電腦,用紅針量度 IC1 的 Vcc 腳(建議紅針由 3A 與 4A 之間伸進去,千萬不要在 2A 和 3A 之間伸進去,萬一紅針同時誤碰這兩枝腳,等於直接將電腦的 +5V 和 Gnd 短路),這時應該量得穩定的 +5V。之後將紅針指向 IC1 的 Out(建議從 1A 左邊伸進去,不要從 1A 和 2A 之間伸進去),黑針位置不變,這時應該量得低於 +5V 的穩定電壓(實際數值視乎 IC1 輸出腳的內阻)。紅黑針位置保持不變,以紅外線遙控器對準接收器長按任何一個遙控鍵,這時應量比之前略低而且不穩定的電壓,當放開遙控鍵後又會回復之前的穩定電壓。


如果以上任何一個測試所得的結果與上述不乎,請再三檢查線路焊接。

1c. 檢查波形方向及調校音量
為保護電腦喇叭,請先關閉喇叭電源,如有使用耳機,也應先把它拔除。

假設 WinLIRC 使用電腦主機板的後置 Mic-in,先打開電腦音效驅動程式的音量控制程式,將後置 Mic-in 的播放音量設定為靜音,再將後置 Mic-in 設定為預設錄音裝置,以及將錄音音量調校到最大,如果音量控制程式有提供錄音音量增益,請把它取消及設定到 0dB(Line-in、CD-in、Aux-in 應該不會有這選項)。以下是我部電腦(使用 VIA VT1708B 音效晶片的 Asus P5KPL-CM 主機板)的設定圖例:
Win7


WinXP




將接收器的 VR1 調校到最大(順時針扭至盡頭),然後將 USB 線及 Audio 線接駁到電腦,之後就可以用一個可顯示音效波形的錄音軟件進行測試。以下示範是以 Audacity Portable(freeware) 進行測試。
http://portableapps.com/apps/music_video/audacity_portable

下載 Audacity 後把它安裝到一個新資料夾(它其實是免安裝軟件,所謂”安裝”只不過是解壓,如果將來不再需要用它,只需把整個資料夾刪除),然後執行 AudacityPortable.exe,如有需要,進入 Audacity 後可以按 Ctrl-P 更改界面語言。


以下是 Audacity 的主畫面:


將錄音來源設定為後置 Mic-in 及 Stereo,取樣率設定為 44.1kHz,然後將錄音音量調校最大,按[錄音]後用遙控器對準接收器長按任何一個遙控鍵約 10 秒,然後按[停止]。選擇[放大鏡]工具,用滑鼠拉選放大其中一組訊號串,留意波形起始部份的方向。


視乎電腦音效晶片的驅動程式或硬件線路設計,這時可能錄得先往上走或先向下走的波形,先記下波形方向以備之後在 2a 步驟中使用。注意,即使是同一部電腦,在不同的音效輸入接口都有可能錄得不同方向的波形,以我的電腦為例(使用 VIA1708B 音效晶片的 Asus P5KPL-CM 主機板),所有後置音效輸入接口都錄得先向下走的波形,但前置 Mic-in 卻錄得先向上走的波形。

假設電腦錄得先向上走的波形,刪除之前的錄音後再重新錄音,今次一邊長按任何一個遙控鍵一邊調校 VR1,盡可能調校到每一組訊號串的起始部份剛好上升到 1.0 位置(如果錄得先向下走的波形,應調校到剛好下降到 -1.0 位置)。停止錄音後留意最後一組訊號串的結尾部份,如果出現太大的 Overshoot,有可能令 WinLIRC 錯誤解讀遙控訊號,請將 VR1 調低少許後再次測試。




由於不同遙控器會採用不同的編碼方式,有可能錄得不同的音量及 Overshoot,如果打算用多個遙控器,應該為每個遙控器進行音量及 Overshoot 測試,盡可能將 VR1 調校到適合各遙控器。

最後可以打開喇叭電源,先將喇叭的音量調校到最低,然後一邊長按任何一個遙控鍵,一邊將喇叭音量慢慢調高,正常情況下應該不會發出聲音,如果聽到急速的「咇……咇……」聲,請再三檢查音效驅動程式的音量控制,將有關的輸入接口設定為播放靜音。

以下只適用於 WinLIRC 0.8.7a












PS.
請幫幫忙,如果有人使用我修改過的 Audio 接收器,請順便測試各輸入口的波形方向,並將結果貼到這裡或是向我發出短消息,以便我向 WinLIRC 開發者反映波形方向的問題,希望將來有新版本可解決這問題。測試結果請注明:Windows 版本、主機板牌子/型號、音效晶片型號、輸入接口、錄得先向上走波形時 S1 位置。

以下是我做過的測試結果:

Win XP/SP3、Win7
Asus P5KPL-CM
音效晶片:VIA VT1708B
後置 Mic-in、Line-in:2-3
前置 Mic-in:1-2

Win XP/SP3、Win7
PCI soundcard
音效晶片:C-Media CMI8738/PCI-6CH-LX
Mic-in、Line-in、CD-in、Aux-in:2-3

Win XP/SP3、Win7
外置 USB soundcard
音效晶片:Crystal CS4228A-KS
Line-in:2-3
附件: 您需要登錄才可以下載或查看附件。沒有帳號?註冊

本帖最後由 C_Law 於 2011-7-24 23:39 編輯

2. 設定 WinLIRC
先到 WinLIRC 官方網頁下載程式,它是免安裝程式,下載後只需解壓到一個新資料夾就可使用(eg. C:\WinLIRC,下同)。
http://sourceforge.net/projects/winlirc/

2a. 基本設定
執行 WinLIRC.exe,由於它從未被設定過,所以會出現下圖的錯誤訊息:


按[確定]後進入 Setup 畫面,將[Input Plugin]設定為[AudioCapture.dll],按[Plugin Setup]後將[Input]設定為 Audio 接收器所使用的輸入接口。


這名稱可能因應不同音效晶片的驅動程式、不同的 Windows 版本而有所不同。以我的電腦為例,假設我要用主機板後置 Mic-in 作為輸入接口,在 Win7 執行 WinLIRC 時可在這裡直接選擇[麥克風(VIA High Definition Audio)]。

如果在 Win XP,只有後置和前置兩個選項,要使用後置 Mic-in 的話,就要先在這裡選擇[HD Audio rear input],再用音效驅動程式的音量控制,將預設錄音裝置設定為[麥克風]。

將[Format]設定為[44.1kHz, Stereo, 8-bit],以及將[Channel]設定為 [Left channel]。如果在 1c. 錄得先往下走的波形,請選擇[Invert Audio Signal]選擇。

按[OK]返回 Setup 畫後,暫時將[Config]留空,再按[OK]後,WinLIRC 應縮小到右下方的 System Tray(灰色的圓形 Icon)。


如果使用 Com Port接收器,就要在 Setup 畫面將[Input Plugin]設定為[SerialDevice.dll],再按[Plugin setup]作出以下設定。


當 WinLIRC 縮小到 System tray 後,執行 IRGraph.exe,用遙控器對準接收器按任可遙控鍵,IRGraph 應出現類似以下的畫面,表示 WinLIRC 能接收到紅外線遙控訊號。如果 IRGraph 沒反應,先關閉 IRGraph,再三檢查 WinLIRC 的設定然後再次執行 IRGraph.exe 進行測試。


2b. 紅外線遙控器設定檔
這是純文字格式檔案,內容是遙控器上各遙控鍵的編碼資料,LIRC 官方網頁內提供多款遙控器的設定檔,我的網頁內也有幾個我常用的搖控器設定檔。
http://lirc.sourceforge.net/remotes/
http://sites.google.com/site/chineseinput/electronics/winlirc

建議先到以上網站看看,如果找到你想用的遙控器設定檔,下載並存放到 C:\WinLIRC 資料夾後就可以跳到 2f。不一定要找完全相同形號的遙控器設定檔,有時同牌子同類形產品其實是使用相同的遙控編碼,例如兩個不同形號的 Sony 電視機遙控器,有機會可以共用同一個設定檔,但 Sony 電視機和 Sony DVD 機的遙控器就不能共用設定檔。

2c. 學習紅外線遙控器訊號
如果找不到合用的遙控器設定檔,就要讓 WinLIRC 學習你想使用的遙控器訊號。WinLIRC 是以遙控器作為學習單位,學習時只能學習同一個遙控器上的遙控鍵。如果打算用多個遙控器,就要分開學習。注意,現時的影音產品遙控器,很多時都會預留幾個鍵用來控制其它電器,例如 DVD 機的遙控器上有幾個鍵用來控制電視機開關、轉換 Line-in……等工能,這幾個鍵應視作另一個遙控器的遙控鍵,在整個 2c、2d 或 2e 學習過程中都不要按這幾個鍵,如要學習這幾個鍵,就要當作另一個遙控器分開學習。

假設 WinLIRC 存放在 C:\WinLIRC 資料夾,按[開始]→[執行],輸入 cmd 後按[確定]進入命令提示字元(也可到[附屬應用程式]中找到),之後輸入以下三行指令(每行指令後要按[Enter]):
c:
cd\winlirc
irrecord –d audiocapture.dll ..\RemoteName.cfg

RemoteName 是遙控器名稱,你可以自定一個容易記的名稱,例如 Panasonic 的錄影機遙控器,可以用 pvcr。

如果使用 Com Port 接收器,請將第三行的 audiocapture.dll 改為 serialdevice.dll。

執行 IRRecord 後,按畫面指示再按兩下[Enter],然後用遙控器對準接收器快速地按不同的遙控鍵,這時畫面上會出現白點,一直要按到出現完整兩行白點(2x80點)。


如果在第一行白點中途出現錯誤,就要重新再執行 IRRecord 的一行指令。如果在第二行白點中途出現錯誤,雖然可以繼續以 Raw Code 方式進行學習,但建議先多按一次[Enter]結束 IRRecord,刪除 RemoteName.cfg 後再重新執行 IRRecord 的一行指令多試一次,如果仍然在第二行白點中途出現錯誤,才跳去 2d 以 Raw cord 方式進行學習。


成功出現兩行完整白點後,按指示輸入一個遙控鍵名。這個名將會是 WinLIRC 跟其它軟件進行溝通時所用的指令,你可以自定一個意思相關的名稱,不過,如果你有多個遙控器,而且打算每個遙控器各有不同用途,就要用不同的遙控鍵名,例如 Panasonic 錄影機的遙控器 Play 鍵可以定名為 pv-play、Sharp 錄影機的 Play 鍵定名為 sv-play。但如果打算每個遙控器都是相同用途,就可以用相同遙控鍵名,例如不論是 Panasonic 或 Sharp 的錄影機遙控器,一律將 Play 鍵定名為 play。

輸入遙控鍵名及按[Enter]後,用遙控器對準接收器長按該遙控鍵,如果 IRRecord 能成功學習這遙控鍵訊號,畫面會出現指示要求你輸入下一個要學習的遙控鍵名。如果出現 Something went wrong 字樣,表示學習錯誤。視乎不同遙控器的編碼方式,出現這情況時可嘗試繼續保持長按這個遙控鍵,也可能要先放開然後再長按,或者嘗試以不同速度一下一下的放開再短按,直至 IRRecord 成功學習這遙控鍵訊號。


當學習完最後一個遙控鍵後,依畫面指示再按一下[Enter],視乎這遙控器的編碼方式,IRRecord 可能會在這時結束。IRRecord 也可能會要求你快速地一下一下的短按其中一個已學習過的遙控鍵(中途不要轉按其它鍵),這時畫面會出現白點,當出現數十點後就會完成整個學習過程。


如果還要學習其它遙控器,可改用不同的 RemoteName 再做 2c 步驟,否則可跳到 2f。

2d. 以 Raw Code 方式學習紅外線遙控訊號
如果 2c 的方法不能成功學習遙控訊號,就要改用 Raw Code 方式學習。方法同 2c 一樣,執行 IRRecord 後先按出第一行白點,當第二行白點中途出現錯誤訊息後,依指示繼輸入遙控鍵名後按[Enter],再按遙控器上的相關遙控鍵。如此類推,依指畫面指示繼續學習其它遙控鍵,當學習完最後一個遙控鍵時再按一下[Enter]就會完成。然後可跳至 2f。

2e. 以人手方式自製 Raw Code紅外線遙控器設定檔
如果2c 和 2d 的方法都無法成功製作遙控器設定檔,就要靠人手方式自製。Raw Code 設定檔的基本格式如下:


圖中以 # 開頭的是註解,可以不要,亦可以自行打入有關這遙控器的文字說明。RemoteName 及 KeyName 分別是遙控器名稱及遙控鍵名 (同 2c 一樣,可以自定)。每個 KeyName 之下都有一堆數值,是該遙控鍵的時脈數值(μs)。而 gap 的數值是長按一個遙控鍵時每組訊號串之間的間隔時間(μs)。

用記事本以 RemoteName.cfg 為名新開一個文字檔,輸入上圖的基本資料(但不用輸入 KeyName 及之下的一堆數值,也可到我的網頁下載 Sharp 的電視機或錄影機遙控設定檔再加以修改),然後打開命令提示字元,輸入以下指令:
c:
cd\winlirc
rawcodes > rawtest.txt

然後將遙控器對準接收器長按一個你想學習的遙控鍵約十秒,然後按 Ctrl-Q,之後用記事本打開 rawtest.txt,你應該會看到類似下圖的一堆數字:


留意 rawtest.txt 的內容,除了第一個 SPACE 之外,以後每隔一定數目的 PULSE 和 SPACE 後都會出現一個數值特別大的 SPACE,這個 SPACE 的數值就是 gap(之後每個特別大的 SPACE 數值可能有少許差異,但誤差應該在 ±20% 範圍內,可多找幾個特別大的 SPACE 數值,計算出平均值作為 gap 的數值),將這數值填到 RemoteName.cfg 的 gap 之後。

然後在 RemoteName.cfg 的 begin raw_codes 及 end raw_codes 之間開新行輸入遙控鍵名(自定 KeyName),然後從 rawtest.txt 中,由第一個 PAUSE 開始,到第一個特別長的 SPACE 之上的 PAUSE,抄一堆 PAUSE、SPACE……PAUSE 數值到遙控鍵名之下,每個數值之間最少要以一個空格分開,也可加入更多空格將各數值整齊排好方便自己檢視,如果有太多數值,可以分行。由於不同遙控器可能採用不同編碼方式,所需要抄下的數值數量可能不同,但一定是以 PAUSE 開始及結尾,所以要抄下的數量必定是單數,以上圖為例,就要抄 23 個數值。

重複執行 rawcodes > rawtest.txt 加入其它遙控鍵的名稱及相關的數值。完成後就可以將 RemoteName.cfg 存檔。

有部份廠牌的遙控器編碼方式比較複雜,一個完整的訊號串其實是由兩組不同的訊號串組成,如果單純以電腦做接收,就算只有第一組訊號串的資料,WinLIRC 都應該能正確解讀訊號。但如果要從電腦發射紅外線訊號去控制其它電器,只有第一組訊號串資料發射出去,有關的電器未必會有反應(例如 Sharp 的電視機、錄影機),所以人手自製 Raw Code 設定檔時,可能要再抄多一段數值(第二組訊號串資料),即是:
第一個 SPACE 依舊不要
PAUSE、SPACE……PAUSE
第一個特別大的 SPACE
PAUSE、SPACE……PAUSE(第二個特別大的 SPACE 之前的 PAUSE)
(總數量仍然是單數,可參巧我網頁內的 Sharp 電視機或錄影機遙控器設定檔)

2f. 讀取測試
將滑鼠移到 System tray的 WinLIRC 圓形灰色 Icon 上 Right click→Toggle Window,在 Setup 畫面的 Config 中選擇一個 RemoteName.cfg 後按[OK],WinLIRC 應該會再次縮小到 System tray。

用這個遙控器設定檔所屬的遙控器對準接收器,按下一個已學習過的遙控鍵,這時 System tray 上原本灰色的 WinLIRC Icon 應變成綠色,表示 WinLIRC 接收到一個已學習過的訊號。


如要進一步測試,按[開始]→[執行],輸入 telnet localhost 8765 後按[確定](也可先到[附屬應用程式]執行[命令提示字元],然後輸入 telnet 指令),長按一個已學習過的遙控鍵,應會得出類似以下的畫面:


每組 WinLIRC指令都包括四個部份,按次序分別是:編碼、重複次數、遙控鍵名、遙控器名。當中以遙控鍵名最為重要,大部份支援 WinLIRC 的軟件都只會依照遙控鍵名執行動作。其次是重複次數,部份支援 WinLIRC 軟件會讀取這數值以判斷遙控鍵是否被長按,當長按一個遙控鍵時,這個數值會不斷增加,如果放開這遙控鍵後再按,這數值又會由零開始計數。其餘的編碼及遙控器名,多數支援 WinLIRC 的軟件都不會理會這兩部份。

例如上圖中的其中一組 WinLIRC 指令:
0000000000001017 08 m-play MyGica
代表 WinLIRC 連續收到 8 次 MyGica 遙控器的 Play 鍵訊號。

逐一嘗試長按及一下一下的短按每個已學習過的遙控鍵,如果 WinLIRC 能正確接收每個遙控鍵的訊號,就可以跳到 2g。如果長按遙控鍵時只出現一組指令,而且重複次數的數值不會增加,這情況可能是正常,因為有部份遙控器的編碼方式並不支援長按。

2g. 修改個別遙控鍵
如果在 2f 發現有個別遙控鍵不能被正確解讀,可以用相同的遙控器名(RemoteName)再次執行 2c,執行 IRRecord 時會新增一個新的遙控器設定檔 RemoteName.cfg.conf,舊的 RemoteName.cfg 則保留不變,而且無需先按兩行白點,IRRecord 會直接要求輸入遙控鍵名(KeyName),跟畫面指示輸入需要重新學習的遙控鍵名及按下該遙控鍵,成功學習後,如有需要重新學習其它鍵,可繼續輸入下一個遙控鍵名及按下該遙控鍵,否則可再按一次 Enter 結束 IRRecord。

之後用記事本分別打開 RemoteName.cfg 及 RemoteName.cfg.conf,將新學習的遙控鍵編碼從新增的 RemoteName.cfg.conf 複蓋到 RemoteName.cfg,存檔後關閉 WinLIRC 再重開,然後重做 2f 的測試。

2h. 合併多個遙控器設定檔
當所有遙控器的設定檔都通過測試後,可用記事本新增一個設定檔(eg. MultiRemote.cfg),同時再用記事本逐一打開每個遙控器設定檔,將所有內容都複製到 MultiRemote.cfg,存檔後,進入 WinLIRC 的 Setup 畫面,將 Config 選擇為 MultiRemote.cfg,以後 WinLIRC 就可以解讀各遙控器的訊號。

2i. 關於多合一萬用遙控器
現時市面上有很多多合一萬用遙控器,這些遙控器大致可分兩類:1. 只有內建編碼,用家要從說明書找出想遙控的產品的牌子和產品類形相關的號碼,將號碼輸入到遙控器後就可以使用;2. 既有內建編碼,但也可向原裝遙控器學習訊號。如果使用內建編碼,這些多合一萬用遙控器雖然可以控制相關的產品,但它發射的訊號可能跟原裝遙控器略有不同,如果 WinLIRC 只學習過原裝遙控器的訊號,未必可以解讀萬用遙控器的訊號,相反亦一樣,可能要當作兩個遙控器分開學習。

以下只適用於 WinLIRC 0.8.7a


附件: 您需要登錄才可以下載或查看附件。沒有帳號?註冊

TOP

本帖最後由 C_Law 於 2011-7-21 22:20 編輯

3. 設定直接支援 WinLIRC 的軟件
以下是 3 個我常用的軟件設定方法。

3a. KMPlayer
執行 KMPlayer 後按 F2 進入[偏好設定],打開左邊的[通用]→[熱鍵配置](不同版本可能用不同的名稱),在右下方選擇 WinLIRC 並輸入 127.0.0.1:8765。


在右邊的大方格選擇要使用遙控的功能,用滑鼠 Click 入[遠端命令]的方格,用遙控器對準接收器按下相關的遙控鍵,這時[遠端命令]的方格將會出現這遙控鍵的 KeyName;也可以直接在這方格以人手打入這 KeyName。如需繼續為其它功能設定遙控鍵,可重複這一段,否則可以按[關閉]。

3b. Media Player Classic Homecinema
執行 Media Player Classic Homecinema 後按 O 進入[Options],打開左邊的[Player]→[Keys],選擇[WinLIRC]及在旁邊的方格輸入 127.0.0.1:8765。


在右邊的大方格選擇要使用遙控的功能,用滑鼠 Click 入相關的[RemoteCmd]方格,人手輸入遙控鍵的 KeyName。如需繼續為其它功能設定遙控鍵,可重複這一段,否則可以按[套用]→[確定]。

3c. DVBViewer
執行 DVBViewer 後進入[選項],在左邊選擇[輸入外掛程式],選擇[WinLIRC] 後按[設定],在[WinLIRC 主機]輸入 localhost,在[WinLIRC 埠]輸入8765。


在左邊選擇[輸入設定],然後在右邊選擇要使用遙控的功能,按[學習]後按下相關的遙控鍵,這時在原先選擇的功能下會多出一行 WinLIRC   KeyName。如需繼續為其它功能設定遙控鍵,可重複這一段,否則可按[套用]→[確定]。
附件: 您需要登錄才可以下載或查看附件。沒有帳號?註冊

TOP

本帖最後由 C_Law 於 2011-8-10 13:23 編輯

4. 配合 AutoHotkey 控制非直接支援 WinLIRC 的軟件
AutoHotkey 是個功能強大的軟件,這裡只會粗略講解與 WinLIRC 相關的部份,如想更深入了解 AutoHotkey 的使用方法,請參巧它的 Quick Start Tutorial。
http://www.autohotkey.com/docs/Tutorial.htm

AutoHotkey 的其中一個功能是因應 WinLIRC 接收到的 KeyName 去做指定的動作,例如發出鍵盤或滑鼠按鍵、執行程式……等等。由於一般程式都已為主要功能設定鍵盤熱鍵,因此 AutoHotkey 配合 WinLIRC 一起使用,即使本身不支援 WinLIRC 的軟件也可以被遙控。

4a. 下載及初步設定 AutoHotkey
先到以下網址下載 AutoHotkey 的主程式。
http://www.autohotkey.com/download/

我只試過免安裝的 Zip 版本,下載後只需解壓到一個新資料夾就可使用。
http://www.autohotkey.com/download/AutoHotkey.zip

再到以下網址下載 AutoHotkey 的 WinLIRC script,以滑鼠 Right click [Download This Script]→另存新檔,以 AutoHotkey.ahk 為名存檔到[我的文件]資料夾裡
http://www.autohotkey.com/docs/scripts/WinLIRC.htm

用記事本打開 AutoHotkey.ahk,按 Ctrl-F 搜尋 Specify the path to WinLIRC,如圖輸入 WinLIRC.exe 的完整路徑、IP Address 及 Port no.(預設是 127.0.0.1 及 8765),然後存檔。


以後執行 AutoHotkey.exe 就會自動執行 WinLIRC。

4b. 編寫 AutoHotkey 指令
執行 AutoHotkey.exe 後,右下角 System tray 會出現綠底白色 H 字的 AutoHotkey icon。


用滑鼠在這 Icon 上 Right click→Edit This Script 會用記事本打開 AutoHotkey.ahk,在記事本按 Ctrl-F 搜尋 ASSIGN ACTIONS,由這裡開始,到 END OF CONFIGURATION SECTION 之間是供用家自行編寫程式碼的位置。這裡原本提供了 5 個例子,可先把這些例子刪除。


以下 3 行程式碼是一組發送按鍵的基本指令:
KeyName:
send Keys
Return

第一行的 KeyName 是 WinLIRC 接收到的遙控鍵名。當 WinLIRC 收到這個遙控鍵的紅外線訊號,AutoHotkey 就會執行之下的指令。KeyName 後面要加上冒號「:」。

第二行的 send 是 AutoHotkey 最常用的指令,它的用途是要 AutoHotkey 向 Windows 發出後面的 Keys 字串。大小階英文、數字(NumPad 除外)和部份標點符號都可以直接用作 Keys。組合鍵、功能鍵、NumPad 鍵及部份標點符號就要使用代碼,有關的代碼可在以下網址找到:
http://www.autohotkey.com/docs/commands/Send.htm

至於第三行,每組 AutoHotkey 程式碼都以 Return 結尾。

另外,編寫程式碼時,每行都可以用分號「;」加入文字說明,在「;」之後的任何文字都會被 AutoHotkey 忽略。

以一般影音播放軟件為例,有很多都可以用 Spacebar 切換播放/暫停,假設想用 Sharp 錄影機的遙控器,而且 WinLIRC 使用我網頁內的 Sharp 錄影機設定檔(下同),如果想用遙控器的 Play 鍵控制影音軟件播放/暫停,可以在 AutoHotkey.ahk 加入以下三行程式碼:
SV-Play:        ; Sharp 錄影機遙控器 Play 鍵的 KeyName,後面要加上冒號「:」
send {space}    ; {space}是 Spacebar 的代碼
retrun

又例如用 VLC Media Player 播放多聲道電影檔時可以用 b 鍵循序轉換聲道,如果想用遙控器的 Audio 鍵轉換聲道,可以寫成:
SV-Audio:       ; Audio 鍵的 KeyName
send b        ; 一般英數字符可直接用作 Keys
return

如果用 PotPlayer,它預設以 Alt-A 轉換聲道,可以把剛才的 send b 改寫為 send !a。! 是 Alt 的代碼,!a 就是 Alt-A。

加入程式碼後存檔,然後以滑鼠在 AutoHotkey icon 上 Right click→Reload This Script,新增的功能便會生效。

除此之外,很多軟件都容許用家自行修改鍵盤熱鍵,如果你想用一個遙控器控制多個軟件,可先進入每個軟件的熱鍵設定畫面,將全部軟件都改用同一組熱鍵。

例如 PotPlayer 按 F5:


又例如在 VLC Player 按 Ctrl-P:


注意,設定 AutoHotkey 時最好避免使用其它直接支援 WinLIRC 軟件所用過的遙控鍵,否則可能會出問題。假設 KMPlayer 本身已設定用 Sharp 遙控器的 Play 鍵(SV-Play) 切換播放/暫停,如果 AutoHotkey 又設定將 SV-Play 轉發為 Space 鍵,當按下這遙控鍵時,KMP 一方面收到 Play 鍵訊號,另一方面又從 AutoHotkey 收到 Space 鍵,結果會連續兩次切換播放/暫停。

4c. 切換 Active window
由於 AutoHotkey 的 send 指令是向系統發出模擬按鍵,如果按下遙控器時,心目中想控制的軟件並非 Active window,不單控制不到想要控制的軟件,而且會影響到當時的 Active window。以 4b. 中加入的 Play 鍵程式碼為例,如果當時的 Active window 並非影音軟件,而是記事本,按下 Play 鍵就會向記事本打出一個 Space。因此使用遙控時必需先將心目中要控制的軟件切換為 Active window,而切換 Active window 的其中一個方法是按 Alt-Tab。

你可能會想到 Alt-Tab 的代碼是 !{tab},但當你嘗試加入這程式碼後會發現當按下遙控鍵時只能切換到下一個程式,切換視窗只會閃一下就消失,再按遙控鍵時又會回到之前的程式,繼續按遙控鍵都只會在這兩個程式之間來回切換,根本切換不到其餘的程式。原因是 !{tab} 只會發出一次 Alt-Tab,之後 Alt 和 Tab 鍵都會被放開,但切換程式時是必需保持按下 Alt 鍵,一旦放開 Alt 鍵,切換程式視窗就會消失,就算再按 Alt-Tab 都不能再進一步切換到第三個程式。

要做到保持 Alt 鍵按下的效果可用 {alt down}代碼。不過使用 Alt-Tab 時如果將 Alt 鍵一直按下不放,切換程式的視窗就會一直出現於螢幕中央,因此還需要一個放開 Alt 鍵的代碼 {alt up}。

以下是為切換 Active window 寫成的兩組程式碼:
SV-Menu:        ; Menu 鍵的 KeyName
send {alt down}{tab}    ; 按一下 Alt-Tab,並且保持 Alt 鍵按下不放
return

SV-Clear:       ; Clear 鍵的 KeyName
send {alt up}   ; 放開 Alt 鍵
return

以上兩組指令需用到兩個遙控鍵,按 Menu 鍵會帶出切換程式視窗並選擇下一個程式,之後每按一下這鍵會順序選擇再下一個程式。當按下 Clear 鍵時,最後被選擇的程式就會成為 Active window。

注意,有部份軟件在最小化時會縮小到 System tray,不會在 Taskbar 出現,這類軟件是不能以 Alt-Tab 的方法切換為 Active window。

4d. 其它 send 指令的常用代碼
{up}
{down}
{left}
{right}
上、下、左、右箭嘴鍵。

{enter}
Enter 鍵,執行目前選擇的選項。

{space}
Spacebar 鍵,執行目前選擇的選項,又或是切換 Checkbox 的狀態。

{esc}
Esc 鍵,退出目前的選單,或是等於用滑鼠按[取消]按鈕。

^o
Ctrl-O,通常用作開啟舊檔。

!{space}
Alt-Space,等同用滑鼠按 Active window 左上角的 Icon,配合方向箭嘴及 Enter 鍵使用,可以將 Active window 切換到最大化、最小化、關閉程式……等等。

{tab}
Tab 鍵,順序跳到下一個控制項。

{Volume_Up}
{Volume_Down}
{Volume_Mute}
有多媒體控制鍵的鍵盤上的音量增加、減少及靜音狀態切換鍵,用來控制系統的主音量。就算使用普通鍵盤,AutoHotkey 也可模擬發出這三個鍵。增加或減少音量時,如果覺得增減幅度太小,可以在「}」之前加上一個空格及數字,例如:{Volume_Up 3},等於一次過按三下音量增加鍵。

{LButton}
{MButton}
{RButton}
滑鼠的左、中、右鍵。除了鍵盤按鍵外,AutoHotkey 的 send 指令也可以模擬發出滑鼠按鍵,當中以滑鼠右鍵尤其有用,對於很多多媒體播放軟件,幾乎所有功能都可以在 Right click menu 中找到,利用滑鼠右鍵,再配合箭嘴鍵及 Enter 鍵,就能執行 Right click menu 內各個選項。

4e. 執行程式
無論是否直接支援 WinLIRC 的軟件,就算已設定好 WinLIRC 及 AutoHotkey,但如果該軟件根本未被執行,也是無法被遙控。不過,AutoHotkey 除了可以發出鍵盤按鍵之外,也可以執行程式,以下是執行程式的基本編碼:
KeyName:
run, Target
return

第一和第三行跟 4b. 一樣。至於第二行的 run 是要 AutoHotkey 執行程式,而 Tartget 就是要執行的軟件主程式檔名。如果是經正式 Installer安裝的軟件,通常可以只用主程式的檔名(甚至連幅檔名.exe 都可省去),例如想用遙控器的 Power 鍵執行 KMPlayer,可以寫成:
SV-Power:       ; Sharp 遙控器 Power 鍵 KeyName
run, kmplayer   ; 執行 KMPlayer,run 之後要有逗號「,」
return

但非正式安裝的軟件(例如 Portable 軟件)就要連同完整路徑及幅檔名,第二行要改寫為:
run, C:\Program Files\The KMPlayer\KMPlayer.exe

有部份軟件本身規定同時間只可以執行一個該軟件的主程式(例如 DVB Viewer),又或者該軟件有提供這個選項(例如 KMPlayer),如果這軟件已經開啟但並非 Active window,只要再執行它的主程式就可以立刻把它切換成 Active window,不一定要用 4c. 的 Alt-Tab 方法。不過,KMPlayer 亦可以設定成同時開執行主程式,設定成這樣的話,每按一次 Power 鍵就新開一個 KMPlayer 視窗,而不是將原來的 KMPlayer 切換成 Active window。
附件: 您需要登錄才可以下載或查看附件。沒有帳號?註冊

TOP

估唔到而家仲有人玩WinLIRC...

TOP

估唔到而家仲有人玩WinLIRC...
skybread 發表於 2011/7/20 21:19


之前 WinLIRC 有一段長時間沒人接手開發,舊的 WinLIRC 只能用 Com Port,但近年的電腦已沒有 Com Port,所以漸漸沒人用 WinLIRC。不過去年有人接手寫新版 WinLIRC,現時的新版已可以用 Audio I/P,新電腦都可以用。

TOP

用WinLIRC感覺比mouse爽嗎?

TOP

回復 1# C_Law

很久沒見過這麼詳細的教學post

TOP

用WinLIRC感覺比mouse爽嗎?
season119 發表於 2011/7/20 22:12


在我日常應用上,起碼有兩種情況是用 WinLIRC 比用 Mouse 優勝。
1.遠距離開 Full Screen 看電影的話,如果想暫時 Minimize 個 Player(例如想看看其它在背景運行程式的進度),離遠用 Mouse click 右上角的的三個格仔,很容易 Click 錯,用 WinLIRC 就無此問題。

2.例如部電腦行 Dual Mon,我在一個 Mon 開個 Player 播片,另外有人用另一個 Mon 開 Word 打字,只要個 Player 本身支援 WinLIRC,就算 Active window 是 Word,我仍然可以用 WinLIRC 控制個 Player,不會對正在用 Word 打字的人構成影響。如果用 Mouse 控制個 Player,起碼要先將個 Player 變 Active window,必定影響到正在用 Word 的人。

TOP

睇完你禁詳盡答覆,感覺WinLIRC用途爽到痹,因為我常用電腦做Player睇劇、電影等等......,我會準備試做,但個外觀有冇計仔做到pro D,可以送禮

TOP