Announcement

Collapse
No announcement yet.

Laufwerke überwachen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Laufwerke überwachen

    Hallo, und frohe Weihnachten...

    Mein Programm (C#) soll von Windows eine Nachricht bekommen, wenn sich an den Laufwerken etwas ändert, also wenn eine Karte in den Kartenleser eingesteckt oder herausgenommen wird. Wie lautet das Stichwort, das ich in der Hilfe eingeben muß?

    Danke - Günther
    Günther

  • #2
    http://msdn.microsoft.com/en-us/libr...17(VS.85).aspx
    Christian

    Comment


    • #3
      also good old Windows.

      Da kann ich ja lange nach einer .NET Funktion suchen.
      Danke!
      Günther

      Comment


      • #4
        Hallo

        Ist eigentlich ganz einfach, man braucht nur die WndProc überschreiben.

        Code:
        Private Const WM_DEVICECHANGED as integer = &H219
        	Private Const DBT_DEVICEARRIVAL as Integer = &H8000
        	Private Const DBT_DEVICEREMOVECOMPLETE  as integer= &H8004
        	Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        		MyBase.WndProc(m)
        		If m.Msg = WM_DEVICECHANGEd Then
        			Select Case m.WParam
        				Case DBT_DEVICEARRIVAL
        					MsgBox("CD eingelegt")
        				Case DBT_DEVICEREMOVECOMPLETE
        					MsgBox("CD ausgeworfen")
        			End Select
        		End If
        	End Sub
        cu

        Comment


        • #5
          Danke, Danke.

          Das Ding reagiert aber nicht darauf, wenn eine Karte in den CardReader eingelegt oder herausgenommen wird. Es reagiert nur auf Abziehen und Einstecken des USB Steckers, und dann gleich X-mal, weil 5 Laufwerke dargestellt werden und offensichtlich noch weitere Nachrichten über WM_DEVICECHANGE laufen.

          Code:
          private const int WM_DEVICECHANGE = 0x0219;
          private const int DBT_DEVICEARRIVAL = 0x8000;
          private const int DBT_DEVICEREMOVECOMPLETE = 0x8004;
          protected override void WndProc(ref System.Windows.Forms.Message m)
          {
          if(m.Msg == WM_DEVICECHANGE)
          {
          MessageBox.Show("WM_DEVICECHANGE");
          switch((int)m.WParam)
          {
          case DBT_DEVICEARRIVAL:
          MessageBox.Show("CD eingelegt");
          break;
          case DBT_DEVICEREMOVECOMPLETE:
          MessageBox.Show("CD ausgeworfen");
          break;
          }
          }
          base.WndProc(ref m);
          }
          Günther

          Comment


          • #6
            @Christian:
            In .NET gibt es den FileSystemWatcher, der auf FindFirstChangeNotification aufbaut. Das funktioniert aber nicht, wenn man auf ein CardReader-Laufwerk ohne eingelegte Karte zugreifen will. In der Zeile watcher.Path = d.Name; gibt es die Fehlermeldung "Der Verzeichnisname F:\ ist ungültig.". Und so kann ich nicht feststellen, wann hier eine Karte eingelegt wird.

            Code:
            DriveInfo[] allDrives = DriveInfo.GetDrives();
            foreach (DriveInfo d in allDrives)
            {
            if (d.DriveType == DriveType.Removable)
            {
            FileSystemWatcher watcher = newFileSystemWatcher();
            watcher.Path = d.Name;
            watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
            | NotifyFilters.FileName | NotifyFilters.DirectoryName;
            watcher.Filter = "*.*";
            watcher.Changed += newFileSystemEventHandler(watcher_Changed);
            watcher.EnableRaisingEvents = true;
            }
            Zuletzt editiert von Günther Weber; 29.12.2009, 15:26.
            Günther

            Comment


            • #7
              @Günther
              Nach über 1000 Beiträgen solltest du wissen, wie Code formatiert wird. Warum machst du es dir so schwer mit deinen Farben? Durch das Fehlen der Einrückungen ist es trotzdem nicht lesbar. Und so kann auch ein Moderator es nicht einfach nachbessern.

              Bitte beachte C#-Code formatieren!

              Jürgen

              Comment


              • #8
                Mehr als 1000 von den jetzt 1076 Beiträgen stammen aus Zeiten, in denen es noch ein Kunststück war, Code vernünftig darzustellen. Da war ich einer von wenigen, die das konnten. Such mal nach alten Beispielen im Borland C++ und Borland C++ Builder Forum.

                Jetzt gibt es mehr Möglichkeiten den Text zu formatieren. Wenn man Code einfügt, dann wird der aus der Entwicklungsumgebung zuvor in die Zwischenablage kopiert, mit Farbe, mit Einrückung. Und wenn der ach so benutzerfreundliche neue Editor die Einrückungen rausschmeißt, hab ich keine Lust, die wieder einzutippen. Bei den wenigen Codezeilen wird das schon nicht so schlimm sein.

                Ich verspreche Dir, falls ich in Zukunft hier wieder etwas aktiver werden sollte, dann sind meine Codebeispiele wieder erste Sahne...
                Günther

                Comment


                • #9
                  Das erklärt es; ich habe mich nur gewundert. Jürgen

                  Comment

                  Working...
                  X