C# Automatischer Login (externe Anwendung)

Dr_197

Cadet 4th Year
Registriert
Sep. 2010
Beiträge
76
Hi zusammen,

ich habe eine Dotnet-Anwendung vorliegen, in welcher ich mich beim Start einloggen muss. Ich würde nun gern beim Erscheinen des Login-Fensters die Eingabe meiner Zugangsdaten automatisch durchführen lassen.

Dies würde ich gern mit Hilfe einer C#- oder VB.NET-Anwendung programmieren.
Da ich mich diesbezüglich allerdings eher schlecht auskenne weiß ich nicht an welcher Stelle ich hier anfangen muss.
Durch das, was ich bisher gelesen habe, glaube ich, dass ich die Windows API dafür benötige um per Timer herauszufinden ob das Login-Fenster geöffnet ist. Ich finde allerdings niemanden der sowas in der Art schonmal erstellt hat und somit weiß ich weder welche API-Funktion ich benötige, noch weiß ich wie ich mein Login-Fenster programmiertechnisch finden kann.

Falls mir jemand helfen kann, bitte keine fertigen Quellcode posten sondern nur eine kleine Starthilfe, so dass ich selbst dabei etwas lernen kann :)

Vielen Dank!
 
hmmm...
mit der Klasse Process könntest du schonmal herausfinden ob die Anwendung gestartet ist,
oder auch die Anwendung selbst starten aus deiner C# Anwendung.
Falls der Cursor beim starten der Dotnet Anwendung schon im Benutzernamenfeld ist könntest du vll mit der Klasse/Methode Sendkeys die Login Daten schicken und mit Tab ins nächste Feld, z.b. Kennwortfeld dann dasselbe machen.
 
Code:
private bool isProcessStarted(string processName)
        {
            Process [] myProcesses = Process.GetProcessesByName(processName);
            return myProcesses.Length > 0;
        }

Code:
if (isProcessStarted("outlook")) ...
 
Mit der Process-Klasse lässt sich aber doch nicht herausfinden ob ich mich beim Login-Form befinde oder im Hautpteil der Anwendung, daher habe ich eher an die Win API gedacht.
 
Ja, damit solltest du die Formtitel checken und gleichzeitig auf den Fall eingehen, dass der DAU mehrmals die Anwendung mit dem Loginfenster offen hat.
 
Hm, woran unterscheiden sich denn die Loginform und das Hauptprogramm?
Wenns nicht der Name des Prozesses ist, ists dann der Titel?

Dann eben so etwas:

Code:
if(myProcess.MainWindowTitle.StartsWith("TITLE")) ...

Ansonsten müsstest du bitte sagen, woran du sie unterscheiden kannst.
 
Ich habe mir gedacht man kann die Fenster anhand deren Titel unterscheiden. In "Process.MainWindowTitle" steht allerdings nur ein leerer String, daher scheint hier nicht der Fenstertitel verwendet zu werden :(
Ergänzung ()

Also das Window-Handle habe ich nun schon gefunden. Dazu verwende ich den folgenden Quelltext:

Code:
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
End Function


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    '// retrieve the handler of the window  
    Dim wHandle As Integer
    wHandle = FindWindow(Nothing, "User Login")

    If wHandle > 0 Then
        MsgBox("Success")
    End If
End Sub

Nun steht das nächste Problem an, denn ich muss die Textboxen füllen. Die schnellste Lösung die mir einfällt wäre, dass ich die Userdaten mit "Sendkey" sende. Allerdings fände ich eine Lösung über die API schöner, in der ich nicht blind die Keys sende sondern explizit die Textboxen (User, Password) fülle.
 
Hallo, wenn Du Zugriff auf die .NET-Anwendung, an welcher Du Dich anmelden mußt, hast, dann kannst Du das mit der .NET-API machen. Das Stichwort heißt "Single Sign On" und "Integrierte Windowsauthentifizierung". Ich habe das leider selbst aber noch nicht machen müssen. Wenn Du nur ein Script brauchst, welches Dich an der Anwendung anmeldet und Du das Tippen sparen möchtest, könnte ich Dir http://de.autohotkey.com/ empfehlen. Lies Dir mal die "Ersten Schritte" durch. Das ist ziemlich einfach. Damit kannst Du, das Programm starten, prüfen, ob das Login-Fenster aktiv ist und Dich anmelden. Das sollte mit 3 oder 4 Zeilen Code erledigt sein.
 
Naja das stellt mich nicht so richtig zufrieden. Ich würde es lieber selbst programmieren damit ich dabei auch was lerne. Ich werde mein Glück dann erstmal weiter bei Google und den Win-APIs suchen. Falls das letztendlich scheitert kann ich immernoch auf andere Programme zurückgreifen.
 
Hmmja, wenn du es unbedingt alleine machen willst (was ich hier jetzt nicht empfehle), kannst du über Net.Sockets eine lokale "Netzwerk"verbindung zwischen den Programmen aufstellen, über die dann die Daten gesendet werden.
 
Da kenne ich mich zwar 0 aus, aber das hört sich an als würde man (wie man so schön sagt) mit Atombomben auf Spatzen werfen :D
 

Ähnliche Themen

Zurück
Oben