Netzwerkanmeldung ausfüllen

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Mausebaer
Posts: 9
Joined: 24 Apr 2019, 12:00

Netzwerkanmeldung ausfüllen

24 Apr 2019, 13:15

Hallo zusammen,

bin neu hier und kenne mich noch nicht aus.

Ich möchte die Netzwerkanmeldung eines Rechners in meinen Netzwerk auf den Hauptrechner automatisieren bzw. vereinfachen
Der Aufruf des freigegebenen Ordners lautet inetwa so: "\\Celsiuswin10\users\Maus\Desktop"
Dann öffnet sich folgendes Fenster, das befüllt werden muß mit "[email protected]" als Benutzer und einem Passwort "xyz123":
Netzwerk-Verbindung.gif
Netzwerk-Verbindung.gif (12.86 KiB) Viewed 3015 times
Das ganze dann mit Enter abschließen.

Könnte mir jemand ein Skript basteln, das funktioniert. Hab schon viel herumprobiert, es aber nicht hingekriegt.

Vielen Dank,

Gruß
Wolfgang
just me
Posts: 9423
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Netzwerkanmeldung ausfüllen

25 Apr 2019, 04:34

Moin,
bin neu hier und kenne mich noch nicht aus.
Dann wollen wir mal versuchen, das zu ändern. ;)

Zunächst solltest Anmeldefenster auf den Bildschirm bringen und Dir mit dem Window Spy (den findest Du im Startmenü unter "AutoHotkey" oder im Traymenü eines laufenden AHK-Skripts) Informationen verschaffen. Wichtig sind:
  • der Fenstertitel, wenn er kostant ist bzw. konstante Teile enthält,
  • die Fensterklasse (ahk_class)
  • das ausführende Programm (ahk_exe)
Außerdem wäre es gut, sich die ClassNN der beteiligten Steuerelemente zu holen.

Jetzt kannst Du mit dem Skript beginnen. Für die Aktion würde ich einen kontextabhängigen Hotkey nutzen, der davon abhängig ist, dass das Anmeldefenster aktiv ist. Dafür gibt es die Anweisung :arrow: #IfWinActive. Der gibst Du die mit Window Spy gesammelten Daten mit, um das Fenster eindeutig zu identifizieren. Möglicherweise brauchst Du davor eine :arrow: SetTitleMatchMode Anweisung.

Darauf folgt der :arrow: Hotkey, der die Eingabe auslöst, z.B. ^+e:: ; Strg+Shift+c.

Jetzt brauchst Du noch Anweisungen, die die Steuerelemente mit Deinen Daten füllen. Für die Texteingaben könnte :arrow: ControlSend das Mittel der Wahl sein. Ich gehe dabei davon aus, dass Du vorher mit dem Window Spy die ClassNN der Steuerelemente ermittelt hast. Die Angaben zum Fenster kannst Du weglassen, weil die durch #IfWinActive bereits intern gesetzt wurden.

Zum Schluss noch die Bestätigung: Dafür ist die Anweisung :arrow: ControlClick auf den OK-Button recht gut geeignet.

Abschließend folgt noch ein #IfWinActive, um die Kontextabhängigkeit der Hotkeys zu beenden (auch wenn das bei nur einem Hotkey nicht wirklich notwendig ist).

OK, damit solltest Du alle Informationen haben, die für die Lösung Deines Problems mit AHK wichtig sind.

Viel Spaß!


Übrigens:
Hab schon viel herumprobiert, es aber nicht hingekriegt.
ist nur dann sinnvoll, wenn man auch den Code beifügt, den man ausprobiert hat.
Mausebaer
Posts: 9
Joined: 24 Apr 2019, 12:00

Re: Netzwerkanmeldung ausfüllen

25 Apr 2019, 06:31

Oh, das muß ich mir gleich zu Gemüte führen...
Schaut alles sehr gut aus.

Wg. Herumprobieren:
Hier der Code mit dem ich gespielt hab (die Daten sind natürlich gefaked):

Code: Select all

^a::
Das soll der Shortcut sein

Code: Select all

Send, "\\Celsiuswin10\users\Maus\Desktop"
Damit wollte ich das Fenster aufrufen, das zu dem freigegebenen Verzeichnis führt

Code: Select all

return
Damit wollte ich den Fensteraufruf abschließen Damit wollte ich in die erste Zeile den Benutzernamen eintragen

Code: Select all

return
Eingabe abschließen und in die nächste Zeile springen

Code: Select all

Send, xyz123
Passwort eintragen

Code: Select all

return
Eingabe abschließen

Nachdem was du da alles geschrieben hast, ist mir klar, daß das so nicht funktionieren kann.
Ich werde deine Tipps mal probieren.

Blöd ist nur, daß wenn ich das Fenster gefüllt hab, wird die Netzwerkverbindung aufgebaut und ich weiß momentan nicht, wie ich die zum Testen wieder abbauen kann, ohne den Rechner neu zu starten... aber vielleicht krieg ich das auch noch raus.

Oder soll ich lieber einen Keylogger für das Problem probieren?

Jedenfalls vielen Dank für deine Unterstützung

Gruß
Wolfgang
just me
Posts: 9423
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Netzwerkanmeldung ausfüllen

25 Apr 2019, 06:34

Hallo,

wenn die Netwerkverbindung aufgebaut wird, funktioniert Dein Skript. Testen musst Du dann nur noch, ob Du Dein Skript noch 'verschönern' kannst.
Mausebaer
Posts: 9
Joined: 24 Apr 2019, 12:00

Re: Netzwerkanmeldung ausfüllen

25 Apr 2019, 09:21

wenn die Netzwerkverbindung aufgebaut wird, funktioniert Dein Skript
Das ist allerdings richtig. Wenn es nicht funktioniert, bleibt das Fenster offen bzw. kann neu gestartet werden...
Ich probiere das jetzt mal und melde mich wieder.
User avatar
Frosti
Posts: 426
Joined: 27 Oct 2017, 14:30
Contact:

Re: Netzwerkanmeldung ausfüllen

25 Apr 2019, 09:54

Schon fast wieder ein Tutorial. Und ich wollte die Sache abkürzen und nur den Tip geben das man alle Daten gleich bei Windows hinterlegen kann. 😁
Mausebaer
Posts: 9
Joined: 24 Apr 2019, 12:00

Re: Netzwerkanmeldung ausfüllen

25 Apr 2019, 12:53

wollte die Sache abkürzen und nur den Tip geben das man alle Daten gleich bei Windows hinterlegen kann.
Aha... danach suche ich schon lange... wie geht das?
Mausebaer
Posts: 9
Joined: 24 Apr 2019, 12:00

Re: Netzwerkanmeldung ausfüllen

28 Apr 2019, 03:40

... auf den Tipp von Frosti warte ich momentan vergebens...

Daher hab ich mich an die Arbeit gemacht und versucht ein Skript zu machen aus folgenden Infos:
Anmeldefenster.gif
Anmeldefenster.gif (10.03 KiB) Viewed 2899 times
so schaut das angefangene Skript aus, aber ich weiß jetzt nicht mehr weiter...:

Code: Select all

#IfWinActive ahk_class #32770

#IfWinActive ahk_exe Explorer.exe

#IfWinActive ahk_pid 684

^+e:: ; Strg+Shift+v

ControlSend , (Benutzername)
.
.
.
.
#IfWinActive
Ist das bis jetzt richtig? Wie geht es weiter?
Wie kriege ich Benutzername & Kennwort in die richtigen Eingabefenster...?
just me
Posts: 9423
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Netzwerkanmeldung ausfüllen

28 Apr 2019, 04:17

Moin,

die unterschiedlichen Fensterspezifikationen musst Du in einer Direktive zusammenfassen:

Code: Select all

#IfWinActive Verbindung zu CelsiusWin10 herstellen ahk_class #32770 ahk_exe Explorer.exe ; Titel Klasse Exe
Die PID bringt hier nichts, weil sie sich bei jedem Start ändert.

Ansonsten sind meiner Meinung nach 3 Steuerelemente beteiligt, für die Du jeweils die ClassNN ermitteln musst:
2 Eingabefelder
1 Button
Wenn Du alle drei hast, kannst Du sie mit ControlSend (Eingabefelder) bzw. ControlClick (Button) bearbeiten.

Has Du Dir das mal angeschaut: Netzwerk-Laufwerke?

Grüße,
just me
Mausebaer
Posts: 9
Joined: 24 Apr 2019, 12:00

Re: Netzwerkanmeldung ausfüllen

28 Apr 2019, 07:35

Hast Du Dir das mal angeschaut: Netzwerk-Laufwerke?
Nein, hab das nicht gefunden mit der Suche... Das schaut interessant aus...

Jedoch hab ich mit net use bereits experimentiert, hat nicht funktioniert und daher bin ich auf AutoHotKey gestoßen...
Aber ich schau mir das mal genauer an, ob ich kapiere was da passiert u. ggf. auch für mich funktioniert.

Danke für den Tipp.
Mausebaer
Posts: 9
Joined: 24 Apr 2019, 12:00

Re: Netzwerkanmeldung ausfüllen

29 Apr 2019, 13:25

Ich hab das Problem jetzt lösen können, allerdings ohne AutoHotKey, sondern mit den Infos von just me:
Has Du Dir das mal angeschaut: Netzwerk-Laufwerke?
Möglicherweise hat Frosti dasselbe gemeint...
...nur den Tip geben das man alle Daten gleich bei Windows hinterlegen kann

Also das geht so, man benützt den Win-Befehl Net use:

Das ganze wird dann in eine selbst zu benennende .bat-Datei eingefügt und schaut im Code dann so aus:

Code: Select all

net use y: "\\Computername\freigegebenes Verzeichnis" /user:[email protected] PassWord_XYZ
net use > Win Befehl
y: > Laufwerksbuchstabe, unter dem man die Verbindung sehen will
\\Computername > Computername mit dem freigegebenen Verzeichnis
\freigegebenes Verzeichnis > Auf Computername freigegebenes Verzeichnis
"\\Computername\freigegebenes Verzeichnis" in Anführungszeichen einbetten, da der Term ein Blank enthält. Danach ein Blank.
/user:[email protected] PassWord_XYZ > direkt hinter "user:" Anmeldename am Computer und danach ein Blank und dann das Passwort
(Das sind bei mir die Microsoft-Konto Anmeldedaten)

Wenn die Batchdatei ausgeführt wurde, ist die Netzwerkressource unter dem gewählten Laufwerksbuchstaben ohne weitere Anmeldung zugänglich.

Ich hab das dann noch ein bißchen ausgeschmückt:

Code: Select all

@echo off
cls
echo Verbinde Netzlaufwerk
echo.
net use y: "\\Computername\freigegebenes Verzeichnis" /user:[email protected] PassWord_XYZ
echo.
echo Verbindung erfolgreich
pause
exit
Es öffnet sich ein cmd-Fenster, die Verbindung erstellt und eine Erfolgsmeldung wird ausgegeben, andernfalls eine Fehlermeldung. Danach drückt man Return und das Skript wird beendet.

...Das alles leider ohne AutoHotKey, war aber für mich das Einfachste...

Trotzden vielen Dank für die diversen Tipps.

Gruß
Wolfgang
just me
Posts: 9423
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Netzwerkanmeldung ausfüllen

30 Apr 2019, 02:51

Moin,

ich war mir nicht sicher, ob das eine reine Windows-Anmeldung ist, und ich werde langsam auch ein wenig vergesslich.

Es gefällt mir natürlich nicht, dass Du keine 'echte' AHK Lösung gefunden hast. Das mag wohl auch funktionieren:

:arrow: DriveMap

Grüße, just me
Mausebaer
Posts: 9
Joined: 24 Apr 2019, 12:00

Re: Netzwerkanmeldung ausfüllen

30 Apr 2019, 06:21

ob das eine reine Windows-Anmeldung ist
Was meinst du damit? Siehe auch hier:
http www.gtkdb.de /index_17_1847.html Broken Link for safety
Es gefällt mir natürlich nicht, dass Du keine 'echte' AHK Lösung gefunden hast.
Verständlich. Aber ohne AHK wäre ich gar nicht dahintergekommen, welchen Fehler ich in dem "net use" Befehl hatte...
Das mag wohl auch funktionieren: :arrow: DriveMap
Also , ich kapiere nicht was da passiert,und es funktioniert bei mir nicht... Vielleicht etwas für AHK-Spezialisten...
Der "primitive" net use -Befehl ist genau das was ich brauche...

Aber ich werde mich weiter mit AHK befassen.
just me
Posts: 9423
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Netzwerkanmeldung ausfüllen

30 Apr 2019, 11:06

Moin,

falls mein Skript funktioniert, ist es nicht so kompliziert. Wenn

Code: Select all

net use y: "\\Computername\freigegebenes Verzeichnis" /user:[email protected] PassWord_XYZ
funktioniert, könnte das Folgende auch funktionieren:

Code: Select all

#NoEnv

ShareDrive := "Y:"
ShareName := "\\Computername\freigegebenes Verzeichnis"
ShareUser := "[email protected]"
SharePass := "PassWord_XYZ"

Result := DriveMap.Add(ShareDrive, ShareName, ShareUser, SharePass)

If (Result)
   MsgBox, 0, Success!, Successfully mapped share %ShareName% to drive %Result%!
Else
   MsgBox, 16, Error!, Could not map share %ShareName% to drive %ShareDrive%!`n`nError: %ErrorLevel%

ExitApp

; ======================================================================================================================
; Namespace:      DriveMap
; Function:       Add, delete, or query network shares mapped to local drives.
; AHK version:    AHK 1.1.13.01
; Tested on:      Win XP SP3 - AHK A32/U32 (Win 7 - AHK A32/U32 by HotKeyIt, THX)
; Version:        1.0.00.00/2013-11-04/just me
; ======================================================================================================================
Class DriveMap {
   ;--------------------------------------------------------------------------------------------------------------------
   Static MinDL := "D"              ; minimum drive letter
   Static MaxDL := "Z"              ; maximum drive letter
   Static ERROR_BAD_DEVICE := 1200  ; system error code
   ;--------------------------------------------------------------------------------------------------------------------
   __New(P*) {
      Return ""
   }
   ; -------------------------------------------------------------------------------------------------------------------
   ; Method:         Add      -  Makes a connection to a network resource and redirects a local device to the resource.
   ; Parameter:      Drive    -  Drive letter to be mapped to the share followed by a colon (e.g. "Z:")
   ;                             or "*" to map an unused drive letter.
   ;                 Share    -  A null-terminated string that specifies the remote network name.
   ;                 Optional ------------------------------------------------------------------------------------------
   ;                 User     -  A string that specifies a user name for making the connection.
   ;                             If omitted or explicitely set empty, the function uses the name of the user running
   ;                             the current process.
   ;                 Pass     -  A string that specifies a password for making the connection.
   ;                             If omitted or explicitely set to "`n", the function uses the current default password
   ;                             associated with the user specified by the User parameter.
   ;                             If Pass is an empty string, the function does not use a password.
   ; Return Values:  Drive letter followed by a colon on success, otherwise an empty string.
   ;                 ErrorLevel contains the system error code, if any.
   ; MSDN:           WNetAddConnection2 -> http://msdn.microsoft.com/en-us/library/aa385413%28v=vs.85%29.aspx
   ;                 NETRESOURCE        -> http://msdn.microsoft.com/en-us/library/aa385353%28v=vs.85%29.aspx
   ; -------------------------------------------------------------------------------------------------------------------
   Add(Drive, Share, User := "", Pass := "`n") {
      Static RESOURCETYPE_DISK := 0x00000001
      Static Flags := 0x04 ; CONNECT_TEMPORARY
      Static offType := 4, offLocal := 16, offRemote := offLocal + A_PtrSize ; NETRESOURCE offsets
      ErrorLevel := 0
      If (Drive <> "*") && !RegExMatch(Drive, "i)^[" . This.MinDL . "-" . This.MaxDL . "]:$") { ; invalid drive
         ErrorLevel := This.ERROR_BAD_DEVICE
         Return ""
      }
      DriveGet, DriveList, List
      Loop, % StrLen(DriveList) { ; check whether the share is already mapped
         DL := SubStr(DriveList, A_Index, 1) . ":"
         If (This.Get(DL) = Share)
            Return DL
      }
      ; Automatic drive mapping by leaving drive empty doesn't work on Win XP, so we have to use the asterisk
      ; and do it manually
      If (Drive = "*") { ; try to find an unused drive letter
         DL := Asc(This.MaxDL)
         While (DL >= Asc(This.MinDL)) {
            If !InStr(DriveList, Chr(DL)) {
               Drive := Chr(DL) . ":"
               Break
            }
            DL--
         }
         If (Drive = "*") { ; drive is still '*', i.e. the share cannot be mapped to a drive letter
            ErrorLevel := This.ERROR_BAD_DEVICE
            Return ""
         }
      }
      VarSetCapacity(NR, (4 * 4) + (A_PtrSize * 4), 0) ; NETRESOURCE structure
      NumPut(RESOURCETYPE_DISK, NR, offType, "UInt")
      NumPut(&Drive, NR, offLocal, "Ptr")
      NumPut(&Share, NR, offRemote, "Ptr")
      PtrPass := Pass = "`n" ? 0 : &Pass
      PtrUser := User = "" ? 0 : &User
      If (Result := DllCall("Mpr.dll\WNetAddConnection2", "Ptr", &NR, "Ptr", PtrPass, "Ptr", PtrUser
                                                        , "UInt", Flags, "UInt")) {
         ErrorLevel := Result
         Return ""
      }
      Return Drive
   }
   ; -------------------------------------------------------------------------------------------------------------------
   ; Method:         Del      -  removes an existing drive mapping to a network share.
   ; Parameter:      Drive    -  drive letter of the mapped local drive followed by a colon (e.g. "Z:").
   ;                 Optional ------------------------------------------------------------------------------------------
   ;                 Force    -  specifies whether the disconnection should occur if there are open files or jobs
   ;                             on the connection. Values: True/False
   ; Return Values:  True on success, otherwise False.
   ;                 ErrorLevel contains the system error code, if any.
   ; MSDN:           WNetCancelConnection2 -> http://msdn.microsoft.com/en-us/library/aa385427%28v=vs.85%29.aspx
   ; -------------------------------------------------------------------------------------------------------------------
   Del(Drive, Force := False) {
      ErrorLevel := 0
      If !RegExMatch(Drive, "i)^[" . This.MinDL . "-" . This.MaxDL . "]:$") { ; invalid drive
         ErrorLevel := This.ERROR_BAD_DEVICE
         Return False
      }
      If (Result := DllCall("Mpr.dll\WNetCancelConnection2", "Str", Drive, "UInt", 0, "UInt", !!Force, "UInt")) {
         ErrorLevel := Result
         Return False
      }
      Return True
   }
   ; -------------------------------------------------------------------------------------------------------------------
   ; Method:         Get      -  retrieves the name of the network share associated with the local drive.
   ; Parameter:      Drive    -  drive letter to get the network name for followed by a colon (e.g. "Z:").
   ; Return Values:  The name of the share on success, otherwise an empty string.
   ;                 ErrorLevel contains the system error code, if any.
   ; MSDN:           WNetGetConnection() -> http://msdn.microsoft.com/en-us/library/aa385453%28v=vs.85%29.aspx
   ; -------------------------------------------------------------------------------------------------------------------
   Get(Drive) {
      Static Length := 512
      ErrorLevel := 0
      If !RegExMatch(Drive, "i)^[" . This.MinDL . "-" . This.MaxDL . "]:$") { ; invalid drive
         ErrorLevel := This.ERROR_BAD_DEVICE
         Return ""
      }
      VarSetCapacity(Share, Length * 2, 0)
      If (Result := DllCall("Mpr.dll\WNetGetConnection", "Str", Drive, "Str", Share, "UIntP", Length, "UInt")) {
         ErrorLevel := Result
         Return ""
      }
      Return Share
   }
}
Es ist aber zugegebenermaßen etwas länger. ;)
Mausebaer
Posts: 9
Joined: 24 Apr 2019, 12:00

Re: Netzwerkanmeldung ausfüllen

02 May 2019, 04:32

Ja, es funktioniert in der Tat... Vielen Dank. Wenn ich mal Zeit hab, befasse ich mich damit was in dem Skript genau passiert und welche Vorteile das hätte...
Bis dahin benutze ich den Net use Befehl...

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: Helmut2 and 39 guests