Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TurboPascal Windows Benutzernamen anzeigen (https://www.delphipraxis.net/90415-turbopascal-windows-benutzernamen-anzeigen.html)

TUX_der_Pinguin 17. Apr 2007 09:22


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

Luckie 17. Apr 2007 10:04

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:
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;
Und eine Forensuche hätte dir auch schon die Antwort gegeben. Das nächste mal bitte erst suchen.

sakura 17. Apr 2007 10:09

Re: TurboPascal Windows Benutzernamen anzeigen
 
Zitat:

Zitat von Luckie
Für beides gibt es API-Funktionen:

Windows API-Funktionen in einem DOS-Programm? :gruebel:

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:...

Luckie 17. Apr 2007 10:11

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.

TUX_der_Pinguin 17. Apr 2007 10:16

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.

Luckie 17. Apr 2007 10:25

Re: TurboPascal Windows Benutzernamen anzeigen
 
Zitat:

Zitat von TUX_der_Pinguin
Daher sind Windows API Funtkionen von Delphi nicht verfügbar.

Abgesehen mal davon dass diese Aussage keinen Sinn ergibt, kann man sich die Windows-API Funktionen auch selber Importieren. (Einfach aus der Windows.pas rauskopieren.)

TUX_der_Pinguin 17. Apr 2007 10:38

Re: TurboPascal Windows Benutzernamen anzeigen
 
Also ich wüßte nicht wie ich in einem TurboPascal Programm Windows API Funktionen rein bekomme.

Luckie 17. Apr 2007 10:41

Re: TurboPascal Windows Benutzernamen anzeigen
 
Was ist denn eigentlich ein "quasi" DOS-Programm? Entweder Schwanger oder nicht, "quasi" schwanger gibt es nicht. :?

TUX_der_Pinguin 17. Apr 2007 10:44

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.

Bernhard Geyer 17. Apr 2007 10:46

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.

TUX_der_Pinguin 17. Apr 2007 10:51

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.

Luckie 17. Apr 2007 11:01

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.

TUX_der_Pinguin 17. Apr 2007 11:02

Re: TurboPascal Windows Benutzernamen anzeigen
 
Das hatte ich versucht klar zu machen, habe mich wohl etwas falsch ausgedrückt.

DelphiKlaus 17. Apr 2007 11:19

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.

TUX_der_Pinguin 17. Apr 2007 11:27

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.

Phoenix 17. Apr 2007 11:33

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.

TUX_der_Pinguin 17. Apr 2007 12:29

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.

Dezipaitor 19. Apr 2007 19:23

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 ?

TUX_der_Pinguin 20. Apr 2007 12:29

Re: TurboPascal Windows Benutzernamen anzeigen
 
Das Programm läuft immer nur in einer DOS Box unter Windows.

sakura 20. Apr 2007 13:54

Re: TurboPascal Windows Benutzernamen anzeigen
 
Ich kann zwar nichts mehr zur Diskussion beitragen, aber:
Zitat:

Zitat von TUX_der_Pinguin
Das hatte ich versucht klar zu machen, habe mich wohl etwas falsch ausgedrückt.

Du hast Dich perfekt ausgedrückt. Wenn andere nicht verstehen, was Turbo Pascal 7 ist, dann ist es nicht Deine Schuld. Turbo Pascal ist immer nur rein DOS gewesen und Windows konnte man nur mit Turbo Pascal für Windows (max. 1.5) oder Borland Pascal für Windows entwickeln. :zwinker:

...:cat:...

Muetze1 20. Apr 2007 16:13

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.

Dezipaitor 20. Apr 2007 19:23

Re: TurboPascal Windows Benutzernamen anzeigen
 
Zitat:

Zitat von sakura
Ich kann zwar nichts mehr zur Diskussion beitragen, aber:
Zitat:

Zitat von TUX_der_Pinguin
Das hatte ich versucht klar zu machen, habe mich wohl etwas falsch ausgedrückt.

Du hast Dich perfekt ausgedrückt. Wenn andere nicht verstehen, was Turbo Pascal 7 ist, dann ist es nicht Deine Schuld. Turbo Pascal ist immer nur rein DOS gewesen und Windows konnte man nur mit Turbo Pascal für Windows (max. 1.5) oder Borland Pascal für Windows entwickeln. :zwinker:

...:cat:...

Also du hast Recht und Unrecht!
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?

Sunlight7 20. Apr 2007 21:05

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?

CCRDude 20. Apr 2007 22:32

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...

Muetze1 20. Apr 2007 22:48

Re: TurboPascal Windows Benutzernamen anzeigen
 
Zitat:

Zitat von Dezipaitor
Mit Borland Pascal 7 konnte man jedoch auch Windows 16bit Programme unter Dos erstellen -> Crosscompiler.

Nicht zu vergessen: Protected Mode Programme. Also mit DPMI Programme im PM.

Zitat:

Zitat von Dezipaitor
Ich kann mich irgendwie erinnern, dass es für DOS Bibilotheken gab/gibt, die Windowsbibilotheken laden konnten, um lange Dateinamen anzeigen zu können.

Das sind genau die API's die ich oben erwähnte...

Zitat:

Zitat von CCRDude
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.

Novell hatte komplette API's auf DOS Ebene (NetWare Shell NETX) geboten. Die Windows Netzwerksysteme waren hauptsächlich in Windows. Diese alten Netzwerke die es von Windows für DOS gab, sind heute nicht mehr im Einsatz.

Zitat:

Zitat von CCRDude
..., 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...

Ralf Brown's Interrupt List (RBIL). Ich verweise dabei auf "The undocumented DOS", "The undocumented PC" und "The undocumented Windows" sowie "DOS internals" aus der Andrew Schulmann Serie.

So, ich habe wohl zuviel versprochen. Die VxD's haben keine Möglichkeit den Usernamen zu ermitteln. Du kannst ja selber nochmal schauen: VxD API's. Ansonsten sollte dir vllt. dieser Aufruf schon weiterhelfen: NETWORK - PC LAN PROG v1.31+ - GET LOGGED ON USER NAME

Horst_ 21. Apr 2007 06:47

Re: TurboPascal Windows Benutzernamen anzeigen
 
Hallo,

man kann unter TP auch externe Programme mittels exec Siehe hier mit Beispiel aufrufen, wie oben schon vorgeschlagen wurde, kann man dann per Delphi mit einem Consolen-Programm den Usernamen in eine Datei schreiben lassen, welche man ja anschliessend löschen kann.
Mal schauen, ob mein Noteooki das kann.

Gruß Horst

TUX_der_Pinguin 23. Apr 2007 08:50

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.

CCRDude 23. Apr 2007 10:35

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 ;)
Int 21/AX=5E00h - 10NET v5.0 - GET MACHINE NAME

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.

Muetze1 23. Apr 2007 11:06

Re: TurboPascal Windows Benutzernamen anzeigen
 
Zitat:

Zitat von TUX_der_Pinguin
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.

Wie schon gesagt, hat es mit Assembler nichts zu tun. Du hast in deinem Beispiel schon selber Interrupts aufgerufen ohne Assembler...


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