Bagaimana saya bisa mengakses level volume dari baris perintah pada Windows 7?

17

Apa yang saya butuhkan

Saya mencari alat atau skrip yang memungkinkan saya untuk mengakses level volume Windows dari baris perintah. Idealnya itu akan memungkinkan saya untuk mendapatkan dan mengatur semua volume termasuk level aplikasi, tapi saya akan puas hanya mendapatkan, dan hanya tingkat master. Saya tidak keberatan jika menggunakan PowerShell, WMI, JavaScript, .Net, Voodoo, atau kupu-kupu. Solusi apa pun yang hanya akan memberi saya nomor yang dapat saya proses lebih lanjut agar sesuai dengan rentang dari 0% hingga 100% akan dilakukan.

Dengan kata lain, bagian prompt adalah kotak hitam yang perlu saya isi:

C:\> getvol master
50

atau bahkan

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

Saya tidak keberatan jika saya harus meluangkan waktu untuk membungkusnya atau bahkan menulis sesuatu sendiri jika alat untuk melakukannya tersedia secara bebas. Dalam kasus terakhir, saya memerlukan beberapa pointer / pembuktian konsep untuk core, tetapi saya dapat mengelola cruft sendiri. Juga saya ingin menghindari menginstal kerangka pembangunan baru hanya untuk tujuan ini (catatan bahwa kedua music2myear ini dan iglvzx ini jawaban diberi sebelum saya memperkenalkan persyaratan ini).

Sebagai "platform", saya sudah tersedia:

  • apa pun yang datang dengan Windows 7 Home Premium
  • apa pun yang datang dengan Cygwin
  • Perl
  • Python
  • Rubi

Secara umum, solusi open-source sangat disukai. Alat sumber tertutup tidak masalah selama itu freeware dan sumbernya dapat dipercaya. Solusi komersial tidak dapat digunakan.

Apa yang tidak saya butuhkan

  • Ada beberapa pertanyaan serupa yang sebagian besar berhubungan dengan pengaturan volume. Yang paling penting, saya perlu mendapatkan volume, tidak diatur.
  • Ada nircmdc, yang mendukung pengaturan volume, tetapi tidak mendapatkan.
  • Ada kunci [1] di registri saya yang memiliki nilai yang berubah diprediksi ketika saya menyesuaikan volume melalui mixer GUI, tapi saya kira membaca dari kunci itu rentan terhadap kerusakan pada perubahan perangkat keras atau peningkatan sistem. Kecuali saya bisa mengandalkan solusi yang cukup tahan di masa depan, saya tidak bisa menggunakannya.
  • Ada AutoHotKeydan WSHsolusi untuk mengatur volume di Web, tetapi a) mereka juga hanya baik untuk pengaturan dan, lebih buruk, b) mereka menggunakan SendKeysatau gerakan mouse otomatis untuk mengontrol GUI. Mengotomatiskan GUI bukanlah suatu pilihan.

The ##windowschannel pada freenode tidak membantu seperti biasa, Google meluap dengan hacks dan setengah matang workarounds, dan saya tidak bisa mengatakan panggilan WinAPI dari mantera Wiccan.

Apakah ada yang tahu cara?


  1. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E96C-E325-11CE-BFC1-08002BE10318}\0000\MixerSettings\eLineOutTopo\PrimaryNode000
peth
sumber
Semms seperti WMI bukan pilihan :(
Der Hochstapler
Mungkin relevan: superuser.com/questions/284527/…
Der Hochstapler
Apakah Anda membutuhkan saya untuk memperluas jawaban saya? Saya tidak yakin Anda membutuhkan lebih banyak, karena Anda tampaknya memiliki pengalaman dengan pemrograman. Saya dapat memberikan contoh tentang bagaimana Anda dapat menggunakan AutoHotkey untuk dengan mudah mencapai tujuan Anda.
iglvzx
Saya pikir itu saran yang sangat bagus, terima kasih lagi, tapi AHK menggigit saya sekali dan saya malu sejak itu. Saya mungkin tidak akan menggunakannya bahkan jika itu adalah solusi yang lengkap. Tidak ada yang membuat Anda tidak mengembangkannya untuk pembaca masa depan / lebih banyak upvotes. :)
peth
1
(sebagai catatan bahwa reg. tampaknya bahkan tidak ada di kotak saya, jadi ... mungkin memang tidak stabil). Lihat juga jawaban c ++ saya di sini: stackoverflow.com/a/21056089/32453
rogerdpack

Jawaban:

5

Pertanyaan ini ditanyakan dan dijawab di StackOverflow: /programming/4640106/how-to-get-current-volume-of-system-sound-device-in-windows-7

Jawabannya: /programming//a/4640225/704977

Anda sedang mencari API EndpointVolume. Ini adalah bagian dari API audio baru yang dirilis di Windows Vista, dan dapat digunakan untuk mendapatkan atau mengatur volume master.
... Ada perpustakaan pembungkus terkelola lengkap yang tersedia di CodeProject: Vista Core Audio API Master Volume Control.

music2myear
sumber
Terima kasih untuk penunjuknya! Apakah saya harus mengkodekan ini sendiri atau Anda mungkin tahu alat kecil yang muncul dari pertanyaan / jawaban? Saya belum menyentuh C # sebelumnya: jika saya harus kode sendiri, apakah ada kompiler tersedia secara bebas?
peth
Paling buruk Anda perlu mengunduh Visual Studio C # Express, yang gratis: microsoft.com/visualstudio/en-us/products/2010-editions/…
music2myear
Saya hanya menemukan jawaban khusus ini saat mencari solusi untuk pertanyaan Anda. Saya belum melakukan penelitian lebih lanjut untuk melihat apakah ada biner terkompilasi yang sudah tersedia untuk umum.
music2myear
Pencarian google ini tampaknya memiliki beberapa janji: google.com/search?q=get+current+volume+by+command+line+windows
music2myear
2
Yang itu tampaknya berorientasi C #. Jika Anda mencari opsi ish C ++, lihat stackoverflow.com/a/21056089/32453
rogerdpack
4

Saya tahu Anda mengatakan Anda tidak menginginkan solusi AutoHotkey, tapi saya percaya API AutoHotkey memiliki apa yang Anda cari:

Anda tidak perlu membuat GUI atau menggunakan tombol cepat dengan AutoHotkey. Anda dapat menulis utilitas baris perintah yang kuat dengan menyusun .ahkskrip. Yang sedang berkata, Anda akan ingin melihat perintah FileAppend untuk bekerja dengannya stdout.

iglvzx
sumber
inilah salah satu yang melakukannya: gist.github.com/rdp/8363141 (meskipun aplikasi konsol langsung untuk itu mungkin lebih sederhana / lebih mudah, lihat komentar lain di sini)
rogerdpack
0

Volume master disimpan di lokasi registri:

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

Sebagai contoh, file REG ini menetapkan volume master menjadi 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

Nama kuncinya mungkin berbeda. Anda harus memulai ulang agar perubahan diterapkan.

Anda mungkin tidak dapat mengedit atau membuka Propertiesatau {7fb7b48f-531d-44a2-bcb3-5ad5a134b3dc}kunci dalam regedit. Meskipun Anda memiliki izin akses yang diperlukan, Anda mungkin menerima kesalahan seperti ini:

[Window Title]
Error Opening Key

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

[OK]

Ini karena nama kuncinya terlalu panjang. Anda harus sementara mengubah nama nama kunci panjang menjadi satu karakter dan kemudian mengubah nama kembali.

XP1
sumber