Funzione funziona solo in debug?

di il
4 risposte

Funzione funziona solo in debug?

Ho fatto un applicazione che ogni n secondi emette un suono e viene portata in foreground rispetto a tutte le altre applicazioni in esecuzione ,segue il codice che funziona in visual studio ma installando l'applicazione funziona il suono ma l'applicazione non viene portata in foreground rispetto alle altre ,cosa che accade eseguendola in debug….

[DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr hWnd);

private static void OnTimedEvent(Object source, ElapsedEventArgs e)
{            
    SoundPlayer simpleSound = new SoundPlayer(@"c:\Windows\Media\Alarm06.wav");
    simpleSound.Play();              
    
    Process[] processes = Process.GetProcessesByName("TimerForms");
    SetForegroundWindow(processes[0].MainWindowHandle);

}

qualche idea? ,grazie ,ciao

4 Risposte

  • Re: Funzione funziona solo in debug?

    Ho modificato leggermente il codice ma il risultato è lo stesso funziona in debug in visual studio ma l'applicazione installata continua a non funzionare  :

    
    [DllImport("user32.dll")]
    static extern bool SetForegroundWindow(IntPtr hWnd);
    private static void OnTimedEvent(Object source, ElapsedEventArgs e)
    {            
       SoundPlayer simpleSound = new SoundPlayer(@"c:\Windows\Media\Alarm06.wav");
       simpleSound.Play();
       Process p = Process.GetCurrentProcess();
       //Process[] processes = Process.GetProcessesByName("TimerForms");
       //SetForegroundWindow(processes[0].MainWindowHandle);
       SetForegroundWindow(p.MainWindowHandle);
    }
    
    aggiungo che non è possibile eseguire il programma installato come administrator,c'è la scelta ma scegliendola non accade nulla,
    il programma non viene eseguito mentre viene eseguito cliccando "apri"  
  • Re: Funzione funziona solo in debug?

    30/04/2024 - gian82 ha scritto:


    Ho fatto un applicazione che ogni n secondi emette un suono e viene portata in foreground rispetto a tutte le altre applicazioni in esecuzione ,segue il codice che funziona in visual studio ma installando l'applicazione funziona il suono ma l'applicazione non viene portata in foreground rispetto alle altre ,cosa che accade eseguendola in debug….

    Hai letto la documentazione ufficiale relativa alla funzione SetForegroundWindow() che stai utilizzando?
    In modo particolare, nella sezione “Commenti”?

  • Re: Funzione funziona solo in debug?

    Veramente pensavo  di guardare oggi la documentazione, ti ringrazio per le indicazioni

  • Re: Funzione funziona solo in debug?

    Non è una grande soluzione ma per le mie minime esigenze di essere avvertito oltre che  via audio anche da un qualsiasi messaggio video ho aggiunto il seguente codice che chiama un altro eseguibile e lo esegue come administrator , in questo caso windows produce in foreground rispetto alle altre applicazioni in esecuzione il messaggio con cui chiede l'autorizzazione per l'esecuzione come administrator , per fare ciò passo il "verbo" “runas”:

    try { 
        SoundPlayer simpleSound = new SoundPlayer(@"c:\Windows\Media\Alarm01.wav");
        simpleSound.Play();
    } catch(Exception ex)
    {
        MessageBox.Show(ex.Message.ToString());
    }
    
    Process process = new Process();
    // Configure the process using the StartInfo properties.
    process.StartInfo.FileName = "C:\\splash_installazione\\SplashNewWinForms.exe";
    process.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
    process.StartInfo.UseShellExecute = true;            
    process.StartInfo.Verb = "runas";
    process.Start();
    SetForegroundWindow(process.MainWindowHandle);
Devi accedere o registrarti per scrivere nel forum
4 risposte