Hallo mcbaldrian
schau dir mal _GUICtrlListView_SetColumn an.
Hallo mcbaldrian
schau dir mal _GUICtrlListView_SetColumn an.
Man sollte an dieser Stelle aber auch erwähnen, dass 'Reguläre Ausdrücke' , insbesondere für Gelegenheitsuser, recht starker Tobak sein können. Sie sind mächtig, elegant und kompakt, aber nicht zwingend intuitiv .
Es wäre also keine 'Schande', falls Du stattdessen auf Stringoperationen zurückgreifen würdest. Der Code wird damit zwar länger, aber wichtig ist, vor allen anderen Dingen, dass Du ihn selbst nachvollziehen kannst (auch noch in 6 Monaten) !
Prinzipiell hat Musashi natürlich recht.
Hier in diesem Fall müsste man eigentlich noch nicht die Tuts durcharbeiten. Da man sich hier noch im seichten Wasser befindet. Ich habe die Hilfe genannt, weil dort die Beispiele auf Pseudo-Quelltexte angewendet werden. Da erschöpft sich das nacharbeiten fast auf Copy&Paste und man kann direkt auf der gleichen Seite sehen, was die Klammern usw. sollen.
Wenn das Probleme macht, gäbe es aber noch die _StringBetween Funktion, mit der das Skript u.U. überhaupt nicht länger wird.
Also du gehst dann mit Regex rein aber was genau du da machst, versteh ich nicht..
Hallo Paul01
schau dir am besten mal die Hilfe zu StringRegExp an. Die Beispiele sollten dir das Verständnis erleichtern.
Danke. Die Funktion kannte ich auch nicht Oscar
Hallo Mikki,
da genügt doch einfach das Auswerten von FileMove, oder?
Ein Skript, dass für mich gut funktioniert findest du hier: https://www.autoitscript.com/forum/topic/12…&comment=853798
Aber riesen Vorteile sehe ich in deinem Fall eigentlich nicht.
Hallo mitac100
Wenn es für dich einfacher ist, dann trenne die Pfade doch mit StringSplit($Pfad, "\") oder du nimmst die Funktion _PathSplit.
Hallo AutoMit,
ich verstehe deinen Beitrag nicht. Worauf wolltest du hinaus?
Hat die Funktion nicht nur 2 Parameter?
Func _GUICtrlClock_SetTime(ByRef $aidClock, $sTime = Default)
Ich habe im Script folgendes versucht, aber das ging nicht:
_GUICtrlClock_SetTime( $aClock1 , "" , True ) ; Clock-Array, Date/Time (Optional = Systemtime)_GUICtrlClock_SetTime( $aClock1 , , True ) ; Clock-Array, Date/Time (Optional = Systemtime)
Deine beiden Aufrufe sind doch offensichtlich nicht gültig. Nicht nur in dieser Funktion nicht, sondern in AutoIt allgemein..
Hallo mitac100,
Nur für den Fall. Wenn die nicht registrierten pst-Dateien im gleichen Ordner liegen, wie die registrierten pst-Dateien, dann brauchst du die Registry gar nicht auslesen und liest nur den Ordner aus. Dann hast du keine Dubletten.
Andernfalls kannst du Dubletten z.B. verhindern, indem du mit IniReadSection alle Pfade aus der Ini holst und mit deinen neuen Pfaden abgleichst.
RunWait(@ComSpec & " /c " & 'dir D:\*.pst /b /s >' & @ScriptDir & '\Outlook\Outlook.txt', "", @SW_HIDE)
Das kannst du auch mit_FileListToArray erledigen und hast dann direkt dein Array.
Hallo water
Na klar. Mein Problem war einfach, dass ich mit zwei Warn-Fenster völlig unterschiedlichen Texten im Fenster konfrontiert wurde. Das mag im Englischen anders sein. In der deutschen Version beginnen die Texte einmal mit "Programm versucht" oder "Anwendung versucht". Auch ansonsten unterscheidet sich der Fenstertext. Daher konnte ich nicht allein mit der Anpassung der Variablen $sWindowText arbeiten. Aber ich bin in der Fenstersteuerung auch nicht wirklich fit..
Statt in der Funktion _OL_Wrapper_SendMail herumzupfuschen, habe ich mir nun die _OL_Warnings.exe so angepasst, dass ich zwei Texte angeben kann. Keine Ahnung ob noch mehr Texte vorkommen können und man das weiter Flexibilisieren sollte. Aber fürs erste reicht mir das so:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseX64=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
; #PROGRAM# =====================================================================================================================
; Name ..........: _OL_Warnings
; Description ...: Check if Outlook warning windows pops up, if so bypass them, by clicking "allow".
; Syntax.........: Run(_OL_Warnings.exe $iOL_ProcessID [$iOL_WinCheckTime=1000[ $iOL_ControlCheckTime=1000[ $sOL_Version=""[ $iOL_Language=1033]]]])
; Parameters ....: $iOL_ProcessID - The ProcessID of the calling script we should monitor and exit when finished
; $iOL_WinCheckTime - Optional: How long, in milliseconds, we will wait before we check for the warning windows (default = 1000)
; $iOL_CtrlCheckTime - Optional: How long, in milliseconds, we will wait before we check that the controls we click are enabled (default = 1000)
; $sOL_Version - Optional: Outlook version number e.g. 14.0.0.4760 (default = "")
; $iOL_Language - Optional: Installed Outlook language. Please see http://msdn.microsoft.com/en-us/library/aa170976.aspx (default = 1033 = English US)
; Return values .: Failure - Sets returns value:
; |1 - ProcessID is missing as first parameter
; |2 - Specified ProcessID does not exist at startup
; Author ........: Wooltown
; Modified ......: water
; Remarks .......: If Outlook has security settings enabled, then warning windows will pop up, requiring manual key pressing.
; This function makes the necessary key presses. It is called by _OL_Open if you set $fOL_WarningClick to True or anytime by your script.
; The exe runs until the calling script is terminated.
;+
; Compile this script into an exe. Default location is the directory where the calling script is located.
; If you run Outlook in a different language then please change window title ($sWindowTitle) and text ($sWindowText).
; The script uses $sWindowTitle="Microsoft Outlook" for >= Outlook 2007 and "Microsoft Office Outlook" for < Outlook 2007.
;+
; To test the exe in case of problems please run the following DOS bat file:
; _OL_Warnings.exe ProcessID [$iOL_WinCheckTime[ $iOL_ControlCheckTime]]
; echo %ErrorLevel%
; If the output is not 0 then one of the errors described above has happened (section: Return values).
; These return codes can't be checked by _OL_Open because _OL_Warnings is called using "Run" which can not return any data to the calling process.
; Related .......:
; Link ..........:
; Example .......:
; ===============================================================================================================================
Opt("TrayIconHide", 1) ; 0=show, 1=hide tray icon
Opt("WinSearchChildren", 1) ; 0=no, 1=search children also
Global $sWindowTitle = "Microsoft Outlook" ; Window title for >= Outlook 2007. Will be set for other Outlook versions below
Global $sWindowText = "Programm versucht"
Global $sWindowText2 = "Anwendung versucht"
Global $iOL_ProcessID, $iOL_WinCheckTime = 1000, $iOL_CtrlCheckTime = 1000, $sOL_Version = "", $iOL_Language = 1031
; Process command line parameters
If $CmdLine[0] = 0 Then Exit 1 ; No ProcessID was specified
$iOL_ProcessID = $CmdLine[1]
If Not ProcessExists($iOL_ProcessID) Then Exit 2
If $CmdLine[0] > 1 Then $iOL_WinCheckTime = $CmdLine[2]
If $CmdLine[0] > 2 Then $iOL_CtrlCheckTime = $CmdLine[3]
If $CmdLine[0] > 3 Then $sOL_Version = $CmdLine[4]
If $CmdLine[0] > 4 Then $iOL_Language = $CmdLine[5]
; Set window title for < Outlook 2007
If $sOL_Version <> "" Then
Global $aVersion = StringSplit($sOL_Version, '.')
If IsArray($aVersion) And $aVersion[1] < 12 Then $sWindowTitle = "Microsoft Office Outlook"
EndIf
While 1
If WinExists($sWindowTitle, $sWindowText) Or WinExists($sWindowTitle, $sWindowText2) Then
If WinExists($sWindowTitle, $sWindowText) Then
Local $aOL_WinSize = WinGetPos($sWindowTitle, $sWindowText)
Else
Local $aOL_WinSize = WinGetPos($sWindowTitle, $sWindowText2)
EndIf
ToolTip(@CRLF & "OL_Warning wird die notwendigen Schritte automatisch ausführen." & @CRLF, $aOL_WinSize[0] + 50, $aOL_WinSize[1] + 70, "Nicht eingreifen")
Local $hWhnd
While 1
If WinExists($sWindowTitle, $sWindowText) Then
$hWhnd = WinActivate($sWindowTitle, $sWindowText)
If ControlCommand($hWhnd, "", "Button3", "IsEnabled") Then
ControlFocus($hWhnd, "", "[CLASS:Button; INSTANCE:3]")
ControlClick($hWhnd, "", "Button3")
EndIf
Else
$hWhnd = WinActivate($sWindowTitle, $sWindowText2)
EndIf
If ControlCommand($hWhnd, "", "Button4", "IsEnabled") Then
ControlFocus($hWhnd, "", "[CLASS:Button; INSTANCE:4]")
;~ ControlSend($hWhnd, "", "Button4", "{SPACE}")
Send("{SPACE}")
ToolTip("")
ExitLoop
EndIf
Sleep($iOL_CtrlCheckTime)
If Not WinExists($hWhnd) Then ExitLoop
WEnd
EndIf
Sleep($iOL_WinCheckTime)
If Not ProcessExists($iOL_ProcessID) Then Exit
WEnd
Alles anzeigen
Hallo water,
Ich möchte mir eine Nachricht per Outlook senden lassen, wenn eine bestimmte Aufgabe absolviert ist. Für diese Aufgabe benötige ich bereits die _OL_Warnings.exe (Warnung beim Auslesen der Items), die ich mit _OL_Open starte.
Allerdings erscheint beim Sendeversuch ein Outlook-Warnhinweisfenster mit einem anderen Text. Daher müsste ich wohl entweder den Fenstertext weglassen, was mir zu unspezifisch scheint oder eine andere exe starten. Sehe ich das richtig?
Auf die Schnelle habe ich mir einfach die entsprechenden Teile aus _OL_Open in die _OL_Wrapper_SendMail-Funktion kopiert, damit ich beim Aufruf der Funktion eine zweite _OL_Warnings.exe starten kann. War das Quatsch und meinst du ich könnte einfach den Text weglassen und nur nach dem Fenstertitel "Microsoft Outlook" suchen?
PS: Mir auch aufgefallen, dass du in _OL_Wrapper_SendMail den Errorwert 4 als Rückmeldung für fehlende Empfänger dokumentiert hast. In der Funktion wird hier aber der Fehlerwert 3 gesetzt.
Hallo MoveJockey,
scheinbar geht es um ein Skript, dass du hier bereits diskutiert hast. Allerdings konnte ich das Skript nicht finden. Daher folgendes:
Vllt. solltest du die Funktion CodeBeta() zeigen, wenn du sie erwähnst. Ich nehme an, sie ist unwichtig. Dann kannst du sie hier auch unerwähnt lassen. Das lenkt ja nur ab.
Scheinbar hast du auch weder mit Func noch mit Call ein Problem, obwohl du das als Threadtitel verwendest, oder?
Es läuft alles gut, allerdings stockt er beim letzten Schritt (das Fenster zu schließen bzw. auf einen Button zu drücken mittels ControlClick).
Wenn ich die Dateipfade ausgeschrieben verwende und ohne den Anführungszeichen in Run und statt Shellexecute ebenso Run verwende läuft alles fehlerfrei durch.
Ich habe leider keine gute Antwort auf deine Frage. Diese Beschreibung hinterlässt mich aber fragend. Was soll "" & $p_nowthis überhaupt bringen - allerdings ist mir auch nicht klar, warum es nur ohne Anführungszeichen funktioniert. Ich weiß auch nicht, warum Run statt Shellexecute funktioniert. Die Shellexecute-Zeile fehlt hier ebenso wie die ersetzende Zeile mit Run..
Vor allem wäre aber wohl der Zusammenhang mit der ControlClick-Zeile interessant. Denn scheinbar ist das dein Problem?
Nachträglich auch von mir alles Gute.
Alles klar. Ich bin ein absoluter Vollpfosten.
Eigentlich hatte ich es so gemacht (nur $LVN_KEYDOWN). Aber kopieren und einfügen ist für mich offensichtlich nicht so leicht. Ich hatte Index statt Item eingetragen und abgefragt. Da kam dann immer Null heraus. Warum nur..
Hallo Kanashius, hallo @all
Was das auswerten des klicks angeht:
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
Ich habe das mal mit Tastaturbefehlen probiert und finde es schwierig, das richtige Item zu identifizieren - egal ob DOWN oder PGDOWN gedrückt wurde. Bei Seitensprüngen muss man doch erst einmal ermitteln, wie viele Items gerade angezeigt werden, oder?
Mein aktueller Weg wäre in der Schleife das aktuell markierte Item zu erfragen, was natürlich viel weniger performant ist. Daher wäre ich auch sehr froh, wenn ein Pro erklärt, wie man in der WM_NOTIFY richtig mit den Tatstendrücken umgeht.
Hallo Sonderbaar
-Nach dem füllen der Werte in den Listview soll die Spalte entweder an die Länge der Spaltenüberschrift (wenn diese länger ist als der Inhalt darunter) ansonsten an den Inhalt angepasst werden.
Schau dir hierzu mal _GUICtrlListView_SetColumnWidth an.
-Zudem soll nach dem Verfallsdatum (nur nach dem Verfallsdatum) sortiert werden, nämlich das kürzere Verfallsdatum oben...
Sortieren nach Verfallsdatum, ist natürlich möglich. Jedoch musst du wohl (meines Wissens nach) entweder alle Daten noch mal durch _DateDiff schicken oder du änderst das Zeitformat in yyyymmdd. Das könntest du ja direkt sortieren. Vielleicht solltest du das Datum auch so in deiner DB speichern und zum sortieren verwenden (müsstest es ja nicht anzeigen).
Wenn ich den Eintrag mit dem kürzeren Verfallsdatum markiere, soll (beim markieren, also markieren durch klicken) weiterer Code ausgeführt werden... wie bewerkstelligt man das? Braucht es dazu eine ID um den Eintrag in der SQL zu identifizieren? (In der SQL gibts auch ne ID logischerweise, den ich aber nicht mit auslese)
Um das markieren auszuwerten gibt es mehrere Methoden. Schau dir mal _GUICtrlListView_GetSelectedIndices an.
Entweder du nutzt, wie du selbst meinst die ID direkt (die du ja nicht in der LV anzeigen musst) oder du machst mit den Daten aus der LV einfach eine Abfrage, um den richtigen Eintrag zu identifizieren.
Hallo dieselwiesel,
Mach es am besten wie Musashi, es vorschlägt.
Ehrlich gesagt verstehe ich aber nicht wo das Problem mit der Dateiendung besteht. Du hättest sie vllt. direkt erwähnen sollen
Hallo dieselwiesel,
Hallo BugFix ,
In der Firma sprechen wir einen ollen USB Drucker per Printserver über Netzwerk an. Das funktioniert gut. Aber mit so einem Gerät habe ich keine Erfahrung. Für genau dieses Gerät sehen die Amazon Rezensionen aber nicht gut aus. Andere die man dort findet schneiden in den Bewertungen deutlich besser ab (was alleine natürlich nichts beweist. Fake-Rezensionen gibt es natürlich; dennoch lese ich die Bewertungen, wenn ich anderswo keine Tests finde).
Hallo Hinkebein ,
Du hast ja viele If Not @error in dem Code.. Soll dein Code wirklich jedes mal neu gestartet werden, wenn es keinen Fehler gab?
Statt einer while-Schleife bietet sich For .. To .. Schleife an.
; Also statt:
Local $i = 0
While $i <=2
$i = $i + 1
;...
Wend
; ein
For $i = 0 To 2
;...
Next
Alles anzeigen
Wenn du ab einem gewissen Punkt neu starten möchtest, solltest du den Code der insgesamt wiederholt ausgeführt werden soll, in eine Funktion packen, die du im Fehlerfall verlässt und erneut aufrufst.
EDIT: Ähm, bitte beachte diese Antwort erst nachdem du dir Gedanken über alpines Frage gemacht hast. Unsere Antworten haben sich überschnitten.