none
Aus der MSDN Hotline: Messagebox bei leeren Laufwerk unterdrücken (C#) RRS feed

  • Allgemeine Diskussion

  • Hallo zusammen,

    heute wurde uns bei der MSDN Hotline unter anderem folgende Frage gestellt:
    Ich möchte auflisten, ob eine CD im CD-Rom Laufwerk ist. Wenn ich allerdings auf DriveInfo.IsReady zugreife, kommt eine Messagebox von Windows, dass das Laufwerk nicht bereit ist. Wie kann ich diese Nachricht unterdrücken?


    Unsere Antwort bzw. unser Lösungsvorschlag darauf war:
    Mit dem Aufruf der Win-API Funktion SetErrorMode (siehe [1] und für C# [2]) mit dem Argument FAILCRITICALERRORS kann diese Messagebox unterdrückt werden. Beispielsweise könnte man so (ohne Meldung von Windows) überprüfen, ob ein CD im Laufwerk ist:


       

    [Flags]
    
     public enum ErrorModes : uint
    
     {
    
      SYSTEM_DEFAULT = 0x0,
    
      SEM_FAILCRITICALERRORS = 0x0001,
    
      SEM_NOALIGNMENTFAULTEXCEPT = 0x0004,
    
      SEM_NOGPFAULTERRORBOX = 0x0002,
    
      SEM_NOOPENFILEERRORBOX = 0x8000
    
     }
    
     class Program
    
     {
    
      [DllImport("kernel32.dll")]
    
      static extern ErrorModes SetErrorMode(ErrorModes uMode);
    
      static void Main(string[] args)
    
      {
    
       SetErrorMode(ErrorModes.SEM_FAILCRITICALERRORS); //Windows Meldung unterdrücken
    
    
    
       DriveInfo di = new DriveInfo("E:\\");
    
       System.Console.WriteLine(di.IsReady ? "CD in E:\\" : "Keine CD in E:\\");
    
       
    
       Console.ReadLine();
    
      }
    
     }
    
    

    Zur Klasse System.IO.DriveInfo gibt es unter [3] und zu deren Eigenschaft DriveInfo.IsReady unter [4] weitere Informationen.

    [1] http://msdn.microsoft.com/de-de/library/ms680621%28v=vs.85%29.aspx
    [2] http://pinvoke.net/default.aspx/kernel32/SetErrorMode.html
    [3] http://msdn.microsoft.com/de-de/library/abt1306t.aspx
    [4] http://msdn.microsoft.com/de-de/library/system.io.driveinfo.isready.aspx


    Wir hoffen, vielen Besuchern der MSDN Foren durch das Posten dieses Problems und einer möglichen Lösung weiterhelfen zu können.

    Viele Grüße,
    MSDN Hotline für MSDN Online Deutschland

    Disclaimer:
    Bitte haben Sie Verständnis dafür, dass wir hier auf Rückfragen gar nicht oder nur sehr zeitverzögert antworten können.
    Bitte nutzen Sie für Rückfragen oder neue Fragen den telefonischen Weg über die MSDN Hotline: http://www.msdn-online.de/Hotline 
    MSDN Hotline: Schnelle & kompetente Hilfe für Entwickler: kostenfrei!

    Es gelten für die MSDN Hotline und dieses Posting diese Nutzungsbedingungen, Hinweise zu Markenzeichen sowie die allgemein gültigen Informationen zur Datensicherheit sowie die gesonderten Nutzungsbedingungen für die MSDN Hotline.

    Montag, 31. Januar 2011 16:48