Fare una semplice applicazione, quindi quando l'utente si disconnette da Windows, ovviamente chiude l'applicazione. Stiamo facendo una semplice applicazione USB Alert che ARRESTA lo spegnimento se viene rilevata una USB quando l'utente si disconnetteWM_QUERYENDSESSION mi sta causando problemi
Questo è il codice fino ad ora.
public Form1()
{
InitializeComponent();
}
private static int WM_QUERYENDSESSION = 0x11;
private static bool systemShutdown = false;
protected override void WndProc(ref System.Windows.Forms.Message m)
{
if (m.Msg == WM_QUERYENDSESSION)
{
//MessageBox.Show("queryendsession: this is a logoff, shutdown, or reboot");
systemShutdown = true;
m.Result = (IntPtr)0;
}
// If this is WM_QUERYENDSESSION, the closing event should be
// raised in the base WndProc.
m.Result = (IntPtr)0;
base.WndProc(ref m);
} //WndProc
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (systemShutdown)
{
systemShutdown = false;
bool hasUSB = false;
foreach (DriveInfo Drive in DriveInfo.GetDrives())
{
if (Drive.DriveType == DriveType.Removable)
{
hasUSB = true;
}
}
if (hasUSB)
{
e.Cancel = true;
MessageBox.Show("You still have USB device plugged in, please unplug it and log off again");
}
else
{
e.Cancel = false;
}
}
}
Quello che sta accadendo è che i programmi di forza di Windows per Quit viene visualizzata la schermata, ho letto da qualche parte se si torna da 0 a WM_QUERYENDSESSION non viene visualizzato questo, ma è ancora la visualizzazione di questa ...
Qualche idea?
EDIT:
Abbiamo usato il codice che qualcuno ha risposto con, ma ci sta ancora ricevendo questa schermata.
sta impedendo il sistema da arrestare una buona idea, in primo luogo? –
Ma stiamo costruendo un programma, che se un utente ha lasciato un USB collegato, non possono spegnersi o disconnettersi finché non lo rimuovono. – x06265616e