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":
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
Netzwerkanmeldung ausfüllen
Moderator: jNizM
Re: Netzwerkanmeldung ausfüllen
Moin,
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:
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 #IfWinActive. Der gibst Du die mit Window Spy gesammelten Daten mit, um das Fenster eindeutig zu identifizieren. Möglicherweise brauchst Du davor eine SetTitleMatchMode Anweisung.
Darauf folgt der 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 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 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:
Dann wollen wir mal versuchen, das zu ändern.bin neu hier und kenne mich noch nicht aus.
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)
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 #IfWinActive. Der gibst Du die mit Window Spy gesammelten Daten mit, um das Fenster eindeutig zu identifizieren. Möglicherweise brauchst Du davor eine SetTitleMatchMode Anweisung.
Darauf folgt der 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 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 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:
ist nur dann sinnvoll, wenn man auch den Code beifügt, den man ausprobiert hat.Hab schon viel herumprobiert, es aber nicht hingekriegt.
Re: Netzwerkanmeldung ausfüllen
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):
Das soll der Shortcut sein
Damit wollte ich das Fenster aufrufen, das zu dem freigegebenen Verzeichnis führt
Damit wollte ich den Fensteraufruf abschließen
Damit wollte ich in die erste Zeile den Benutzernamen eintragen
Eingabe abschließen und in die nächste Zeile springen
Passwort eintragen
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
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::
Code: Select all
Send, "\\Celsiuswin10\users\Maus\Desktop"
Code: Select all
return
Code: Select all
Send, [email protected]
Code: Select all
return
Code: Select all
Send, xyz123
Code: Select all
return
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
Re: Netzwerkanmeldung ausfüllen
Hallo,
wenn die Netwerkverbindung aufgebaut wird, funktioniert Dein Skript. Testen musst Du dann nur noch, ob Du Dein Skript noch 'verschönern' kannst.
wenn die Netwerkverbindung aufgebaut wird, funktioniert Dein Skript. Testen musst Du dann nur noch, ob Du Dein Skript noch 'verschönern' kannst.
Re: Netzwerkanmeldung ausfüllen
Das ist allerdings richtig. Wenn es nicht funktioniert, bleibt das Fenster offen bzw. kann neu gestartet werden...wenn die Netzwerkverbindung aufgebaut wird, funktioniert Dein Skript
Ich probiere das jetzt mal und melde mich wieder.
Re: Netzwerkanmeldung ausfüllen
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.
Re: Netzwerkanmeldung ausfüllen
Aha... danach suche ich schon lange... wie geht das?wollte die Sache abkürzen und nur den Tip geben das man alle Daten gleich bei Windows hinterlegen kann.
Re: Netzwerkanmeldung ausfüllen
... 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: so schaut das angefangene Skript aus, aber ich weiß jetzt nicht mehr weiter...:
Ist das bis jetzt richtig? Wie geht es weiter?
Wie kriege ich Benutzername & Kennwort in die richtigen Eingabefenster...?
Daher hab ich mich an die Arbeit gemacht und versucht ein Skript zu machen aus folgenden Infos: 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
Wie kriege ich Benutzername & Kennwort in die richtigen Eingabefenster...?
Re: Netzwerkanmeldung ausfüllen
Moin,
die unterschiedlichen Fensterspezifikationen musst Du in einer Direktive zusammenfassen: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:
Has Du Dir das mal angeschaut: Netzwerk-Laufwerke?
Grüße,
just me
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
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.1 Button
Has Du Dir das mal angeschaut: Netzwerk-Laufwerke?
Grüße,
just me
Re: Netzwerkanmeldung ausfüllen
Nein, hab das nicht gefunden mit der Suche... Das schaut interessant aus...Hast Du Dir das mal angeschaut: Netzwerk-Laufwerke?
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.
Re: Netzwerkanmeldung ausfüllen
Ich hab das Problem jetzt lösen können, allerdings ohne AutoHotKey, sondern mit den Infos von just me:
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:
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:
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
Möglicherweise hat Frosti dasselbe gemeint...Has Du Dir das mal angeschaut: Netzwerk-Laufwerke?
...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
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
...Das alles leider ohne AutoHotKey, war aber für mich das Einfachste...
Trotzden vielen Dank für die diversen Tipps.
Gruß
Wolfgang
Re: Netzwerkanmeldung ausfüllen
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:
DriveMap
Grüße, just me
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:
DriveMap
Grüße, just me
Re: Netzwerkanmeldung ausfüllen
Was meinst du damit? Siehe auch hier:ob das eine reine Windows-Anmeldung ist
http www.gtkdb.de /index_17_1847.html Broken Link for safety
Verständlich. Aber ohne AHK wäre ich gar nicht dahintergekommen, welchen Fehler ich in dem "net use" Befehl hatte...Es gefällt mir natürlich nicht, dass Du keine 'echte' AHK Lösung gefunden hast.
Also , ich kapiere nicht was da passiert,und es funktioniert bei mir nicht... Vielleicht etwas für AHK-Spezialisten...Das mag wohl auch funktionieren: DriveMap
Der "primitive" net use -Befehl ist genau das was ich brauche...
Aber ich werde mich weiter mit AHK befassen.
Re: Netzwerkanmeldung ausfüllen
Moin,
falls mein Skript funktioniert, ist es nicht so kompliziert. Wennfunktioniert, könnte das Folgende auch funktionieren:
Es ist aber zugegebenermaßen etwas länger.
falls mein Skript funktioniert, ist es nicht so kompliziert. Wenn
Code: Select all
net use y: "\\Computername\freigegebenes Verzeichnis" /user:[email protected] PassWord_XYZ
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
}
}
Re: Netzwerkanmeldung ausfüllen
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...
Bis dahin benutze ich den Net use Befehl...
Who is online
Users browsing this forum: No registered users and 1 guest