![]() |
TurboPascal Windows Benutzernamen anzeigen
Hallo,
es geht um Turbo Pascal 7, ich habe hier Beispiel Code mit dem ich den Computernamen eines Rechners ermitteln kann, egal ob Win9x oder WinXP, jedoch würde ich gerne den Benutzernamen angezeigt bekommen und nicht den Computernamen. Hat jemand eine idee wie man das hinbekommt !?
Code:
Function Netz_Name : String;
Var Register : Registers; Puffer : Array[1..15] Of Char; Temp : String[15]; Index : Byte; Begin Temp := ''; With Register Do Begin AH:= $5e; AL:= $0; DX := Ofs(Puffer); DS := Seg(Puffer); Intr($21,Register); If CH = 1 Then Begin For Index := 1 to 15 Do Temp := Temp + Puffer[Index]; Temp := FCutBlankVH(Temp); Temp := UpString(Temp); End;{if} End;{with} Netz_Name := Temp; End;{Function Netz_Name} mfg TUX |
Re: TurboPascal Windows Benutzernamen anzeigen
Keine Ahnung, wo der Code den Computernamen herholt, scheint aber mehr als abenteuerlich zu sein die Methode. Für beides gibt es API-Funktionen:
Delphi-Quellcode:
Und eine Forensuche hätte dir auch schon die Antwort gegeben. Das nächste mal bitte erst suchen.
function GetCurrentUserW: WideString;
var Size : DWORD; begin Size := MAX_COMPUTERNAME_LENGTH * 2 + 1; SetLength(Result, Size); if GetUserNameW(PWideChar(Result), Size) then SetLength(Result, Size) else Result := ''; end; |
Re: TurboPascal Windows Benutzernamen anzeigen
Zitat:
Turbo Pascal 7 ist nicht Windows ;) @TUX_der_Pinguin: Schau die mal die Umgebungsvariabeln an, die sollte man auf unter DOS ermitteln können. In USERNAME steht dann eigentlich auch der selbige drinne. ...:cat:... |
Re: TurboPascal Windows Benutzernamen anzeigen
Gut, er sprach zwar von Turbo Pascal 7 aber eben auch von Windows 98 und Windows XP, daher bin ich davon ausgegangen, es ginge im die Windows Benutzernamen in einem Programm, das unter Windows läuft.
|
Re: TurboPascal Windows Benutzernamen anzeigen
Ja es geht um den Windows Benutzernamen in einem quasi Dos Programm welches in TurboPascal geschrieben ist.
Daher sind Windows API Funtkionen von Delphi nicht verfügbar. An die Umgebungsvariablen habe ich auch gedacht nur gibt es 'USERNAME' unter WinXP aber nicht unter Win9x. Daher auch keine Lösung. |
Re: TurboPascal Windows Benutzernamen anzeigen
Zitat:
|
Re: TurboPascal Windows Benutzernamen anzeigen
Also ich wüßte nicht wie ich in einem TurboPascal Programm Windows API Funktionen rein bekomme.
|
Re: TurboPascal Windows Benutzernamen anzeigen
Was ist denn eigentlich ein "quasi" DOS-Programm? Entweder Schwanger oder nicht, "quasi" schwanger gibt es nicht. :?
|
Re: TurboPascal Windows Benutzernamen anzeigen
Ich wollte damit ausdrücken das es ein DOS Programm ist welches unter Windows läuft,
aber diese ganze diskussion bringt mir nix, ich würde gern mit dem Problem weiter kommen den Benutzernamen von einem Windows PC in einem DOS Programm anzuzeigen. |
Re: TurboPascal Windows Benutzernamen anzeigen
Ist es wirklich ein DOS-Programm oder ein Consolen-Programm?
Für ein DOS-Programm kannst du die Umgebungsvariable USERNAME abfragen, für ein Consolen-Programm ist Luckie-Lösung zu empfehlen. |
Re: TurboPascal Windows Benutzernamen anzeigen
Es ist ein DOS Programm im guten alten Turbo Pascal 7, und die Umgebungsvariable
bringt mir nix da die Variable 'USERNAME' unter Win9x nicht vorhanden ist, bei WinXP hingegen schon, aber wir haben hier auch noch ein paar alte Win9x kisten stehen. |
Re: TurboPascal Windows Benutzernamen anzeigen
Wir reden also von einem wasch echten 16-Bit DOS Programm? OK, dann kann man natürlich keine Windows-API Funktionen benutzen. Wäre schön, wenn das mal etwas früher deutlich geworden wäre.
|
Re: TurboPascal Windows Benutzernamen anzeigen
Das hatte ich versucht klar zu machen, habe mich wohl etwas falsch ausgedrückt.
|
Re: TurboPascal Windows Benutzernamen anzeigen
Mal ne dumme Frage: gab es unter DOS eigentlich schon einen Benutzernamen? Netzwerkfunktionen waren doch im DOS eigentlich nicht enthalten, soweit ich mich erinnere. Dazu musste dann ein spezieller Netzwerk-Client z.B. von Novell installiert werden, und dann gabs auch eine Anmeldung mit einem Benutzernamen.
Wenn der Benutzername aber nicht integraler Bestandteil von DOS war, wirst Du ihn auch nicht mit einem Intr-Aufruf auslesen können. Ist alles nurmal so 'ne Vermutung von mir. |
Re: TurboPascal Windows Benutzernamen anzeigen
Ich weiß nur das das Code Beispiel dazu diente den Rechnernamen zuermitteln und das ursprünglich
davon ausgegangen wurde das das der Benutzername sei, jedoch als Rechnername und Benutzer nicht mehr gleich hießen fiel auf das mit der Funktion nur der Rechnername zu bekommen ist. Ich vermute das es möglich ist auch an den Benutzernamen zu kommen, aber wissen tu ich das nicht. |
Re: TurboPascal Windows Benutzernamen anzeigen
DOS ist ein Singleuser-Betriebssystem.
Win98 selber ist 'nur' ein Grafischer Aufsatz auf DOS. Zwar kann man dort mehrere User anlegen, aber das, was man heutzutage als Multiuser versteht ist das beiweitem nicht. Und da DOS keine Benutzer kennt wirst Du mit einem DOS-Programm auch keine Benutzernamen auslesen können. Vielleicht gibt es igrnedwelche bösen Hacks, um ggf. aus einem aktiven Windows98 den Namen des aktuell angemeldeten Benutzers auszulesen, aber ich befürchte, das wird wenn überhaupt möglich nicht wirklich einfach. |
Re: TurboPascal Windows Benutzernamen anzeigen
Ich habe es derweil so gelöst das im Programm code steht welcher Benutzer hinter welchem
Computernamen steckt, aber wirklich flexibel ist das nicht, ich dachte auch schon das ich mir ein kleines consolen Programm mit Delphi schreibe welches den Benutzernamen aus gibt ich weiß garde nur nicht mehr wie ich in Turbo Pascal ein externes Programm ausführe und die Rückgabe einlesen kann, ohne die Ausgabe in eine Datei zu schreiben und diese dann wieder auszulesen. |
Re: TurboPascal Windows Benutzernamen anzeigen
Führst du dein Programm auch unter REAL DOS aus?
Oder benutzt du immer ein DOS mit Windows? Probier doch mal FreePascal ? |
Re: TurboPascal Windows Benutzernamen anzeigen
Das Programm läuft immer nur in einer DOS Box unter Windows.
|
Re: TurboPascal Windows Benutzernamen anzeigen
Ich kann zwar nichts mehr zur Diskussion beitragen, aber:
Zitat:
...:cat:... |
Re: TurboPascal Windows Benutzernamen anzeigen
Die Windows VXD Dinger haben seit jeher über den bösen "Exception (ungültiger Opcode) in VM" Weg eien API. Darüber kann man auch den Nutzernamen ermitteln. Ich werde heute Abend mal meine Bücher wälzen und das raussuchen.
|
Re: TurboPascal Windows Benutzernamen anzeigen
Zitat:
Mit Turbo Pascal 7 konnte man nur Realmodeanwendungen erstellen. Mit Borland Pascal 7 konnte man jedoch auch Windows 16bit Programme unter Dos erstellen -> Crosscompiler. -- Ich kann mich irgendwie erinnern, dass es für DOS Bibilotheken gab/gibt, die Windowsbibilotheken laden konnten, um lange Dateinamen anzeigen zu können. Vielleicht hilfts? |
Re: TurboPascal Windows Benutzernamen anzeigen
Abend!
Wir wärs, wenn Du Dir ein Mini NonVCL Windows Programm schreibst, welches Dein DOS Programm aufruft und den Benutzernamen als Parameter übergibt? |
Re: TurboPascal Windows Benutzernamen anzeigen
Netzwerke und Benutzernamen gab es durchaus schon unter Dos! Auch in nem "Singleuser"-Betriebssystem kann man sich an nem Netzwerk anmelden, zudem war nicht jedes Dos so... da gabs z.B. ConcurrentDos, auch kein schlechteres Multitasking als Win 3.1 ;)
Ich erinnere mich auch grob an Netzwerkprogrammierung unter TP7... leider hab ich das immer nur für Novell-Netze (sprich laufendem Novell-Client) gemacht, ich denke aber mal, hier dürfte es um Windows-Netze gehen. Für Novell Netware gab's da dicke Bücher direkt von Novell... für DOS selber auch das IBM Technical Reference Manual mit DOS-Interrupts, allerdings noch lange nicht modern genug für Netzwerkkrams... beides wahrscheinlich nicht mehr zu bekommen oder nur noch zu Sammlerpreisen, aber es gab irgendwann auchmal eine wirklich riesige "Datenbank" mit Infos zu so ziemlich jedem Software-Interrupt, den man sich nur vorstellen kann. Wie hieß die bloß? Ein wichtiges Suchstichwort dürfte auf jeden Fall Interrupttabelle sein... |
Re: TurboPascal Windows Benutzernamen anzeigen
Zitat:
Zitat:
Zitat:
Zitat:
![]() So, ich habe wohl zuviel versprochen. Die VxD's haben keine Möglichkeit den Usernamen zu ermitteln. Du kannst ja selber nochmal schauen: ![]() ![]() |
Re: TurboPascal Windows Benutzernamen anzeigen
Hallo,
man kann unter TP auch externe Programme mittels exec ![]() Mal schauen, ob mein Noteooki das kann. Gruß Horst |
Re: TurboPascal Windows Benutzernamen anzeigen
@Horst_
Daran hatte ich auch schon gedacht aber fand das bis jetzt nicht so die saubere Lösung eine Temporärdatei dafür zuverwenden. @Muetze1 Also die Interrupt Liste hatte ich auch schon mal gesehen jedoch scheitert es bei mir an der Assembler Programmierung. So das ich nicht genau weiß wie ich den Befehl absetzte bzw. das Ergebnis einlesen kann. |
Re: TurboPascal Windows Benutzernamen anzeigen
Mehr "Assembler" als in der von Dir selber eingangs geposteten Funktion brauchst Du dazu meist gar nicht. Such mal in der Liste nach dem Interrupt mit den Parametern, die Dein Beispiel enthält, dann dürfte Dir die Analogie klarwerden ;)
![]() AX = word; AH & AL sind dessen beide bytes (high & low), dein AH = $5E und AL = $00 entspricht als AX = $5E00. Und Du löst Interrupt 21 aus. Du musst also "nur" noch die Funktion für "GET USER NAME" (wahrscheinlich anders beschrieben, sonst wäre es ja zu einfach) für Deine Umgebung finden und ziemlich parallel dazu umsetzen. |
Re: TurboPascal Windows Benutzernamen anzeigen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz