spudw2k Posted June 14, 2010 Share Posted June 14, 2010 (edited) Pretty Self explanatory. Creates a text file with folder counts. edit: Updated count script. Optimized count method (didn't realize there was a property for this already...doh) expandcollapse popup#include <GuiTreeView.au3> #include <Array.au3> #include <GUIConstants.au3> $objOutlook = ObjCreate("Outlook.Application") $objNamespace= $objOutlook.GetNamespace("MAPI") $objFolderInbox = $objNamespace.Folders Dim $arrFolders[1] For $folder In $objFolderInbox If Not StringInstr($folder.FolderPath,"Public Folders") Then If Ubound($arrFolders)=1 Then $arrFolders[0]=$folder.FolderPath ReDim $arrFolders[UBound($arrFolders)+1] Else $arrFolders[UBound($arrFolders)-1]=$folder.FolderPath ReDim $arrFolders[UBound($arrFolders)+1] EndIf EndIf Next ReDim $arrFolders[UBound($arrFolders)-1] $arrFldrs = SelectionBox($arrFolders) If Not IsArray($arrFldrs) Then Exit $file = FileSaveDialog("Save as",@ScriptDir,"Text File (*.TXT)",18,"emailcount.txt") If @error Then Exit If StringLeft(StringRight($file,4),1) <> "." Then $file &= ".TXT" If FileExists($file) Then FileOpen($file,2) For $fldr In $arrFldrs $fldr = StringReplace($fldr,"\\","") $folder = $objNamespace.Folders.Item($fldr) EnumerateFolder($folder) Next Msgbox(0,"Email Count Complete","",3) Func EnumerateFolder($objFolder) $dat = "" $dat &= Chr(34) & $objFolder.FolderPath & Chr(34) & "," $dat &= Chr(34) & $objFolder.Items.Count & " items" & Chr(34) FileWriteLine($file,$dat) For $folder In $objFolder.Folders EnumerateFolder($folder) Next EndFunc Func SelectionBox($arrFolders) Dim $tTreeArr[1] $tGui = GUICreate("Select Folder(s)",250,326,-1,-1,"","") $tTree = GUICtrlCreateTreeView(5,5,235,258,BitOr(256,55)) $tSelectAll = GUICtrlCreateButton("Select All",85,270,75,20) $tDeSelectAll = GUICtrlCreateButton("Deselect All",165,270,75,20) $tOKBtn = GUICtrlCreateButton("OK",5,270,75,20) GUICtrlSetState(-1,$GUI_FOCUS) For $i = 0 to UBound($arrFolders) - 1 $tTreeArr[$i] = GUICtrlCreateTreeViewItem($arrFolders[$i],$tTree) ReDim $tTreeArr[$i + 2] Next $tVarTreeCount = _GUICtrlTreeView_GetCount($tTree) GUISetState(@SW_SHOW,$tGui) While 1 $msg = GUIGetMsg() If $msg = $tSelectAll Then For $i = 0 to $tVarTreeCount - 1 GUICtrlSetState($tTreeArr[$i],1) Next EndIf If $msg = $tDeSelectAll Then For $i = 0 to $tVarTreeCount - 1 GUICtrlSetState($tTreeArr[$i],4) Next EndIf If $msg = $tOKBtn Then Local $tStrSelectedHosts For $i = 0 to $tVarTreeCount - 1 If BitAnd(GUICtrlRead($tTreeArr[$i]),1) Then $tStrSelectedHosts = $tStrSelectedHosts & GUICtrlRead($tTreeArr[$i],1) & "|" EndIf Next GUIDelete($tGui) $tArrSelectedHosts = StringSplit($tStrSelectedHosts,"|") _ArrayDelete($tArrSelectedHosts,0) _ArrayDelete($tArrSelectedHosts,UBound($tArrSelectedHosts)-1) Return $tArrSelectedHosts EndIf WEnd EndFunc Edited June 15, 2010 by spudw2k Spoiler Things I've Made: Always On Top Tool ◊ AU History ◊ Deck of Cards ◊ HideIt ◊ ICU ◊ Icon Freezer ◊ Ipod Ejector ◊ Junos Configuration Explorer ◊ Link Downloader ◊ MD5 Folder Enumerator ◊ PassGen ◊ Ping Tool ◊ Quick NIC ◊ Read OCR ◊ RemoteIT ◊ SchTasksGui ◊ SpyCam ◊ System Scan Report Tool ◊ System UpTime ◊ Transparency Machine ◊ VMWare ESX BuilderMisc Code Snippets: ADODB Example ◊ CheckHover ◊ Detect SafeMode ◊ DynEnumArray ◊ GetNetStatData ◊ HashArray ◊ IsBetweenDates ◊ Local Admins ◊ Make Choice ◊ Recursive File List ◊ Remove Sizebox Style ◊ Retrieve PNPDeviceID ◊ Retreive SysListView32 Contents ◊ Set IE Homepage ◊ Tickle Expired Password ◊ Transpose ArrayProjects: Drive Space Usage GUI ◊ LEDkIT ◊ Plasma_kIt ◊ Scan Engine Builder ◊ SpeeDBurner ◊ SubnetCalcCool Stuff: AutoItObject UDF ◊ Extract Icon From Proc ◊ GuiCtrlFontRotate ◊ Hex Edit Funcs ◊ Run binary ◊ Service_UDF Link to comment Share on other sites More sharing options...
spudw2k Posted June 15, 2010 Author Share Posted June 15, 2010 Here's another Outlook tool. This one collects emails (Path,Subject,Received) in the Inbox. expandcollapse popup#region - Main ;Global Variables Global Const $__TREEVIEWCONSTANT_ClassName = "SysTreeView32" Global Const $TV_FIRST = 0x1100 Global Const $TVM_GETCOUNT = $TV_FIRST + 5 Global $Debug_TV = False Global $debug = 0 ;COM Object Initialize $oMyError = ObjEvent("AutoIt.Error","MyErrFunc") $objOutlook = ObjCreate("Outlook.Application") $objNamespace= $objOutlook.GetNamespace("MAPI") $objFolders = $objNamespace.Folders ;Query Accessible Mailboxes and Retrive / Format Data Dim $arrFolders[1] For $folder In $objFolders If Not StringInstr($folder.FolderPath,"Public Folders") Then If Ubound($arrFolders)=1 Then $arrFolders[0]=$folder.FolderPath ReDim $arrFolders[UBound($arrFolders)+1] Else $arrFolders[UBound($arrFolders)-1]=$folder.FolderPath ReDim $arrFolders[UBound($arrFolders)+1] EndIf EndIf Next ReDim $arrFolders[UBound($arrFolders)-1] ;Mailbox Seleciton Prompt $arrFldrs = SelectionBox($arrFolders) ;Save As Dialog for Report Output If Not IsArray($arrFldrs) Then Exit $file = FileSaveDialog("Save as",@ScriptDir,"Comma Separated Values (*.CSV)",18,"emaildump.csv") If @error Then Exit ;Prepare CSV File If StringLeft(StringRight($file,4),1) <> "." Then $file &= ".TXT" If FileExists($file) Then FileOpen($file,2) FileWriteLine($file,Chr(34) & "Path" & chr(34) & "," & Chr(34) & "Subject" & CHR(34) & "," & Chr(34) & "Date Received" & CHr(34)) ;Traverse Mailbox for Inbox Folders For $fldr In $arrFldrs $fldr = StringReplace($fldr,"\\","") $folder = $objFolders.Item($fldr) EnumerateFolder($folder) Next ;Process Complete Msgbox(0,"Inbox Dump Complete","",3) #endregion #region - Functions Func EnumerateFolder($objFolder,$indent=0) ;Folder Enumeration Function If StringInStr($objFolder.FolderPath,"Inbox") Then $path = Chr(34) & $objFolder.FolderPath & Chr(34) & "," For $item In $objFolder.Items $dat = "" $dat = $path $dat &= Chr(34) & StringReplace($item.Subject,'"',"'") & Chr(34) & "," $date = $item.ReceivedTime If $date Then $date = StringRegExpReplace($date,"(\d{4,4})(\d{2,2})(\d{2,2})(\d{2,2})(\d{2,2})(\d{2,2})",'$1/$2/$3 $4:$5:$6') If $date Then $dat &= Chr(34) & $date & Chr(34) If $dat Then FileWriteLine($file,$dat) Next EndIf For $folder In $objFolder.Folders EnumerateFolder($folder,$indent+1) Next EndFunc Func SelectionBox($arrFolders) ;Selection Box Prompt Dim $tTreeArr[1] $tGui = GUICreate("Select Folder(s)",250,326,-1,-1,"","") $tTree = GUICtrlCreateTreeView(5,5,235,258,BitOr(256,55)) $tSelectAll = GUICtrlCreateButton("Select All",85,270,75,20) $tDeSelectAll = GUICtrlCreateButton("Deselect All",165,270,75,20) $tOKBtn = GUICtrlCreateButton("OK",5,270,75,20) GUICtrlSetState(-1,256) For $i = 0 to UBound($arrFolders) - 1 $tTreeArr[$i] = GUICtrlCreateTreeViewItem($arrFolders[$i],$tTree) ReDim $tTreeArr[$i + 2] Next $tVarTreeCount = _GUICtrlTreeView_GetCount($tTree) GUISetState(@SW_SHOW,$tGui) While 1 $msg = GUIGetMsg() If $msg = $tSelectAll Then For $i = 0 to $tVarTreeCount - 1 GUICtrlSetState($tTreeArr[$i],1) Next EndIf If $msg = $tDeSelectAll Then For $i = 0 to $tVarTreeCount - 1 GUICtrlSetState($tTreeArr[$i],4) Next EndIf If $msg = $tOKBtn Then Local $tStrSelected For $i = 0 to $tVarTreeCount - 1 If BitAnd(GUICtrlRead($tTreeArr[$i]),1) Then $tStrSelected = $tStrSelected & GUICtrlRead($tTreeArr[$i],1) & "|" EndIf Next GUIDelete($tGui) $tArrSelected = StringSplit($tStrSelected,"|") _ArrayDelete($tArrSelected,0) _ArrayDelete($tArrSelected,UBound($tArrSelected)-1) Return $tArrSelected EndIf WEnd EndFunc Func MyErrFunc() ;Generic COM Error Handler If Not $debug Then Return 0 FileWrite(@ScriptDir & "\" & @ScriptName & ".dbg.txt","AutoItCOM intercepted a COM Error !" & @CRLF & @CRLF & _ "err.description is: " & @TAB & $oMyError.description & @CRLF & _ "err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _ "err.number is: " & @TAB & hex($oMyError.number,8) & @CRLF & _ "err.lastdllerror is: " & @TAB & $oMyError.lastdllerror & @CRLF & _ "err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & _ "err.source is: " & @TAB & $oMyError.source & @CRLF & _ "err.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & _ "err.helpcontext is: " & @TAB & $oMyError.helpcontext & @CRLF) Endfunc #endregion #region - User Defined Functions Func _ArrayDelete(ByRef $avArray, $iElement) If Not IsArray($avArray) Then Return SetError(1, 0, 0) Local $iUBound = UBound($avArray, 1) - 1 If Not $iUBound Then $avArray = "" Return 0 EndIf ; Bounds checking If $iElement < 0 Then $iElement = 0 If $iElement > $iUBound Then $iElement = $iUBound ; Move items after $iElement up by 1 Switch UBound($avArray, 0) Case 1 For $i = $iElement To $iUBound - 1 $avArray[$i] = $avArray[$i + 1] Next ReDim $avArray[$iUBound] Case 2 Local $iSubMax = UBound($avArray, 2) - 1 For $i = $iElement To $iUBound - 1 For $j = 0 To $iSubMax $avArray[$i][$j] = $avArray[$i + 1][$j] Next Next ReDim $avArray[$iUBound][$iSubMax + 1] Case Else Return SetError(3, 0, 0) EndSwitch Return $iUBound EndFunc ;==>_ArrayDelete Func _GUICtrlTreeView_GetCount($hWnd) If $Debug_TV Then __UDF_ValidateClassName($hWnd, $__TREEVIEWCONSTANT_ClassName) If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd) Return _SendMessage($hWnd, $TVM_GETCOUNT) EndFunc ;==>_GUICtrlTreeView_GetCount Func _SendMessage($hWnd, $iMsg, $wParam = 0, $lParam = 0, $iReturn = 0, $wParamType = "wparam", $lParamType = "lparam", $sReturnType = "lresult") Local $aResult = DllCall("user32.dll", $sReturnType, "SendMessageW", "hwnd", $hWnd, "uint", $iMsg, $wParamType, $wParam, $lParamType, $lParam) If @error Then Return SetError(@error, @extended, "") If $iReturn >= 0 And $iReturn <= 4 Then Return $aResult[$iReturn] Return $aResult EndFunc ;==>_SendMessage Func __UDF_ValidateClassName($hWnd, $sClassNames) __UDF_DebugPrint("This is for debugging only, set the debug variable to false before submitting") If _WinAPI_IsClassName($hWnd, $sClassNames) Then Return True Local $sSeparator = Opt("GUIDataSeparatorChar") $sClassNames = StringReplace($sClassNames, $sSeparator, ",") __UDF_DebugPrint("Invalid Class Type(s):" & @LF & @TAB & "Expecting Type(s): " & $sClassNames & @LF & @TAB & "Received Type : " & _WinAPI_GetClassName($hWnd)) Exit EndFunc ;==>__UDF_ValidateClassName Func _WinAPI_IsClassName($hWnd, $sClassName) Local $sSeparator = Opt("GUIDataSeparatorChar") Local $aClassName = StringSplit($sClassName, $sSeparator) If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd) Local $sClassCheck = _WinAPI_GetClassName($hWnd) ; ClassName from Handle ; check array of ClassNames against ClassName Returned For $x = 1 To UBound($aClassName) - 1 If StringUpper(StringMid($sClassCheck, 1, StringLen($aClassName[$x]))) = StringUpper($aClassName[$x]) Then Return True Next Return False EndFunc ;==>_WinAPI_IsClassName Func _WinAPI_GetClassName($hWnd) If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd) Local $aResult = DllCall("user32.dll", "int", "GetClassNameW", "hwnd", $hWnd, "wstr", "", "int", 4096) If @error Then Return SetError(@error, @extended, False) Return SetExtended($aResult[0], $aResult[2]) EndFunc ;==>_WinAPI_GetClassName Func __UDF_DebugPrint($sText, $iLine = @ScriptLineNumber, $err=@error, $ext=@extended) ConsoleWrite( _ "!===========================================================" & @CRLF & _ "+======================================================" & @CRLF & _ "-->Line(" & StringFormat("%04d", $iLine) & "):" & @TAB & $sText & @CRLF & _ "+======================================================" & @CRLF) Return SetError($err, $ext, 1) EndFunc ;==>__UDF_DebugPrint #endregion Spoiler Things I've Made: Always On Top Tool ◊ AU History ◊ Deck of Cards ◊ HideIt ◊ ICU ◊ Icon Freezer ◊ Ipod Ejector ◊ Junos Configuration Explorer ◊ Link Downloader ◊ MD5 Folder Enumerator ◊ PassGen ◊ Ping Tool ◊ Quick NIC ◊ Read OCR ◊ RemoteIT ◊ SchTasksGui ◊ SpyCam ◊ System Scan Report Tool ◊ System UpTime ◊ Transparency Machine ◊ VMWare ESX BuilderMisc Code Snippets: ADODB Example ◊ CheckHover ◊ Detect SafeMode ◊ DynEnumArray ◊ GetNetStatData ◊ HashArray ◊ IsBetweenDates ◊ Local Admins ◊ Make Choice ◊ Recursive File List ◊ Remove Sizebox Style ◊ Retrieve PNPDeviceID ◊ Retreive SysListView32 Contents ◊ Set IE Homepage ◊ Tickle Expired Password ◊ Transpose ArrayProjects: Drive Space Usage GUI ◊ LEDkIT ◊ Plasma_kIt ◊ Scan Engine Builder ◊ SpeeDBurner ◊ SubnetCalcCool Stuff: AutoItObject UDF ◊ Extract Icon From Proc ◊ GuiCtrlFontRotate ◊ Hex Edit Funcs ◊ Run binary ◊ Service_UDF Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now