Finestre di dialogo di sistema

lunedì 14 novembre 2005 - 21.09

palomo2 Profilo | Newbie

Salve ragazzi,
mi interesserebbe mostrare alcune finestre di dialogo di sistema come finestre figlio della form principale della mia applicazione. Per ora sono riuscito a crearmi una classe per mostrare le finestre di dialogo di uso comune ma resta ancora il problema di come renderle finestre figlio.

Il codice è il seguente
------------------------------------------------------
[c#]
using System;
using System.IO;
using System.Diagnostics;
using System.Windows.Forms;

namespace System
{
/// <summary>
/// Descrizione di riepilogo per SystemDialogs.
/// </summary>
public class SystemDialogs
{
public SystemDialogs()
{
//
// TODO: aggiungere qui la logica del costruttore
//
}

public enum Dialogs
{
SD_FORMAT = 1,
SD_INTERNET_OPTIONS = 2,
SD_ADD_REMOVE_PROGRAMS = 3,
SD_DATE_TIME = 4,
SD_DISPLAY = 5,
SD_MODEM = 6,
SD_MULTIMEDIA = 7,
SD_MOUSE = 8,
SD_NETWORK = 9,
SD_PASSWORD = 10,
SD_SYSTEM = 11,
SD_REGIONAL_SETTINGS = 12,
SD_SOUNDS = 13,
SD_GAME_CONTROLLERS = 14,
SD_KEYBOARD = 15,
SD_DEVICE_MANAGER = 16,
}

public static void ShowDialog(System.SystemDialogs.Dialogs Dialog)
{
string[] Args = new string[16]
{
"Shell32.dll SHFormatDrive",
"Shell32.dll Control_RunDLLA inetcpl.cpl 0",
"Shell32.dll Control_RunDLLA appwiz.cpl",
"Shell32.dll Control_RunDLLA timedate.cpl",
"Shell32.dll Control_RunDLLA desk.cpl",
"Shell32.dll Control_RunDLLA modem.cpl",
"Shell32.dll Control_RunDLLA mmsys.cpl 0",
"Shell32.dll Control_RunDLLA main.cpl @0",
"Shell32.dll Control_RunDLLA netcpl.cpl",
"Shell32.dll Control_RunDLLA password.cpl",
"Shell32.dll Control_RunDLLA sysdm.cpl 0",
"Shell32.dll Control_RunDLLA intl.cpl 0",
"Shell32.dll Control_RunDLLA mmsys.cpl @1",
"Shell32.dll Control_RunDLLA joy.cpl",
"Shell32.dll Control_RunDLLA main.cpl @1",
"DevMgr.dll DeviceManager_ExecuteA"
};

int i = (int) Dialog - 1;
ProcessStartInfo pInfo = new ProcessStartInfo();
pInfo.FileName = "Rundll32.exe";
pInfo.UseShellExecute = true;
pInfo.Arguments = Args[ i ];
pInfo.ErrorDialog = true;
Process.Start(pInfo);
}
}
}
------------------------------------------------------

Per far comparire la finestra delle opzioni internet faccio così:

------------------------------------------------------
[c#]
using System;
...........
...........
SystemDialogs.ShowDialog(SystemDialogs.Dialogs.SD_INTERNET_OPTIONS);
------------------------------------------------------

Ho trovato anche un articolo che fa esattamente quello che mi serve ma è in c++ e non riesco a tradurre in c# la parte che mi permetterebbe di aprire il processo come child. L'articolo è il seguente:
http://www.codeproject.com/system/SystemDialogs.asp


Grazie mille

Brainkiller Profilo | Guru

>Ho trovato anche un articolo che fa esattamente quello che mi
>serve ma è in c++ e non riesco a tradurre in c# la parte che
>mi permetterebbe di aprire il processo come child. L'articolo
> è il seguente:

L'articolo che hai menzionato parla di come far apparire le finestra di sistema cioè quello che hai anche postato tu come codice, non parla di come trasformare queste finestre in Child. Quando parli di Child cosa intendi, hai una applicazione MDI e vuoi far aprire queste finestre all'interno ? In ogni caso ti sconsiglio questa cosa, considerato che trattasi di finestre di sistema è più corretto fare apparire fuori dal contesto dell'applicazione.
Ciao

David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

palomo2 Profilo | Newbie

ho scritto finestre child ? Mi sono sbagliato, volevo dire finestre modali ... Il problema è che questi dialog di sistema non mostrano l'icona sulla taskbar e quindi se vanno in secondo piano rischiano di "perdersi" e quindi si deve ricorrere allo shortcat alt+tab o alla minimizzazione delle finestre in primo piano rispetto ad essa.

Ho provato impostando l'attesa della chiusura del processo (quelle righe commentate) ma è peggio in quanto la mia applicazione resta freezzata nell'attesa di una probabile finestra persa dietro quelle in primo piano.

Ho anche pensato di aprire, come finestra modale, una form MDI, senza controlbox, con trasparenza 100% che richiami il processo come finestra child (stavolta voglio proprio dire quello che ho scritto :)) e che alla chiusura di quest'ultimo segua la chiusura di questo form padre. Rozza.... ma è una soluzione ..... solo che non saprei nemmeno come aprire un processo in finestra child :)

Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5