Programmieren - alles kontrollieren 4.934 Themen, 20.613 Beiträge

GetDriveType gibt 4 aus trotz keiner Verbindung

Sovebämse / 10 Antworten / Flachansicht Nickles

Hallo zusammen

Ich möchte in einem Programm (C++) abfragen, ob ein Netzlaufwerk verbunden ist. Dies habe ich über GetDriveType realisiert. Leider ist es so, dass dieser Befehl sporadisch aber häufig trotz keiner bestehenden Verbindung (selbst nach Neustart) eine 4 ausgibt statt einer 1. Was kann der Grund sein?

Vielen Dank
Thomas

bei Antwort benachrichtigen
Sovebämse Nachtrag zu: „Also als Erstes habe ich eine do-while-Schleife gemacht, damit bei einer falschen Passworteingabe Laufwerksbuchstabe nicht ...“
Optionen

Ich krieg die Krise... jetzt hab ich noch was rumgebastelt, noch eine zusätzliche Abfrage implementiert, die anfangs schaut, ob das Netzlaufwerk schon verbunden ist und eine entsprechende Antwort ausgibt und nun habe ich das Problem schon wieder, dass sporadisch die Schleife beendet wird mit der Meldung, die Verbindung mit dem Netzlaufwerk habe geklappt, obwohl es nicht so ist, auch nicht sein kann, da meine VPN-Verbindung aus ist.

Ich schreib hier mal meinen Code (nicht lachen, ich denke, das sieht ev. eher amateurhaft aus):

Funktion für LW-Buchstabe abfragen:

int checkDriveLetter(WCHAR drive[])
 { 
    UINT driveType = 0;
    driveType = GetDriveType(drive);
    if (driveType != 1 && driveType != 0)
        return 1;
    else
        return 0;
 }

Ablauf im Programm bei Klick auf Netzlaufwerk verbinden:

void Tester2Frame::OnButton3Click(wxCommandEvent& event)
{
int checkDrv = checkDriveLetter(L"U:\\"); //Einlesen, ob Laufwerksbuchstabe da.
int checkMe = 0; //prüft später, ob die Verbindung anfangs bereits bestand.
   

if (checkDrv == 1) //prüft, ob das Laufwerk jetzt schon da ist.
    {
       wxMessageBox("Das Netzlaufwerk ist bereits verbunden!");
       checkMe = 1;
    }

    else //falls LW nicht da, soller folgendes machen.
    {
      while (checkDrv == 0) /so lange LW nicht da, folgendes machen:
        {
            wxTextEntryDialog* test=new wxTextEntryDialog(this,"Bitte das Passwort eingeben:","Passwort","",wxOK|wxTE_PASSWORD);
            test->ShowModal();
            wxString passWordNew = test->GetValue();
            wxMessageBox(passWordNew);
            wxString netUsePw = ( "NET use u: \\\\UNT-Server01\\Plattform /User:xy ");
            WinExec( netUsePw + passWordNew, SW_HIDE );
            int i = 0; //Zähler für nächste Schleife.
            checkDrv = checkDriveLetter(L"U:\\"); //prüft, Laufwerk jetzt da?
            Gauge1->SetValue(0); //Fortschrittsanzeige auf Null
            Gauge1->Show(true); //Fortschrittsanzeige einblenden
            int zaehler = 0; /Zähler für Fortschritsanzeigebalken
      

            while (i < 5 && checkDrv == 0) //mach das bis das LW da ist oder 2,5 Sekunden vorbei.
            {
                Sleep(500);
                checkDrv = checkDriveLetter(L"U:\\");
                i = i + 1;
                zaehler = zaehler + 1;
                Gauge1->SetValue(zaehler);
            }
         }
    }

if (checkDrv == 0) //jetzt soll er melden, falls immer noch LW nicht da.
    {
        wxMessageBox("Das Passwort war falsch. Bitte erneut eingeben.");
    }


if (checkMe == 0) //falls nicht afangs die Verbindung schon bestand, soll er folgendes melden.
    {
        Gauge1->SetValue(5); //Fortschritt auf Maximum.
        wxMessageBox("Anmeldung erfolgreich!");
    }
   
}

bei Antwort benachrichtigen