none
Auf XP Systemen den "Kein Datenträger" - Dialog ausblenden/unterdrücken,...nur wie? RRS feed

  • Frage

  • Hallo,

     

    ich habe festgestellt, dass ein bestimmtes Stück Code in meinem Program bei einem leeren CD-Rom Laufwerk auf einem Windows XP (oder 2000 auch!) dazu führt, dass der "Kein Datenträger" Dialog angezeigt wird. Ich würde das aber gerne verhindern, zumal mit dem erscheinen dieses Dialoges (in einem Single-Thread Prozess) auch die ganze Applikation hängen bleibt und man bei z.B. einem Topmost Windows Forms Projekt den Dialog hinter dem Hauptfenster angezeigt bekommt und das für einen Benutzer der das nicht weiss ein hängendes Program darstellt. Hier der Code:

          foreach (DriveInfo di in DriveInfo.GetDrives())
          {
            bool _isRead = di.IsReady;
          }
    

    Meine Frage nun: Wie verhindere ich, das der Dialog angezeigt wird und ich dennoch fesstellen kann, ob das Laufwerk geladen/bereit/initialisiert ist? Es muss nicht unbedingt eine .NET Lösung sein, auch Windows API ist gerne wilkommen, es muss nur irgendwie das Anzeigen des Dialoges umgangen werden und ich muss wissen, ob das Laufwerk verfügbar ist.

    Hier ein Screenshot des Dialogs auf XP:

    http://www.pro-it-education.de/staff/keremg/misc/KeinDatentraeger.jpg

    Danke schon mal,...

    K.


    ------------------------- Beste Grüsse / Best regards / Votre bien devoue Kerem Gümrükcü http://entwicklung.junetz.de ------------------------- "This reply is provided as is, without warranty express or implied."
    Montag, 31. Januar 2011 08:03

Antworten

  • Ich beantworte es mal selber: Vor dem aufrufen der Funktion/Methode das Flag SEM_FAILCRITICALERRORS setzten und die alten Flags speichern. Nach dem aufrufen der Methoden/Funktionen den gespeicherten Flag Zustand wieder herstellen. Das wars,...

          [DllImport("kernel32.dll")]
          public static extern SetErrorModeFlags SetErrorMode(
            SetErrorModeFlags uMode);
    
          [DllImport("kernel32.dll")]
          public static extern SetErrorModeFlags GetErrorMode();
    
        [Flags]
        public enum SetErrorModeFlags : uint
        {
          SEM_ZERO_FLAG = 0x0,
          SEM_FAILCRITICALERRORS = 0x0001,
          SEM_NOALIGNMENTFAULTEXCEPT = 0x0004,
          SEM_NOGPFAULTERRORBOX = 0x0002,
          SEM_NOOPENFILEERRORBOX = 0x8000,
        }
    

    ------------------------- Beste Grüsse / Best regards / Votre bien devoue Kerem Gümrükcü http://entwicklung.junetz.de ------------------------- "This reply is provided as is, without warranty express or implied."
    Montag, 31. Januar 2011 15:25