Announcement

Collapse
No announcement yet.

Windows Netzwerk-Anmeldung ausfüllen lassen.

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Windows Netzwerk-Anmeldung ausfüllen lassen.

    Ich möchte von einem Programm die Windows-Netzwerk- Anmeldung ausfüllen lassen und dann den OK-Button klicken lassen. (Es geht um eine automatische Anmeldung an einem Windows NT bzw. Linuxserver)
    Ich habe schon mehreres probiert, bin aber zu keiner richtigen Lösung gekommen. Kann mir jemand eine geeignete Methode zeigen????

    mfg

    TIF Master

  • #2
    Hallo,

    so einfach wird das nicht werden. Windows NT ist ein sicheres Betriebssystem, dass verschiedene Desktops verwendet: <br>
    a) WinLogon <br>
    b) ScreenSaver<br>
    c) WinSta0 (der Desktop des interaktiv angemeldeten Benutzers) <br>
    Das Betriebssystem zieht Mauern zwischen diesen verschiedenen Desktops hoch, um zu verhindern, dass ein freier übergreifender Zugriff möglich wird (es gibt da zwar einige API-Funktionen, aber die Hürde ist entspechend hoch).

    Um ein automatisches Login hinzubekommen, muss man sich mit dem Thema <b>Gina</b>-DLL beschäftigen. In der Hilfedatei des Microsoft Platform SDK sowie hier im Forum lassen sich über die Suche nach der Zeichenkette "Gina" Anhaltspunkte finden.

    P.S: Ich würde die Sache vergessen - Aufwand und Nutzen steht in keinem Verhältnis

    Comment


    • #3
      Entschuldigung, ich habe mich vielleicht falsch ausgedrückt.... <br>
      Es geht natürlich um das Ausfüllen der Netzwerkanmeldung bei Windows 9x. Mit Windows 9x möchte ich mich dann an einem Windows NT bzw. Linuxserver anmelden. Zum Ausfüllen der beiden Editboxen Benutzername
      und Kennwort benötige ich allerdings deren Handles, was mir bis jetzt
      noch nicht gelungen ist...

      mfg

      TIF Maste

      Comment


      • #4
        Hallo,

        das folgende Beispiel füllt den Paßwort-Dialog von <i>AOL</i> aus, indem über die mit <i>WinSight</i> ermittelten Namen der Fensterklassen nach dem zuständigen EDIT-Feld gesucht wird. Den Rest erledigt WM_SETTEXT.
        <pre>
        procedure TForm1.Button1Click(Sender: TObject);
        var
        hAOLWnd,
        hMDIWnd,
        hDlgWnd,
        hPwdWnd : hWnd;
        begin
        hAOLWnd := FindWindow('AOL Frame25', nil);
        if hAOLWnd <> 0 then
        begin
        hMDIWnd := GetWindow(hAOLWnd, GW_CHILD);
        if hMDIWnd <> 0 then
        begin
        hDlgWnd := GetWindow(hMDIWnd, GW_CHILD);
        if hDlgWnd <> 0 then
        begin
        hPwdWnd := FindWindowEx(hDlgWnd, 0, PChar('_AOL_Edit'), nil);
        MessageBeep(0);
        SendMessage(hPwdWnd, WM_SetText, 0, LongInt(PChar('Test')));
        end;
        end
        end;
        end;
        </pre>
        Man könnte nun versuchen, ob dieser Weg unter Windows 9x auch für das Anmeldefenster geht

        Comment


        • #5
          Jedesmal, wenn ich nach dem Ausfüllen der Netzwerkanmeldung
          von Windows 9.x frage, bekomme ich einen Source Code zum
          Ausfüllen des AOL - Passwortdialog.
          Mei Problem besteht jedoch darin, dass bei der Windows-Netzwerkanmeldung <i><b>zwei Editboxen</i></b> vorhanden sind,
          den die selben ClassName, nämlich "Edit", haben und sich
          somit nicht voneinander unterscheiden lassen. Also meine Frage: <br>
          Wie bekomme ich die unterschiedlichen Handles dieser zwei Editboxen????

          mfg

          TIF Maste

          Comment


          • #6
            Die Nicht-Programmierer werden jetzt höchstwahrscheinlich aufstöhnen ... die Älteren (Hagen? Gesine? :-D) wahrscheinlich zu Herztropfen greifen ...<br><br>Aber wenn du die Anmeldung meinst, die beim Starten von Windows erscheint, dann hast du die Möglichkeit, mit TweakUI z.B. festzulegen, mit welchem Namen und mit welchem Passwort du dich anmelden willst.<br><br>Tja, hat absolut <b>nichts</b> mit Delphi zu tun, funktioniert aber trotzdem ...<br><br>(grinsend) Gruß,<br>Mathias.<br><br>
            Ich will damit sagen: warum ein Programm schreiben, wenn´s schon eins gibt, dass die Funktionalität bietet. Und da TweakUI auch nichts kostet, gibt´s auch kein Argument wg. Shareware oder so.<br><br>
            Und überhaupt: hat das nicht schon mal einer gefragt? TIF Master, wenn du das Handle der ersten Editbox hast (hast du´s?), dann sende den gewünschten Text hin, und dann schick doch einfach so eine "Tastendruck"-Message ab. So als würdest du in diesem Fenster die TAB-Taste drücken! Damit bist du in der zweiten Editbox und kannst das Passwort absenden. (Nach dem Prinzip hab´ ich mal eine Art Ausfüller für die Felder von WINPOPUP geschrieben, und es hat grandios funktioniert.

            Comment


            • #7
              Die Idee mit TweakUI ist nicht schlecht, bringt mich aber auch nicht weiter, da es um ein Windows-Anmelde Programm geht, wo man sich
              mit Benutzername und Kennwort anmelden muss. Alle Benutzer des
              Computers werden dann protokolliert, d.h. man kann nachschauen,
              wer sich wann angemeldet hat. Diese Benutzerdaten soll das Programm
              dann gleich an die Windows-Netzwerkanmeldung weitergeben.
              Deshalb kann ich die TweakUI-Methode nicht anwenden, da sich
              die Benutzerdaten mit jedem Start von Windows ändern....<br>
              Aber das nur nebenbei....<br><br>
              Ich habe mittlerweile herausgefunden, das das Handle der zweiten
              Editbox immer um 8 größer ist, als das der ersten.<br><br>
              Bsp:<br><br>
              1. Editbox: 188 <br>
              2. Editbox: 196 <br><br>
              oder:<br><br>
              1. Editbox: 200 <br>
              2. Editbox 208 <br><br>
              Ich ermittle praktisch das Handle der ersten Box und zähle 8 dazu.<br>
              Kann man sich darauf verlassen, dass das immer so ist? Bei mir wars jedenfalls bisher immer so. Das Eintragen hat schon funktioniert,
              die Methode muss nur 100-prozentig sicher sein.
              <br><br>
              mfg

              TIF Maste

              Comment


              • #8
                Hi,

                was spricht denn dagegen den Spieß einfach umzudrehen, sodas der Nutzer sich erst im StandardLogin anmeldet und das andere Programm dann die Anmeldedaten ermittelt ??

                Gruß
                Gesine

                P.S:
                Wenn ich da schon Herztropfen bräuchte, weilte ich schon längst nicht mehr unter den Lebenden ;-) Irgendwie erinnere ich mich dunkel daran hier bereits eine ähnliche Diskussion über das Login geführt zu haben. Also muss ich meine Vita-Bualecithin-Dosis vielleicht doch erhöhen

                Comment


                • #9
                  ...Dann ergibt sich dasselbe Problem, nämlich das Auslesen der Daten
                  aus dem Anmeldungs-Fenster, wofür man schließlich wieder die Handles bräuchte. Eigentlich habe ich auch nicht vor, andere Methoden auszuprobieren, da das bei meinem Programm aus Gründen, die jetzt zu umfangreich zu erläutern wären, nicht möglich ist.
                  (Das Programm verwaltet Benutzergruppen. Für jede Gruppe gibt es ein
                  spezielles Kennwort, das im Programm integriert ist und der Linux-Server gibt dann via Samba die entsprechenden Rechte.)<br><br>
                  Das Ausfüllen über Tastaturbefehle wie das Senden der TAB-Taste ist
                  auch ungeeignet, da die Anmeldung verdeckt geschehen soll.<br>
                  Mit folgendem Quellcode bin ich erstmal zu einer Lösung gekommen:<br><br>
                  <font face="Courier New">
                  <pre>

                  procedure Netzwerkanmeldung_ausfüllen;
                  var
                  main,
                  EditFeld_1,
                  okbutton : hwnd;
                  begin
                  main:=findwindow(nil,'Netzwerkkennwort eingeben');
                  if main <> 0 then
                  begin
                  EditFeld_1:=findwindowex(main,0,Pchar('Edit'),nil) ;
                  if EditFeld_1 <> 0 then
                  begin
                  sendmessage(EditFeld_1,wm_settext,0,longint(Pchar( 'USER_02'))); //Füllt das Benutzername-Textfeld aus
                  sendmessage(EditFeld_1+8,wm_settext,0,longint(Pcha r('passwort'))); //Füllt das Kennwort-Textfeld aus
                  end;
                  okbutton:=findwindowex(main,0,nil,Pchar('OK'));
                  if okbutton <> 0 then
                  sendmessage(okbutton,bm_click,0,1); // klickt den Button
                  end;
                  end;

                  </pre></font>
                  Im übrigen gab es schon mal eine Diskussion über den Login-Dialog.
                  Das Problem beschäftigt mich schon länger und ich bin bisher noch nicht zu einer richtigen Lösung gekommen...<br><br>
                  Wem noch was dazu einfällt, kann sich gerne noch dazu äußern. Mich würde zum Beispiel interessieren, nach welchen Regeln Windows die Handles für die einzelnen Objekte vergibt. Gibt es da ein System??? (siehe vorletzten Kommentar von mir...)<br><br>

                  mfg

                  TIF Maste

                  Comment


                  • #10
                    Hallo,

                    ohne Fleiß kein Preis. Man könnte sich nun mit dem Borland-Tool <i>Resource Workshop</i> auf die Suche nach diesem Login-Dialog machen, um in den Ressourcen der Windows-DLLs nach dem <b>RC-Sourcecode</b> des Login-Dialogs zu suchen. Das könnte zum Beispiel so aussehen:
                    <pre>
                    ABOUTBOX DIALOG 22, 35, 185, 106
                    STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
                    CAPTION "Info über ANIMATE.EXE"
                    FONT 8, "MS Sans Serif"
                    LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
                    {
                    DEFPUSHBUTTON "OK", 1, 10, 82, 50, 14
                    PUSHBUTTON "Abbruch", 2, 70, 82, 50, 14
                    PUSHBUTTON "Help", 9, 130, 82, 50, 14
                    CONTROL "Generic1", 11, "SysAnimate32", 7 | WS_CHILD | WS_VISIBLE, 43, 10, 96, 54
                    }
                    </pre>
                    Jedes Child-Control erhält dort eine eindeutige numerische ID, über die man mit Hilfe der Win32-API-Funktionen (GetDlgItem
                    etc.) das Fensterhandle zur Laufzeit eindeutig ermitteln kann. In meinem Buch <i>Delphi Win32-Lösungen</i> ist ein Beispielprojekt zu finden, das mit dem Resource Workshop eigene RC-Dialoge zusammenbaut. In der Hilfe des Platform SDK dokumentiert Microsoft den Aufbau der RC-Dateien in aller Ausführlichkeit.

                    P.S: Das ich immer mein AOL-Beispiel verwendet, liegt einfach daran, das es ein bereits fertiges Beispiel ist. Ich habe nicht die Zeit, auf jede Frage eine speziell angepasste Antwort zusammenzustellen (dazu werden hier im Forum zu viele Fragen gestellt)

                    Comment


                    • #11
                      @Gesine: )

                      @Andreas: Sehe ich ebenso. Im Prinzip möchte ich mir hier nicht das Denken abnehmen lassen. Nur - und Hagen weiß das! - wenn ich absolut nicht mehr weiter weiß, dann nerve ... äh, bitte ... ;o) ich solange, bis ich ein fertiges Beispiel habe. Und wenn du z.B. einen Codeschnippsel hat, der mir zwar nicht die Lösung abnimmt, mich aber auf den richtigen Weg bringt, dann ist dagegen nichts einzuwenden.

                      Was ich beinah noch schlimmer finde (aber ich glaube, mit dem Problem kämpfen wohl einige Foren) sind Antwortenschreiber, die sich nicht die Mühe machen, die Antworten ihrer Vorgänger zu lesen. Da hast du dann die selbe Antwort mehrmals. Das fällt besonders bei Foren auf, die dich mit jedem erhöhten Beitragszähler in eine neue, bessere Gruppe aufnehmen ... Ein Schelm, wer Böses dabei denkt ...

                      Aber das Entwickler-Forum krankt (IMHO) am Problem, dass einige Antworten standardmäßig ausgeblendet werden. Wer das nicht berücksichtigt, beantwortet die schon beantwortete Frage ein weiteres Mal ...

                      Äh, was war die Frage?
                      )

                      Mathias

                      Comment

                      Working...
                      X