基於微軟DEVCON的[一鍵禁用前面板插孔檢測]程序

一、問題概述

許多帶有還原卡的計算機(比如學校機房的電腦),沒有音響設備,需要佩戴耳機才能聽到聲音。但是由於初始配置問題,有些機房的電腦插入耳機仍然聽不到聲音。

電腦右下角任務欄音量調節圖標狀態如下圖1-1所示

音量控制圖標狀態

圖1-1 音量控制圖標狀態

此時使用鼠標點擊音量調節圖標,沒有反應。打開控制面板調節系統音量,圖標紅色標誌消失,但點擊圖標仍然無反應,系統也仍然沒有聲音。如圖1-2所示

音量控制圖標狀態2

圖1-2 調節音量後的控制圖標狀態

根源在哪裏呢?

原來,這是由於前面耳機插孔與機箱後面的插孔規格不同造成的。詳細解釋如圖1-3:

(圖1-3內容來源:百度知道,作者IKYO,原始地址:https://zhidao.baidu.com/question/201156231.html)

百度知道原因截圖

圖1-3 根本原因

更完備的解釋請移步【爲什麼要 禁用前面板插孔檢測,機箱前面的耳機才能用?

如何解決呢?

我們打開控制面板-硬件和聲音-Realtek高清音頻管理器,點擊右側黃色文件夾圖標。如圖1-3所示。

控制面板音頻管理器

圖1-3 控制面板音頻管理器

在彈出的窗口中【勾選】【禁用前面板插孔檢測】,然後點擊彈出窗口上的確定按鈕,再點擊音頻管理器的確定按鈕。

此時耳機聲音恢復正常,但是任務欄音量圖標仍然無法調節。

我們再次在控制面板-硬件和聲音-調節系統音量中拖動按鈕調節音量,拖動之後,任務欄右下角的音量圖標便有響應了,此時可以正常使用它調節音量。整個設置過程完畢。

問題到這裏就結束了嗎?貌似是的。

但是!但是!但是!機器上裝有還原卡,每次開機就會回到初始狀態,難道我每次都要這樣手動重新設置嗎?

對於我等懶人,當然無法忍受這種折磨。累啊!

怎麼辦?當然是寫個程序來把勞苦大衆從繁瑣重複的勞動中解放出來了!

下面我來給大家一個一鍵式的解決方案,這也是本篇博文的重點。

沒錯,前面都是熱身,真正的戰鬥纔剛剛開始[手動滑稽]。

二、工具準備和必要數據獲取

懶人移步此鏈接直接下載本人編寫完畢的成品使用即可:【一鍵禁用前面板插孔檢測_百度網盤下載】 密碼: a9ea

注意】不同電腦的聲卡ID不同,所以如您的電腦沒有安裝還原卡,請勿使用此成品,否則後果自負。

勤快人繼續往下讀,自己動手,豐衣足食。

工具:微軟DEVCON、文本編輯器、問題電腦、雙手

等等,什麼是DEVCON?

上百度百科:

"DevCon實用工具是一種命令行實用工具。

使用 DevCon,您可以啓用、禁用、重新啓動、更新、刪除和查詢單個設備或一組設備。DevCon 提供與開發人員有關但無法在設備管理器中看到的信息。
您可以將 DevCon 用於 Windows 2000、Windows XP和Windows vista。不能將 Devcon 用於 Microsoft Windows 95、Windows 98、或 Windows Millennium Edition。"
(原始鏈接:https://baike.baidu.com/item/devcon/6335492?fr=aladdin)

這個資源我直接放在我的網盤了,分享鏈接:【微軟DEVCON_百度網盤下載

下載下來之後,解壓,可以看到devcon.exe文件。我們雙擊打開它,只是一閃而過(別急,它不是這麼用的)。通過百科的介紹我們知道,可以使用它通過命令行實現類似設備管理器的功能。

然而這並沒有什麼卵用。那我們要它幹什麼呢?彆着急,接着往下看。

我們接下來要做的,是寫一個批處理程序,並調用0DEVCON操作設備,實現一鍵禁用前面板插孔檢測,使前面板耳機聲音恢復正常。

2.1 原理概述

先說一下原理(靈感來源_卡飯論壇_3樓):

我們前面已經知道,設置勾選前面板插孔檢測後耳機音頻可以恢復正常。我們還知道,這些設置實際上是保存在註冊表中的,我們設置勾選與否,其實是改變了註冊表中相應註冊表項的值

所以,我們只需要在註冊表中找到此設置對應的註冊表項,然後記錄下勾選狀態的值,然後寫一個批處理文件,使用批處理文件而不是手動操作來修改它就可以了。我們這裏使用一個更穩妥的辦法,直接將該項註冊表項導出保存,放在與bat文件相同的文件夾下,再寫一個批處理導入此註冊表項。

但是運行以後你會發現,前面板插孔檢測仍然沒有禁用,耳機仍然沒有聲音

這是爲什麼呢?因爲硬件設備的設置改動後,需要重啓硬件設備才能應用。

怎麼辦?總不能每次都打開設備管理器手動重啓聲卡驅動吧,這好像還不如在控制面板打鉤鉤方便吧!

別急別急,還記得剛纔的DEVCON嗎,它是幹什麼的?可以代替設備管理器的嘛!

於是我們有了以下解決方案:

①導出正常狀態下的註冊表項,與devcon.exe和我們的批處理文件放在同一文件夾中;

②編寫批處理將devcon.exe複製到C:/Windows/System32文件夾下;

③編寫批處理將導出的註冊表項導入到註冊表中;

④編寫批處理打開devcon,使用devcon的命令重啓聲卡。

⑤大功告成,以後只需運行批處理文件,即可實現一鍵禁用前面板插孔檢測。

來看看我們還需要哪些數據:

①正常狀態(勾選禁用前面板插孔檢測)的註冊表相應項的導出文件;

②聲卡設備ID號(devcon對聲卡進行操作需要聲卡ID號作爲參數,詳見下一節devcon使用說明)。

2.2 devcon使用說明

使用devcon的命令重啓聲卡。什麼命令呢?再來看百科關於它的介紹【devcon】。恩,找到了。以下是devcon的常用操作命令來源 百度百科_devcon詞條

devcon.exe [-r] [-m:\\<machine>] <command> [<arg>...]
-r 如果指定它,在命令完成後若需要則重新啓動計算機。
<machine> 是目標計算機的名稱。
<command> 是將要執行的命令(如下所示)。
<arg>... 是命令需要的一個或多個參數。
要獲取關於某一特定命令的幫助,請鍵入:devcon.exe help <command>
classfilter  允許修改類別篩選程序。
classes  列出所有設備安裝類別。
disable  禁用與指定的硬件或實例 ID 匹配的設備。
driverfiles  列出針對設備安裝的驅動程序文件。
drivernodes  列出設備的所有驅動程序節點。
enable 啓用與指定的硬件或 實例 ID 匹配的設備。
find  查找與指定的硬件或 實例 ID 匹配的設備。
findall  查找設備,包括那些未顯示的設備。
help  顯示此信息。
hwids  列出設備的硬件 ID。
install  手動安裝設備。
listclass  列出某一安裝類別的所有設備。
reboot  重新啓動本地計算機。
remove 刪除與特定的硬件或 實例 ID 匹配的設備。
rescan  掃描以發現新的硬件。
resources 列出設備的硬件資源。
restart  重新啓動與特定的硬件或 實例 ID 匹配的設備。
stack  列出預期的設備驅動程序堆棧。
status  列出設備的運行狀態。
update 手動更新設備。
UpdateNI 手動更新設備,無用戶提示
SetHwID  添加、刪除和更改根枚舉設備的硬件 ID 的順序。

好的,我們需要哪個呢?重啓設備,重啓設備,找到了——restart

好,還需要什麼,restart命令需要知道設備ID,設備ID?怎麼找?別急,看,也有一個命令可以把設備ID列出來

哪一個?哪一個?看到了——在上面——hwids。(還有一種手查看設備ID的方法:WIN7下如何查看硬件ID)。

【特別提示】每臺電腦的聲卡ID都不同,所以一定找到自己的聲卡ID才能實現DEVCON對聲卡的管理操作!!!

好的,我們需要的命令都找到了。再看使用命令的格式:

devcon.exe [-r] [-m:\\<machine>] <command> [<arg>...]

恩,現在我們是不是可以打開cmd查找聲卡的ID了呢?

當然不行,如上一節所言,我們需要先把devcon.exe複製到系統目錄下的System32文件夾下,才能在cmd中調用devcon。(還是再說一下System32的位置吧:C:\Windows\System32)

好。現在我們可以查看設備ID了。

WIN+R打開運行,輸入cmd,回車(不懂怎麼打開“運行”和“cmd”的請放棄本教程,以免變成電腦殺手);

輸入

devcon hwids *

按回車,兩秒左右,所有設備ID都會被列出來。(命令中“*”表示“所有”,詳情可輸入:devcon hwids help瞭解)。

我們在設備ID列表中找到聲卡,結果如圖2-1所示,箭頭所指的地方就是聲卡ID關於硬件ID組成的詳細解釋

聲卡ID查詢結果

圖2-1 聲卡ID查詢結果

好。現在我們知道了聲卡ID,就可以使用devcon重啓聲卡了。

繼續在cmd中輸入 

devcon restart HDAUDIO\FUNC_01

【注意】restart後面要替換成你自己的聲卡ID!!!

按回車,聲卡設備便重啓了。

好了,我們已經學會了如何使用devcon重啓聲卡。一會兒我們要做的,就是把這一系列人工操作使用批處理自動實現(當然,聲卡ID仍然需要自己查詢,有興趣話,你也可以把查詢聲卡ID這一步寫進批處理,這樣我們的解決方案就可以通用了)。

2.3 導出正常狀態的註冊表項

我們已經獲取到了聲卡ID,現在我們來獲取另一個數據,正常狀態下的註冊表項導出文件。

註冊表的導出相信大家都很熟悉了,不熟悉也沒關係,下面我會一步步截圖演示(熟悉此操作的可以直接略過相關部分)。

先告訴大家此註冊表項在註冊表中的位置:[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96C-E325-11CE-BFC1-08002BE10318}\0008\Settings](參考來源:卡飯論壇_3樓

在這個目錄下有000~00xx的文件夾(xx爲兩位數字,具體數值由具體電腦而定),如圖2-2所示:

註冊表1

圖2-2 禁用前面板插孔檢測設置所在的註冊表位置

這裏面有一個便是此註冊表項的所在之處,怎麼找呢,依次點擊0000~00xx,注意右側鍵值,如圖2-3所示,當出現紅框所標示的註冊表項時,標示此註冊表目錄爲聲卡目錄。

禁用前面板插孔檢測所在的註冊表位置2

圖2-3 右側註冊表鍵值

展開此註冊表目錄(我的是0000),可以看到有一個Settings子目錄,單擊Settings(不是展開),右側的    JackCtrl項即爲禁用前面板插孔檢測設置的註冊表項。如圖2-4所示(此時未勾選“禁用前面板插孔檢測”,注意觀察鍵的值):

註冊表聲卡鍵值_禁用狀態

下面我們在控制面板中改變設置,勾選“禁用前面板插孔檢測”,然後點擊註冊表編輯器菜單欄的【查看】-【刷新】,發現剛纔的註冊表項的值已經隨之發生改變。如圖2-4所示:

註冊表項值_禁用狀態

圖2-4 禁用前面板插孔檢測後的註冊表變化

這樣,我們確定了“禁用前面板插孔檢測”這一設置在註冊表中的具體位置:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96C-E325-11CE-BFC1-08002BE10318}\00xx\Settings]目錄下的JackCtrl其中00xx的xx爲兩位數字,不同設備xx的具體數值不同)。

好,我們只需要在控制面板中設置勾選“禁用前面板插孔檢測”後,打開註冊表找到上面的註冊表項,然後把它導出即可。

怎麼導出呢?

在左側Settings目錄上單擊鼠標右鍵-導出,然後在彈出的保存窗口中將文件命名爲sound.reg(注意.reg爲拓展名),保存在桌面備用。

導出註冊表

圖2-5 導出註冊表

將此目錄(我這裏是0000)導出並命名爲sound.reg注意.reg爲拓展名),備用。

三、基於微軟DEVCON [一鍵禁用前面板插孔檢測]程序

前面我們已經描述了問題所在、瞭解瞭解決方案及其大概原理,並學會了DEVCON的配置使用,獲取了聲卡ID,導出了“禁用前面板插孔檢測”的註冊表。可以說前期準備工作已經完成,下面只需要寫一個批處理,使用我們準備好的工具和數據,實現我們的解決方案就可以了。

不多說,步驟如下。

①新建一個文件夾,命名爲setSound名字無所謂

②將剛纔解壓出的devcon.exe複製到setSound文件夾中;

③將剛纔導出的註冊表sound.reg複製到setSound文件夾中;

④在setSound文件中新建文本文檔,命名爲reStart(必須是此名稱,否則請修改同時修改代碼),拓展名爲.bat;

⑤在setSound文件中新建文本文檔,命名爲setSound,拓展名爲.bat;

⑥在reStart.bat中粘貼以下代碼,並保存:

@echo off
taskkill /f /im explorer.exe
start "" explorer.exe
exit

代碼解釋:先殺死Windows資源管理器,然後重新啓動Windows資源管理器。此批處理將在setSound.bat中被調用,用於重啓聲卡後重啓資源管理器以更新任務欄音量圖標狀態,使之可用。

⑥在setSound.bat中粘貼以下代碼,並保存:

%1 start "" mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c%~s0 ::","","runas",1)(window.close)&&exit

copy /y devcon.exe c:\windows\system32
devcon restart HDAUDIO\FUNC_01
regedit /s sound.reg
devcon restart HDAUDIO\FUNC_01
call reStart

【注意】把第3行的 HDAUDIO\FUNC_01 (聲卡ID)替換爲你自己的聲卡ID!!!

代碼解釋:打開cmd,複製本目錄(setSound.bat所在目錄)下的devcon.exe到C:\windos\system32;調用devcon的restart命令,參數爲你的聲卡ID(我的是HDAUDIO\FUNC_01),重啓聲卡;將本目錄下的註冊表文件sound.reg導入到註冊表中;再次重啓聲卡(第一個重啓是爲了確保devcon可用,可用刪去,第二次重啓不能刪去);最後調用本目錄下的reStart.bat重啓Windos資源管理器(reStart中的代碼也可以合併放在setSound.bat的最後,但不建議這樣做)。

⑦在控制面板中取消“禁用前面板插孔檢測”的勾選(此時前面板耳機無聲),雙擊運行setSound.bat,查看前面板音頻是否輸出正常。打開控制面板,查看“禁用前面板插孔檢測”是否已被勾選。如果前面板音頻恢復正常且控制面板也已經被勾選,則說明程序運行正常。大功告成!別忘了把寫好的程序備份到C盤以外的文件夾,最好放在U盤裏,防止丟失。以後每次開機設置被還原後,運行一下setSound.bat就可以了。

【完】

2018年3月11日 中午 12:00

------------------------------------------------------------------------------------------

如有任何疑問或建議,加QQ1394042988,或者發郵件到我的QQ郵箱:[email protected]。當然,在此博文下留言也是可以的!天天開心,再見!




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章