› Sviluppare funzionalita su Microsoft Office con VBA › Regolare il volume di sistema
-
AutoreArticoli
-
Vorrei che in avvio quindi nella cartella di lavoro il volume di sistema venga regolato a 18.
18 intendo il valore del volume di sistema, quindi qualsiasi sia il volume prima dell'avvio voglio che lo imposti a 18.
Spero sia possibile con Vba in alternativa sempre con il vostro aiuto se credete sia più facile crearla in Vb.Net per me fa lo stesso, nel secondo caso farò chiamare l'eventuale file (volume.exe) ad Excel in avvio e credo che la discussione debba essere spostata nel ramo VB.
Ciao
Non credo sia semplicissimo ma prova a questo indirizzo:
http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=66975&lngWId=1
Ciao,
Mario
Credevo era un software, ho scaricato il codice ma ...
Ho trovato i seguenti file:
*.cls, *.frm, *.frx, *.vbp
Non so come leggerli.
Quindi resterò in attesa di una risposta più facile e diretta.
Mi piacerebbe avere il codice "Vba, Vb.Net" sotto mano, per apprendere nuove funzionalità e per inserirlo più comodamente nel mio progetto.
se credete sia più facile crearla in Vb.Net per me fa lo stesso
Per noi no però, perchè qui si parla solo di Excel e mondo Office che espone solo VBA.
credo che la discussione debba essere spostata nel ramo VB.
In questo forum non abbiamo una sezione dedicata a VB classico.
Il link di Supermario propone di scaricare un insieme di elementi che messi insieme costituiscono un form e del codice VB. Credo che potrebbero essere adattati a VBA ma a te interessa la gestione del beep di sistema, credo. Quindi bisognerebbe analizzare il codice proposto per arrivarci.
Ho trovato i seguenti file
ecco, tu confermi quello che ho detto un attimo fa. Quei file vano semplicemente importati nell'editor di VBA. Però credo che se si tratta di elementi VB, l'importazione semplice fallirà... bisognerebbe guardare i sorgente per capire come intervenire.
Hai cercato semplicemente se c'è un'API di sistema che gestisce il volume? Inoltre: utilizzi un sistema a 32 o 64 bit?
Ho googlato un attimo e ho trovato del codice carino che fa quello che chiedi, mediante una semplice API.
Ecco il codice:
Option Explicit Const VK_VOLUME_MUTE = &HAD Const VK_VOLUME_DOWN = &HAE Const VK_VOLUME_UP = &HAF #If VBA7 Then Private Declare PtrSafe Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) #Else Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) #End If Sub VolUp() keybd_event VK_VOLUME_UP, 0, 1, 0 keybd_event VK_VOLUME_UP, 0, 3, 0 End Sub Sub VolDown() keybd_event VK_VOLUME_DOWN, 0, 1, 0 keybd_event VK_VOLUME_DOWN, 0, 3, 0 End Sub Sub VolToggle() keybd_event VK_VOLUME_MUTE, 0, 1, 0 End Sub
Non è per niente difficile capire come usare queste routine ma se hai bisogno chiedi pure.
Io ho creato questa che speravo funzionasse ma non possiedo il file coredll.dll.
Il volume Normal non l'ho mai potuto provare ha causa della mancanza del file coredll.dll.
Si può fare in altro modo?
Il codice proposto dal Vecchio Frac (alza, abbassa e silenzia) io invece vorrei impostarlo a 18 qualsiasi sia il volume di partenza.
Imports System.Runtime.InteropServices Public Class Form1 Public Enum Volumes As Integer NORMAL = 1717986918 End Enum Declare Function waveOutSetVolume Lib "CoreDll.dll" (ByVal device As IntPtr, ByVal volume As Integer) As Integer Declare Function waveOutGetVolume Lib "CoreDll.dll" (ByVal device As IntPtr, ByRef volume As Integer) As Integer Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load waveOutSetVolume(IntPtr.Zero, CType(Volumes.NORMAL, Integer)) Dim intOttieni As Integer = 0 waveOutGetVolume(IntPtr.Zero, intOttieni) Dim StrVolume As String = "" Select Case intOttieni Case CType(Volumes.NORMAL, Integer) StrVolume = "NORMALE" End Select MessageBox.Show(StrVolume) End Sub End Class
Ho testato il codice che ti ho illustrato e mi sembra funzionare (Excel 2013, Office 64 bit). Per raggiungere l'obiettivo probabilmente basta un ciclo che abbassa tutto a zero e poi alzarlo gradualmente al valore desiderato (sul mio sistema lo scalino è di due punti per ogni chiamata alla funzione). Anche se ritengo che forzare all'utente il volume dello speaker non sia una buona idea 🙂
Purtroppo mi sono accorto che la "Normalizzazione del volume" va fatta prima di Lanciatore.exe siccome come ho già spiegato ho perduto il codice sorgente "Vb" non posso utilizzare il codice.
Ma siccome sono sicuro che funziona, provenendo il codice (vba-Excel) da vecchio frac, chiudo la discussione!
Io ho creato questa che speravo funzionasse ma non possiedo il file coredll.dll.
AL di là di tutto, il codice che hai illustrato è per VB.Net, e non va bene per Excel.
ho perduto il codice sorgente "Vb"
Dunque non sai cosa fanno "Lanciatore" e "Ripristina" ? Perchè se invece sì, potresti ripristinarli magari in vbs.
Si dovevo spiegare che il codice era Vb.net, comunque per i file "*.exe " da me compilati in vb.net ho solo i file (exe) scampati ad una formattazione "perché salvati in altro hd " non mi ero ricordati di salvare l'intero progetto!!
-
AutoreArticoli