(Erledigt) Wie.. Meldung Datenträger einlegen unterdrücken ?

Anfängerfragen zum Programmieren mit PureBasic.
Fabio
Beiträge: 234
Registriert: 29.08.2004 14:47

(Erledigt) Wie.. Meldung Datenträger einlegen unterdrücken ?

Beitrag von Fabio »

Hallo,
wie kann ich die Windowsmeldung "Datenträger einlegen" unterdrücken?
Bild

Es geht um folgendes:
Ich such diverse Laufwerke nach einer Datei ab und lasse es mir auf der Console anzeigen
ob sie vorhanden ist oder nicht.

Welche Lauferke vorhanden sind, ist mir nicht bekannt, also fahre ich sie einfach von A-Z an.
Das ganze funktioniert ansich ganz gut, nur bekomme ich hier bei mir, wenn es zum Laufwerk H:\ geht,
immer diese Meldung.

Das Laufwerk H:\ ist eigendlich bei mir nicht vorhanden, nur vermute ich das hier das versteckte Laufwerk von
Acronis gemeint ist, wo eines meiner Vollbackups gespeichert ist.

Hier der eigentlich simple Code dazu:

Code: Alles auswählen

EnableExplicit

Global i.a

OpenConsole()

For i = 65 To 90
  
  If FileSize( Chr(i)+":\fabbio.txt" )  < 0
    PrintN("Datei fabbio.txt in: "+Chr(i)+":\  nicht gefunden " )
    Delay(1000)
  Else
    PrintN("Datei in: "+Chr(i)+":\fabbio.txt  gefunden "  )
    Delay(3000)
   EndIf
Next 

      

CloseConsole()
Zuletzt geändert von Fabio am 24.06.2012 14:43, insgesamt 1-mal geändert.
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: Wie... Meldung -> "Datenträger einlegen" unterdrücken ?

Beitrag von Bisonte »

Das sieht nach Win 7 aus....

Also bei mir rauscht es komplett durch, ohne Fehlermeldung.

Allerdings habe ich auch keine versteckten Laufwerke. Du könntest zum testen mal die API missbrauchen
vielleicht klappts... (Wobei ich mir denke FileSize() macht auch nur FindFirstFile_() )

Code: Alles auswählen

Procedure FileExists(FileName.s)
  Protected Result.i
  Protected Find.WIN32_FIND_DATA
  Result = FindFirstFile_(FileName,Find)
  FindClose_(Result)
  If Result <> #INVALID_HANDLE_VALUE
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure

OpenConsole()

For i=65 To 90
  If FileExists(Chr(i)+":\fabbio.txt") 
    PrintN("Gefunden auf "+Chr(i))
    Delay(1000)
  Else
    PrintN("Nix auf "+Chr(i))
    Delay(1000)
  EndIf
Next i

CloseConsole()
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Wie... Meldung -> "Datenträger einlegen" unterdrücken ?

Beitrag von Nino »

Fabio hat geschrieben:wie kann ich die Windowsmeldung "Datenträger einlegen" unterdrücken?
Du kannst folgendes versuchen:

Code: Alles auswählen

EnableExplicit

Define prevErrMode.i, i.i, file$

OpenConsole()

prevErrMode = SetErrorMode_(#SEM_FAILCRITICALERRORS)
For i = 'A' To 'Z'
   file$ = Chr(i) + ":\fabbio.txt"
   Print("Datei '" + file$ + "' ")
   If FileSize(file$) < 0
      Print("nicht ")
   EndIf
   PrintN("gefunden.")
   Delay(1000)
Next
SetErrorMode_(prevErrMode)  ; vorigen Zustand wiederherstellen

CloseConsole()
Grüße, Nino
Fabio
Beiträge: 234
Registriert: 29.08.2004 14:47

Re: Wie... Meldung -> "Datenträger einlegen" unterdrücken ?

Beitrag von Fabio »

@ Bisonte,
Oops. Ja es ist Win7, ich habe meine Signatur nun geändert.
Dein Code gibt bei mir auch diese Meldung aus.

@Nino,
mit Deinem Code läuft es durch.
Wenn ich das richtig verstehe, ist das SetErrorMode_ etwas aus der Win API.

Hier das ganze als Filmchen.
http://youtu.be/ZL6oRTmgRcY

Aber hier erstmal ein dickes Dankeschön für Eure Hilfe.
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Wie... Meldung -> "Datenträger einlegen" unterdrücken ?

Beitrag von Nino »

Fabio hat geschrieben:Wenn ich das richtig verstehe, ist das SetErrorMode_ etwas aus der Win API.
Ja, richtig. Um nähere Informationen dazu zu bekommen, kannst Du einfach nach dem Begriff googlen; aber ohne den _ am Ende. Der wird nur von PureBasic benutzt, um die API-Funktionen von den eigenen Funktionen bzw. Befehlen zu unterscheiden.

Grüße, Nino
Antworten