Windows 7'deki komut satırından ses düzeylerine nasıl erişebilirim?


17

Neye ihtiyacım var

Komut satırından Windows ses düzeylerine erişmeme izin veren bir araç veya komut dosyası arıyorum. İdeal olarak, uygulama seviyeleri de dahil olmak üzere tüm hacimleri almamı ve ayarlamamı sağlayacaktı, ancak sadece ve sadece ana seviyeye yerleştim. Kullandığı eğer sakıncası yoksa PowerShell, WMI, JavaScript, .Net, Voodoo veya kelebekler. Bana sadece% 0 ila% 100 aralığında sığdırmak için işleyebileceğim bir sayı verecek herhangi bir çözüm yapacağız.

Başka bir deyişle, istemi parçaları doldurmam gereken kara kutu:

C:\> getvol master
50

ya da

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

Sarmak için biraz zaman harcamak zorundayım, hatta bunun için araçlar serbestçe mevcutsa kendim bir şeyler yazmam gerekmiyor. İkinci durumda, çekirdek için bazı işaretçilere / kavram kanıtına ihtiyacım olurdu, ancak hamleyi kendi başıma yönetebilirim. Ayrıca ben sadece (hem o notta bu amaçla yeni gelişme çerçeveler yüklemeden kaçınmak istiyorum music2myear en ve iglvzx en cevaplar verildi önce ben bu gereksinimleri tanıtıldı).

"Platformlar" olarak, ben var:

  • Windows 7 Home Premium ile gelen her şey
  • Cygwin ile gelen her şey
  • Perl
  • piton
  • Yakut

Genellikle açık kaynaklı çözümler büyük ölçüde tercih edilir. Kapalı kaynaklı araçlar, ücretsiz oldukları ve kaynağa güvenilebildiği sürece iyidir. Ticari çözümler işe yaramaz.

Neye ihtiyacım yok

  • Ses seviyesini ayarlamakla ilgili birkaç benzer soru var. En önemlisi, ben gerek olsun hacmini değil ayarlayın.
  • Orada nircmdchacminin ayarlanması, ancak almıyor destekler, hangi.
  • Kayıt defterinde, GUI karıştırıcı aracılığıyla ses seviyesini ayarladığımda tahmin edilen şekilde değişen değerlere sahip bir anahtar [1] var, ancak bu anahtardan okuma donanım değişiklikleri veya sistem yükseltmelerinde kırılmaya eğilimli olduğunu tahmin ediyorum. Çözümün geleceğe yönelik olarak makul olduğuna güvenmediğim sürece onu kullanamam.
  • Orada AutoHotKeyve WSHWeb üzerinde ses düzeyini ayarlama çözümler ancak) onlar da kullandıkları) b, kötü ayarı için sadece iyi ve SendKeysGUI kontrol etmek veya otomatik fare hareketi. GUI'nin otomatikleştirilmesi bir seçenek değildir.

##windowsFreenode kanalı, Google kesmek ve yarı pişmiş geçici çözümler ile taşmaları, her zamanki gibi yararsız olduğunu ve bir Wiccan'ım sözler bir WinAPI çağrı anlatamam.

Bir yolu bilen var mı?


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



Cevabımı genişletmem için bana ihtiyacın var mı? Programlama konusunda deneyiminiz olduğu için daha fazlasına ihtiyacınız olduğundan emin değildim. Hedefinize kolayca ulaşmak için AutoHotkey'i nasıl kullanabileceğinize dair bir örnek verebilirim.
iglvzx

Bence çok iyi bir öneri, tekrar teşekkürler, ama AHK beni bir kez ısırdı ve o zamandan beri utangaçım. Muhtemelen tam teşekküllü bir çözüm olsa bile kullanmazdım. Gelecekteki okuyucular / daha fazla oylar için sizi genişletmekten alıkoyan hiçbir şey yok. :)
peth

1
(bir not olarak, reg. benim kutumda bile görünmüyor, bu yüzden ... gerçekten kararsız olabilir). Ayrıca bkz. C ++ cevabım: stackoverflow.com/a/21056089/32453
rogerdpack

Yanıtlar:


5

Bu soru StackOverflow'da sorulmuş ve cevaplanmıştır: /programming/4640106/how-to-get-current-volume-of-system-sound-device-in-windows-7

Yanıt: /programming//a/4640225/704977

EndpointVolume API'sını arıyorsunuz. Bu, Windows Vista'da yayınlanan yeni ses API'lerinin bir parçasıdır ve ana ses düzeyini almak veya ayarlamak için kullanılabilir.
... CodeProject'de tam bir yönetilen sarıcı kütüphanesi var: Vista Core Audio API Master Volume Control.


İşaretçi için teşekkürler! Bunu kendim kodlamak zorunda mıyım yoksa soru / cevaptan fırlayan küçük bir araç biliyor musunuz? Daha önce C # dokunmadım: eğer kendim kodlamak zorunda kalırsam, serbestçe kullanılabilir bir derleyici var mı?
peth

En kötü ihtimalle ücretsiz olan Visual Studio C # Express'i indirmeniz gerekir: microsoft.com/visualstudio/en-us/products/2010-editions/…
music2myŞub

Bu özel yanıtı yalnızca sorunuza çözüm ararken buldum. Halihazırda kamuya açık derlenmiş bir ikili dosya olup olmadığını görmek için daha fazla araştırma yapmadım.
music2my18

Bu google aramasının bazı sözleri var gibi görünüyor: google.com/search?q=get+current+volume+by+command+line+windows
music2my28

2
Bu C # odaklı gibi görünüyor. C ++ 'ish seçeneği arıyorsanız stackoverflow.com/a/21056089/32453
rogerdpack

4

AutoHotkey çözümü istemediğinizi söylediğinizi biliyorum, ancak AutoHotkey API'sinin aradığınız şeye sahip olduğuna inanıyorum :

AutoHotkey ile GUI oluşturmanıza veya kısayol tuşlarını kullanmanıza gerek yoktur. Bir .ahkkomut dosyası derleyerek güçlü komut satırı yardımcı programları yazabilirsiniz . Bununla birlikte, çalışmak için FileAppend komutuna bakmak isteyeceksiniz stdout.


İşte bunu yapan: gist.github.com/rdp/8363141 (bunun için düz bir konsol uygulaması daha basit / kolay olabilir, burada diğer yorumlara bakın)
rogerdpack

0

Ana birim, kayıt defteri konumunda depolanır:

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

Örneğin, bu REG dosyası ana birimi% 100'e ayarlar.

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

Anahtar adı farklı olabilir. Değişikliklerin etkili olması için yeniden başlatmanız gerekir.

PropertiesVeya {7fb7b48f-531d-44a2-bcb3-5ad5a134b3dc}tuşunu düzenleyemeyebilir veya açamayabilirsiniz regedit. Gerekli erişim izinlerine sahip olmanıza rağmen, aşağıdaki gibi bir hata alabilirsiniz:

[Window Title]
Error Opening Key

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

[OK]

Bunun nedeni anahtar adının çok uzun olmasıdır. Uzun anahtar adını geçici olarak bir karakterle yeniden adlandırmanız ve ardından yeniden adlandırmanız gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.