Hallo allerseits,
ich habe folgende Problem und hoffe, ihr könnt mir helfen.
Wir sind jetzt zwecks Domänenzusammenführung mit unserem Exchange Server auf eine andere Domäne als auf unserem Active Directory umgezogen. Das AD folgt erst in ca. 2 Jahren. Solange unsere User jetzt in 2 Domänen hängen, kommt bei jedem Outlook Start die Abfrage wegen Kennwort und Benutzername. Die Passwort speichern Funktion von Windows ist eher sehr unzuverlässig. die geht 3 mal und 2 mal nicht...
Also hab ich ein Programm geschrieben, das ich an die User weitergebe. Das Programm macht dann folgendes:
-einen Ordner unter C:/admin erstellen
-Aut2Exe reinkopieren (das vorher schon per Fileinstall eingebunden war)
-eine GUI erstellen, wo der Benutzer seine Anmeldedaten eingeben kann
-Aus diesen Daten dann eine .au3 file erstellen
-diese File dann per Aut2Exe in eine .exe umwandeln.
Diese Exe sollte dann Outlook aufrufen, bleibt im Hintergrund in einer Schleife und gibt, falls das Abfragefenster kommt, die Anmeldeinfos ein.
Das klappt auch alles ganz gut, nur beim Kompilieren kommt ab und zu der Fehler Unable to open the Script File. Wenn ich das ganze dann auf einem anderen Rechner versuche, klappt es natürlich. Bei Win XP hat es bis jetzt immer funktioniert. Nur Win7 bereitet ab und zu Probleme. Kann jedoch leider nicht sagen woran genau es liegt. Einen Fehler im Script schließe ich eigentlich aus, da es ja meistens funktioniert.
Muss ich bei Windows 7 weiter Parameter an den Kompiler eingeben oder gibt es sogar eine bessere Möglichkeit und auf einem Rechner wo kein AutoIT installiert ist, eine Exe zu erstellen und ich bin auf dem völlig falschen Lösungsweg?
Danke schon mal für eure Hilfe.
Spoiler anzeigen
Die auskommentieren Bereiche könnt ihr einfach Ignorieren, da muss ich noch was umschreiben.
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=outlook.ico
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <file.au3>
#include <comboconstants.au3>
#include <windowsconstants.au3>
#include <guiconstantsex.au3>
;----------------------------------Variablen------------------------------------------
Global $Ordner = "c:\admin\autoit_Outlook"
DirCreate($Ordner) ;ordner anlegen
Global $file = FileOpen($Ordner & "unkompiled.au3", 10)
;Global $Wartezeit = 60
;----------------------------------Variablen Ende------------------------------------------
;----------------------------------Dateien zum kompilieren kopieren------------------------------------------
FileInstall("C:\Daten\ScriptingProgrammierung\autoit\AutoIT_Outlook\Aut2exe.exe", $Ordner & "aut2exe.exe", 1)
FileInstall("C:\Daten\ScriptingProgrammierung\autoit\AutoIT_Outlook\OUTLOOK_2007.ico", $Ordner & "OUTLOOK_2007.ico", 1)
FileInstall("C:\Daten\ScriptingProgrammierung\autoit\AutoIT_Outlook\OUTLOOK_2010.ico", $Ordner & "OUTLOOK_2010.ico", 1)
;----------------------------------------------------------------------------------------------
;----------------------------------GUI Erstellung------------------------------------------
$gui = GUICreate("neue Outlook.exe erstellen", 500,250)
$combo = GUICtrlCreateCombo("Windows7 - Outlook 2010", 270, 30, 200, 25, BitOR($cbs_dropdownlist, $cbs_autohscroll, $ws_vscroll))
GUICtrlSetData(-1, "win XP - Outlook2010|Win XP oder Win 7 - outlook 2007")
$labelCombo = GUICtrlCreateLabel("Windows/Outlook kombination auswählen:", 20, 30, 220, 25)
$labelUser = GUICtrlCreateLabel("Benutzername eingeben:", 20, 60, 200, 25)
$inputUser = GUICtrlCreateInput("", 270, 60, 200, 25)
$labelPW = GUICtrlCreateLabel("Kennwort eingeben", 20, 90, 200, 25)
$inputPW = GUICtrlCreateInput("", 270, 90, 200, 25, 0x0020)
$btnStart = GUICtrlCreateButton("Start", 225, 130, 50, 25)
GUISetState(@SW_SHOW)
;----------------------------------Ende GUI Erstellung------------------------------------------
;----------------------------------Hauptschleife------------------------------------------
While True
$msg = GUIGetMsg()
Switch $msg
Case -3 ;event wird über x geschlossen
Exit
Case $btnStart
$combotext = GUICtrlRead($combo)
Switch $combotext
Case ("Windows7 - Outlook 2010")
win7_out2010()
kompile2010()
info2()
Sleep(2000)
info3()
exekopie()
Sleep (2000)
;delete()
;InfoMsg()
Exit
Case ("win XP - Outlook2010")
winXP_out2010()
kompile2010()
info2()
Sleep(2000)
info3()
exekopie()
Sleep (2000)
;delete()
;InfoMsg()
Exit
Case ("Win XP oder Win 7 - outlook 2007")
Out2007()
kompile2007()
info2()
Sleep(2000)
info3()
exekopie()
Sleep (2000)
;delete()
;InfoMsg()
Exit
#cs
case ("Outlook Web Access")
OutlookWebAccess()
kompile2010()
info2()
Sleep(2000)
info3()
exekopie()
Sleep (2000)
;delete()
;InfoMsg()
Exit
#ce
EndSwitch
EndSwitch
WEnd
;---------------------------------Hauptschleife Ende----------------------------------------
;----------------------------------Funktionen----------------------------------------------------
Func win7_out2010()
$user = GUICtrlRead($inputUser)
$pw = GUICtrlRead($inputPW)
FileWrite($file, "Opt('WinDetectHiddenText',1)"& @CRLF)
FileWrite($file, "opt('SendKeyDelay',30)"& @CRLF)
FileWrite($file, "ShellExecute (@ProgramFilesDir&'\Microsoft Office\Office14\outlook.exe')" & @CRLF)
FileWrite($file, "do"& @CRLF)
FileWrite($file, "if WinExists ('Windows-Sicherheit','Anmeldedaten speiche') Then"& @CRLF)
FileWrite($file, "sleep (200)"& @CRLF)
FileWrite($file, "Send('{DOWN}{DOWN}')"& @CRLF)
FileWrite($file, "sleep (200)"& @CRLF)
FileWrite($file, "Send('xxxxx.xxxxx"&$user&"')"& @CRLF)
FileWrite($file, "sleep (200)"& @CRLF)
FileWrite($file, "Send('{TAB}')"& @CRLF)
FileWrite($file, "sleep (200)"& @CRLF)
FileWrite($file, "Send('"&$pw&"')"& @CRLF)
FileWrite($file, "sleep (200)"& @CRLF)
FileWrite($file, "Send('{ENTER}')"& @CRLF)
FileWrite($file, "EndIf"& @CRLF)
FileWrite($file, "until ProcessExists ('outlook.exe') = False"& @CRLF)
FileWrite($file, 'msgbox(0,"","Prozess AutoIT beendet")' & @CRLF)
EndFunc ;==>win7_out2010
#cs
Func winXP_out2010()
$user = GUICtrlRead($inputUser)
$pw = GUICtrlRead($inputPW)
FileWrite($file, "$i = 0" & @CRLF)
FileWrite($file, "if FileExists (@ProgramFilesDir&'\Microsoft Office\Office14\outlook.exe') Then" & @CRLF)
FileWrite($file, "ShellExecute (@ProgramFilesDir&'\Microsoft Office\Office14\outlook.exe')" & @CRLF)
FileWrite($file, "Sleep (50)" & @CRLF)
FileWrite($file, "While WinExists ('Verbindung zu xxxx.xxxx herstellen','') = False" & @CRLF)
FileWrite($file, 'msgbox(0,"","hängt in schleife")' & @CRLF)
FileWrite($file, "Sleep (1000)" & @CRLF)
FileWrite($file, "$i = $i + 1" & @CRLF)
FileWrite($file, "If $i = "&$Wartezeit&" Then" & @CRLF)
FileWrite($file, 'msgbox(0,"","Fenster geht nicht auf - Programmende")' & @CRLF)
FileWrite($file, "Exit" & @CRLF)
FileWrite($file, "Else" & @CRLF)
FileWrite($file, "EndIf" & @CRLF)
FileWrite($file, "WEnd" & @CRLF)
FileWrite($file, "if WinExists ('Verbindung zu xxxx.xxxx herstellen','') Then" & @CRLF)
FileWrite($file, "WinActivate ('Verbindung zu xxxx.xxxx herstellen')" & @CRLF)
FileWrite($file, "Send ('+{tab}')" & @CRLF)
FileWrite($file, "Sleep (50)" & @CRLF)
FileWrite($file, "send ('lxxxxx.xxxx" & $user & "')" & @CRLF)
FileWrite($file, "send ('{tab}')" & @CRLF)
FileWrite($file, "send ('" & $pw & "')" & @CRLF)
FileWrite($file, "send ('{enter}')" & @CRLF)
FileWrite($file, 'msgbox(0,"","alles passt - Programmende")' & @CRLF)
FileWrite($file, "exit" & @CRLF)
FileWrite($file, "else" & @CRLF)
FileWrite($file, 'msgbox(0,"","nichts wird gefunden - Programmende")' & @CRLF)
FileWrite($file, "exit" & @CRLF)
FileWrite($file, "endif"& @CRLF)
FileWrite($file, "endif")
FileClose($file)
EndFunc ;==>winXP_out2010
#ce
Func Out2007()
$user = GUICtrlRead($inputUser)
$pw = GUICtrlRead($inputPW)
FileWrite($file, "Opt('WinDetectHiddenText',1)"& @CRLF)
FileWrite($file, "opt('SendKeyDelay',30)"& @CRLF)
FileWrite($file, "ShellExecute (@ProgramFilesDir&'\Microsoft Office\Office12\outlook.exe')" & @CRLF)
FileWrite($file, "do"& @CRLF)
FileWrite($file, "if WinExists ('Verbindung mit xxxx.xxxx herstellen','Kennwort &speichern') Then"& @CRLF)
FileWrite($file, "sleep (200)"& @CRLF)
FileWrite($file, "Send('{SHIFTDOWN}{TAB}{SHIFTUP}')"& @CRLF)
FileWrite($file, "sleep (200)"& @CRLF)
FileWrite($file, "Send('xxxx.xxxx"&$user&"')"& @CRLF)
FileWrite($file, "sleep (200)"& @CRLF)
FileWrite($file, "Send('{TAB}')"& @CRLF)
FileWrite($file, "sleep (200)"& @CRLF)
FileWrite($file, "Send('"&$pw&"')"& @CRLF)
FileWrite($file, "sleep (200)"& @CRLF)
FileWrite($file, "Send('{ENTER}')"& @CRLF)
FileWrite($file, "EndIf"& @CRLF)
FileWrite($file, "until ProcessExists ('outlook.exe') = False"& @CRLF)
FileWrite($file, 'msgbox(0,"","Prozess AutoIT beendet")' & @CRLF)
EndFunc ;==>Out2007
#cs
func OutlookWebAccess()
$user = GUICtrlRead($inputUser)
$pw = GUICtrlRead($inputPW)
FileWrite($file, "#include <ie.au3>" & @CRLF)
FileWrite($file, "$oiezus = _IECreate ('https://owa.xxxx.com/owa')" & @CRLF)
;FileWrite($file, "if IsObj (_IECreate ('https://owa.xxxx.com/owa')) then" & @CRLF)
FileWrite($file, "_IELoadWait($oiezus)" & @CRLF)
FileWrite($file, "WinActivate ($oiezus)" & @CRLF)
FileWrite($file, "WinSetState('Outlook Web App - Windows Internet Explorer','',@SW_MAXIMIZE)" & @CRLF)
FileWrite($file, "send ('xxxx.xxxxx"&$user&"')" & @CRLF)
FileWrite($file, "send ('{tab}')" & @CRLF)
FileWrite($file, "Sleep (200)" & @CRLF)
FileWrite($file, "Send ('"&$pw&"')" & @CRLF)
FileWrite($file, "Sleep (200)" & @CRLF)
FileWrite($file, "send ('{enter}')" & @CRLF)
;FileWrite($file, "EndIf" & @CRLF)
EndFunc
#ce
Func exekopie()
FileCreateShortcut ($Ordner & "outlook.exe", @DesktopDir&"\outlook.exe")
FileCreateShortcut ($Ordner & "outlook.exe", @StartupDir&"\outlook.exe")
EndFunc ;==>exekopie
Func kompile2010()
FileChangeDir($Ordner)
Run(@ComSpec & " /c " & 'aut2exe.exe /in ' & $Ordner & 'unkompiled.au3 /out ' & $Ordner & 'outlook.exe /icon ' & $Ordner & 'OUTLOOK_2010.ico', "", @SW_HIDE)
EndFunc ;==>kompile2010
Func kompile2007()
FileChangeDir($Ordner)
Run(@ComSpec & " /c " & 'aut2exe.exe /in ' & $Ordner & 'unkompiled.au3 /out ' & $Ordner & 'outlook.exe /icon ' & $Ordner & 'OUTLOOK_2007.ico', "", @SW_HIDE)
EndFunc ;==>kompile2007
func delete()
FileDelete ($Ordner &"OUTLOOK_2007.ico")
FileDelete ($Ordner &"OUTLOOK_2010.ico")
FileDelete ($Ordner &"unkompiled.au3")
FileDelete ($Ordner &"aut2exe.exe")
EndFunc
func info2()
$labelInfo2 = GUICtrlCreateLabel ("Ordner "&$Ordner&" wird erstellt", 150, 190, 250, 25,-1)
EndFunc
func info3()
$labelInfo3 = GUICtrlCreateLabel ("Outlook.exe und Verknüpfungen werden erstellt", 150, 220, 250, 25)
EndFunc
func InfoMsg()
MsgBox (0,"INFO", " - Auf dem Desktop und im Autostart wurde eine Verknüpfung erstellt "& @crlf & @crlf &" - das Outlook-Symbol aus der Taskleiste / Schnellstartleiste muss evtl. noch entfernt werden "& @crlf & @crlf &" - bei manchen Systemen ist Outlook im Autostart bei "& @crlf &"C:\Dokumente und einstellungen\ALL USERS\autostart -> hier werden Admin Rechte zum entfernen benötigt")
EndFunc
;----------------------------------Funktionen-ENDE-----------------------------------------