Alle Windows User Auslesen
-
Du hast nicht wirklich den kompletten Code aus der MSDN kopiert und rufst diese "Funktion" nun aus Deinem Programm auf, oder?
Das ist ein schlechter Scherz, oder?
-
Hepi schrieb:
Das ist ein schlechter Scherz, oder?
Nein, sieht leider ganz so aus

@TheGeek: EIn bisschen mehr Eigeninitiative wäre nicht schlecht. Versuche doch mal das Code-Beispiel zu verstehen und schlage die verwendeten Funktionen nach.
-
ich habe mir estmal den ganzen code reingezogen und daran rumgebastelt ... leider verstehe ich große teile davon noch nicht desswegen hab ich gehofft dass mir jemand helfen kann ihn zu verstehen

Ich bin leider noch nicht so bewandert was WinApi etc. angeht -> aber desswegen bin ich ja hier, oder ?
-
Was genau verstehst du denn an dem Code nicht - ist doch eigentlich gut kommentiert

TheGeek schrieb:
Das Prob ist das bei mir nur der erste user angegeben wird ! Doch wo ist der Rest ? Gast? Admin ?
Oder auch anders wie kann ich einen schritt weiter gehen so das der zweite, dritte usw ... user ausgegeben werden ?
Du musst einfach wie im Code-Beispiel NetUserEnum in einer Schleife aufrufen

-
Alles was interressant ist steht hier, nur verwenden die wie immer nen haufen sch**** der nur verwirrt.
do // begin do { // HIER WERDEN DIE BENUTZER IN pBuf EINGELESEN nStatus = NetUserEnum(pszServerName, dwLevel, FILTER_NORMAL_ACCOUNT, // global users (LPBYTE*)&pBuf, dwPrefMaxLen, &dwEntriesRead, &dwTotalEntries, &dwResumeHandle); // // If the call succeeds, // // IS ERROR_MORE_DATA in nStatus DANN KONNTEN NICHT ALLE BENUTZER IN EINEM // DURCHGANG GELESEN WERDEN if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA)) { // HIER WIRD DER ZEIGER pBuf NACH pTmpbuf KOPIERT if ((pTmpBuf = pBuf) != NULL) { // // Loop through the entries. // // EINMAL FÜR JEDEN BENUTZER DIE SCHLEIFE AUSFÜHREN for (i = 0; (i < dwEntriesRead); i++) { assert(pTmpBuf != NULL); // DAS ASSERT UND DIE ÜBERPRÜFUNG IM if SIND SINNLOS DA HIER // pTmpBuf IN JEDEM FALL EINEN WERT != NULL HAT // WURDE JA WEITER OBEN SCHON GEPRÜFT if (pTmpBuf == NULL) { fprintf(stderr, "An access violation has occurred\n"); break; } // // Print the name of the user account. // // HIER WIRD DER NAMEN AUSGEGEBEN wprintf(L"\t-- %s\n", pTmpBuf->usri0_name); // DEN ZEIGER AUF DIE NÄCHSTE STRUKTUR MIT DEN BENUTZERDATEN // ZEIGEN LASSEN pTmpBuf++; // BENUTZERANZAHL UM 1 ERHÖHEN dwTotalCount++; } } } // // Otherwise, print the system error. // else fprintf(stderr, "A system error has occurred: %d\n", nStatus); // // Free the allocated buffer. // // HIER WIRD SPEICHER FREIGEGEBEN DER WEITER OBEN VOM SYSTEM GEHOLT WURDE // (OBERHALB DER DO-WHILE-SCHLEIFE) UND FÜR DIE SPEICHERUNG DER BENUTZER // VERWENDET WURDE if (pBuf != NULL) { NetApiBufferFree(pBuf); pBuf = NULL; } } // Continue to call NetUserEnum while // there are more entries. // // IST DER ANGEFORDERTE SPEICHERBEREICH NICHT GROß GENUG GEWESEN WIRD DAS GANZE // NOCHMALS DURCHGEFÜHRT UM DIE RESTLICHEN BENUTZER ZU HOLEN // dwTotalEntries wird hierbei mit der Zahl der bereits gelesenen Benutzer // übergeben wodurch die restlichen und nicht die gleichen wieder gelesen werden while (nStatus == ERROR_MORE_DATA); // end doIch hoffe mal ich konnte helfen

-
Danke SirLant !!!

jetzt werde ich mich in mein stilles Kämmerlein zurückziehen und den code mal ausführlich studieren und testen

Nette Grüße
TheGeek
-
Juhu ich hab´s Rausgebekommen !!!

Ist zwar eine "Sehr Unkonvensionelle" Lösung aber es macht das was es soll, basta.

hier nun der code:
// im deklarations bereich AnsiString user1, user2, user3, user4, user5, user6, user7, user8, user9, user10; int zaehlung; ... //weiter unten in der funkion // HIER WIRD DER NAMEN AUSGEGEBEN zaehlung++; //zählt mit wprintf(L"\t-- %s\n", pTmpBuf->usri0_name); //je nach zählung wird hier der String "rausgesucht" und mit dem User "gefüllt" if (zaehlung == 1) user1 = pTmpBuf->usri0_name; if (zaehlung == 2) user2 = pTmpBuf->usri0_name; if (zaehlung == 3) user3 = pTmpBuf->usri0_name; if (zaehlung == 4) user4 = pTmpBuf->usri0_name; if (zaehlung == 5) user5 = pTmpBuf->usri0_name; if (zaehlung == 6) user6 = pTmpBuf->usri0_name; if (zaehlung == 7) user7 = pTmpBuf->usri0_name; if (zaehlung == 8) user8 = pTmpBuf->usri0_name; if (zaehlung == 9) user9 = pTmpBuf->usri0_name; if (zaehlung == 0) user10 = pTmpBuf->usri0_name; ... // und wenn man die funkion aufruft ... wmain(0,0); // aufruf der funkion // ich lasse hier überprüfen ob die listboxeinträge voll sind // und wenn ja dann werden sie dargestellt sonst nicht if (user1 != "") WinUser->Items->Add(user1); if (user2 != "") WinUser->Items->Add(user2); if (user3 != "") WinUser->Items->Add(user3); if (user4 != "") WinUser->Items->Add(user4); if (user5 != "") WinUser->Items->Add(user5); if (user6 != "") WinUser->Items->Add(user6); if (user7 != "") WinUser->Items->Add(user7); if (user8 != "") WinUser->Items->Add(user8); if (user9 != "") WinUser->Items->Add(user9); if (user10 != "") WinUser->Items->Add(user10);Ach ja der eigentliche Grund warum ich das mit den Usern wissen wollte ist HIER ...
Grüße
TheGeek
-
oh mein gott. lern programmieren.
-
Weißt du wofür man Schleifen und Arrays einsetzt?
-
... und du sollst nich wmain aufrufen

-
@ OMG -> lass den quatsch mach es selber erstmal besser !!
@ SirLant -> ich habe auch erst über ein Array nachgedacht aber leider habe ich das noch nicht so gut hinbekommen ! Meine zeit als hobbyprogrammierer hatt erst begonnen ...
und desswegegen habe ich mich für etwas "unkonventionelles" entschieden@ flenders -> Sorry ich bin unverbesserlich
...@ ALL -> DANKE für die geduld und hilfe !
-
eine frage: was machst du, wenn ein system mehr als 10 user hat?
schon allein deshalb solltest du die schleifnversion benutzen.achja, die winapi is schon sehr schwer für den anfang, lern erstmal c bevor du die winapi benutzt(du benutzt doch c oder?)
-
otze schrieb:
eine frage: was machst du, wenn ein system mehr als 10 user hat?
schon allein deshalb solltest du die schleifnversion benutzen.achja, die winapi is schon sehr schwer für den anfang, lern erstmal c bevor du die winapi benutzt(du benutzt doch c oder?)
AnsiString ist doch ne Stringklasse aus der VCL wenn ich mich nicht irre
-
dann hängen wir ein "++" ans c, der code wird dadurch aber um keinen deut besser(ansistring ist die dümmste erfindung in der vcl, wieso kein wstring,oder eine klasse, der man einen wstring übergeben kann?)
-
otze schrieb:
dann hängen wir ein "++" ans c, der code wird dadurch aber um keinen deut besser(ansistring ist die dümmste erfindung in der vcl, wieso kein wstring,oder eine klasse, der man einen wstring übergeben kann?)
Ich weiß gar nicht was du gegen den Code hast

-
weils ja eigentlich nur schlechtes c+ ist^^