Moin,
ShellExecuteWait funktioniert nicht mit Outlook Dateien mit Appendix *.msg.
Es öffnet die Datei, aber das Script wartet nicht.
Habt ihr eine Idee?
Gruß
Wuff
Moin,
ShellExecuteWait funktioniert nicht mit Outlook Dateien mit Appendix *.msg.
Es öffnet die Datei, aber das Script wartet nicht.
Habt ihr eine Idee?
Gruß
Wuff
Versuch mal Outlook zu starten und gib als ersten Parameter die Datei über, eventuell wartet dann ShellExecuteWait.
Leider nein!
Ich erzeuge die Datei mit der OutlookUDF,
_OL_ItemSave($oOutlook, $oItem, Default, $SaveAsMail & $Betreff & ".msg", $olMSGUnicode).
Speicher ich eine Datei direkt aus Outllook als Unicode *.msg Datei, funktioniert es.
Heisst das, dass die _OL_ItemSave Funktion nicht funktioniert? Falls ja, definiere bitte "funktioniert nicht".
water: Nein, die _OL_ItemSave Funktion funktioniert super.
Ich öffne nach dem _OL_ItemSave Vorgang gleich die Datei mit ShellExecuteWait.
Habe das Problem gefunden. Wenn Outlook in der Taskleiste sichtbar noch göffnet ist, funktioniert ShellExecuteWait nicht.
Kann es nur leider mit _OL_Close nicht schließen.
Verstehe ich nicht ganz. Wenn Du die Mail gerade mit der OutlookEX UDF erstellt hast, warum willst Du sie gleich wieder öffnen? Das ginge auch mit $oMail.Display.
ZitatDas ginge auch mit $oMail.Display.
Das weiß ich, aber dann kann ich die gespeicherte Datei nach dem Befüllen nicht wieder abspeichern, sondern nur die göffnete Datei.
Der Hintergrund ist der, die mit _OL_ItemSave gespeicherte Datei öffnen, mit Text Befüllen, speichern und versenden.
Sorry, verstehe es immer noch nicht ganz. Sitze vermutlich auf der Leitung.
Kannst Du den ganzen Vorgang bitte etwas genauer beschreiben? Wer befüllt die gespeicherte Mail ("mit Text Befüllen"), wer speichert und wer sendet? Der Benutzer oder das Skript?
ZitatDer Benutzer oder das Skript?
Der Benutzer!
So würde es funktionieren!
$SaveAsMail = D:\Testmail
RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders", "Personal", "REG_EXPAND_SZ", $SaveAsMail)
local $Mail = _OL_ItemSave($oOutlook, $oItem, Default, $SaveAsMail & $Betreff & ".msg", $olMSGUnicode)
$Mail.Display
Mail öffnet, kann beschrieben werden, dann mit "speichern unter" speichern und versenden.
Cool wäre es, wenn die Mail beim versenden automatisch gespeichert ( $SaveAsMail ) wird, dass ist aber meines Wissens nicht möglich, oder?
Deshalb wollte ich sie mit ShellexecuteWait öffnen, Text schreiben, versenden und mit dem Skript abspeichern.
Wenn der Benutzer eine Mail absendet, dann wird ein sog. Event erzeugt das mit AutoIt abgefangen und weitere Verarbeitungen angestossen werden können.
Beispiele findest Du hier:
Danke, schaue ich mir mal an.
Super water!
Genau soetwas habe ich gesucht.......
Vielen Dank!
Zum verständnis.
ShellExecuteWait startet also eine .msg die wiederum keine ausführbare datei ist sondern mit einem program verlinkt ist, in der registry. Das ja auch dann reagiert & startet. Allerdings weiß das Autoit nicht & führt somit fort. Da ja die *shell* *.msg nicht aktiv ausgeführt wird als eigener process.
Allerdings kann man auch mit RunWait arbeiten oder?
Also sowas wie RunWait(@ComSpec & ' /C ' & 'call *.msg')
water, gibt es eine Idee von Outlook eine Datai per Drag und Drop zu kopieren?
Es ist vom Explorer aus ja möglich. Dateien lassen sich vom Explorer ja super per Drag Und Drop kopieren.
Drag & Drop geht auch weiterhin. Das ist ja eine Sache des GUI. Die OutlookEX UDF interagiert primär über COM mit Outlook.
#include
#include
#include
OnAutoItExitRegister('OnAutoItExit')
; Create GUI
Local $hForm = GUICreate('Test ' & StringReplace(@ScriptName, '.au3', '()'), 400, 400)
Local $idCheck = GUICtrlCreateCheckbox('Enable Drag && Drop', 10, 370, 120, 19)
Local $idLabel = GUICtrlCreateLabel('', 100, 100, 200, 200)
Global $g_hLabel = GUICtrlGetHandle($idLabel)
GUICtrlSetBkColor(-1, 0xD3D8EF)
GUICtrlCreateLabel('Drop here', 175, 193, 50, 14)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
; Allow WM_DROPFILES to be received from lower privileged processes (Windows Vista or later)
#cs
If IsAdmin() Then
_WinAPI_ChangeWindowMessageFilterEx($g_hLabel, $WM_COPYGLOBALDATA, $MSGFLT_ALLOW)
_WinAPI_ChangeWindowMessageFilterEx($g_hLabel, $WM_DROPFILES, $MSGFLT_ALLOW)
EndIf
#ce
; Register label window proc
Global $g_hDll = DllCallbackRegister('_WinProc', 'ptr', 'hwnd;uint;wparam;lparam')
Global $g_pDll = DllCallbackGetPtr($g_hDll)
Global $g_hProc = _WinAPI_SetWindowLong($g_hLabel, $GWL_WNDPROC, $g_pDll)
GUISetState(@SW_SHOW)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $idCheck
_WinAPI_DragAcceptFiles($g_hLabel, GUICtrlRead($idCheck) = $GUI_CHECKED)
EndSwitch
WEnd
Func _WinProc($hWnd, $iMsg, $wParam, $lParam)
Switch $iMsg
Case $WM_DROPFILES
Local $sFileList = _WinAPI_DragQueryFileEx($wParam)
If Not @error Then
ConsoleWrite('--------------------------------------------------' & @CRLF)
For $i = 1 To $sFileList[0]
ConsoleWrite($sFileList[$i] & @CRLF)
Next
EndIf
_WinAPI_DragFinish($wParam)
Return 0
EndSwitch
Return _WinAPI_CallWindowProc($g_hProc, $hWnd, $iMsg, $wParam, $lParam)
EndFunc ;==>_WinProc
Func OnAutoItExit()
_WinAPI_SetWindowLong($g_hLabel, $GWL_WNDPROC, $g_hProc)
DllCallbackFree($g_hDll)
EndFunc ;==>OnAutoItExit
So funktioniert es vom Explorer aus, aber nicht von Outlook.
Was könnte mein Fehler sein?