ฉันจะเข้าถึงระดับเสียงจากบรรทัดคำสั่งบน Windows 7 ได้อย่างไร


17

สิ่งที่ฉันต้องการ

ฉันกำลังมองหาเครื่องมือหรือสคริปต์ที่อนุญาตให้ฉันเข้าถึงระดับเสียง Windows จากบรรทัดคำสั่ง เป็นการดีที่มันจะทำให้ฉันได้รับและตั้งค่าระดับเสียงทั้งหมดรวมถึงระดับแอพพลิเคชั่น ฉันไม่คิดว่ามันจะใช้PowerShell, WMI, JavaScript, .Netวูหรือผีเสื้อ ทางออกใด ๆ ที่จะให้ตัวเลขที่ฉันสามารถดำเนินการต่อเพื่อให้พอดีกับช่วงจาก 0% ถึง 100% จะทำ

อีกวิธีหนึ่งส่วนพรอมต์คือกล่องดำที่ฉันต้องการ:

C:\> getvol master
50

หรือแม้กระทั่ง

C:\> wmic <alias> where "device='master' and name='volume'" get name,value
Name    Value
Volume  0xDEADBEEF

ฉันไม่รังเกียจถ้าฉันต้องใช้เวลาในการห่อมันหรือเขียนอะไรบางอย่างด้วยตัวเองถ้าเครื่องมือที่ใช้ได้ ในกรณีหลังนี้ฉันต้องการตัวชี้ / ข้อพิสูจน์แนวคิดสำหรับแกนกลาง แต่ฉันสามารถจัดการ cruft ได้ด้วยตัวเอง นอกจากนี้ฉันต้องการหลีกเลี่ยงการติดตั้งกรอบการพัฒนาใหม่เพียงเพื่อจุดประสงค์นี้ (โปรดทราบว่าคำตอบของทั้งmusic2myearและiglvzxได้รับก่อนที่ฉันจะนำข้อกำหนดเหล่านี้มาใช้)

ในฐานะ "แพลตฟอร์ม" ฉันมี:

  • ทุกอย่างที่มาพร้อมกับ Windows 7 Home Premium
  • อะไรก็ตามที่มาพร้อมกับ Cygwin
  • Perl
  • หลาม
  • ทับทิม

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

สิ่งที่ฉันไม่ต้องการ

  • มีคำถามที่คล้ายกัน สองสามข้อที่ส่วนใหญ่เกี่ยวข้องกับการตั้งค่าระดับเสียง ที่สำคัญที่สุดฉันต้องได้รับเสียงไม่ได้ตั้ง
  • มีnircmdcซึ่งรองรับการตั้งค่าระดับเสียง แต่ไม่ได้รับ
  • มีคีย์ [1] ในรีจิสตรีของฉันที่มีค่าที่เปลี่ยนแปลงได้อย่างคาดการณ์เมื่อฉันปรับระดับเสียงผ่านตัวปรับแต่ง GUI แต่ฉันเดาว่าการอ่านจากคีย์นั้นมีแนวโน้มที่จะแตกหักจากการเปลี่ยนแปลงฮาร์ดแวร์หรือการอัปเกรดระบบ หากฉันไม่สามารถพึ่งพาโซลูชันที่จะพิสูจน์ได้ในอนาคตฉันไม่สามารถใช้งานได้
  • มีAutoHotKeyและWSHวิธีแก้ปัญหาสำหรับการตั้งค่าระดับเสียงบนเว็บ แต่ก) พวกเขาก็เป็นเพียงที่ดีสำหรับการตั้งค่าและยิ่งแย่กว่านั้นข) พวกเขาใช้SendKeysหรือการเคลื่อนไหวของเมาส์อัตโนมัติเพื่อควบคุม GUI การทำ GUI ให้เป็นอัตโนมัติไม่ใช่ตัวเลือก

##windowsช่องบนฟรีโนดไม่ช่วยเหลือเช่นเคย Google ล้นกับแฮ็กและการแก้ไขปัญหาอ่อนหัดและผมก็ไม่สามารถบอกได้ว่ามีการโทร WinAPI จากคาถา Wiccan

มีใครรู้บ้างไหม?


  1. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E96C-E325-11CE-BFC1-08002BE10318}\0000\MixerSettings\eLineOutTopo\PrimaryNode000


อาจมีความเกี่ยวข้อง: superuser.com/questions/284527/…
Der Hochstapler

คุณต้องการให้ฉันขยายคำตอบของฉันไหม? ฉันไม่แน่ใจว่าคุณต้องการอะไรมากกว่านี้เนื่องจากคุณมีประสบการณ์เกี่ยวกับการเขียนโปรแกรม ฉันสามารถให้ตัวอย่างเกี่ยวกับวิธีที่คุณสามารถใช้ AutoHotkey เพื่อให้บรรลุเป้าหมายของคุณได้อย่างง่ายดาย
iglvzx

ฉันคิดว่ามันเป็นคำแนะนำที่ดีมากขอบคุณอีกครั้ง แต่ AHK กัดฉันหนึ่งครั้งและฉันก็ขี้อายนับตั้งแต่ ฉันอาจจะไม่ใช้มันแม้ว่าจะเป็นโซลูชันที่เต็มเปี่ยมก็ตาม ไม่มีอะไรขัดขวางคุณไม่ให้ขยายออกไปสำหรับผู้อ่านในอนาคต / ผู้อัปโหลดมากขึ้น :)
peth

1
(เป็นบันทึกที่ reg. ไม่ได้ดูเหมือนจะมีอยู่ในกล่องของฉันดังนั้น ... มันอาจจะไม่แน่นอนแน่นอน) ดูคำตอบ c ++ ของฉันได้ที่นี่: stackoverflow.com/a/21056089/32453
rogerdpack

คำตอบ:


5

คำถามนี้ถูกถามและตอบกลับใน StackOverflow: /programming/4640106/how-to-get-current-volume-of-system-sound-device-in-windows-7

คำตอบ: /programming//a/4640225/704977

คุณกำลังมองหา EndpointVolume API นี่เป็นส่วนหนึ่งของ API เสียงใหม่ที่เผยแพร่ใน Windows Vista และสามารถใช้เพื่อรับหรือตั้งค่าระดับเสียงหลัก
... มีไลบรารีของ wrapper ที่ได้รับการจัดการที่สมบูรณ์ที่มีอยู่ใน CodeProject: Vista Core Audio API Master Volume Control


ขอบคุณสำหรับตัวชี้! ฉันจะต้องใช้รหัสนี้ด้วยตัวเองหรือคุณอาจจะรู้จักเครื่องมือเล็ก ๆ ที่ผุดขึ้นมาจากคำถาม / คำตอบ? ฉันไม่ได้แตะ C # มาก่อน: ถ้าฉันต้องเขียนโปรแกรมด้วยตัวเองจะมีคอมไพเลอร์ให้ใช้ฟรีหรือไม่?
peth

ที่แย่ที่สุดคุณจะต้องดาวน์โหลด Visual Studio C # Express ซึ่งฟรี: microsoft.com/visualstudio/en-us/products/2010-editions/…
music2myear

ฉันพบคำตอบเฉพาะนี้ขณะค้นหาวิธีแก้ปัญหาสำหรับคำถามของคุณ ฉันยังไม่ได้ทำการวิจัยเพิ่มเติมเพื่อดูว่ามีไบนารีที่คอมไพล์แล้วหรือยัง
music2myear

การค้นหา google นี้ดูเหมือนจะมีสัญญา: google.com/search?q=get+current+volume+by+command+line+windows
music2myear

2
ดูเหมือนว่าจะเป็น C # ที่มุ่งเน้น หากคุณกำลังมองหาตัวเลือก C ++ 'ish ให้ดูstackoverflow.com/a/21056089/32453
rogerdpack

4

ฉันรู้ว่าคุณบอกว่าคุณไม่ต้องการโซลูชัน AutoHotkey แต่ฉันเชื่อว่าAutoHotkey API มีสิ่งที่คุณต้องการ:

คุณไม่จำเป็นต้องสร้าง GUI หรือใช้ปุ่มลัดด้วย AutoHotkey คุณสามารถเขียนโปรแกรมอรรถประโยชน์บรรทัดคำสั่งที่มีประสิทธิภาพโดยการรวบรวม.ahkสคริปต์ ที่ถูกกล่าวว่าคุณจะต้องการที่จะดูที่FileAppendstdoutคำสั่งสำหรับการทำงานกับ


นี่คือสิ่งที่ทำได้: gist.github.com/rdp/8363141 (แม้ว่าแอพคอนโซลแบบตรงอาจจะง่ายกว่า / ง่ายกว่าดูความคิดเห็นอื่น ๆ ที่นี่)
rogerdpack

0

ไดรฟ์ข้อมูลหลักจะถูกเก็บไว้ในตำแหน่งที่ตั้งของรีจิสทรี:

...\#eSpeakerTopo\Properties\{7fb7b48f-531d-44a2-bcb3-5ad5a134b3dc}

ตัวอย่างเช่นไฟล์ REG นี้ตั้งค่าระดับเสียงหลักเป็น 100%

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\DeviceClasses\{6994ad04-93ef-11d0-a3cc-00a0c9223196}\##?#HDAUDIO#FUNC_01&VEN_8384&DEV_7680&SUBSYS_83847680&REV_1034#4&31e60982&0&0001#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\#eSpeakerTopo\Properties\{7fb7b48f-531d-44a2-bcb3-5ad5a134b3dc}\20000]
@=hex(ffff1003):00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  00,00,00

ชื่อคีย์อาจแตกต่างกัน คุณต้องรีสตาร์ทเพื่อให้การเปลี่ยนแปลงมีผล

คุณอาจจะไม่สามารถที่จะแก้ไขหรือเปิดPropertiesหรือสำคัญในการ{7fb7b48f-531d-44a2-bcb3-5ad5a134b3dc} regeditแม้ว่าคุณจะมีสิทธิ์การเข้าถึงที่จำเป็น แต่คุณอาจได้รับข้อผิดพลาดดังนี้:

[Window Title]
Error Opening Key

[Content]
{7fb7b48f-531d-44a2-bcb3-5ad5a134b3dc} cannot be opened.
An error is preventing this key from being opened.

[OK]

นี่เป็นเพราะชื่อคีย์ยาวเกินไป คุณจะต้องเปลี่ยนชื่อคีย์แบบยาวเป็นตัวอักษรชั่วคราวแล้วเปลี่ยนชื่อกลับ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.