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!");
}
}