#Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Outfile_x64=..\..\..\Desktop\GUIRICHEditPlus_Example (V _431).Exe #AutoIt3Wrapper_AU3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4 #AutoIt3Wrapper_Run_Tidy=y #Au3Stripper_Parameters=/mo #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #include ;; #include #include #include #include #include #include #include #include #include #include #Region Fileinstall Global $iError = FileInstall("C:\File.Installer\RTF_SHellExPrint.exe", $g_sAppInit & "\RTF_SHellExPrint.exe", 1) $iError = FileInstall("C:\File.Installer\RTF_SHellExPrint.au3", $g_sAppInit & "\RTF_SHellExPrint.au3", 1) #EndRegion Fileinstall #Region Assign global vars (if needed) $g_bEncode = False ;(False: no encoding, True Filename encoding = on $g_REDebug = False Global $g_ToPrint = False Global $iBold ConsoleWrite($g_bEncode & @CRLF) #EndRegion Assign global vars (if needed) ;$g_sSavePath = $g_sAppWork & '\Directory Listing.rtf' ;StringReplace($g_sSavePath, @ScriptDir, 'x:') ;Test for errorhandling throws erros ######################################################## If FileExists($g_sSavePath) Then FileDelete($g_sSavePath) ######################################################## Global Const $g_aToLower = StringSplit('notneeded,', ',', 3) ;substrings => lowercase Global $sTitle = 'GuiRichEditPlus_Example ' & $g_sVersNr, $oldText, $newText Global $hGUI = GUICreate($sTitle, 600, 400, -1, 100) Global $g_aFileList, $g_Busy, $g_inserted, $g_failed Global $g_hRichEdit = _GUICtrlRichEdit_Create($hGUI, "", 10, 10, 580, 380, BitOR($ES_MULTILINE, $ES_WANTRETURN, $WS_VSCROLL, $ES_AUTOVSCROLL)) ;_GUICtrlRichEdit_AutoDetectURL($g_hRichEdit, True) ;If FileExists($g_sSavePath) Then _GUICtrlRichEdit_StreamFromFile($g_hRichEdit, $g_sSavePath) ; In this example allway start empty ;_WinAPI_DragAcceptFiles($g_hRichEdit) ;not wanted in this example ;_GUICtrlRichEdit_SetEventMask($g_hRichEdit, BitOR($ENM_DROPFILES, $ENM_LINK)) ;not wanted in this example _GUICtrlRichEdit_SetEventMask($g_hRichEdit, $ENM_LINK) ;not wanted in this example _SendMessage($g_hRichEdit, $EM_SETEDITSTYLE, $SES_HYPERLINKTOOLTIPS, $SES_HYPERLINKTOOLTIPS) ;_SendMessage($g_hRichEdit, $EM_SETZOOM, 1000, 500) ; erwarte 200% GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") GUIRegisterMsg($WM_SIZE, "WM_SIZE") Global $aParts[4] = [32, 90, 80, -1] Global $g_hStatus = _GUICtrlStatusBar_Create($hGUI, $aParts) Global $idAnim = GUICtrlCreateIcon('Shell32.dll', -24, 0, 0) Global $hAnim = GUICtrlGetHandle($idAnim) _GUICtrlStatusBar_EmbedControl($g_hStatus, 0, $hAnim) _GUICtrlStatusBar_SetMinHeight($g_hStatus, 38) _GUICtrlStatusBar_SetParts($g_hStatus, $aParts) _GUICtrlStatusBar_SetText($g_hStatus, 'Debug: ' & $g_REDebug, 1) _GUICtrlStatusBar_EmbedControl($g_hStatus, 0, $hAnim) ;ConsoleWrite('Icons' & _GUICtrlStatusBar_SetIcon($g_hStatus, 2, 23, "SyncCenter.dll")) WinMove($hGUI, '', 0, 0, @DesktopWidth, @DesktopHeight) GUISetState() Global $sListdir Global Const $sInitDir = @ProgramFilesDir Global $hBrowseLiatProc = DllCallbackRegister('_BrowseLiatProc', 'int', 'hwnd;uint;lparam;ptr') Global $pBrowseLiatProc = DllCallbackGetPtr($hBrowseLiatProc) Global $pText = _WinAPI_CreateString($sInitDir) Do $sListdir = _WinAPI_BrowseForFolderDlg(_WinAPI_PathStripToRoot($sInitDir), 'Select a folder from the list below.', BitOR($BIF_RETURNONLYFSDIRS, $BIF_EDITBOX, $BIF_VALIDATE), $pBrowseLiatProc, $pText) ConsoleWrite($sListdir & @CRLF) Until Not @error _WinAPI_FreeMemory($pText) If $sListdir Then ConsoleWrite('--------------------------------------------------' & @CRLF) ConsoleWrite($sListdir & @CRLF) EndIf ;$aChar = StringSplit($sListdir, '', 3) ;_ArrayDisplay($aChar) DllCallbackFree($hBrowseLiatProc) $g_sSavePath = $g_sAppWork & '\Directory Listing ' & StringReplace(StringTrimLeft($sListdir, 3), '\', ' ') & '.rtf' ;StringReplace($g_sSavePath, @ScriptDir, 'x:') ;Test for errorhandling throws erros ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $g_sSavePath = ' & $g_sSavePath & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console _GUICtrlStatusBar_SetText($g_hStatus, '_FileListToArrayRec ', 1) $g_Busy = True AdlibRegister('_ShowBusy', 20) $g_aFileList = _FileListToArrayRec($sListdir, '*', $FLTAR_FILESFOLDERS, $FLTAR_RECUR, $FLTAR_SORT, $FLTAR_FULLPATH) ;If Not IsArray($g_aFileList) Then Exit MsgBox _GUICtrlRichEdit_InsertTextEx($g_hRichEdit, "Install Directory Structure" & @CRLF & @CRLF, "Arial", "FF1234", 20) _GUICtrlRichEdit_InsertTextEx($g_hRichEdit, "" & @CRLF & @CRLF, "Arial", "000000", 1) _GUICtrlRichEdit_SetFont($g_hRichEdit, 'Arial', 1) ;_GUICtrlRichEdit_StreamToFile($g_hRichEdit, $g_sSavePath) _GUICtrlRichEdit_SetModified($g_hRichEdit, False) _GUICtrlRichEdit_insertLink($g_hRichEdit, 'hint://Info: LastSaved: ' & _NowCalc(), 'LS') _ArrayInsert($g_aFileList, 1, $sListdir) $g_aFileList[0] += 1 ;_ArrayDisplay($g_aFileList) _ArrayColInsert($g_aFileList, 1) _GUICtrlStatusBar_SetText($g_hStatus, 'RichEdit_insertLink(s)', 1) ; $g_Busy = True For $i = 1 To $g_aFileList[0][0] Switch GUIGetMsg() Case $Gui_EVENT_CLOSE If MsgBox(BitOR($MB_ICONQUESTION, $MB_YESNO), 'User break ', 'Realy end dir listing ? ' & @CRLF _ & "It can't continued" & @CRLF & ' You have To restart it!') = $IDYES Then _GUICtrlRichEdit_AppendTextEx($g_hRichEdit, "User break: " & @UserName, "Arial", "FA4321", 24, $iBold) ExitLoop EndIf Case Else $g_aFileList[$i][1] = _GetDisplayName($g_aFileList[$i][0]) Switch @extended Case 0 #cs _GUICtrlRichEdit_SetCharBkColor($g_hRichEdit, '009999') _GUICtrlRichEdit_SetCharAttributes($g_hRichEdit, '+bo') _GUICtrlRichEdit_InsertText($g_hRichEdit, StringReplace($g_aFileList[$i][0], $g_aFileList[$i][1], '')) #ce $iBold = 1 _GUICtrlRichEdit_AppendTextEx($g_hRichEdit, StringReplace($g_aFileList[$i][0], $g_aFileList[$i][1], ''), "Arial", "FA4321", 14, $iBold) $iBold = 0 _GUICtrlRichEdit_AppendTextEx($g_hRichEdit, ' ', "", "881111", 10, $iBold) ContinueCase Case Else If _GUICtrlRichEdit_insertLink($g_hRichEdit, $g_aFileList[$i][0], $g_aFileList[$i][1], True) Then $g_inserted += 1 Else $g_failed += 1 EndIf $g_inserted &= ' ' & _FormatedStatPer($i, $g_aFileList[0][0]) $g_failed &= ' ' & _FormatedStatPer($i, $g_aFileList[0][0]) _GUICtrlStatusBar_SetText($g_hStatus, $g_inserted, 1) _GUICtrlStatusBar_SetText($g_hStatus, $g_failed, 2) EndSwitch EndSwitch Next _GUICtrlRichEdit_SetCharAttributes($g_hRichEdit, '+hi') _GUICtrlRichEdit_insertLink($g_hRichEdit, 'hint://' & $g_inserted & ' Links succesfully inserted.| Links total: ' & $g_aFileList[0][0], 'Status', True) For $i = 1 To 5 Do Until GUIGetMsg() = 0 Next $g_Busy = False ;#ce Global $nMsg While True Switch GUIGetMsg() Case $GUI_EVENT_CLOSE _GUICtrlRichEdit_Deselect($g_hRichEdit) If $nMsg = _GUICtrlRichEdit_GetLineLength($g_hRichEdit, 1) = 0 Then $g_ToPrint = _GUICtrlRichEdit_Save($g_hRichEdit, $g_sSavePath, True) ;ConsoleWrite($nMsg & '|' & @error & '|' & @extended & @CRLF) _GUICtrlRichEdit_Destroy($g_hRichEdit) ; needed unless script crashes ;GUIDelete() Else $g_ToPrint = False EndIf If $g_ToPrint Then _PrintIt() Exit #cs Case $idPrint If _GUICtrlRichEdit_IsModified($g_hRichEdit) Then _GUICtrlRichEdit_StreamToFile($g_hRichEdit, $g_sSavePath) _GUICtrlRichEdit_SetModified($g_hRichEdit, False) EndIf _PrintIt($g_sSavePath) #ce ;Case $idZoom ;_Zoom() EndSwitch WEnd Func _FormatedStatPer($iDone, $iAll) Return (Ceiling($iDone * 100 / $iAll) & '%') EndFunc ;==>_FormatedStatPer ;#cs ;_GUICtrlRichEdit_ReplaceFieldValue($g_sSavePath, 'LastSaved: ', '"}', _NowCalc()) Func _Zoom() #cs Local $ipos = GUICtrlRead($idZoom) Switch $ipos + 50 Case 0 To 49 ConsoleWrite('<100%' & @CRLF) Case 50 ConsoleWrite('100%' & @CRLF) Case Else ConsoleWrite('>100%' & @CRLF) EndSwitch #ce EndFunc ;==>_Zoom Func _PrintIt($sPath = $g_sSavePath) If MsgBox(BitOR($MB_ICONQUESTION, $MB_YESNO), 'Print', $sPath) = $IDNO Then Return SetError(False, 88, '') $g_Busy = True Local $sPRNexe = $g_sAppInit & '\RTF_SHellExPrint.exe ' If Not FileExists($sPRNexe) Then Return MsgBox(BitOR($MB_ICONERROR, $MB_TASKMODAL), 'Print', $sPRNexe & 'not found!', 0, $hGUI) _ShowBusy() ;Local $sArchiv = @ScriptDir & '\Archiv' ;ConsoleWrite($sArchiv & @CRLF) Local $sPrint = StringFormat('%s "" "" "Print" @SW_HIDE', StringReplace($sPath, ' ', '%20')) Local $iPid = Run($sPRNexe & $sPrint, "", @SW_HIDE) ConsoleWrite('RTF_SHellExPrint.exe ' & $sPrint & ' Ret: ' & Int($iPid) & '|' & @error & @CRLF) ;#cs While ProcessExists($iPid) Sleep(100) WEnd ;#ce $g_Busy = False #cs ; here Setting default margin - all = 1 centimeters ; you can set your own margins _RTF_SetMargins() ; here setting number of copies - default is 1 _RTF_SetNumberOfCopies(1) ; here getting data to Print Local $vRTF_Stream = _GUICtrlRichEdit_StreamToVar($g_hRichEdit) ; and here Printing _RTF_PrintFile($vRTF_Stream, Default, True, True) #ce ; here Setting default margin - all = 1 centimeters EndFunc ;==>_PrintIt Func _GetDisplayName($sText) Local $ipos = StringInStr($sText, '\', 0, -1) Local $sRet = _StringProper(StringMid($sText, $ipos + 1)) $sRet = _CheckToLower($sRet) $ipos = StringInStr($sRet, '.', 0, -1) Return SetError(0, $ipos, $sRet) EndFunc ;==>_GetDisplayName Func _CheckToLower($sText) For $i = 0 To UBound($g_aToLower) - 1 If StringInStr($sText, $g_aToLower[$i]) Then For $j = 1 To 4 Switch $j Case 1 $sText = StringReplace($sText, '-' & $g_aToLower[$i] & '-', ' ' & $g_aToLower[$i] & ' ') If @extended Then ContinueLoop Case 2 $sText = StringReplace($sText, $g_aToLower[$i] & '-', $g_aToLower[$i] & ' ') If @extended Then ContinueLoop Case 3 If @extended Then ContinueLoop $sText = StringReplace($sText, '-' & $g_aToLower[$i], ' ' & $g_aToLower[$i]) Case 4 $sText = StringReplace($sText, $g_aToLower[$i], $g_aToLower[$i]) EndSwitch Next ;ConsoleWrite($g_aToLower[$i] & @TAB) EndIf Next ;ConsoleWrite($sText & @CRLF) Return $sText EndFunc ;==>_CheckToLower Func _ShowBusy() Local Static $iBusy Local $sBusy ;ConsoleWrite($iBusy & @TAB) AdlibUnRegister('_ShowBusy') $iBusy += 1 If $iBusy < 23 Then $iBusy = 23 If $iBusy > 30 Then $iBusy = 23 ;$sBusy = $g_sAppIcons & '\SyncCenter_' & $iBusy & '.ico' ;ConsoleWrite($sBusy & @CRLF) GUICtrlSetImage($idAnim, 'SyncCenter.dll', ($iBusy + 1) * -1) ;to show Busy Icons If $g_Busy Then AdlibRegister('_ShowBusy', 20) Else ; WinSetTitle($hGUI, "", $sTitel) & $sProgVer & $sDLLName) GUICtrlSetImage($idAnim, 'SyncCenter', $iBusy * -1 + 1) EndIf EndFunc ;==>_ShowBusy Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam) #forceref $iMsg, $wParam Local $hWndFrom, $iCode, $tNMHDR, $aFileList, $tDropFiles, $hDrop, $tEnLink, $cpMin, $cpMax, $tMsgFilter, $ipos, $sLink, $sDisplay, $aSplit, $iInserted, $sRet ; Local $hWndFrom, $iCode, $tNMHDR, $tNMHDR = DllStructCreate($tagNMHDR, $lParam) $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom")) $iCode = DllStructGetData($tNMHDR, "Code") Switch $hWndFrom Case $g_hRichEdit Switch $iCode Case $EN_DROPFILES ;Droped File Names extrahieren $tDropFiles = DllStructCreate($tagENDROPFILES, $lParam) $hDrop = DllStructGetData($tDropFiles, "hDrop") $aFileList = _WinAPI_DragQueryFileEx($hDrop, 0) For $i = 1 To $aFileList[0] $sLink = $aFileList[$i] $aSplit = StringSplit($sLink, '\', 1) $sDisplay = $aSplit[$aSplit[0]] $sRet = _GUICtrlRichEdit_insertLink($g_hRichEdit, $sLink, $sDisplay, True) If $sRet = True Then $iInserted += 1 Else ConsoleWrite($i & ': ' & $sRet & 'Failed') EndIf Next _GUICtrlRichEdit_SetSel($g_hRichEdit, -1, -1) ;_GUICtrlRichEdit_SetSel($hWndFrom, $tDropFiles.cp, $tDropFiles.cp) If Not $g_REDebug Then ConsoleWrite($iInserted & ' FileLinks inserted' & @CRLF) Return 1 Case $iCode = $EN_LINK ;ConsoleWrite('$EN_LINK' & @CRLF) $tMsgFilter = DllStructCreate($tagMSGFILTER, $lParam) If DllStructGetData($tMsgFilter, "msg") = $WM_LBUTTONDBLCLK Then $tEnLink = DllStructCreate($tagENLINK, $lParam) $cpMin = DllStructGetData($tEnLink, "cpMin") $cpMax = DllStructGetData($tEnLink, "cpMax") $sLink = _GUICtrlRichEdit_GetTextInRange($g_hRichEdit, $cpMin + 6, $cpMax) ConsoleWrite($sLink & ': ' & @error & '|' & @extended & @CRLF) _GetDisplayName($sLink) Switch @extended Case 0 ;quickckeck for Directory ShellExecute($sLink) ;opens a explorer link Case Else If FileExists($sLink) Then If StringInStr($g_sAllowedExt, StringRight($sLink, 3)) Then ShellExecute($sLink) Else MsgBox(64, 'Link:', $sLink) EndIf Else ;it must be a hint or file is delete MsgBox(64, 'Hint:', StringReplace($sLink, '/', '')) EndIf EndSwitch EndIf EndSwitch #cs Case $hZoom Switch $iCode Case $NM_RELEASEDCAPTURE ; The control is releasing mouse capture _WM_NOTIFY_DebugEvent("$NM_RELEASEDCAPTURE", $tagNMHDR, $lParam, "hWndFrom,IDFrom") ; No return value EndSwitch #ce EndSwitch Return $Gui_RUNDEFMSG EndFunc ;==>WM_NOTIFY Func WM_SIZE($hWndGUI, $MsgID, $wParam, $lParam) Local $iWidth = _WinAPI_LoWord($lParam) Local $iHeight = _WinAPI_HiWord($lParam) ; _WinAPI_MoveWindow($g_hRichEdit, 0, 0, $iWidth, $iHeight) _WinAPI_MoveWindow($g_hRichEdit, 4, 4, $iWidth - 8, $iHeight - 44) _WinAPI_MoveWindow($g_hStatus, 2, 2, $iWidth - 4, $iHeight - 38) ;Return 1 Return 0 ; "an application should return zero if it processes this message" (MSDN) EndFunc ;==>WM_SIZE Func _BrowseProc($hWnd, $iMsg, $wParam, $lParam) Local $sPath, $hSearch Switch $iMsg Case $BFFM_INITIALIZED _WinAPI_SetWindowText($hWnd, 'MyTitle') _SendMessage($hWnd, $BFFM_SETSELECTIONW, 1, $lParam) Case $BFFM_SELCHANGED $sPath = _WinAPI_ShellGetPathFromIDList($wParam) $hSearch = FileFindFirstFile($sPath & '\*') If Not @error Then ConsoleWrite($sPath & @CRLF) EndIf Case $BFFM_VALIDATEFAILED MsgBox(($MB_ICONERROR + $MB_SYSTEMMODAL), 'Error', _WinAPI_GetString($wParam) & ' is invalid.', 0, $hWnd) Return 1 EndSwitch Return $hSearch EndFunc ;==>_BrowseProc