Jump to content

JoshuaBarnette

Active Members
  • Posts

    30
  • Joined

  • Last visited

Everything posted by JoshuaBarnette

  1. Thanks for all you hard work on this UDF. I have been using it for a long time. I noticed I kept getting and error "For $iCount2 = 1 To $aTempMemberOf^ ERROR" when using _AD_RecursiveGetMemberOf. To eliminate the error, I added "If IsArray($aTempMemberOf) Then" after " $aTempMemberOf = _AD_RecursiveGetMemberOf($aGroups[$iCount1], $iDepth - 1, $bListenherited, $bFQDN)". I am including the updates I made below. I have tested and compare to the PowerShell equivalent, the groups come back identically. ; #FUNCTION# ==================================================================================================================== ; Name...........: _AD_RecursiveGetMemberOf ; Description ...: Takes a group, user or computer and recursively returns a list of groups the object is a member of. ; Syntax.........: _AD_RecursiveGetMemberOf($sObject[, $iDepth = 10[, $bListInherited = True[, $bFQDN = True]]]) ; Parameters ....: $sObject - User, group or computer for which the group membership is to be returned. Can be specified as Fully Qualified Domain Name (FQDN) or sAMAccountName ; $iDepth - [optional] Maximum depth of recursion (default = 10) ; $bListInherited - [optional] Defines if the function returns the group(s) it was inherited from (default = True) ; $bFQDN - [optional] Specifies the attribute to be returned. True = distinguishedName (FQDN), False = SamAccountName (default = True) ; Return values .: Success - Returns an one-based one dimensional array of group names (FQDN or sAMAccountName) the user or group is a member of ; Failure - "", sets @error to: ; |1 - Specified user, group or computer does not exist ; Author ........: Jonathan Clelland ; Modified.......: water ; Remarks .......: This function traverses the groups that the object is immediately a member of while also checking its group membership. ; For groups that are inherited, the return is the FQDN or sAMAccountname of the group, user or computer, and the FQDN(s) or sAMAccountname(s) of the group(s) it ; was inherited from, seperated by '|'(s) if flag $bListInherited is set to True. ;+ ; If flag $bListInherited is set to False then the group names are sorted and only unique groups are returned. ; Related .......: _AD_IsMemberOf, _AD_GetUserGroups, _AD_GetUserPrimaryGroup ; Link ..........: ; Example .......: Yes ; =============================================================================================================================== Func _AD_RecursiveGetMemberOf($sObject, $iDepth = 10, $bListInherited = True, $bFQDN = True) If $iDepth = Default Then $iDepth = 10 If $bListInherited = Default Then $bListInherited = True If $bFQDN = Default Then $bFQDN = True If _AD_ObjectExists($sObject) = 0 Then Return SetError(1, 0, "") If StringMid($sObject, 3, 1) <> "=" Then $sObject = _AD_SamAccountNameToFQDN($sObject) ; sAMAccountName provided $sObject = _AD_FixSpecialChars($sObject, 1, '"\/#+<>;=') ; the object needs to be unescaped (except a comma) for the LDAP query but the result might be escaped Local $iCount1, $iCount2 Local $sField = "distinguishedName" If Not $bFQDN Then $sField = "samaccountname" $__oAD_Command.CommandText = "<LDAP://" & $sAD_HostServer & "/" & $sAD_DNSDomain & ">;(member=" & $sObject & ");" & $sField & ";subtree" Local $oRecordSet = $__oAD_Command.Execute Local $aGroups[$oRecordSet.RecordCount + 1] = [0] If $oRecordSet.RecordCount = 0 Then Return $aGroups $oRecordSet.MoveFirst $iCount1 = 1 Local $aTempMemberOf[1] Do $aGroups[$iCount1] = $oRecordSet.Fields(0).Value If $iDepth > 0 Then $aTempMemberOf = _AD_RecursiveGetMemberOf($aGroups[$iCount1], $iDepth - 1, $bListInherited, $bFQDN) If IsArray($aTempMemberOf) Then If $bListInherited Then For $iCount2 = 1 To $aTempMemberOf[0] $aTempMemberOf[$iCount2] &= "|" & $aGroups[$iCount1] Next EndIf _ArrayDelete($aTempMemberOf, 0) _ArrayConcatenate($aGroups, $aTempMemberOf) EndIf EndIf $iCount1 += 1 $oRecordSet.MoveNext Until $oRecordSet.EOF $oRecordSet.Close If $bListInherited = False Then _ArraySort($aGroups, 0, 1) $aGroups = _ArrayUnique($aGroups, 0, 1) EndIf $aGroups[0] = UBound($aGroups) - 1 Return $aGroups EndFunc ;==>_AD_RecursiveGetMemberOf
  2. An old post, but helped me get the taskbar icon to not show up. Using... GUICreate('Password Expiration Notification', 850, 420, -1, -1, $WS_POPUPWINDOW, $WS_EX_TOPMOST, WinGetHandle('Program Manager')) There is no way to close or move the window without clicking OK or killing the process in TaskManager. Either way we can guarantee that the user saw the message. Thanks to FreeFry and ffrankcool for the posts.
  3. I would like to choose a window from a list, gather all the controls on that window, then select a control from the resulting list and "highlight" it on the original window much like is done in either the AutoIT Info Tool or Yashied's Control Viewer. The issues that I am having are: Identifying when the ListView is clicked and what row is clickedThen highlighting the field on the original windowThe reason for this script is not just for visualizing the controls, but to help identify specific pixel positions and colors for controls that require ControlClick such as a list of CheckBoxes in a List that does not list specific control IDs for each. So far I have the code below, I have also attached the non-standard (not out of the box) UDFs I am using: ; ====================================================================================================================================================== ; = Resize A Window Script = ; ====================================================================================================================================================== #Region ; Script ChangeLog ; ====================================================================================================================================================== Dim $Script_ChangeLog[3][2] $Script_ChangeLog[1][0] = "Version" $Script_ChangeLog[1][1] = "ChangeLog" $Script_ChangeLog[2][0] = "15.10.28" $Script_ChangeLog[2][1] = "Original Script." $Script_ChangeLog[0][0] = UBound($Script_ChangeLog) - 1 $Script_ChangeLog[0][1] = "Entries" _ArraySort($Script_ChangeLog, 1, 2, 0, 0) ; ====================================================================================================================================================== #EndRegion ; Script ChangeLog ; ====================================================================================================================================================== #Region ; Necessary Options ; ====================================================================================================================================================== Opt("GUICloseOnESC", 0) ; 0=ESC Won't Close, 1=ESC Closes Opt("TrayIconHide", 1) ; 1=Hides Icon, 0=Shows Icon Opt("TrayMenuMode", 1) ; Default tray menu items (Script Paused/Exit) will not be shown. ; ================================================================================================================================================== Global $Script_Name = FileGetVersion(@ScriptFullPath, "ProductName") Global $Script_Version = FileGetVersion(@ScriptFullPath, "ScriptVersion") Global $Script_FileName = FileGetVersion(@ScriptFullPath, "OriginalFileName") ; ====================================================================================================================================================== #EndRegion ; Necessary Options ; ====================================================================================================================================================== #Region ; Necessary Includes ; ====================================================================================================================================================== $Script_Exists = ProcessList(@ScriptName) If $Script_Exists[0][0] > 1 Then ; MsgBox(64, $Script_Name & ' Warning', 'An instance of this application is already running.') If WinExists($Script_Name & " " & $Script_Version) Then WinActivate($Script_Name & " " & $Script_Version) Else Send("^!w") EndIf Exit EndIf ; ================================================================================================================================================== #Region ; JB2_SplashScreen Dependencies ; ================================================================================================================================================== Global Const $JB2_SplashScreen_AC_SRC_ALPHA = 1 #Include <Resources.au3> #Include <GUIConstantsEx.au3> #Include <StaticConstants.au3> #Include <WindowsConstants.au3> ; ================================================================================================================================================== #EndRegion ; JB2_SplashScreen Dependencies ; ================================================================================================================================================== JB2_SplashScreen("On") JB2_SplashScreen("Update", "Loading Dependencies...") #Include <Array.au3> #Include <ShowMonitorInfo.au3> #Include <TrayMenuIcons.au3> #Include <WinAPI.au3> ; ================================================================================================================================================== #Region ; GUI Includes ; ================================================================================================================================================== #Include <ButtonConstants.au3> #Include <Constants.au3> #Include <ComboConstants.au3> #Include <EditConstants.au3> #Include <GDIPlus.au3> #Include <GuiButton.au3> #Include <GuiEdit.au3> #Include <GUIExtender.au3> #Include <GuiListBox.au3> #Include <GuiListView.au3> #include <ListboxConstants.au3> #Include <ListviewConstants.au3> #Include <Misc.au3> #Include <ScrollBarConstants.au3> ; ================================================================================================================================================== #EndRegion ; GUI Includes ; ====================================================================================================================================================== #EndRegion ; Necessary Includes ; ====================================================================================================================================================== #Region ; Necessary Variables ; ====================================================================================================================================================== HotKeySet("^!p", "Pixels2Table_GUI") HotKeySet("^!q", "_OnExitWithMsg") ; ====================================================================================================================================================== If StringInStr(@OSVersion, "7") Then $Taskbar_Specs = ControlGetPos("[Class:Shell_TrayWnd]", "", "ToolbarWindow321") Else $Taskbar_Specs = ControlGetPos("[Class:Shell_TrayWnd]", "", "ToolbarWindow322") EndIf If $Taskbar_Specs[3] = "" Then $Taskbar_Specs[3] = 22 EndIf Global $Progress_Top = Number(@DesktopHeight - Number(138 + $Taskbar_Specs[3])); Progress Window Default Height Is 128 Offset By 10 For Effect & 46 For TaskBar Global $Progress_Left = Number(@DeskTopWidth - 316); Progress Window Default Width Is 306 Offset By 10 For Effect ; ====================================================================================================================================================== Global $WindowList = '' Global $RWG_GUI = 'Closed' Global $RWG_OpenWindow_List = '' Global $RWG_OpenWindow_List_Content = '' Global $RWG_OpenWindow_List_CurrentContent = '' Global $RWG_WindowTitle_Edit = '' Global $RWG_WindowStart_Edit = '' Global $RWG_WindowResolution_Edit = '' Global $RWG_WindowState_Edit = '' Global $RWG_WindowMonitor_Edit = '' Global $RWG_WindowMonitorResolution_Edit = '' Global $RWG_WindowControlVisible_CheckBox = '' Global $RWG_WindowControlVisible = True Global $RWG_WindowControl_ListView = '' ; ====================================================================================================================================================== Global $P2T_FileName = @TempDir & '\P2T_Layout.html' Global $P2T_Header = '<!DOCTYPE html>' & @CRLF & _ '<html>' & @CRLF & _ @TAB & '<head>' & @CRLF & _ @TAB & @TAB & '<title>Pixel To Table</title>' & @CRLF & _ @TAB & @TAB & '<meta charset="UTF-8">' & @CRLF & _ @TAB & @TAB & '<style>' & @CRLF & _ @TAB & @TAB & @TAB & 'td' & @CRLF & _ @TAB & @TAB & @TAB & '{' & @CRLF & _ @TAB & @TAB & @TAB & @TAB & 'position: relative;' & @CRLF & _ @TAB & @TAB & @TAB & @TAB & 'color: rgb(0,0,0);' & @CRLF & _ @TAB & @TAB & @TAB & @TAB & 'height: 35px;' & @CRLF & _ @TAB & @TAB & @TAB & @TAB & 'width: 35px;' & @CRLF & _ @TAB & @TAB & @TAB & @TAB & 'font-family: Calibri, Arial, sans-serif;' & @CRLF & _ @TAB & @TAB & @TAB & @TAB & 'font-size: xx-small;' & @CRLF & _ @TAB & @TAB & @TAB & @TAB & 'text-align: center;' & @CRLF & _ @TAB & @TAB & @TAB & @TAB & 'text-decoration: none;' & @CRLF & _ @TAB & @TAB & @TAB & @TAB & 'z-index: 20;' & @CRLF & _ @TAB & @TAB & @TAB & '}' & @CRLF & @CRLF & _ @TAB & @TAB & @TAB & 'td span.cellcontent' & @CRLF & _ @TAB & @TAB & @TAB & '{' & @CRLF & _ @TAB & @TAB & @TAB & @TAB & 'display: block;' & @CRLF & _ @TAB & @TAB & @TAB & @TAB & 'min-width: 35px;' & @CRLF & _ @TAB & @TAB & @TAB & '}' & @CRLF & @CRLF & _ @TAB & @TAB & @TAB & 'td:hover' & @CRLF & _ @TAB & @TAB & @TAB & '{' & @CRLF & _ @TAB & @TAB & @TAB & @TAB & 'z-index: 30; ' & @CRLF & _ @TAB & @TAB & @TAB & '}' & @CRLF & @CRLF & _ @TAB & @TAB & @TAB & 'td span.hoverbox' & @CRLF & _ @TAB & @TAB & @TAB & '{' & @CRLF & _ @TAB & @TAB & @TAB & @TAB & 'display: none;' & @CRLF & _ @TAB & @TAB & @TAB & '}' & @CRLF & @CRLF & _ @TAB & @TAB & @TAB & 'td:hover span.hoverbox' & @CRLF & _ @TAB & @TAB & @TAB & '{ ' & @CRLF & _ @TAB & @TAB & @TAB & @TAB & 'display: block;' & @CRLF & _ @TAB & @TAB & @TAB & @TAB & 'position: absolute;' & @CRLF & _ @TAB & @TAB & @TAB & @TAB & 'top: 30px; ' & @CRLF & _ @TAB & @TAB & @TAB & @TAB & 'left: 30px; ' & @CRLF & _ @TAB & @TAB & @TAB & @TAB & 'width: 200px; /* auto */' & @CRLF & _ @TAB & @TAB & @TAB & @TAB & 'padding: 10px;' & @CRLF & _ @TAB & @TAB & @TAB & @TAB & 'color: rgb(255,255,255);' & @CRLF & _ @TAB & @TAB & @TAB & @TAB & 'font-family: Cambria, Times New Roman, serif;' & @CRLF & _ @TAB & @TAB & @TAB & @TAB & 'font-size: 24px;' & @CRLF & _ @TAB & @TAB & @TAB & @TAB & 'font-weight: bold;' & @CRLF & _ @TAB & @TAB & @TAB & @TAB & 'text-align: left;' & @CRLF & _ @TAB & @TAB & @TAB & @TAB & 'line-height: 28px;' & @CRLF & _ @TAB & @TAB & @TAB & @TAB & 'border: 1px solid rgb(51,51,51);' & @CRLF & _ @TAB & @TAB & @TAB & @TAB & 'background-color: rgb(102,102,102);' & @CRLF & _ @TAB & @TAB & @TAB & '}' & @CRLF & @CRLF & _ @TAB & @TAB & @TAB & 'span.hoverboxbody' & @CRLF & _ @TAB & @TAB & @TAB & '{' & @CRLF & _ @TAB & @TAB & @TAB & @TAB & 'font-family: Calibri, Arial, sans-serif;' & @CRLF & _ @TAB & @TAB & @TAB & @TAB & 'font-size: 20px; ' & @CRLF & _ @TAB & @TAB & @TAB & @TAB & 'font-weight: normal;' & @CRLF & _ @TAB & @TAB & @TAB & @TAB & 'line-height: 22px;' & @CRLF & _ @TAB & @TAB & @TAB & '}' & @CRLF & @CRLF & _ @TAB & @TAB & '</style>' & @CRLF & _ @TAB & '</head>' & @CRLF & _ @TAB & '<body>' & @CRLF & _ @TAB & @TAB & '<table style="border-collapse: collapse;">' & @CRLF Global $P2T_Footer = @TAB & @TAB & '</table>' & @CRLF & _ @TAB & '</body>' & @CRLF & _ '</html>' & @CRLF & @CRLF ; ====================================================================================================================================================== #EndRegion ; Necessary Variables ; ====================================================================================================================================================== JB2_SplashScreen("Off") ; ====================================================================================================================================================== #Region ; Script Body ; ====================================================================================================================================================== $RWG_GUI = GUICreate($Script_Name & " " & $Script_Version, 780, 680, -1, -1, BitXOR($GUI_SS_DEFAULT_GUI, $WS_MINIMIZEBOX)) ; ================================================================================================================================== #Region ; Menu Section ; ================================================================================================================================== $RWG_File_Menu = GUICtrlCreateMenu('&File') $RWG_Exit_MenuItem = GUICtrlCreateMenuItem('E&xit' & @TAB & 'Ctrl+Alt+Q', $RWG_File_Menu) $RWG_View_Menu = GUICtrlCreateMenu('&View') $RWG_RefreshWindowList_MenuItem = GUICtrlCreateMenuItem('&Refresh Window List...', $RWG_View_Menu) $RWG_Help_Menu = GUICtrlCreateMenu('&Help') $RWG_ChangeLog_MenuItem = GUICtrlCreateMenuItem('View Change &Log...', $RWG_Help_Menu) GUICtrlCreateMenuItem('', $RWG_Help_Menu) $RWG_About_MenuItem = GUICtrlCreateMenuItem('&About...', $RWG_Help_Menu) ; ================================================================================================================================== #EndRegion ; Menu Section ; ================================================================================================================================== $RWG_OpenWindow_Label = GUICtrlCreateLabel("Select A Window To Resize:", 10, 10, 600, 20, $SS_CENTER) $RWG_OpenWindow_List = GUICtrlCreateList("", 10, 30, 600, 300) Refresh_WindowList(0) $RWG_WindowInfo_Label = GUICtrlCreateLabel("Window Information:", 620, 10, 150, 20, $SS_CENTER) GUICtrlCreateGroup('', 620, 23, 150, 260) $RWG_WindowMonitor_Label = GUICtrlCreateLabel("Located On:", 630, 40, 130, 20, $SS_CENTER) GUICtrlSetBkColor($RWG_WindowMonitor_Label, $GUI_BKCOLOR_TRANSPARENT) $RWG_WindowMonitor_Edit = GUICtrlCreateEdit("", 630, 60, 130, 22, BitOR($ES_READONLY, $ES_CENTER)) $RWG_WindowStart_Label = GUICtrlCreateLabel("Start Position (Left x Top):", 630, 85, 130, 20, $SS_CENTER) GUICtrlSetBkColor($RWG_WindowStart_Label, $GUI_BKCOLOR_TRANSPARENT) $RWG_WindowStart_Edit = GUICtrlCreateEdit("", 630, 105, 130, 22, BitOR($ES_READONLY, $ES_CENTER)) $RWG_WindowResolution_Label = GUICtrlCreateLabel("Current Resolution:", 630, 130, 130, 20, $SS_CENTER) GUICtrlSetBkColor($RWG_WindowResolution_Label, $GUI_BKCOLOR_TRANSPARENT) $RWG_WindowResolution_Edit = GUICtrlCreateEdit("", 630, 150, 130, 22, BitOR($ES_READONLY, $ES_CENTER)) $RWG_WindowState_Label = GUICtrlCreateLabel("Maximized Or Minimized:", 630, 180, 130, 20, $SS_CENTER) GUICtrlSetBkColor($RWG_WindowState_Label, $GUI_BKCOLOR_TRANSPARENT) $RWG_WindowState_Edit = GUICtrlCreateEdit("", 630, 200, 130, 22, BitOR($ES_READONLY, $ES_CENTER)) $RWG_WindowMonitorResolution_Label = GUICtrlCreateLabel("Monitor Resolution:", 630, 225, 130, 20, $SS_CENTER) GUICtrlSetBkColor($RWG_WindowMonitorResolution_Label, $GUI_BKCOLOR_TRANSPARENT) $RWG_WindowMonitorResolution_Edit = GUICtrlCreateEdit("", 630, 245, 130, 22, BitOR($ES_READONLY, $ES_CENTER)) GUICtrlCreateGroup("", -99, -99, 1, 1) $RWG_Process_Button = GUICtrlCreateButton('Process Pixels', 620, 293, 150, 30, $BS_DEFPUSHBUTTON) $RWG_WindowControl_Label = GUICtrlCreateLabel("Window Controls:", 10, 330, 600, 20, $SS_CENTER) $RWG_WindowControlVisible_CheckBox = GUICtrlCreateCheckbox("Show Only Visible Controls", 625, 325) GUICtrlSetState($RWG_WindowControlVisible_CheckBox, $GUI_CHECKED) $RWG_WindowControl_ListView = GUICtrlCreateListView("Control Handle|Class|Instance|ID|Visible|Left (X)|Top (Y)|Width|Height|Control Text", 10, 350, 760, 300, BitOr($LVS_NOSORTHEADER, $LVS_SINGLESEL), BitOr($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES, $WS_EX_CLIENTEDGE)) _GUICtrlListView_SetColumnWidth($RWG_WindowControl_ListView, 0, 112) _GUICtrlListView_JustifyColumn($RWG_WindowControl_ListView, 0, 2) _GUICtrlListView_SetColumnWidth($RWG_WindowControl_ListView, 2, 63) _GUICtrlListView_JustifyColumn($RWG_WindowControl_ListView, 2, 2) _GUICtrlListView_SetColumnWidth($RWG_WindowControl_ListView, 4, 56) _GUICtrlListView_JustifyColumn($RWG_WindowControl_ListView, 4, 2) _GUICtrlListView_SetColumnWidth($RWG_WindowControl_ListView, 5, 56) _GUICtrlListView_JustifyColumn($RWG_WindowControl_ListView, 5, 2) _GUICtrlListView_SetColumnWidth($RWG_WindowControl_ListView, 6, 56) _GUICtrlListView_JustifyColumn($RWG_WindowControl_ListView, 6, 2) _GUICtrlListView_SetColumnWidth($RWG_WindowControl_ListView, 7, 56) _GUICtrlListView_JustifyColumn($RWG_WindowControl_ListView, 7, 2) _GUICtrlListView_SetColumnWidth($RWG_WindowControl_ListView, 8, 56) _GUICtrlListView_JustifyColumn($RWG_WindowControl_ListView, 8, 2) GUICtrlSetBkColor($RWG_WindowControl_ListView, $GUI_BKCOLOR_LV_ALTERNATE) Get_WindowInfo(GUICtrlRead($RWG_OpenWindow_List)) Get_WindowControls(GUICtrlRead($RWG_OpenWindow_List), $RWG_WindowControlVisible) GUISetState() _GUICtrlListView_ClickItem($RWG_WindowControl_ListView, 0) WinSetOnTop($RWG_GUI, '', 1) While 1 $RWG_Msg = GUIGetMsg() Switch $RWG_Msg Case $GUI_EVENT_CLOSE, $RWG_Exit_MenuItem _OnExit() Case $RWG_RefreshWindowList_MenuItem Refresh_WindowList(0) Get_WindowControls(GUICtrlRead($RWG_OpenWindow_List), $RWG_WindowControlVisible) Case $RWG_About_MenuItem GUISetState(@SW_DISABLE, $RWG_GUI) JB2_ThankYou(0, $RWG_GUI, $Script_Name, $Script_Version) GUISetState(@SW_ENABLE, $RWG_GUI) Case $RWG_ChangeLog_MenuItem GUISetState(@SW_DISABLE, $RWG_GUI) JB2_ChangeLog($RWG_GUI, $Script_Name, $Script_Version) GUISetState(@SW_ENABLE, $RWG_GUI) Case $RWG_OpenWindow_List Get_WindowInfo(GUICtrlRead($RWG_OpenWindow_List)) Get_WindowControls(GUICtrlRead($RWG_OpenWindow_List), $RWG_WindowControlVisible) Case $RWG_WindowControlVisible_CheckBox If BitAND(GUICtrlRead($RWG_WindowControlVisible_CheckBox), $GUI_CHECKED) = $GUI_CHECKED Then $RWG_WindowControlVisible = True Else $RWG_WindowControlVisible = False EndIf Get_WindowControls(GUICtrlRead($RWG_OpenWindow_List), $RWG_WindowControlVisible) Case $RWG_WindowControl_ListView MsgBox(4096, 'Test', _GUICtrlListView_GetSelectedIndices($RWG_WindowControl_ListView), -1, $RWG_GUI) Case $RWG_Process_Button $RWG_PB_CurrentSelection = _GUICtrlListView_GetSelectionMark($RWG_WindowControl_ListView) $RWG_PB_CurrentSelection_List = _GUICtrlListView_GetItemTextArray($RWG_WindowControl_ListView, $RWG_PB_CurrentSelection) $hFrame = _WinAPI_GetParent($RWG_PB_CurrentSelection_List[1]) #CS GUISetState(@SW_HIDE, $RWG_GUI) Pixels2Table(GUICtrlRead($RWG_OpenWindow_List)) GUISetState(@SW_SHOW, $RWG_GUI) #CE EndSwitch WEnd ; ====================================================================================================================================================== #EndRegion ; Script Body ; ====================================================================================================================================================== #Region ; Necessary Supporting Functions ; ====================================================================================================================================================== #Region ; Get_WindowList Function ; ================================================================================================================================================== Func Get_WindowList() $WindowList = '' $Temp_WindowList = WinList() $Temp_WindowList_Content = '' Dim $WindowList[$Temp_WindowList[0][0]+1][3] ; Declared Globally At The Beginning $WindowList[0][0] = $Temp_WindowList[0][0]+1 For $w = 1 To $Temp_WindowList[0][0] ; Windows To Ignore, Both Windows Without A Title And A Windows That Are Not Actually Visible If $Temp_WindowList[$w][0] = '' Or $Temp_WindowList[$w][0] = $Script_Name & " " & $Script_Version Or $Temp_WindowList[$w][0] = 'BBar' Or $Temp_WindowList[$w][0] = 'ICA Seamless Host Agent' Or $Temp_WindowList[$w][0] = 'Message' Or $Temp_WindowList[$w][0] = 'OLEChannelWnd' Or $Temp_WindowList[$w][0] = 'Program Manager' Or $Temp_WindowList[$w][0] = 'Splash GUI' Or $Temp_WindowList[$w][0] = 'Start' Or StringRight($Temp_WindowList[$w][0], 5) = 'Toast' Then ContinueLoop ; Gets The Handle of The Current Window $Temp_WindowState = WinGetState($Temp_WindowList[$w][1]) #CS ; Filtering Windows Based On Window State ConsoleWrite($aWindows[$i][0] & ': ') If BitAND($Temp_WindowState, 1) = 1 Then ConsoleWrite(' exists') If BitAND($Temp_WindowState, 2) = 2 Then ConsoleWrite(' visible') If BitAND($Temp_WindowState, 4) = 4 Then ConsoleWrite(' enabled') If BitAND($Temp_WindowState, 8) = 8 Then ConsoleWrite(' active') If BitAND($Temp_WindowState, 16) = 16 Then ConsoleWrite(' minimized') If BitAND($Temp_WindowState, 32) = 32 Then ConsoleWrite(' maximized') ConsoleWrite(@CRLF) #CE If BitAND($Temp_WindowState, 2) = 2 Then $WindowList[$w][0] = $Temp_WindowList[$w][0] $WindowList[$w][1] = $Temp_WindowList[$w][1] If BitAND($Temp_WindowState, 8) = 8 Then $WindowList[$w][2] &= 'Active / ' If BitAND($Temp_WindowState, 16) = 16 Then $WindowList[$w][2] &= 'Minimized / ' If BitAND($Temp_WindowState, 32) = 32 Then $WindowList[$w][2] &= 'Maximized' If StringRight($WindowList[$w][2], 3) = ' / ' Then $WindowList[$w][2] = StringTrimRight($WindowList[$w][2], 3) If StringInStr($Temp_WindowList[$w][0], '|') Then $Temp_WindowList[$w][0] = StringReplace($Temp_WindowList[$w][0], '|', '[JB' & Chr(178) & ']') $Temp_WindowList_Content &= $Temp_WindowList[$w][0] & '|' EndIf Next _ArraySort($WindowList, 0, 1, 0, 0) $WindowList = JB2_DeleteEmpty2DArrayRows($WindowList) ; Column Structure: 0 = WindowTitle / 1 = WindowHandle $WindowList[0][0] = UBound($WindowList) - 1 If StringRight($Temp_WindowList_Content, 1) = '|' Then $Temp_WindowList_Content = StringTrimRight($Temp_WindowList_Content, 1) Return $Temp_WindowList_Content EndFunc ; ================================================================================================================================================== #EndRegion ; Get_WindowList Function ; ================================================================================================================================================== #Region ; Get_WindowInfo Function ; ================================================================================================================================================== Func Get_WindowInfo($GWL_Title) GUICtrlSetData($RWG_WindowTitle_Edit, '') GUICtrlSetData($RWG_WindowStart_Edit, '') GUICtrlSetData($RWG_WindowResolution_Edit, '') GUICtrlSetData($RWG_WindowState_Edit, '') GUICtrlSetData($RWG_WindowMonitor_Edit, '') GUICtrlSetData($RWG_WindowMonitorResolution_Edit, '') $GWL_TempState = '' If StringInStr($GWL_Title, '[JB' & Chr(178) & ']') Then $GWL_Title = StringReplace($GWL_Title, '[JB' & Chr(178) & ']', '|') $GWL_CurrentWindow_ListPosition = _ArraySearch($WindowList, $GWL_Title) $GWL_Handle = $WindowList[$GWL_CurrentWindow_ListPosition][1] If StringInStr($WindowList[$GWL_CurrentWindow_ListPosition][2], 'Maximized') Then $GWL_State = 'Maximized' ElseIf StringInStr($WindowList[$GWL_CurrentWindow_ListPosition][2], 'Minimized') Then $GWL_State = 'Minimized' Else $GWL_State = 'No' EndIf _GetMonitors() If $GWL_State = 'Minimized' Then WinSetState($GWL_Handle, '', @SW_RESTORE) $GWL_TempState = WinGetState($GWL_Handle) ; To Determine If The Minimized Window Is Maximized If Restored. $Temp_WinInfo = WinGetPos($GWL_Handle) WinSetState($GWL_Handle, '', @SW_MINIMIZE) Else $Temp_WinInfo = WinGetPos($GWL_Handle) EndIf If IsArray($Temp_WinInfo) Then If UBound($Temp_WinInfo) = 4 Then If $GWL_State = 'Maximized' Or BitAND($GWL_TempState, 32) = 32 Then $Temp_WinInfo[0] += 8 $Temp_WinInfo[1] += 8 EndIf $GWL_Monitor = _GetMonitorFromPoint($Temp_WinInfo[0], $Temp_WinInfo[1]) GUICtrlSetData($RWG_WindowStart_Edit, $Temp_WinInfo[0] & 'x' & $Temp_WinInfo[1]) GUICtrlSetData($RWG_WindowResolution_Edit, $Temp_WinInfo[2] & 'x' & $Temp_WinInfo[3]) GUICtrlSetData($RWG_WindowState_Edit, $GWL_State) GUICtrlSetData($RWG_WindowMonitor_Edit, 'Monitor ' & $GWL_Monitor) GUICtrlSetData($RWG_WindowMonitorResolution_Edit, $__MonitorList[$GWL_Monitor][5] & 'x' & $__MonitorList[$GWL_Monitor][6]) Else Refresh_WindowList(1, 'The selected window is no longer available.') Get_WindowInfo(GUICtrlRead($RWG_OpenWindow_List)) EndIf Else Refresh_WindowList(1, 'The selected window is no longer available.') Get_WindowInfo(GUICtrlRead($RWG_OpenWindow_List)) EndIf EndFunc ; ================================================================================================================================================== #EndRegion ; Get_WindowInfo Function ; ================================================================================================================================================== #Region ; Get_WindowControls Function ; ================================================================================================================================================== Func Get_WindowControls($GWC_Title, $GWC_Visible = True) _GUICtrlListView_BeginUpdate($RWG_WindowControl_ListView) _GUICtrlListView_DeleteAllItems($RWG_WindowControl_ListView) $RWG_WindowControl_ListView_1Width = 13 $RWG_WindowControl_ListView_3Width = 7 $RWG_WindowControl_ListView_9Width = 12 If StringLen($GWC_Title) > $RWG_WindowControl_ListView_9Width Then $RWG_WindowControl_ListView_9Width = StringLen($GWC_Title) If StringInStr($GWC_Title, '[JB' & Chr(178) & ']') Then $GWC_Title = StringReplace($GWC_Title, '[JB' & Chr(178) & ']', '|') $GWC_CurrentWindow_ListPosition = _ArraySearch($WindowList, $GWC_Title) $GWC_Handle = $WindowList[$GWC_CurrentWindow_ListPosition][1] $Temp_WinInfo = WinGetPos($GWC_Handle) _GUICtrlListView_AddItem($RWG_WindowControl_ListView, $GWC_Handle, 0) _GUICtrlListView_AddSubItem($RWG_WindowControl_ListView, 0, 'Entire Window', 1) _GUICtrlListView_AddSubItem($RWG_WindowControl_ListView, 0, 0, 2) _GUICtrlListView_AddSubItem($RWG_WindowControl_ListView, 0, 0, 3) _GUICtrlListView_AddSubItem($RWG_WindowControl_ListView, 0, 1, 4) _GUICtrlListView_AddSubItem($RWG_WindowControl_ListView, 0, $Temp_WinInfo[0], 5) _GUICtrlListView_AddSubItem($RWG_WindowControl_ListView, 0, $Temp_WinInfo[1], 6) _GUICtrlListView_AddSubItem($RWG_WindowControl_ListView, 0, $Temp_WinInfo[2], 7) _GUICtrlListView_AddSubItem($RWG_WindowControl_ListView, 0, $Temp_WinInfo[3], 8) _GUICtrlListView_AddSubItem($RWG_WindowControl_ListView, 0, $GWC_Title, 9) $GWC_ControlList = JB2_GetWindowControls($GWC_Handle, $GWC_Visible) For $li = 1 To $GWC_ControlList[0][0] If StringLen($GWC_ControlList[$li][1]) > $RWG_WindowControl_ListView_1Width Then $RWG_WindowControl_ListView_1Width = StringLen($GWC_ControlList[$li][1]) If StringLen($GWC_ControlList[$li][3]) > $RWG_WindowControl_ListView_3Width Then $RWG_WindowControl_ListView_3Width = StringLen($GWC_ControlList[$li][3]) If StringLen($GWC_ControlList[$li][9]) > $RWG_WindowControl_ListView_9Width Then $RWG_WindowControl_ListView_9Width = StringLen($GWC_ControlList[$li][9]) Assign("$RWG_WindowControl_ListView_Row" & Number($li),GUICtrlCreateListViewItem($GWC_ControlList[$li][0] & "|" & $GWC_ControlList[$li][1] & "|" & $GWC_ControlList[$li][2] & "|" & $GWC_ControlList[$li][3] & "|" & $GWC_ControlList[$li][4] & "|" & $GWC_ControlList[$li][5] & "|" & $GWC_ControlList[$li][6] & "|" & $GWC_ControlList[$li][7] & "|" & $GWC_ControlList[$li][8] & "|" & $GWC_ControlList[$li][9], $RWG_WindowControl_ListView)) GUICtrlSetBkColor(-1, 0xcccccc) Next _GUICtrlListView_SetColumnWidth($RWG_WindowControl_ListView, 1, Number(($RWG_WindowControl_ListView_1Width + 1) * 8)) ; 8px average width of characters at 8pt font. _GUICtrlListView_JustifyColumn($RWG_WindowControl_ListView, 1) _GUICtrlListView_SetColumnWidth($RWG_WindowControl_ListView, 3, Number(($RWG_WindowControl_ListView_3Width + 1) * 7)) ; 7px average width of characters at 8pt numeric font. _GUICtrlListView_JustifyColumn($RWG_WindowControl_ListView, 3, 2) _GUICtrlListView_SetColumnWidth($RWG_WindowControl_ListView, 9, Number(($RWG_WindowControl_ListView_9Width + 1) * 8)) ; 8px average width of characters at 8pt font. _GUICtrlListView_JustifyColumn($RWG_WindowControl_ListView, 9) _GUICtrlListView_EndUpdate($RWG_WindowControl_ListView) _GUICtrlListView_ClickItem($RWG_WindowControl_ListView, 0) EndFunc ; ================================================================================================================================================== #EndRegion ; Get_WindowControls Function ; ================================================================================================================================================== #Region ; Pixels2Table Function ; ================================================================================================================================================== Func Pixels2Table($P2T_Window) ProgressOn("Converting Pixels To HTML Table", "", "", $Progress_Left, $Progress_Top, 2) $P2T_CurrentWindow_ListPosition = _ArraySearch($WindowList, $P2T_Window) If StringInStr($WindowList[$P2T_CurrentWindow_ListPosition][2], 'Minimized') Then WinSetState($WindowList[$P2T_CurrentWindow_ListPosition][1], '', @SW_RESTORE) $P2T_CurrentWindow_Position = WinGetPos($WindowList[$P2T_CurrentWindow_ListPosition][1]) If StringLen($P2T_CurrentWindow_Position[2]) >= StringLen($P2T_CurrentWindow_Position[3]) Then $P2T_XYDigits = StringLen($P2T_CurrentWindow_Position[2]) Else $P2T_XYDigits = StringLen($P2T_CurrentWindow_Position[3]) EndIf WinActivate($WindowList[$P2T_CurrentWindow_ListPosition][1]) $ProgressTotalItems = Number($P2T_CurrentWindow_Position[2] * $P2T_CurrentWindow_Position[3]) $ProgressPercentPer = Number(100/$ProgressTotalItems) $ProgressProgress = 0 $ProgressPercent = 0 $ProgressLabel1 = "0 of " & $ProgressTotalItems & " Pixels(s)" $ProgressLabel2 = "0% Completed." ProgressSet($ProgressPercent, $ProgressLabel1 & " / " & $ProgressLabel2) ; ============================================================================================================================================== $P2T_FileHandle = FileOpen($P2T_FileName, 2) FileWrite($P2T_FileHandle, $P2T_Header) ; ============================================================================================================================================== $P2T_Y = 1 ; For $y = 1 To $P2T_CurrentWindow_Position[3] For $y = $P2T_CurrentWindow_Position[1] To Number($P2T_CurrentWindow_Position[1] + $P2T_CurrentWindow_Position[3]) FileWrite($P2T_FileHandle, @TAB & @TAB & @TAB & '<tr>' & @CRLF) ; ========================================================================================================================================== $P2T_X = 1 ; For $x = 1 To $P2T_CurrentWindow_Position[2] For $x = $P2T_CurrentWindow_Position[0] To Number($P2T_CurrentWindow_Position[0] + $P2T_CurrentWindow_Position[2]) ProgressSet($ProgressPercent, $ProgressLabel1 & " / " & $ProgressLabel2, 'Row (Y): ' & StringFormat('%0' & $P2T_XYDigits & 'i', $P2T_Y) & ' / Column (X): ' & StringFormat('%0' & $P2T_XYDigits & 'i', $P2T_X)) $Temp_P2T_Color = '#' & Hex(PixelGetColor($x, $y, $WindowList[$P2T_CurrentWindow_ListPosition][1]) , 6) FileWrite($P2T_FileHandle, @TAB & @TAB & @TAB & @TAB & '<td style="background-color: ' & $Temp_P2T_Color & ';"><span class="cellcontent">' & StringFormat('%0' & $P2T_XYDigits & 'i', $P2T_X) & 'X<br>' & StringFormat('%0' & $P2T_XYDigits & 'i', $P2T_Y) & 'Y</span><span class="hoverbox">Pixel Infomation<br><span class="hoverboxbody">Row (Y Position): ' & $P2T_Y & '<br>Column (X Position): ' & $P2T_X & '<br>Color Code: ' & $Temp_P2T_Color & '</span></span></td>' & @CRLF) $ProgressProgress += 1 $ProgressPercent += $ProgressPercentPer $ProgressLabel1 = $ProgressProgress & " of " & $ProgressTotalItems & " Pixrls(s)" $ProgressLabel2 = Round($ProgressPercent, 0) & "% Completed." $P2T_X += 1 Next ; ========================================================================================================================================== FileWrite($P2T_FileHandle, @TAB & @TAB & @TAB & '</tr>' & @CRLF) $P2T_Y += 1 Next ; ============================================================================================================================================== FileWrite($P2T_FileHandle, $P2T_Footer) FileClose($P2T_FileHandle) $ProgressLabel2 = "100% Completed." ProgressSet(100, $ProgressLabel1 & " / " & $ProgressLabel2, "Software Installation Complete") Sleep(5000) ProgressOff() ; ============================================================================================================================================== ShellExecute($P2T_FileName) EndFunc ; ================================================================================================================================================== #EndRegion ; Pixels2Table Function ; ================================================================================================================================================== #Region ; Refresh_WindowList Function ; ================================================================================================================================================== Func Refresh_WindowList($RWL_TrayTip, $RWL_MsgContent = '') ; $RWL_TrayTip : 0 = Off / 1 = On If $RWL_MsgContent <> '' And StringRight($RWL_MsgContent, 1) <> ' ' Then $RWL_MsgContent &= ' ' If $RWL_TrayTip = 1 Then TrayTip('Resize-A-Window...', $RWL_MsgContent & 'Refreshing window list.', 10, 2) $RWG_OpenWindow_List_Content = Get_WindowList() $RWG_OpenWindow_List_CurrentContent = '' For $a = 1 To $WindowList[0][0] If StringInStr($WindowList[$a][2], 'Active') Then $RWG_OpenWindow_List_CurrentContent = $WindowList[$a][0] Next If $RWG_OpenWindow_List_CurrentContent = '' Then $RWG_OpenWindow_List_CurrentContent = $WindowList[1][0] GUICtrlSetData($RWG_OpenWindow_List, '', '') GUICtrlSetData($RWG_OpenWindow_List, $RWG_OpenWindow_List_Content, $RWG_OpenWindow_List_CurrentContent) EndFunc ; ================================================================================================================================================== #EndRegion ; Refresh_WindowList Function ; ================================================================================================================================================== #Region ; JB2_GetWindowControls Function ; ============================================================================================================================================================ ; = Name.............: JB2_GetWindowControls = ; = Description......: Returns all or a specified subset of controls for a given window. = ; = Required Includes: Array.au3 & WinAPI.au3 = ; = Syntax...........: JB2_GetWindowControls($GWC_WindowHandle[, $GWC_VisibleOnly = False[, $GWC_ControlTextContains = ''[, $GWC_GetSpecificClasses = '']]]) = ; = Parameters ......: $GWC_WindowHandle - The handle (hWnd) of the window to get the controls from. = ; = $GWC_VisibleOnly - Optional: True - Retrieves only visible controls or False - Retrieves all controls. = ; = $GWC_ControlTextContains - Optional: Text that a control must contain to be returned. = ; = $GWC_GetSpecificClasses - Optional: A specific class to return. (i.e. Button, ComboBox, Edit, Static, Etc.) = ; = Return values....: Success - Returns an array containing window control information. = ; = Failure - 0 = ; = Author...........: jdelaney = ; = Modified.........: Joshua Barnette, JBSquaredDesigns.com (2015-10-26) = ; = Retrieved From...: https://www.autoitscript.com/forum/topic/164226-get-all-windows-controls/ = ; = Remarks..........: If only the window handle is given all window controls are returned. = ; = = ; = The array returned is two-dimensional and is made up as follows: = ; = $aArray[0][0] = Number of controls returned = ; = $aArray[1][0] = 1st control handle (hWnd) = ; = $aArray[1][1] = 1st control class = ; = $aArray[1][2] = 1st control class instance = ; = $aArray[1][3] = 1st control ID = ; = $aArray[1][4] = 1st control visibility (1 - Visible, 0 - Not Visible) = ; = $aArray[1][5] = 1st control X position realtive to window = ; = $aArray[1][6] = 1st control Y position realtive to window = ; = $aArray[1][7] = 1st control width = ; = $aArray[1][8] = 1st control height = ; = $aArray[1][9] = 1st control text = ; = ... = ; = $aArray[n][0] = nth control handle (hWnd) = ; = $aArray[n][1] = nth control class = ; = $aArray[n][2] = nth control class instance = ; = $aArray[n][3] = nth control ID = ; = $aArray[n][4] = nth control visibility (1 - Visible, 0 - Not Visible) = ; = $aArray[n][5] = nth control X position realtive to window = ; = $aArray[n][6] = nth control Y position realtive to window = ; = $aArray[n][7] = nth control width = ; = $aArray[n][8] = nth control height = ; = $aArray[n][9] = nth control text = ; = = ; ============================================================================================================================================================ Func JB2_GetWindowControls($GWC_WindowHandle, $GWC_VisibleOnly = 0, $GWC_ControlTextContains = '', $GWC_GetSpecificClass = '') If Not IsHWnd($GWC_WindowHandle) Then ; MsgBox(16, $Script_Name & ' Error', 'To retrieve all window controls, you must provide a valid window handle (hwnd).') Return 0 EndIf $GWC_GetClassList = WinGetClassList($GWC_WindowHandle) ; Create array $GWC_ClassList = StringSplit($GWC_GetClassList, @CRLF, 2) ; Sort array _ArraySort($GWC_ClassList) _ArrayDelete($GWC_ClassList, 0) Dim $GWC_WindowControlList[UBound($GWC_ClassList) + 1][10] $GWC_WindowControlList[0][0] = UBound($GWC_ClassList) + 1 ; Loop $GWC_CurrentClass = '' $GWC_CurrentClassCount = 1 $GWC_TotalCounter = 1 If StringLen($GWC_GetSpecificClass) > 0 Then For $sc = UBound($GWC_ClassList)-1 To 0 Step - 1 If $GWC_ClassList[$sc] <> $GWC_GetSpecificClass Then _ArrayDelete($GWC_ClassList, $sc) EndIf Next EndIf For $cl = 0 To UBound($GWC_ClassList) - 1 If $GWC_ClassList[$cl] = $GWC_CurrentClass Then $GWC_CurrentClassCount += 1 Else $GWC_CurrentClass = $GWC_ClassList[$cl] $GWC_CurrentClassCount = 1 EndIf $GWC_ControlHandle = ControlGetHandle($GWC_WindowHandle, "", "[CLASSNN:" & $GWC_CurrentClass & $GWC_CurrentClassCount & "]") $GWC_ControlText = StringRegExpReplace(ControlGetText($GWC_WindowHandle, "", $GWC_ControlHandle), "[\n\r]", "{@CRLF}") $GWC_ControlPosition = ControlGetPos($GWC_WindowHandle, "", $GWC_ControlHandle) $GWC_CurrentClassID = _WinAPI_GetDlgCtrlID($GWC_ControlHandle) $GWC_ControlVisibility = ControlCommand($GWC_WindowHandle, "", $GWC_ControlHandle, "IsVisible") If $GWC_VisibleOnly And Not $GWC_ControlVisibility Then ; $GWC_TotalCounter += 1 ContinueLoop EndIf If StringLen($GWC_ControlTextContains) > 0 Then If Not StringInStr($GWC_ControlText, $GWC_ControlTextContains) Then ; $GWC_TotalCounter += 1 ContinueLoop EndIf EndIf $GWC_WindowControlList[$GWC_TotalCounter][0] = $GWC_ControlHandle $GWC_WindowControlList[$GWC_TotalCounter][1] = $GWC_ClassList[$cl] $GWC_WindowControlList[$GWC_TotalCounter][2] = $GWC_CurrentClassCount $GWC_WindowControlList[$GWC_TotalCounter][3] = $GWC_CurrentClassID $GWC_WindowControlList[$GWC_TotalCounter][4] = $GWC_ControlVisibility If IsArray($GWC_ControlPosition) Then $GWC_WindowControlList[$GWC_TotalCounter][5] = $GWC_ControlPosition[0] $GWC_WindowControlList[$GWC_TotalCounter][6] = $GWC_ControlPosition[1] $GWC_WindowControlList[$GWC_TotalCounter][7] = $GWC_ControlPosition[2] $GWC_WindowControlList[$GWC_TotalCounter][8] = $GWC_ControlPosition[3] EndIf $GWC_WindowControlList[$GWC_TotalCounter][9] = $GWC_ControlText If Not WinExists($GWC_WindowHandle) Then ExitLoop $GWC_TotalCounter += 1 Next $GWC_WindowControlList = JB2_DeleteEmpty2DArrayRows($GWC_WindowControlList) $GWC_WindowControlList[0][0] = UBound($GWC_WindowControlList) - 1 Return $GWC_WindowControlList EndFunc ;==>GetAllWindowsControls ; ============================================================================================================================================================ ; = Author...........: jdelaney = ; = Modified.........: Joshua Barnette, JBSquaredDesigns.com (2015-10-26) = ; = Retrieved From...: https://www.autoitscript.com/forum/topic/164226-get-all-windows-controls/ = ; ============================================================================================================================================================ #EndRegion ; JB2_GetWindowControls Function ; ================================================================================================================================================== #Region ; OnExit Functions ; ================================================================================================================================================== Func _OnExit() GUIDelete($RWG_GUI) Exit EndFunc ; ================================================================================================================================================== Func _OnExitWithMsg() GUIDelete($RWG_GUI) JB2_ThankYou(2000) Exit EndFunc ; ================================================================================================================================================== #EndRegion ; OnExit Functions ; ================================================================================================================================================== #Region ; JB2_DeleteEmpty2DArrayRows Function ; ================================================================================================================================================== ; = Written By: WeaponX ; = Retrieved From : http://www.autoitscript.com/forum/topic/97637-remove-empty-rows-in-2d-array/ ; = Modified By: Joshua Barnette, JBSquaredDesigns.com (2014-05-28) ; ============================================================================================================================================== Func JB2_DeleteEmpty2DArrayRows($JB2_DeleteEmpty2DArrayRows_Array) Local $JB2_DeleteEmpty2DArrayRows_Rows = Ubound($JB2_DeleteEmpty2DArrayRows_Array,1) Local $JB2_DeleteEmpty2DArrayRows_Cols = Ubound($JB2_DeleteEmpty2DArrayRows_Array,2) Local $JB2_DeleteEmpty2DArrayRows_Temp[$JB2_DeleteEmpty2DArrayRows_Rows][$JB2_DeleteEmpty2DArrayRows_Cols] Local $JB2_DeleteEmpty2DArrayRows_NotEmpty Local $JB2_DeleteEmpty2DArrayRows_Count = 0 ;Loop through rows For $Y = 0 to $JB2_DeleteEmpty2DArrayRows_Rows - 1 $JB2_DeleteEmpty2DArrayRows_NotEmpty = 0 ;Loop through columns For $X = 0 to $JB2_DeleteEmpty2DArrayRows_Cols - 1 ;Copy all columns to temp array even if they are all empty $JB2_DeleteEmpty2DArrayRows_Temp[$JB2_DeleteEmpty2DArrayRows_Count][$X] = $JB2_DeleteEmpty2DArrayRows_Array[$Y][$X] ;If even one column contains data, make sure it doesn't get deleted If $JB2_DeleteEmpty2DArrayRows_Array[$Y][$X] <> "" Then $JB2_DeleteEmpty2DArrayRows_NotEmpty = BitOr($JB2_DeleteEmpty2DArrayRows_NotEmpty, 1) Next ;If the row has any data, increment, else keep overwriting last row until it contains something If $JB2_DeleteEmpty2DArrayRows_NotEmpty Then $JB2_DeleteEmpty2DArrayRows_Count += 1 Next Redim $JB2_DeleteEmpty2DArrayRows_Temp[$JB2_DeleteEmpty2DArrayRows_Count][$JB2_DeleteEmpty2DArrayRows_Cols] $JB2_DeleteEmpty2DArrayRows_Temp[0][0] = UBound($JB2_DeleteEmpty2DArrayRows_Temp) - 1 Return $JB2_DeleteEmpty2DArrayRows_Temp EndFunc ; ================================================================================================================================================== #EndRegion ; JB2_DeleteEmpty2DArrayRows Function ; ================================================================================================================================================== #Region ; JB2_SplashScreen & Supporting Functions ; ================================================================================================================================================== #Region ; JB2_SplashScreen ; ============================================================================================================================================== Func JB2_SplashScreen($JB2_SplashScreen_Status, $JB2_SplashScreen_Status_Message = "") If $JB2_SplashScreen_Status = "On" Then Global $JB2_SplashScreen_Image = _ResourceGetAsImage("JB2_SplashScreen_Image", $RT_RCDATA) ; Extract image width and height from PNG Global $JB2_SplashScreen_Width = _GDIPlus_ImageGetWidth($JB2_SplashScreen_Image) Global $JB2_SplashScreen_Height = _GDIPlus_ImageGetHeight($JB2_SplashScreen_Image) ; Create layered window Global $JB2_SplashScreen_GUI = GUICreate("Splash GUI", $JB2_SplashScreen_Width, $JB2_SplashScreen_Height, -1, -1, $WS_POPUP, $WS_EX_LAYERED, WinGetHandle(AutoItWinGetTitle())) JB2_SplashScreen_SetBitmap($JB2_SplashScreen_GUI, $JB2_SplashScreen_Image, 0) GUISetState(@SW_SHOW) ;fade in png background For $i = 0 To 255 Step 17 JB2_SplashScreen_SetBitmap($JB2_SplashScreen_GUI, $JB2_SplashScreen_Image, $i) Sleep(50) Next ; create child MDI gui window to hold controls Global $JB2_SplashScreen_GUI_Child = GUICreate("Splash GUI Child", $JB2_SplashScreen_Width-20, 17, 10, $JB2_SplashScreen_Height+5, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $JB2_SplashScreen_GUI) ; child window transparency is required to accomplish the full effect, so $WS_EX_LAYERED above, and ; I think the way this works is the transparent window color is based on the image you set here: GUICtrlCreatePic("", 0, 0, $JB2_SplashScreen_Width-20, 17) GUICtrlSetState(-1, $GUI_DISABLE) Global $JB2_SplashScreen_GUI_Message = GUICtrlCreateLabel("", 0, 0, $JB2_SplashScreen_Width-20, 17) GUICtrlSetFont(-1, 9, 800) If StringInStr(@OSVersion, "WIN_XP") Then GUICtrlSetColor(-1, 0x000066) GUICtrlSetBKColor(-1, 0x000000) Else GUICtrlSetColor(-1, 0x000066) GUICtrlSetBKColor(-1, 0xFFFFFF) EndIf GUISetState(@SW_SHOW) ElseIf $JB2_SplashScreen_Status = "Update" Then GUICtrlSetData($JB2_SplashScreen_GUI_Message, $JB2_SplashScreen_Status_Message) ElseIf $JB2_SplashScreen_Status = "Off" Then GUIDelete($JB2_SplashScreen_GUI_Child) For $i = 255 To 0 Step -17 JB2_SplashScreen_SetBitmap($JB2_SplashScreen_GUI, $JB2_SplashScreen_Image, $i) Sleep(50) Next GUIDelete($JB2_SplashScreen_GUI) _WinAPI_DeleteObject($JB2_SplashScreen_Image) EndIf EndFunc ; ============================================================================================================================================== #EndRegion ; JB2_SplashScreen ; ============================================================================================================================================== #Region ; JB2_SplashScreen_SetBitmap ; ============================================================================================================================================== Func JB2_SplashScreen_SetBitmap($JB2_SplashScreen_hGUI, $JB2_SplashScreen_hImage, $JB2_SplashScreen_iOpacity) Local $JB2_SplashScreen_hScrDC, $JB2_SplashScreen_hMemDC, $JB2_SplashScreen_hBitmap, $JB2_SplashScreen_hOld, $JB2_SplashScreen_pSize, $JB2_SplashScreen_tSize, $JB2_SplashScreen_pSource, $JB2_SplashScreen_tSource, $JB2_SplashScreen_pBlend, $JB2_SplashScreen_tBlend $JB2_SplashScreen_hScrDC = _WinAPI_GetDC(0) $JB2_SplashScreen_hMemDC = _WinAPI_CreateCompatibleDC($JB2_SplashScreen_hScrDC) $JB2_SplashScreen_hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($JB2_SplashScreen_hImage) $JB2_SplashScreen_hOld = _WinAPI_SelectObject($JB2_SplashScreen_hMemDC, $JB2_SplashScreen_hBitmap) $JB2_SplashScreen_tSize = DllStructCreate($tagSIZE) $JB2_SplashScreen_pSize = DllStructGetPtr($JB2_SplashScreen_tSize) DllStructSetData($JB2_SplashScreen_tSize, "X", _GDIPlus_ImageGetWidth($JB2_SplashScreen_hImage)) DllStructSetData($JB2_SplashScreen_tSize, "Y", _GDIPlus_ImageGetHeight($JB2_SplashScreen_hImage)) $JB2_SplashScreen_tSource = DllStructCreate($tagPOINT) $JB2_SplashScreen_pSource = DllStructGetPtr($JB2_SplashScreen_tSource) $JB2_SplashScreen_tBlend = DllStructCreate($tagBLENDFUNCTION) $JB2_SplashScreen_pBlend = DllStructGetPtr($JB2_SplashScreen_tBlend) DllStructSetData($JB2_SplashScreen_tBlend, "Alpha", $JB2_SplashScreen_iOpacity) DllStructSetData($JB2_SplashScreen_tBlend, "Format", $JB2_SplashScreen_AC_SRC_ALPHA) _WinAPI_UpdateLayeredWindow($JB2_SplashScreen_hGUI, $JB2_SplashScreen_hScrDC, 0, $JB2_SplashScreen_pSize, $JB2_SplashScreen_hMemDC, $JB2_SplashScreen_pSource, 0, $JB2_SplashScreen_pBlend, $ULW_ALPHA) _WinAPI_ReleaseDC(0, $JB2_SplashScreen_hScrDC) _WinAPI_SelectObject($JB2_SplashScreen_hMemDC, $JB2_SplashScreen_hOld) _WinAPI_DeleteObject($JB2_SplashScreen_hBitmap) _WinAPI_DeleteDC($JB2_SplashScreen_hMemDC) EndFunc ; ============================================================================================================================================== #EndRegion ; JB2_SplashScreen_SetBitmap ; ================================================================================================================================================== #EndRegion ; JB2_SplashScreen & Supporting Functions ; ================================================================================================================================================== #Region ; JB2_ChangeLog Function ; ================================================================================================================================================== Func JB2_ChangeLog($JB2_ChangeLog_GUIWindow = '', $JB2_ChangeLog_Script_Title = '', $JB2_ChangeLog_Script_Version = '') $JB2_ChangeLog_ListView_0Width = 0 $JB2_ChangeLog_ListView_1Width = 0 If $JB2_ChangeLog_Script_Title = '' Then $JB2_ChangeLog_GUI_Title = 'Change Log' Else $JB2_ChangeLog_GUI_Title = $JB2_ChangeLog_Script_Title & ' Change Log' EndIf $JB2_ChangeLog_GUI = GUICreate($JB2_ChangeLog_GUI_Title, 600, 550, -1, -1, BitXOR($GUI_SS_DEFAULT_GUI, $WS_MINIMIZEBOX), -1, $JB2_ChangeLog_GUIWindow) $JB2_ChangeLog_AppLogo = GUICtrlCreatePic("", 15, 15, 256, 256) GUICtrlSetBkColor($JB2_ChangeLog_AppLogo, $GUI_BKCOLOR_TRANSPARENT) _ResourceSetImageToCtrl($JB2_ChangeLog_AppLogo, "JB2_SplashScreen_Image") GUICtrlCreateLabel($JB2_ChangeLog_Script_Title, 296, 25, 300, 25, $SS_CENTER) GUICtrlSetFont (-1, 14, 800) If $JB2_ChangeLog_Script_Version <> "" Then GUICtrlCreateLabel("Version: " & $JB2_ChangeLog_Script_Version, 296, 50, 300, 20, $SS_CENTER) GUICtrlSetFont (-1, 10, 600) EndIf GUICtrlCreateLabel("Copyright © 2014-" & @YEAR & ", JBSquaredDesigns.com." & @CRLF & "All Rights Reserved.", 296, 75, 300, 30, $SS_CENTER) $JB2_ChangeLog_Logo = GUICtrlCreatePic("", 382, 105, 128, 128) GUICtrlSetBkColor($JB2_ChangeLog_Logo, $GUI_BKCOLOR_TRANSPARENT) _ResourceSetImageToCtrl($JB2_ChangeLog_Logo, "JB2_128PNG_Logo") GUICtrlCreateGroup("", 10, 276, 580, 265) GUICtrlCreateLabel("Change Log", 20, 288, 560, 30, $SS_CENTER) GUICtrlSetFont (-1, 14, 800) $JB2_ChangeLog_ListView = GUICtrlCreateListView("Date|Changes", 20, 316, 560, 215, BitOr($LVS_NOSORTHEADER, $LVS_SORTASCENDING), BitOr($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES, $WS_EX_CLIENTEDGE)) GUICtrlSetBkColor($JB2_ChangeLog_ListView, $GUI_BKCOLOR_LV_ALTERNATE) For $li = 2 To $Script_ChangeLog[0][0] If StringLen($Script_ChangeLog[$li][0]) > $JB2_ChangeLog_ListView_0Width Then $JB2_ChangeLog_ListView_0Width = StringLen($Script_ChangeLog[$li][0]) If StringLen($Script_ChangeLog[$li][1]) > $JB2_ChangeLog_ListView_1Width Then $JB2_ChangeLog_ListView_1Width = StringLen($Script_ChangeLog[$li][1]) Assign("$JB2_ChangeLog_ListView_Row" & Number($li - 1),GUICtrlCreateListViewItem($Script_ChangeLog[$li][0] & "|" & $Script_ChangeLog[$li][1], $JB2_ChangeLog_ListView)) GUICtrlSetBkColor(-1, 0xcccccc) Next _GUICtrlListView_SetColumnWidth($JB2_ChangeLog_ListView, 0, Number(($JB2_ChangeLog_ListView_0Width + 2) * 8)) ; 8px average width of characters at 8pt font. _GUICtrlListView_JustifyColumn($JB2_ChangeLog_ListView, 0, 2) _GUICtrlListView_SetColumnWidth($JB2_ChangeLog_ListView, 1, Number(($JB2_ChangeLog_ListView_1Width + 1) * 8)) ; 8px average width of characters at 8pt font. _GUICtrlListView_JustifyColumn($JB2_ChangeLog_ListView, 1) GUICtrlCreateGroup("", -99, -99, 1, 1) GUISetState() While 1 $JB2_ChangeLog_iMsg = GUIGetMsg() Switch $JB2_ChangeLog_iMsg Case $GUI_EVENT_CLOSE GUIDelete($JB2_ChangeLog_GUI) Return EndSwitch WEnd EndFunc ; ================================================================================================================================================== #EndRegion ; JB2_ChangeLog Function ; ================================================================================================================================================== #Region ; JB2_ThankYou Function ; ================================================================================================================================================== Func JB2_ThankYou($JB2_ThankYou_SleepTimer, $JB2_ThankYou_GUIWindow = '', $JB2_ThankYou_Script_Title = '', $JB2_ThankYou_Script_Version = '') If $JB2_ThankYou_SleepTimer <> 0 Then $JB2_ThankYou_GUI = GUICreate("Thank You For Choosing:", 280, 280, -1, -1, BitXOR($GUI_SS_DEFAULT_GUI, $WS_MINIMIZEBOX), -1, $JB2_ThankYou_GUIWindow) $Logo = GUICtrlCreatePic("", 15, 15, 250, 250, $SS_SUNKEN) _ResourceSetImageToCtrl($Logo, "JB2_Logo") GUISetState() Sleep($JB2_ThankYou_SleepTimer) Else If $JB2_ThankYou_Script_Title = "" Then $JB2_ThankYou_GUI_Title = "About" Else $JB2_ThankYou_GUI_Title = "About " & $JB2_ThankYou_Script_Title EndIf $JB2_ThankYou_GUI = GUICreate($JB2_ThankYou_GUI_Title, 560, 280, -1, -1, BitXOR($GUI_SS_DEFAULT_GUI, $WS_MINIMIZEBOX), -1, $JB2_ThankYou_GUIWindow) $Logo = GUICtrlCreatePic("", 15, 15, 250, 250, $SS_SUNKEN) _ResourceSetImageToCtrl($Logo, "JB2_Logo") GUICtrlCreateLabel($JB2_ThankYou_Script_Title, 290, 25, 260, 25, $SS_CENTER) GUICtrlSetFont (-1, 14, 800) If $JB2_ThankYou_Script_Version <> "" Then GUICtrlCreateLabel("Version: " & $JB2_ThankYou_Script_Version, 290, 50, 260, 20, $SS_CENTER) GUICtrlSetFont (-1, 10, 600) EndIf GUICtrlCreateLabel("Copyright © 2014-" & @YEAR & ", JBSquaredDesigns.com." & @CRLF & "All Rights Reserved.", 290, 75, 260, 200, $SS_CENTER) GUISetState() While 1 $JB2_ThankYou_iMsg = GUIGetMsg() Switch $JB2_ThankYou_iMsg Case $GUI_EVENT_CLOSE GUIDelete($JB2_ThankYou_GUI) Return EndSwitch WEnd EndIf EndFunc ; ================================================================================================================================================== #EndRegion ; JB2_ThankYou Function ; ====================================================================================================================================================== #EndRegion ; Necessary Supporting Functions ; ====================================================================================================================================================== TrayMenuIcons.au3 ShowMonitorInfo.au3
  4. Kudos Yashied!!! I have been using Window Info and have had controls that were under the group box and could not be identified. Your utility give me their info. Awesome!!!
  5. Melba23, Thanks again, you make my life easier on a daily basis!!!!
  6. Water, I have spent a couple of days off and between yesterday and today, I have combined both functions into one and hope you will be pleased with the updated function. This combines the aspects of _AD_GetObjectsInOU and _AD_GetObjectProperties you get the speed of GetObjectInOU and the versatility of GetObjectProperties. I have test and see great results. Please let me know what you think and if you might include these changes in the next UDF revision? ; #FUNCTION# ==================================================================================================================== ; Name...........: _AD_GetObjectsInOU ; Description ...: Returns a filtered array of objects and attributes for a given OU or just the number of records if $bCount is True. ; Syntax.........: _AD_GetObjectsInOU($sOU[, $sFilter = "(name=*)"[, $iSearchScope = 2[, $sDataToRetrieve = "sAMAccountName"[, $sSortBy = "sAMAccountName"[, $bCount = False]]]]]) ; Parameters ....: $sOU - The OU to retrieve from (FQDN) (default = "", equals "search the whole AD tree") ; $sFilter - Optional: An additional LDAP filter if required (default = "(name=*)") ; $iSearchScope - Optional: 0 = base, 1 = one-level, 2 = sub-tree (default) ; $sDataToRetrieve - Optional: A comma-seperated list of attributes to retrieve (default = "sAMAccountName"). ; |More than one attribute will create a 2-dimensional array ; $sSortBy - Optional: name of the attribute the resulting array will be sorted upon (default = "sAMAccountName"). ; |To completely suppress sorting (even the default sort) set this parameter to "". This improves performance when doing large queries ; $bCount - Optional: If set to True only returns the number of records returned by the query (default = "False") ; Return values .: Success - Number of records retrieved or a one or two dimensional array of objects and attributes in the given OU. First entry is for the given OU itself ; Failure - "", sets @error to: ; |1 - Specified OU does not exist ; |2 - No records returned from Active Directory. $sDataToRetrieve is invalid (attribute may not exist). @extended is set to the error returned by LDAP ; |3 - No records returned from Active Directory. $sFilter didn't return a record ; Author ........: Jonathan Clelland, Sundance ; Modified.......: water, JoshuaBarnette ; Remarks .......: The default filter returns an array including one record for the OU itself. To exclude the OU use a different filter that doesn't include the OU ; e.g. "(&(objectcategory=person)(objectclass=user)(name=*))" ;+ ; To make sure that all properties you specify in $sDataToRetrieve exist in the AD you can use _AD_ObjectExistsInSchema. ;+ ; The following examples illustrate the use of the escaping mechanism in the LDAP filter: ; (o=Parens R Us \28for all your parenthetical needs\29) ; (cn=*\2A*) ; (filename=C:\5cMyFile) ; (bin=\00\00\00\04) ; (sn=Lu\c4\8di\c4\87) ; The first example shows the use of the escaping mechanism to represent parenthesis characters. ; The second shows how to represent a "*" in a value, preventing it from being interpreted as a substring indicator. ; The third illustrates the escaping of the backslash character. ; The fourth example shows a filter searching for the four-byte value 0x00000004, illustrating the use of the escaping mechanism to ; represent arbitrary data, including NUL characters. ; The final example illustrates the use of the escaping mechanism to represent various non-ASCII UTF-8 characters. ; Related .......: _AD_GetAllOUs ; Link ..........: ; Example .......: Yes ; =============================================================================================================================== Func _AD_GetObjectsInOU($sOU = "", $sFilter = "(name=*)", $iSearchScope = 2, $sDataToRetrieve = "sAMAccountName", $sSortBy = "sAMAccountName", $bCount = False) Local $oObject Local $oItem, $oPropertyEntry, $oValue, $iCount3, $xAD_Dummy ; Data Type Mapping between Active Directory and LDAP ; http://msdn.microsoft.com/en-us/library/aa772375(VS.85).aspx Local Const $ADSTYPE_DN_STRING = 1 Local Const $ADSTYPE_CASE_IGNORE_STRING = 3 Local Const $ADSTYPE_BOOLEAN = 6 Local Const $ADSTYPE_INTEGER = 7 Local Const $ADSTYPE_OCTET_STRING = 8 Local Const $ADSTYPE_UTC_TIME = 9 Local Const $ADSTYPE_LARGE_INTEGER = 10 Local Const $ADSTYPE_NT_SECURITY_DESCRIPTOR = 25 Local Const $ADSTYPE_UNKNOWN = 26 Local $aSAMAccountType[12][2] = [["DOMAIN_OBJECT", 0x0],["GROUP_OBJECT", 0x10000000],["NON_SECURITY_GROUP_OBJECT", 0x10000001], _ ["ALIAS_OBJECT", 0x20000000],["NON_SECURITY_ALIAS_OBJECT", 0x20000001],["USER_OBJECT", 0x30000000],["NORMAL_USER_ACCOUNT", 0x30000000], _ ["MACHINE_ACCOUNT", 0x30000001],["TRUST_ACCOUNT", 0x30000002],["APP_BASIC_GROUP", 0x40000000],["APP_QUERY_GROUP", 0x40000001], _ ["ACCOUNT_TYPE_MAX", 0x7fffffff]] Local $aUAC[21][2] = [[0x00000001, "SCRIPT"],[0x00000002, "ACCOUNTDISABLE"],[0x00000008, "HOMEDIR_REQUIRED"],[0x00000010, "LOCKOUT"],[0x00000020, "PASSWD_NOTREQD"], _ [0x00000040, "PASSWD_CANT_CHANGE"],[0x00000080, "ENCRYPTED_TEXT_PASSWORD_ALLOWED"],[0x00000100, "TEMP_DUPLICATE_ACCOUNT"],[0x00000200, "NORMAL_ACCOUNT"], _ [0x00000800, "INTERDOMAIN_TRUST_ACCOUNT"],[0x00001000, "WORKSTATION_TRUST_ACCOUNT"],[0x00002000, "SERVER_TRUST_ACCOUNT"],[0x00010000, "DONT_EXPIRE_PASSWD"], _ [0x00020000, "MNS_LOGON_ACCOUNT"],[0x00040000, "SMARTCARD_REQUIRED"],[0x00080000, "TRUSTED_FOR_DELEGATION"],[0x00100000, "NOT_DELEGATED"], _ [0x00200000, "USE_DES_KEY_ONLY"],[0x00400000, "DONT_REQUIRE_PREAUTH"],[0x00800000, "PASSWORD_EXPIRED"],[0x01000000, "TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION"]] If $sOU = "" Then $sOU = $sAD_DNSDomain Else If _AD_ObjectExists($sOU, "distinguishedName") = 0 Then Return SetError(1, 0, "") EndIf Local $iCount2, $aDataToRetrieve, $aTemp If $sDataToRetrieve = "" Then $sDataToRetrieve = "sAMAccountName" $sDataToRetrieve = StringStripWS($sDataToRetrieve, 8) $__oAD_Command.Properties("Searchscope") = $iSearchScope $__oAD_Command.CommandText = "<LDAP://" & $sAD_HostServer & "/" & $sOU & ">;" & $sFilter & ";ADsPath" $__oAD_Command.Properties("Sort On") = $sSortBy Local $oRecordSet = $__oAD_Command.Execute If @error Or Not IsObj($oRecordSet) Then Return SetError(2, @error, "") Local $rCount = $oRecordSet.RecordCount If $rCount = 0 Then If $bCount Then Return SetError(3, 0, 0) Return SetError(3, 0, "") EndIf If $bCount Then Return $rCount If StringInStr($sDataToRetrieve, ",") Then $aDataToRetrieve = StringSplit($sDataToRetrieve, ",") Local $aObjects[$rCount + 1][$aDataToRetrieve[0]] $aObjects[0][0] = $rCount $aObjects[0][1] = $aDataToRetrieve[0] $crCount = 1 ; Current Record $oRecordSet.MoveFirst Do Local $sLDAPEntry = $oRecordSet.fields(0).Value $oObject = __AD_ObjGet($sLDAPEntry) ; Retrieve the COM Object $oObject.GetInfo() Local $iCount1 = $oObject.PropertyCount() For $iCount2 = 0 To $iCount1 - 1 $oItem = $oObject.Item($iCount2) $pIndex = _ArraySearch($aDataToRetrieve, $oItem.Name) If @Error Then ContinueLoop $oPropertyEntry = $oObject.GetPropertyItem($oItem.Name, $ADSTYPE_UNKNOWN) If Not IsObj($oPropertyEntry) Then Return SetError(2, 0, $oItem.Name) Else For $vPropertyValue In $oPropertyEntry.Values If $oItem.ADsType = $ADSTYPE_CASE_IGNORE_STRING Then $aObjects[$crCount][$pIndex - 1] = $vPropertyValue.CaseIgnoreString ElseIf $oItem.ADsType = $ADSTYPE_INTEGER Then If $oItem.Name = "sAMAccountType" Then For $iCount4 = 0 To 11 If $vPropertyValue.Integer = $aSAMAccountType[$iCount4][1] Then $aObjects[$crCount][$pIndex - 1] = $aSAMAccountType[$iCount4][0] ExitLoop EndIf Next ElseIf $oItem.Name = "userAccountControl" Then $aObjects[$crCount][$pIndex - 1] = $vPropertyValue.Integer & " = " For $iCount4 = 0 To 20 If BitAND($vPropertyValue.Integer, $aUAC[$iCount4][0]) = $aUAC[$iCount4][0] Then $aObjects[$crCount][$pIndex - 1] &= $aUAC[$iCount4][1] & " - " EndIf Next If StringRight($aObjects[$crCount][$pIndex - 1], 3) = " - " Then $aObjects[$crCount][$pIndex - 1] = StringTrimRight($aObjects[$crCount][$pIndex - 1], 3) Else $aObjects[$crCount][$pIndex - 1] = $vPropertyValue.Integer EndIf ElseIf $oItem.ADsType = $ADSTYPE_LARGE_INTEGER Then If $oItem.Name = "pwdLastSet" Or $oItem.Name = "accountExpires" Or $oItem.Name = "lastLogonTimestamp" Or $oItem.Name = "badPasswordTime" Or $oItem.Name = "lastLogon" Or $oItem.Name = "lockoutTime" Then If $vPropertyValue.LargeInteger.LowPart = 0 And $vPropertyValue.LargeInteger.HighPart = 0 Then $aObjects[$crCount][$pIndex - 1] = "1601/01/01 00:00:00" Else Local $sTemp = DllStructCreate("dword low;dword high") DllStructSetData($sTemp, "Low", $vPropertyValue.LargeInteger.LowPart) DllStructSetData($sTemp, "High", $vPropertyValue.LargeInteger.HighPart) Local $sTemp2 = _Date_Time_FileTimeToSystemTime(DllStructGetPtr($sTemp)) Local $sTemp3 = _Date_Time_SystemTimeToTzSpecificLocalTime(DllStructGetPtr($sTemp2)) $aObjects[$crCount][$pIndex - 1] = _Date_Time_SystemTimeToDateTimeStr($sTemp3, 1) EndIf Else $aObjects[$crCount][$pIndex - 1] = __AD_LargeInt2Double($vPropertyValue.LargeInteger.LowPart, $vPropertyValue.LargeInteger.HighPart) EndIf ElseIf $oItem.ADsType = $ADSTYPE_OCTET_STRING Then $xAD_Dummy = DllStructCreate("byte[56]") DllStructSetData($xAD_Dummy, 1, $vPropertyValue.OctetString) ; objectSID etc. See: http://msdn.microsoft.com/en-us/library/aa379597(VS.85).aspx ; objectGUID etc. See: http://www.autoitscript.com/forum/index.php?showtopic=106163&view=findpost&p=767558 If _Security__IsValidSid(DllStructGetPtr($xAD_Dummy)) Then $aObjects[$crCount][$pIndex - 1] = _Security__SidToStringSid(DllStructGetPtr($xAD_Dummy)) ; SID Else $aObjects[$crCount][$pIndex - 1] = _WinAPI_StringFromGUID(DllStructGetPtr($xAD_Dummy)) ; GUID EndIf ElseIf $oItem.ADsType = $ADSTYPE_DN_STRING Then $aObjects[$crCount][$pIndex - 1] = $vPropertyValue.DNString ElseIf $oItem.ADsType = $ADSTYPE_UTC_TIME Then Local $iDateTime = $vPropertyValue.UTCTime $aObjects[$crCount][$pIndex - 1] = StringLeft($iDateTime, 4) & "/" & StringMid($iDateTime, 5, 2) & "/" & StringMid($iDateTime, 7, 2) & _ " " & StringMid($iDateTime, 9, 2) & ":" & StringMid($iDateTime, 11, 2) & ":" & StringMid($iDateTime, 13, 2) ElseIf $oItem.ADsType = $ADSTYPE_BOOLEAN Then If $vPropertyValue.Boolean = 0 Then $aObjects[$crCount][$pIndex - 1] = "False" Else $aObjects[$crCount][$pIndex - 1] = "True" EndIf ElseIf $oItem.ADsType = $ADSTYPE_NT_SECURITY_DESCRIPTOR Then $oValue = $vPropertyValue.SecurityDescriptor $aObjects[$crCount][$pIndex - 1] = "Control:" & $oValue.Control & ", " & _ "Group:" & $oValue.Group & ", " & _ "Owner:" & $oValue.Owner & ", " & _ "Revision:" & $oValue.Revision Else $aObjects[$crCount][$pIndex - 1] = "Unknown ADsType" & $oItem.ADsType EndIf Next EndIf Next $oRecordSet.MoveNext $crCount += 1 Until $oRecordSet.EOF Else Local $aObjects[$rCount + 1] $aObjects[0] = $rCount $crCount = 1 ; Current Record $oRecordSet.MoveFirst Do Local $sLDAPEntry = $oRecordSet.fields(0).Value $oObject = __AD_ObjGet($sLDAPEntry) ; Retrieve the COM Object $oObject.GetInfo() Local $iCount1 = $oObject.PropertyCount() For $iCount2 = 0 To $iCount1 - 1 $oItem = $oObject.Item($iCount2) $sDataToRetrieve = "," & $sDataToRetrieve & "," If Not StringInStr($sDataToRetrieve, "," & $oItem.Name & ",") Then ContinueLoop $oPropertyEntry = $oObject.GetPropertyItem($oItem.Name, $ADSTYPE_UNKNOWN) If Not IsObj($oPropertyEntry) Then Return SetError(2, 0, $oItem.Name) Else For $vPropertyValue In $oPropertyEntry.Values If $oItem.ADsType = $ADSTYPE_CASE_IGNORE_STRING Then $aObjects[$crCount] = $vPropertyValue.CaseIgnoreString ElseIf $oItem.ADsType = $ADSTYPE_INTEGER Then If $oItem.Name = "sAMAccountType" Then For $iCount4 = 0 To 11 If $vPropertyValue.Integer = $aSAMAccountType[$iCount4][1] Then $aObjects[$crCount] = $aSAMAccountType[$iCount4][0] ExitLoop EndIf Next ElseIf $oItem.Name = "userAccountControl" Then $aObjects[$crCount] = $vPropertyValue.Integer & " = " For $iCount4 = 0 To 20 If BitAND($vPropertyValue.Integer, $aUAC[$iCount4][0]) = $aUAC[$iCount4][0] Then $aObjects[$crCount] &= $aUAC[$iCount4][1] & " - " EndIf Next If StringRight($aObjects[$crCount], 3) = " - " Then $aObjects[$crCount] = StringTrimRight($aObjects[$crCount], 3) Else $aObjects[$crCount] = $vPropertyValue.Integer EndIf ElseIf $oItem.ADsType = $ADSTYPE_LARGE_INTEGER Then If $oItem.Name = "pwdLastSet" Or $oItem.Name = "accountExpires" Or $oItem.Name = "lastLogonTimestamp" Or $oItem.Name = "badPasswordTime" Or $oItem.Name = "lastLogon" Or $oItem.Name = "lockoutTime" Then If $vPropertyValue.LargeInteger.LowPart = 0 And $vPropertyValue.LargeInteger.HighPart = 0 Then $aObjects[$crCount] = "1601/01/01 00:00:00" Else Local $sTemp = DllStructCreate("dword low;dword high") DllStructSetData($sTemp, "Low", $vPropertyValue.LargeInteger.LowPart) DllStructSetData($sTemp, "High", $vPropertyValue.LargeInteger.HighPart) Local $sTemp2 = _Date_Time_FileTimeToSystemTime(DllStructGetPtr($sTemp)) Local $sTemp3 = _Date_Time_SystemTimeToTzSpecificLocalTime(DllStructGetPtr($sTemp2)) $aObjects[$crCount] = _Date_Time_SystemTimeToDateTimeStr($sTemp3, 1) EndIf Else $aObjects[$crCount] = __AD_LargeInt2Double($vPropertyValue.LargeInteger.LowPart, $vPropertyValue.LargeInteger.HighPart) EndIf ElseIf $oItem.ADsType = $ADSTYPE_OCTET_STRING Then $xAD_Dummy = DllStructCreate("byte[56]") DllStructSetData($xAD_Dummy, 1, $vPropertyValue.OctetString) ; objectSID etc. See: http://msdn.microsoft.com/en-us/library/aa379597(VS.85).aspx ; objectGUID etc. See: http://www.autoitscript.com/forum/index.php?showtopic=106163&view=findpost&p=767558 If _Security__IsValidSid(DllStructGetPtr($xAD_Dummy)) Then $aObjects[$crCount] = _Security__SidToStringSid(DllStructGetPtr($xAD_Dummy)) ; SID Else $aObjects[$crCount] = _WinAPI_StringFromGUID(DllStructGetPtr($xAD_Dummy)) ; GUID EndIf ElseIf $oItem.ADsType = $ADSTYPE_DN_STRING Then $aObjects[$crCount] = $vPropertyValue.DNString ElseIf $oItem.ADsType = $ADSTYPE_UTC_TIME Then Local $iDateTime = $vPropertyValue.UTCTime $aObjects[$crCount] = StringLeft($iDateTime, 4) & "/" & StringMid($iDateTime, 5, 2) & "/" & StringMid($iDateTime, 7, 2) & _ " " & StringMid($iDateTime, 9, 2) & ":" & StringMid($iDateTime, 11, 2) & ":" & StringMid($iDateTime, 13, 2) ElseIf $oItem.ADsType = $ADSTYPE_BOOLEAN Then If $vPropertyValue.Boolean = 0 Then $aObjects[$crCount] = "False" Else $aObjects[$crCount] = "True" EndIf ElseIf $oItem.ADsType = $ADSTYPE_NT_SECURITY_DESCRIPTOR Then $oValue = $vPropertyValue.SecurityDescriptor $aObjects[$crCount] = "Control:" & $oValue.Control & ", " & _ "Group:" & $oValue.Group & ", " & _ "Owner:" & $oValue.Owner & ", " & _ "Revision:" & $oValue.Revision Else $aObjects[$crCount] = "Unknown ADsType" & $oItem.ADsType EndIf Next EndIf Next $oRecordSet.MoveNext $crCount += 1 Until $oRecordSet.EOF EndIf $__oAD_Command.Properties("Sort On") = "" ; Reset sort property Return $aObjects EndFunc ;==>_AD_GetObjectsInOU
  7. Remember the Windows 8 slowness we were talking about the other day? This is faster, it runs in under 10 seconds on Windows 7 and Windows 8. Also I can filter based on MemberOf here, etc, thus leaving me to make only one AD call versus 115 for the full membership of the Information Services group. The performance this way is phenomenal, also if I ask for a Property that isn't set for an object, it returns a blank field versus me having to loop through every user's _AD_GetObjectProperties to ensure that all the properties are returned, etc. I really think this call, if it can be fixed to get the TimeStamps could seriously improve performance overall.
  8. I know I will be showing my ignorance here, but here goes....Below is what I have been trying to use to adapt the GetObjectPropeties function to the GetObjectInOU function, Line 1330 returns $iCount1 as blank. Func _AD_GetObjectsInOU($sOU = "", $sFilter = "(name=*)", $iSearchScope = 2, $sDataToRetrieve = "sAMAccountName", $sSortBy = "sAMAccountName", $bCount = False) ; Data Type Mapping between Active Directory and LDAP ; http://msdn.microsoft.com/en-us/library/aa772375(VS.85).aspx Local Const $ADSTYPE_DN_STRING = 1 Local Const $ADSTYPE_CASE_IGNORE_STRING = 3 Local Const $ADSTYPE_BOOLEAN = 6 Local Const $ADSTYPE_INTEGER = 7 Local Const $ADSTYPE_OCTET_STRING = 8 Local Const $ADSTYPE_UTC_TIME = 9 Local Const $ADSTYPE_LARGE_INTEGER = 10 Local Const $ADSTYPE_NT_SECURITY_DESCRIPTOR = 25 Local Const $ADSTYPE_UNKNOWN = 26 If $sOU = "" Then $sOU = $sAD_DNSDomain Else If _AD_ObjectExists($sOU, "distinguishedName") = 0 Then Return SetError(1, 0, "") EndIf Local $iCount2, $aDataToRetrieve, $aTemp If $sDataToRetrieve = "" Then $sDataToRetrieve = "sAMAccountName" $sDataToRetrieve = StringStripWS($sDataToRetrieve, 8) $__oAD_Command.Properties("Searchscope") = $iSearchScope $__oAD_Command.CommandText = "<LDAP://" & $sAD_HostServer & "/" & $sOU & ">;" & $sFilter & ";" & $sDataToRetrieve $__oAD_Command.Properties("Sort On") = $sSortBy Local $oRecordSet = $__oAD_Command.Execute If @error Or Not IsObj($oRecordSet) Then Return SetError(2, @error, "") Local $iCount1 = $oRecordSet.RecordCount If $iCount1 = 0 Then If $bCount Then Return SetError(3, 0, 0) Return SetError(3, 0, "") EndIf If $bCount Then Return $iCount1 If StringInStr($sDataToRetrieve, ",") Then $aDataToRetrieve = StringSplit($sDataToRetrieve, ",") Local $aObjects[$iCount1 + 1][$aDataToRetrieve[0]] $aObjects[0][0] = $iCount1 $aObjects[0][1] = $aDataToRetrieve[0] $iCount2 = 1 $oRecordSet.MoveFirst Do For $iCount1 = 1 To $aDataToRetrieve[0] If IsArray($oRecordSet.Fields($aDataToRetrieve[$iCount1]).Value) Then $aTemp = $oRecordSet.Fields($aDataToRetrieve[$iCount1]).Value $aObjects[$iCount2][$iCount1 - 1] = _ArrayToString($aTemp) Else $aObjects[$iCount2][$iCount1 - 1] = $oRecordSet.Fields($aDataToRetrieve[$iCount1]).Value EndIf Next $oRecordSet.MoveNext $iCount2 += 1 Until $oRecordSet.EOF #Region ; Translate Objects To Values For $r = 1 To $aObjects[0][0] For $c = 0 To $aObjects[0][1] - 1 If IsObj($aObjects[$r][$c]) Then MsgBox(4096, "Test Is Object", "Array Row: " & $r & " And Column: " & $c & " Is An Object.") $oObject = $aObjects[$r][$c] $oObject.GetInfo() Local $iCount1 = $oObject.PropertyCount() MsgBox(4096, "Test Is Object", "Array Row: " & $r & " And Column: " & $c & " Has " & $iCount1 & " Properties.") For $iCount2 = 0 To $iCount1 - 1 $oItem = $oObject.Item($iCount2) If Not ($sProperties = ",," Or StringInStr($sProperties, "," & $oItem.Name & ",") > 0) Then ContinueLoop $oPropertyEntry = $oObject.GetPropertyItem($oItem.Name, $ADSTYPE_UNKNOWN) If Not IsObj($oPropertyEntry) Then Return SetError(2, 0, $oItem.Name) Else For $vPropertyValue In $oPropertyEntry.Values If $oItem.ADsType = $ADSTYPE_CASE_IGNORE_STRING Then $aObjects[$r][$c] = $vPropertyValue.CaseIgnoreString ElseIf $oItem.ADsType = $ADSTYPE_INTEGER Then If $oItem.Name = "sAMAccountType" Then For $iCount4 = 0 To 11 If $vPropertyValue.Integer = $aSAMAccountType[$iCount4][1] Then $aObjects[$r][$c] = $aSAMAccountType[$iCount4][0] ExitLoop EndIf Next ElseIf $oItem.Name = "userAccountControl" Then $aObjects[$r][$c] = $vPropertyValue.Integer & " = " For $iCount4 = 0 To 20 If BitAND($vPropertyValue.Integer, $aUAC[$iCount4][0]) = $aUAC[$iCount4][0] Then $aObjects[$r][$c] &= $aUAC[$iCount4][1] & " - " EndIf Next If StringRight($aObjects[$r][$c], 3) = " - " Then $aObjects[$r][$c] = StringTrimRight($aObjects[$r][$c], 3) Else $aObjects[$r][$c] = $vPropertyValue.Integer EndIf ElseIf $oItem.ADsType = $ADSTYPE_LARGE_INTEGER Then If $oItem.Name = "pwdLastSet" Or $oItem.Name = "accountExpires" Or $oItem.Name = "lastLogonTimestamp" Or $oItem.Name = "badPasswordTime" Or $oItem.Name = "lastLogon" Or $oItem.Name = "lockoutTime" Then If $vPropertyValue.LargeInteger.LowPart = 0 And $vPropertyValue.LargeInteger.HighPart = 0 Then $aObjects[$r][$c] = "1601/01/01 00:00:00" Else Local $sTemp = DllStructCreate("dword low;dword high") DllStructSetData($sTemp, "Low", $vPropertyValue.LargeInteger.LowPart) DllStructSetData($sTemp, "High", $vPropertyValue.LargeInteger.HighPart) Local $sTemp2 = _Date_Time_FileTimeToSystemTime(DllStructGetPtr($sTemp)) Local $sTemp3 = _Date_Time_SystemTimeToTzSpecificLocalTime(DllStructGetPtr($sTemp2)) $aObjects[$r][$c] = _Date_Time_SystemTimeToDateTimeStr($sTemp3, 1) EndIf Else $aObjects[$r][$c] = __AD_LargeInt2Double($vPropertyValue.LargeInteger.LowPart, $vPropertyValue.LargeInteger.HighPart) EndIf ElseIf $oItem.ADsType = $ADSTYPE_OCTET_STRING Then $xAD_Dummy = DllStructCreate("byte[56]") DllStructSetData($xAD_Dummy, 1, $vPropertyValue.OctetString) ; objectSID etc. See: http://msdn.microsoft.com/en-us/library/aa379597(VS.85).aspx ; objectGUID etc. See: http://www.autoitscript.com/forum/index.php?showtopic=106163&view=findpost&p=767558 If _Security__IsValidSid(DllStructGetPtr($xAD_Dummy)) Then $aObjects[$r][$c] = _Security__SidToStringSid(DllStructGetPtr($xAD_Dummy)) ; SID Else $aObjects[$r][$c] = _WinAPI_StringFromGUID(DllStructGetPtr($xAD_Dummy)) ; GUID EndIf ElseIf $oItem.ADsType = $ADSTYPE_DN_STRING Then $aObjects[$r][$c] = $vPropertyValue.DNString ElseIf $oItem.ADsType = $ADSTYPE_UTC_TIME Then Local $iDateTime = $vPropertyValue.UTCTime $aObjects[$r][$c] = StringLeft($iDateTime, 4) & "/" & StringMid($iDateTime, 5, 2) & "/" & StringMid($iDateTime, 7, 2) & _ " " & StringMid($iDateTime, 9, 2) & ":" & StringMid($iDateTime, 11, 2) & ":" & StringMid($iDateTime, 13, 2) ElseIf $oItem.ADsType = $ADSTYPE_BOOLEAN Then If $vPropertyValue.Boolean = 0 Then $aObjects[$r][$c] = "False" Else $aObjects[$r][$c] = "True" EndIf ElseIf $oItem.ADsType = $ADSTYPE_NT_SECURITY_DESCRIPTOR Then $oValue = $vPropertyValue.SecurityDescriptor $aObjects[$r][$c] = "Control:" & $oValue.Control & ", " & _ "Group:" & $oValue.Group & ", " & _ "Owner:" & $oValue.Owner & ", " & _ "Revision:" & $oValue.Revision Else $aObjects[$r][$c] = "Has the unknown ADsType: " & $oItem.ADsType EndIf Next EndIf Next EndIf Next Next #EndRegion Else Local $aObjects[$iCount1 + 1] $aObjects[0] = UBound($aObjects) - 1 $iCount2 = 1 $oRecordSet.MoveFirst Do If IsArray($oRecordSet.Fields($sDataToRetrieve).Value) Then $aTemp = $oRecordSet.Fields($sDataToRetrieve).Value $aObjects[$iCount2] = _ArrayToString($aTemp) Else $aObjects[$iCount2] = $oRecordSet.Fields($sDataToRetrieve).Value EndIf $oRecordSet.MoveNext $iCount2 += 1 Until $oRecordSet.EOF #Region ; Translate Objects To Values For $r = 1 To $aObjects[0] If IsObj($aObjects[$r]) Then $oObject = $aObjects[$r] $oObject.GetInfo() Local $iCount1 = $oObject.PropertyCount() For $iCount2 = 0 To $iCount1 - 1 $oItem = $oObject.Item($iCount2) If Not ($sProperties = ",," Or StringInStr($sProperties, "," & $oItem.Name & ",") > 0) Then ContinueLoop $oPropertyEntry = $oObject.GetPropertyItem($oItem.Name, $ADSTYPE_UNKNOWN) If Not IsObj($oPropertyEntry) Then Return SetError(2, 0, $oItem.Name) Else For $vPropertyValue In $oPropertyEntry.Values If $oItem.ADsType = $ADSTYPE_CASE_IGNORE_STRING Then $aObjects[$r] = $vPropertyValue.CaseIgnoreString ElseIf $oItem.ADsType = $ADSTYPE_INTEGER Then If $oItem.Name = "sAMAccountType" Then For $iCount4 = 0 To 11 If $vPropertyValue.Integer = $aSAMAccountType[$iCount4][1] Then $aObjects[$r] = $aSAMAccountType[$iCount4][0] ExitLoop EndIf Next ElseIf $oItem.Name = "userAccountControl" Then $aObjects[$r] = $vPropertyValue.Integer & " = " For $iCount4 = 0 To 20 If BitAND($vPropertyValue.Integer, $aUAC[$iCount4][0]) = $aUAC[$iCount4][0] Then $aObjects[$r] &= $aUAC[$iCount4][1] & " - " EndIf Next If StringRight($aObjects[$r], 3) = " - " Then $aObjects[$r] = StringTrimRight($aObjects[$r], 3) Else $aObjects[$r] = $vPropertyValue.Integer EndIf ElseIf $oItem.ADsType = $ADSTYPE_LARGE_INTEGER Then If $oItem.Name = "pwdLastSet" Or $oItem.Name = "accountExpires" Or $oItem.Name = "lastLogonTimestamp" Or $oItem.Name = "badPasswordTime" Or $oItem.Name = "lastLogon" Or $oItem.Name = "lockoutTime" Then If $vPropertyValue.LargeInteger.LowPart = 0 And $vPropertyValue.LargeInteger.HighPart = 0 Then $aObjects[$r] = "1601/01/01 00:00:00" Else Local $sTemp = DllStructCreate("dword low;dword high") DllStructSetData($sTemp, "Low", $vPropertyValue.LargeInteger.LowPart) DllStructSetData($sTemp, "High", $vPropertyValue.LargeInteger.HighPart) Local $sTemp2 = _Date_Time_FileTimeToSystemTime(DllStructGetPtr($sTemp)) Local $sTemp3 = _Date_Time_SystemTimeToTzSpecificLocalTime(DllStructGetPtr($sTemp2)) $aObjects[$r] = _Date_Time_SystemTimeToDateTimeStr($sTemp3, 1) EndIf Else $aObjects[$r] = __AD_LargeInt2Double($vPropertyValue.LargeInteger.LowPart, $vPropertyValue.LargeInteger.HighPart) EndIf ElseIf $oItem.ADsType = $ADSTYPE_OCTET_STRING Then $xAD_Dummy = DllStructCreate("byte[56]") DllStructSetData($xAD_Dummy, 1, $vPropertyValue.OctetString) ; objectSID etc. See: http://msdn.microsoft.com/en-us/library/aa379597(VS.85).aspx ; objectGUID etc. See: http://www.autoitscript.com/forum/index.php?showtopic=106163&view=findpost&p=767558 If _Security__IsValidSid(DllStructGetPtr($xAD_Dummy)) Then $aObjects[$r] = _Security__SidToStringSid(DllStructGetPtr($xAD_Dummy)) ; SID Else $aObjects[$r] = _WinAPI_StringFromGUID(DllStructGetPtr($xAD_Dummy)) ; GUID EndIf ElseIf $oItem.ADsType = $ADSTYPE_DN_STRING Then $aObjects[$r] = $vPropertyValue.DNString ElseIf $oItem.ADsType = $ADSTYPE_UTC_TIME Then Local $iDateTime = $vPropertyValue.UTCTime $aObjects[$r] = StringLeft($iDateTime, 4) & "/" & StringMid($iDateTime, 5, 2) & "/" & StringMid($iDateTime, 7, 2) & _ " " & StringMid($iDateTime, 9, 2) & ":" & StringMid($iDateTime, 11, 2) & ":" & StringMid($iDateTime, 13, 2) ElseIf $oItem.ADsType = $ADSTYPE_BOOLEAN Then If $vPropertyValue.Boolean = 0 Then $aObjects[$r] = "False" Else $aObjects[$r] = "True" EndIf ElseIf $oItem.ADsType = $ADSTYPE_NT_SECURITY_DESCRIPTOR Then $oValue = $vPropertyValue.SecurityDescriptor $aObjects[$r] = "Control:" & $oValue.Control & ", " & _ "Group:" & $oValue.Group & ", " & _ "Owner:" & $oValue.Owner & ", " & _ "Revision:" & $oValue.Revision Else $aObjects[$r] = "Has the unknown ADsType: " & $oItem.ADsType EndIf Next EndIf Next EndIf Next #EndRegion EndIf $__oAD_Command.Properties("Sort On") = "" ; Reset sort property Return $aObjects EndFunc ;==>_AD_GetObjectsInOU I am sure this has something to go with the object only being the LargeInteger and not a property list, but as I said before I have never worked much with Objects.
  9. I hate to seem stupid, but some of your code is fairly foreign to me, as I do not work with objects on a normal basis. Is there a way you can assist me in getting this setup so I can get the right information? I would think it could be useful to persons other than myself and might be helpful to include in the UDF.
  10. I Did: _AD_Open($LS_AD_User & "@" & $LS_AD_Domain, $LS_AD_Password, $LS_AD_DNSDomain, $LS_AD_HostServer, $LS_AD_Configuration) $IS_Users = _AD_GetObjectsInOU("DC=domain,DC=com", "(&(sAMAccountType=805306368)(memberOf=CN=IS_Users,OU=Groups,DC=domain,DC=com)(Mail=*))", 2, "lastLogon, lastLogonTimestamp", "sAMAccountName") MsgBox(4096, "Test", 'Last Logon: ' & VarGetType($IS_Users[1][0]) & @CRLF & 'Last Logon Timestamp: ' & VarGetType($IS_Users[1][1])) _AD_Close() It returned: Last Logon: Object Last Logon Timestamp: Object
  11. To be clear...I do not care if what is returned is an Integer8 or a formatted date, I just need a value returned. I can decode it later.
  12. I understand the need to decode LastLogonTimeStamp to be an actual date and wrote a function to do just that, but why is it that the column returns empty, not an integer, nothing at all from _AD_GetObjectsInOU? From _AD_GetObjectProperties I get the formatted date, on the exact same user as is returned in _AD_GetObjectsInOU.
  13. How can I pull the lastLogonTimestamp AD attribute via _AD_GetObjectsInOU? The script does not error, it simply returns blank fields in the array. _AD_Open($LS_AD_User & "@" & $LS_AD_Domain, $LS_AD_Password, $LS_AD_DNSDomain, $LS_AD_HostServer, $LS_AD_Configuration) _ArrayDisplay(_AD_GetObjectProperties("CN=Username,OU=Users,DC=Domain,DC=com")) _ArrayDisplay(_AD_GetObjectsInOU("DC=Domain,DC=com", "(Mail=*)", 2, "GivenName, Mail, sAMAccountName, SN, lastLogon, lastLogonTimestamp", "sAMAccountName")) _AD_Close() This is obviously a test script, but _AD_GetObjectProperties returns the attributes with values, _AD_GetObjectsInOU does not. Thanks again for all your help.
  14. Water, As relates to our question of slowness in Windows 8, the _AD_GetGroupMembers function returns fairly quickly, as does the _AD_GetObjectsInOU function. Is there a "hybrid" type function to allow me to GetGroupMembers and get a list of their properties all in one call? Thanks again for all your help!!!
  15. Yes, our master DC which is in this building. Both machines are on the same subnet and everything. It is strange. I am new to PowerShell, so I took the same process and converted the _AD_GetObjectProperties to a PowerShell command, that process takes about 5 minutes in Windows 7 and about 12 minutes in Windows 8.
  16. Water, I outputted the _AD_ timings to a VAR and then dumped it results to a file. Please find the contents below. Also, I used _AD_Open only once. The times for Windows 8: 09:10:30.444 - _AD_GetGroupMembers - Start 09:10:30.694 - _AD_GetGroupMembers - End 09:10:30.694 - _AD_GetObjectProperties For 115 Users. 09:10:30.694 - _AD_GetObjectProperties For User 1 - Start 09:10:42.913 - _AD_GetObjectProperties For User 1 - End 09:10:42.913 - _AD_GetObjectProperties For User 2 - Start 09:10:49.038 - _AD_GetObjectProperties For User 2 - End 09:10:49.038 - _AD_GetObjectProperties For User 3 - Start 09:11:01.304 - _AD_GetObjectProperties For User 3 - End 09:11:01.304 - _AD_GetObjectProperties For User 4 - Start 09:11:10.570 - _AD_GetObjectProperties For User 4 - End 09:11:10.570 - _AD_GetObjectProperties For User 5 - Start 09:11:18.461 - _AD_GetObjectProperties For User 5 - End 09:11:18.461 - _AD_GetObjectProperties For User 6 - Start 09:11:27.759 - _AD_GetObjectProperties For User 6 - End 09:11:27.759 - _AD_GetObjectProperties For User 7 - Start 09:11:41.431 - _AD_GetObjectProperties For User 7 - End 09:11:41.431 - _AD_GetObjectProperties For User 8 - Start 09:11:51.213 - _AD_GetObjectProperties For User 8 - End 09:11:51.213 - _AD_GetObjectProperties For User 9 - Start 09:12:00.026 - _AD_GetObjectProperties For User 9 - End 09:12:00.026 - _AD_GetObjectProperties For User 10 - Start 09:12:11.058 - _AD_GetObjectProperties For User 10 - End 09:12:11.058 - _AD_GetObjectProperties For User 11 - Start 09:12:20.730 - _AD_GetObjectProperties For User 11 - End 09:12:20.730 - _AD_GetObjectProperties For User 12 - Start 09:12:24.793 - _AD_GetObjectProperties For User 12 - End 09:12:24.793 - _AD_GetObjectProperties For User 13 - Start 09:12:35.278 - _AD_GetObjectProperties For User 13 - End 09:12:35.278 - _AD_GetObjectProperties For User 14 - Start 09:12:47.263 - _AD_GetObjectProperties For User 14 - End 09:12:47.263 - _AD_GetObjectProperties For User 15 - Start 09:12:59.795 - _AD_GetObjectProperties For User 15 - End 09:12:59.795 - _AD_GetObjectProperties For User 16 - Start 09:13:03.576 - _AD_GetObjectProperties For User 16 - End 09:13:03.576 - _AD_GetObjectProperties For User 17 - Start 09:13:16.389 - _AD_GetObjectProperties For User 17 - End 09:13:16.389 - _AD_GetObjectProperties For User 18 - Start 09:13:26.890 - _AD_GetObjectProperties For User 18 - End 09:13:26.890 - _AD_GetObjectProperties For User 19 - Start 09:13:37.749 - _AD_GetObjectProperties For User 19 - End 09:13:37.749 - _AD_GetObjectProperties For User 20 - Start 09:13:45.328 - _AD_GetObjectProperties For User 20 - End 09:13:45.328 - _AD_GetObjectProperties For User 21 - Start 09:13:56.735 - _AD_GetObjectProperties For User 21 - End 09:13:56.735 - _AD_GetObjectProperties For User 22 - Start 09:14:10.579 - _AD_GetObjectProperties For User 22 - End 09:14:10.579 - _AD_GetObjectProperties For User 23 - Start 09:14:21.595 - _AD_GetObjectProperties For User 23 - End 09:14:21.595 - _AD_GetObjectProperties For User 24 - Start 09:14:32.049 - _AD_GetObjectProperties For User 24 - End 09:14:32.049 - _AD_GetObjectProperties For User 25 - Start 09:14:43.112 - _AD_GetObjectProperties For User 25 - End 09:14:43.112 - _AD_GetObjectProperties For User 26 - Start 09:14:55.113 - _AD_GetObjectProperties For User 26 - End 09:14:55.113 - _AD_GetObjectProperties For User 27 - Start 09:15:06.066 - _AD_GetObjectProperties For User 27 - End 09:15:06.066 - _AD_GetObjectProperties For User 28 - Start 09:15:14.551 - _AD_GetObjectProperties For User 28 - End 09:15:14.551 - _AD_GetObjectProperties For User 29 - Start 09:15:22.911 - _AD_GetObjectProperties For User 29 - End 09:15:22.911 - _AD_GetObjectProperties For User 30 - Start 09:15:31.755 - _AD_GetObjectProperties For User 30 - End 09:15:31.755 - _AD_GetObjectProperties For User 31 - Start 09:15:41.287 - _AD_GetObjectProperties For User 31 - End 09:15:41.287 - _AD_GetObjectProperties For User 32 - Start 09:15:49.303 - _AD_GetObjectProperties For User 32 - End 09:15:49.303 - _AD_GetObjectProperties For User 33 - Start 09:15:59.506 - _AD_GetObjectProperties For User 33 - End 09:15:59.506 - _AD_GetObjectProperties For User 34 - Start 09:16:09.647 - _AD_GetObjectProperties For User 34 - End 09:16:09.647 - _AD_GetObjectProperties For User 35 - Start 09:16:20.085 - _AD_GetObjectProperties For User 35 - End 09:16:20.085 - _AD_GetObjectProperties For User 36 - Start 09:16:31.727 - _AD_GetObjectProperties For User 36 - End 09:16:31.727 - _AD_GetObjectProperties For User 37 - Start 09:16:41.899 - _AD_GetObjectProperties For User 37 - End 09:16:41.899 - _AD_GetObjectProperties For User 38 - Start 09:16:52.618 - _AD_GetObjectProperties For User 38 - End 09:16:52.618 - _AD_GetObjectProperties For User 39 - Start 09:17:05.775 - _AD_GetObjectProperties For User 39 - End 09:17:05.775 - _AD_GetObjectProperties For User 40 - Start 09:17:17.494 - _AD_GetObjectProperties For User 40 - End 09:17:17.494 - _AD_GetObjectProperties For User 41 - Start 09:17:26.511 - _AD_GetObjectProperties For User 41 - End 09:17:26.511 - _AD_GetObjectProperties For User 42 - Start 09:17:37.605 - _AD_GetObjectProperties For User 42 - End 09:17:37.605 - _AD_GetObjectProperties For User 43 - Start 09:17:51.262 - _AD_GetObjectProperties For User 43 - End 09:17:51.262 - _AD_GetObjectProperties For User 44 - Start 09:18:01.325 - _AD_GetObjectProperties For User 44 - End 09:18:01.325 - _AD_GetObjectProperties For User 45 - Start 09:18:11.935 - _AD_GetObjectProperties For User 45 - End 09:18:11.935 - _AD_GetObjectProperties For User 46 - Start 09:18:20.498 - _AD_GetObjectProperties For User 46 - End 09:18:20.498 - _AD_GetObjectProperties For User 47 - Start 09:18:30.107 - _AD_GetObjectProperties For User 47 - End 09:18:30.107 - _AD_GetObjectProperties For User 48 - Start 09:18:41.874 - _AD_GetObjectProperties For User 48 - End 09:18:41.874 - _AD_GetObjectProperties For User 49 - Start 09:18:53.905 - _AD_GetObjectProperties For User 49 - End 09:18:53.905 - _AD_GetObjectProperties For User 50 - Start 09:19:03.296 - _AD_GetObjectProperties For User 50 - End 09:19:03.296 - _AD_GetObjectProperties For User 51 - Start 09:19:14.203 - _AD_GetObjectProperties For User 51 - End 09:19:14.203 - _AD_GetObjectProperties For User 52 - Start 09:19:25.985 - _AD_GetObjectProperties For User 52 - End 09:19:25.985 - _AD_GetObjectProperties For User 53 - Start 09:19:40.517 - _AD_GetObjectProperties For User 53 - End 09:19:40.517 - _AD_GetObjectProperties For User 54 - Start 09:19:52.580 - _AD_GetObjectProperties For User 54 - End 09:19:52.580 - _AD_GetObjectProperties For User 55 - Start 09:20:01.956 - _AD_GetObjectProperties For User 55 - End 09:20:01.956 - _AD_GetObjectProperties For User 56 - Start 09:20:11.315 - _AD_GetObjectProperties For User 56 - End 09:20:11.315 - _AD_GetObjectProperties For User 57 - Start 09:20:21.378 - _AD_GetObjectProperties For User 57 - End 09:20:21.378 - _AD_GetObjectProperties For User 58 - Start 09:20:32.504 - _AD_GetObjectProperties For User 58 - End 09:20:32.504 - _AD_GetObjectProperties For User 59 - Start 09:20:43.692 - _AD_GetObjectProperties For User 59 - End 09:20:43.692 - _AD_GetObjectProperties For User 60 - Start 09:20:55.646 - _AD_GetObjectProperties For User 60 - End 09:20:55.646 - _AD_GetObjectProperties For User 61 - Start 09:21:09.178 - _AD_GetObjectProperties For User 61 - End 09:21:09.178 - _AD_GetObjectProperties For User 62 - Start 09:21:20.787 - _AD_GetObjectProperties For User 62 - End 09:21:20.787 - _AD_GetObjectProperties For User 63 - Start 09:21:32.241 - _AD_GetObjectProperties For User 63 - End 09:21:32.241 - _AD_GetObjectProperties For User 64 - Start 09:21:45.523 - _AD_GetObjectProperties For User 64 - End 09:21:45.523 - _AD_GetObjectProperties For User 65 - Start 09:21:57.524 - _AD_GetObjectProperties For User 65 - End 09:21:57.524 - _AD_GetObjectProperties For User 66 - Start 09:22:11.556 - _AD_GetObjectProperties For User 66 - End 09:22:11.556 - _AD_GetObjectProperties For User 67 - Start 09:22:23.228 - _AD_GetObjectProperties For User 67 - End 09:22:23.228 - _AD_GetObjectProperties For User 68 - Start 09:22:33.478 - _AD_GetObjectProperties For User 68 - End 09:22:33.478 - _AD_GetObjectProperties For User 69 - Start 09:22:47.010 - _AD_GetObjectProperties For User 69 - End 09:22:47.010 - _AD_GetObjectProperties For User 70 - Start 09:22:59.605 - _AD_GetObjectProperties For User 70 - End 09:22:59.605 - _AD_GetObjectProperties For User 71 - Start 09:23:13.340 - _AD_GetObjectProperties For User 71 - End 09:23:13.340 - _AD_GetObjectProperties For User 72 - Start 09:23:27.481 - _AD_GetObjectProperties For User 72 - End 09:23:27.481 - _AD_GetObjectProperties For User 73 - Start 09:23:39.435 - _AD_GetObjectProperties For User 73 - End 09:23:39.435 - _AD_GetObjectProperties For User 74 - Start 09:23:52.904 - _AD_GetObjectProperties For User 74 - End 09:23:52.904 - _AD_GetObjectProperties For User 75 - Start 09:24:03.936 - _AD_GetObjectProperties For User 75 - End 09:24:03.936 - _AD_GetObjectProperties For User 76 - Start 09:24:14.405 - _AD_GetObjectProperties For User 76 - End 09:24:14.405 - _AD_GetObjectProperties For User 77 - Start 09:24:25.250 - _AD_GetObjectProperties For User 77 - End 09:24:25.250 - _AD_GetObjectProperties For User 78 - Start 09:24:35.969 - _AD_GetObjectProperties For User 78 - End 09:24:35.969 - _AD_GetObjectProperties For User 79 - Start 09:24:47.985 - _AD_GetObjectProperties For User 79 - End 09:24:47.985 - _AD_GetObjectProperties For User 80 - Start 09:25:02.033 - _AD_GetObjectProperties For User 80 - End 09:25:02.033 - _AD_GetObjectProperties For User 81 - Start 09:25:13.767 - _AD_GetObjectProperties For User 81 - End 09:25:13.767 - _AD_GetObjectProperties For User 82 - Start 09:25:27.518 - _AD_GetObjectProperties For User 82 - End 09:25:27.518 - _AD_GetObjectProperties For User 83 - Start 09:25:38.972 - _AD_GetObjectProperties For User 83 - End 09:25:38.972 - _AD_GetObjectProperties For User 84 - Start 09:25:53.473 - _AD_GetObjectProperties For User 84 - End 09:25:53.473 - _AD_GetObjectProperties For User 85 - Start 09:26:08.114 - _AD_GetObjectProperties For User 85 - End 09:26:08.114 - _AD_GetObjectProperties For User 86 - Start 09:26:23.802 - _AD_GetObjectProperties For User 86 - End 09:26:23.802 - _AD_GetObjectProperties For User 87 - Start 09:26:36.037 - _AD_GetObjectProperties For User 87 - End 09:26:36.037 - _AD_GetObjectProperties For User 88 - Start 09:26:52.100 - _AD_GetObjectProperties For User 88 - End 09:26:52.100 - _AD_GetObjectProperties For User 89 - Start 09:27:04.257 - _AD_GetObjectProperties For User 89 - End 09:27:04.257 - _AD_GetObjectProperties For User 90 - Start 09:27:20.680 - _AD_GetObjectProperties For User 90 - End 09:27:20.680 - _AD_GetObjectProperties For User 91 - Start 09:27:36.806 - _AD_GetObjectProperties For User 91 - End 09:27:36.806 - _AD_GetObjectProperties For User 92 - Start 09:27:52.588 - _AD_GetObjectProperties For User 92 - End 09:27:52.588 - _AD_GetObjectProperties For User 93 - Start 09:28:08.432 - _AD_GetObjectProperties For User 93 - End 09:28:08.432 - _AD_GetObjectProperties For User 94 - Start 09:28:25.058 - _AD_GetObjectProperties For User 94 - End 09:28:25.058 - _AD_GetObjectProperties For User 95 - Start 09:28:41.699 - _AD_GetObjectProperties For User 95 - End 09:28:41.699 - _AD_GetObjectProperties For User 96 - Start 09:28:57.716 - _AD_GetObjectProperties For User 96 - End 09:28:57.716 - _AD_GetObjectProperties For User 97 - Start 09:29:15.045 - _AD_GetObjectProperties For User 97 - End 09:29:15.045 - _AD_GetObjectProperties For User 98 - Start 09:29:30.061 - _AD_GetObjectProperties For User 98 - End 09:29:30.061 - _AD_GetObjectProperties For User 99 - Start 09:29:45.812 - _AD_GetObjectProperties For User 99 - End 09:29:45.812 - _AD_GetObjectProperties For User 100 - Start 09:30:01.891 - _AD_GetObjectProperties For User 100 - End 09:30:01.891 - _AD_GetObjectProperties For User 101 - Start 09:30:17.813 - _AD_GetObjectProperties For User 101 - End 09:30:17.813 - _AD_GetObjectProperties For User 102 - Start 09:30:34.252 - _AD_GetObjectProperties For User 102 - End 09:30:34.252 - _AD_GetObjectProperties For User 103 - Start 09:30:50.049 - _AD_GetObjectProperties For User 103 - End 09:30:50.049 - _AD_GetObjectProperties For User 104 - Start 09:31:07.722 - _AD_GetObjectProperties For User 104 - End 09:31:07.722 - _AD_GetObjectProperties For User 105 - Start 09:31:23.676 - _AD_GetObjectProperties For User 105 - End 09:31:23.676 - _AD_GetObjectProperties For User 106 - Start 09:31:38.864 - _AD_GetObjectProperties For User 106 - End 09:31:38.864 - _AD_GetObjectProperties For User 107 - Start 09:31:54.849 - _AD_GetObjectProperties For User 107 - End 09:31:54.849 - _AD_GetObjectProperties For User 108 - Start 09:32:10.866 - _AD_GetObjectProperties For User 108 - End 09:32:10.866 - _AD_GetObjectProperties For User 109 - Start 09:32:26.929 - _AD_GetObjectProperties For User 109 - End 09:32:26.929 - _AD_GetObjectProperties For User 110 - Start 09:32:43.305 - _AD_GetObjectProperties For User 110 - End 09:32:43.305 - _AD_GetObjectProperties For User 111 - Start 09:32:59.056 - _AD_GetObjectProperties For User 111 - End 09:32:59.056 - _AD_GetObjectProperties For User 112 - Start 09:33:15.275 - _AD_GetObjectProperties For User 112 - End 09:33:15.275 - _AD_GetObjectProperties For User 113 - Start 09:33:31.557 - _AD_GetObjectProperties For User 113 - End 09:33:31.557 - _AD_GetObjectProperties For User 114 - Start 09:33:47.667 - _AD_GetObjectProperties For User 114 - End 09:33:47.667 - _AD_GetObjectProperties For User 115 - Start 09:34:03.887 - _AD_GetObjectProperties For User 115 - End The same script times for Windows 7: 09:51:43.737 - _AD_GetGroupMembers - Start 09:51:44.017 - _AD_GetGroupMembers - End 09:51:44.017 - _AD_GetObjectProperties For 115 Users. 09:51:44.017 - _AD_GetObjectProperties For User 1 - Start 09:51:44.259 - _AD_GetObjectProperties For User 1 - End 09:51:44.259 - _AD_GetObjectProperties For User 2 - Start 09:51:44.357 - _AD_GetObjectProperties For User 2 - End 09:51:44.357 - _AD_GetObjectProperties For User 3 - Start 09:51:44.522 - _AD_GetObjectProperties For User 3 - End 09:51:44.522 - _AD_GetObjectProperties For User 4 - Start 09:51:44.690 - _AD_GetObjectProperties For User 4 - End 09:51:44.690 - _AD_GetObjectProperties For User 5 - Start 09:51:44.863 - _AD_GetObjectProperties For User 5 - End 09:51:44.863 - _AD_GetObjectProperties For User 6 - Start 09:51:45.038 - _AD_GetObjectProperties For User 6 - End 09:51:45.038 - _AD_GetObjectProperties For User 7 - Start 09:51:45.264 - _AD_GetObjectProperties For User 7 - End 09:51:45.264 - _AD_GetObjectProperties For User 8 - Start 09:51:45.438 - _AD_GetObjectProperties For User 8 - End 09:51:45.438 - _AD_GetObjectProperties For User 9 - Start 09:51:45.608 - _AD_GetObjectProperties For User 9 - End 09:51:45.609 - _AD_GetObjectProperties For User 10 - Start 09:51:45.783 - _AD_GetObjectProperties For User 10 - End 09:51:45.783 - _AD_GetObjectProperties For User 11 - Start 09:51:45.959 - _AD_GetObjectProperties For User 11 - End 09:51:45.959 - _AD_GetObjectProperties For User 12 - Start 09:51:46.057 - _AD_GetObjectProperties For User 12 - End 09:51:46.057 - _AD_GetObjectProperties For User 13 - Start 09:51:46.238 - _AD_GetObjectProperties For User 13 - End 09:51:46.238 - _AD_GetObjectProperties For User 14 - Start 09:51:46.444 - _AD_GetObjectProperties For User 14 - End 09:51:46.444 - _AD_GetObjectProperties For User 15 - Start 09:51:46.622 - _AD_GetObjectProperties For User 15 - End 09:51:46.622 - _AD_GetObjectProperties For User 16 - Start 09:51:46.768 - _AD_GetObjectProperties For User 16 - End 09:51:46.768 - _AD_GetObjectProperties For User 17 - Start 09:51:46.992 - _AD_GetObjectProperties For User 17 - End 09:51:46.992 - _AD_GetObjectProperties For User 18 - Start 09:51:47.172 - _AD_GetObjectProperties For User 18 - End 09:51:47.172 - _AD_GetObjectProperties For User 19 - Start 09:51:47.351 - _AD_GetObjectProperties For User 19 - End 09:51:47.351 - _AD_GetObjectProperties For User 20 - Start 09:51:47.527 - _AD_GetObjectProperties For User 20 - End 09:51:47.528 - _AD_GetObjectProperties For User 21 - Start 09:51:47.707 - _AD_GetObjectProperties For User 21 - End 09:51:47.707 - _AD_GetObjectProperties For User 22 - Start 09:51:47.886 - _AD_GetObjectProperties For User 22 - End 09:51:47.886 - _AD_GetObjectProperties For User 23 - Start 09:51:48.083 - _AD_GetObjectProperties For User 23 - End 09:51:48.083 - _AD_GetObjectProperties For User 24 - Start 09:51:48.258 - _AD_GetObjectProperties For User 24 - End 09:51:48.258 - _AD_GetObjectProperties For User 25 - Start 09:51:48.435 - _AD_GetObjectProperties For User 25 - End 09:51:48.435 - _AD_GetObjectProperties For User 26 - Start 09:51:48.614 - _AD_GetObjectProperties For User 26 - End 09:51:48.614 - _AD_GetObjectProperties For User 27 - Start 09:51:48.789 - _AD_GetObjectProperties For User 27 - End 09:51:48.789 - _AD_GetObjectProperties For User 28 - Start 09:51:48.973 - _AD_GetObjectProperties For User 28 - End 09:51:48.973 - _AD_GetObjectProperties For User 29 - Start 09:51:49.144 - _AD_GetObjectProperties For User 29 - End 09:51:49.144 - _AD_GetObjectProperties For User 30 - Start 09:51:49.319 - _AD_GetObjectProperties For User 30 - End 09:51:49.319 - _AD_GetObjectProperties For User 31 - Start 09:51:49.492 - _AD_GetObjectProperties For User 31 - End 09:51:49.492 - _AD_GetObjectProperties For User 32 - Start 09:51:49.665 - _AD_GetObjectProperties For User 32 - End 09:51:49.665 - _AD_GetObjectProperties For User 33 - Start 09:51:49.839 - _AD_GetObjectProperties For User 33 - End 09:51:49.839 - _AD_GetObjectProperties For User 34 - Start 09:51:50.007 - _AD_GetObjectProperties For User 34 - End 09:51:50.007 - _AD_GetObjectProperties For User 35 - Start 09:51:50.195 - _AD_GetObjectProperties For User 35 - End 09:51:50.195 - _AD_GetObjectProperties For User 36 - Start 09:51:50.371 - _AD_GetObjectProperties For User 36 - End 09:51:50.371 - _AD_GetObjectProperties For User 37 - Start 09:51:50.548 - _AD_GetObjectProperties For User 37 - End 09:51:50.548 - _AD_GetObjectProperties For User 38 - Start 09:51:50.725 - _AD_GetObjectProperties For User 38 - End 09:51:50.725 - _AD_GetObjectProperties For User 39 - Start 09:51:50.898 - _AD_GetObjectProperties For User 39 - End 09:51:50.898 - _AD_GetObjectProperties For User 40 - Start 09:51:51.073 - _AD_GetObjectProperties For User 40 - End 09:51:51.073 - _AD_GetObjectProperties For User 41 - Start 09:51:51.273 - _AD_GetObjectProperties For User 41 - End 09:51:51.273 - _AD_GetObjectProperties For User 42 - Start 09:51:51.471 - _AD_GetObjectProperties For User 42 - End 09:51:51.471 - _AD_GetObjectProperties For User 43 - Start 09:51:51.678 - _AD_GetObjectProperties For User 43 - End 09:51:51.678 - _AD_GetObjectProperties For User 44 - Start 09:51:51.865 - _AD_GetObjectProperties For User 44 - End 09:51:51.865 - _AD_GetObjectProperties For User 45 - Start 09:51:52.043 - _AD_GetObjectProperties For User 45 - End 09:51:52.043 - _AD_GetObjectProperties For User 46 - Start 09:51:52.256 - _AD_GetObjectProperties For User 46 - End 09:51:52.256 - _AD_GetObjectProperties For User 47 - Start 09:51:52.433 - _AD_GetObjectProperties For User 47 - End 09:51:52.433 - _AD_GetObjectProperties For User 48 - Start 09:51:52.614 - _AD_GetObjectProperties For User 48 - End 09:51:52.614 - _AD_GetObjectProperties For User 49 - Start 09:51:52.816 - _AD_GetObjectProperties For User 49 - End 09:51:52.816 - _AD_GetObjectProperties For User 50 - Start 09:51:52.995 - _AD_GetObjectProperties For User 50 - End 09:51:52.995 - _AD_GetObjectProperties For User 51 - Start 09:51:53.191 - _AD_GetObjectProperties For User 51 - End 09:51:53.191 - _AD_GetObjectProperties For User 52 - Start 09:51:53.382 - _AD_GetObjectProperties For User 52 - End 09:51:53.382 - _AD_GetObjectProperties For User 53 - Start 09:51:53.580 - _AD_GetObjectProperties For User 53 - End 09:51:53.580 - _AD_GetObjectProperties For User 54 - Start 09:51:53.777 - _AD_GetObjectProperties For User 54 - End 09:51:53.777 - _AD_GetObjectProperties For User 55 - Start 09:51:53.954 - _AD_GetObjectProperties For User 55 - End 09:51:53.954 - _AD_GetObjectProperties For User 56 - Start 09:51:54.160 - _AD_GetObjectProperties For User 56 - End 09:51:54.160 - _AD_GetObjectProperties For User 57 - Start 09:51:54.337 - _AD_GetObjectProperties For User 57 - End 09:51:54.338 - _AD_GetObjectProperties For User 58 - Start 09:51:54.531 - _AD_GetObjectProperties For User 58 - End 09:51:54.531 - _AD_GetObjectProperties For User 59 - Start 09:51:54.728 - _AD_GetObjectProperties For User 59 - End 09:51:54.728 - _AD_GetObjectProperties For User 60 - Start 09:51:54.924 - _AD_GetObjectProperties For User 60 - End 09:51:54.924 - _AD_GetObjectProperties For User 61 - Start 09:51:55.124 - _AD_GetObjectProperties For User 61 - End 09:51:55.124 - _AD_GetObjectProperties For User 62 - Start 09:51:55.321 - _AD_GetObjectProperties For User 62 - End 09:51:55.321 - _AD_GetObjectProperties For User 63 - Start 09:51:55.522 - _AD_GetObjectProperties For User 63 - End 09:51:55.522 - _AD_GetObjectProperties For User 64 - Start 09:51:55.714 - _AD_GetObjectProperties For User 64 - End 09:51:55.714 - _AD_GetObjectProperties For User 65 - Start 09:51:55.916 - _AD_GetObjectProperties For User 65 - End 09:51:55.916 - _AD_GetObjectProperties For User 66 - Start 09:51:56.120 - _AD_GetObjectProperties For User 66 - End 09:51:56.120 - _AD_GetObjectProperties For User 67 - Start 09:51:56.320 - _AD_GetObjectProperties For User 67 - End 09:51:56.320 - _AD_GetObjectProperties For User 68 - Start 09:51:56.518 - _AD_GetObjectProperties For User 68 - End 09:51:56.518 - _AD_GetObjectProperties For User 69 - Start 09:51:56.715 - _AD_GetObjectProperties For User 69 - End 09:51:56.715 - _AD_GetObjectProperties For User 70 - Start 09:51:56.913 - _AD_GetObjectProperties For User 70 - End 09:51:56.913 - _AD_GetObjectProperties For User 71 - Start 09:51:57.113 - _AD_GetObjectProperties For User 71 - End 09:51:57.113 - _AD_GetObjectProperties For User 72 - Start 09:51:57.313 - _AD_GetObjectProperties For User 72 - End 09:51:57.313 - _AD_GetObjectProperties For User 73 - Start 09:51:57.508 - _AD_GetObjectProperties For User 73 - End 09:51:57.508 - _AD_GetObjectProperties For User 74 - Start 09:51:57.711 - _AD_GetObjectProperties For User 74 - End 09:51:57.711 - _AD_GetObjectProperties For User 75 - Start 09:51:57.917 - _AD_GetObjectProperties For User 75 - End 09:51:57.917 - _AD_GetObjectProperties For User 76 - Start 09:51:58.133 - _AD_GetObjectProperties For User 76 - End 09:51:58.133 - _AD_GetObjectProperties For User 77 - Start 09:51:58.340 - _AD_GetObjectProperties For User 77 - End 09:51:58.340 - _AD_GetObjectProperties For User 78 - Start 09:51:58.542 - _AD_GetObjectProperties For User 78 - End 09:51:58.542 - _AD_GetObjectProperties For User 79 - Start 09:51:58.750 - _AD_GetObjectProperties For User 79 - End 09:51:58.750 - _AD_GetObjectProperties For User 80 - Start 09:51:58.970 - _AD_GetObjectProperties For User 80 - End 09:51:58.970 - _AD_GetObjectProperties For User 81 - Start 09:51:59.182 - _AD_GetObjectProperties For User 81 - End 09:51:59.182 - _AD_GetObjectProperties For User 82 - Start 09:51:59.383 - _AD_GetObjectProperties For User 82 - End 09:51:59.383 - _AD_GetObjectProperties For User 83 - Start 09:51:59.583 - _AD_GetObjectProperties For User 83 - End 09:51:59.583 - _AD_GetObjectProperties For User 84 - Start 09:51:59.789 - _AD_GetObjectProperties For User 84 - End 09:51:59.789 - _AD_GetObjectProperties For User 85 - Start 09:51:59.985 - _AD_GetObjectProperties For User 85 - End 09:51:59.985 - _AD_GetObjectProperties For User 86 - Start 09:52:00.194 - _AD_GetObjectProperties For User 86 - End 09:52:00.194 - _AD_GetObjectProperties For User 87 - Start 09:52:00.390 - _AD_GetObjectProperties For User 87 - End 09:52:00.390 - _AD_GetObjectProperties For User 88 - Start 09:52:00.595 - _AD_GetObjectProperties For User 88 - End 09:52:00.595 - _AD_GetObjectProperties For User 89 - Start 09:52:00.785 - _AD_GetObjectProperties For User 89 - End 09:52:00.785 - _AD_GetObjectProperties For User 90 - Start 09:52:00.976 - _AD_GetObjectProperties For User 90 - End 09:52:00.976 - _AD_GetObjectProperties For User 91 - Start 09:52:01.167 - _AD_GetObjectProperties For User 91 - End 09:52:01.167 - _AD_GetObjectProperties For User 92 - Start 09:52:01.359 - _AD_GetObjectProperties For User 92 - End 09:52:01.359 - _AD_GetObjectProperties For User 93 - Start 09:52:01.559 - _AD_GetObjectProperties For User 93 - End 09:52:01.559 - _AD_GetObjectProperties For User 94 - Start 09:52:01.759 - _AD_GetObjectProperties For User 94 - End 09:52:01.759 - _AD_GetObjectProperties For User 95 - Start 09:52:01.957 - _AD_GetObjectProperties For User 95 - End 09:52:01.957 - _AD_GetObjectProperties For User 96 - Start 09:52:02.158 - _AD_GetObjectProperties For User 96 - End 09:52:02.158 - _AD_GetObjectProperties For User 97 - Start 09:52:02.354 - _AD_GetObjectProperties For User 97 - End 09:52:02.354 - _AD_GetObjectProperties For User 98 - Start 09:52:02.561 - _AD_GetObjectProperties For User 98 - End 09:52:02.561 - _AD_GetObjectProperties For User 99 - Start 09:52:02.753 - _AD_GetObjectProperties For User 99 - End 09:52:02.753 - _AD_GetObjectProperties For User 100 - Start 09:52:02.959 - _AD_GetObjectProperties For User 100 - End 09:52:02.959 - _AD_GetObjectProperties For User 101 - Start 09:52:03.153 - _AD_GetObjectProperties For User 101 - End 09:52:03.153 - _AD_GetObjectProperties For User 102 - Start 09:52:03.362 - _AD_GetObjectProperties For User 102 - End 09:52:03.362 - _AD_GetObjectProperties For User 103 - Start 09:52:03.560 - _AD_GetObjectProperties For User 103 - End 09:52:03.560 - _AD_GetObjectProperties For User 104 - Start 09:52:03.770 - _AD_GetObjectProperties For User 104 - End 09:52:03.770 - _AD_GetObjectProperties For User 105 - Start 09:52:03.968 - _AD_GetObjectProperties For User 105 - End 09:52:03.968 - _AD_GetObjectProperties For User 106 - Start 09:52:04.193 - _AD_GetObjectProperties For User 106 - End 09:52:04.193 - _AD_GetObjectProperties For User 107 - Start 09:52:04.405 - _AD_GetObjectProperties For User 107 - End 09:52:04.405 - _AD_GetObjectProperties For User 108 - Start 09:52:04.620 - _AD_GetObjectProperties For User 108 - End 09:52:04.620 - _AD_GetObjectProperties For User 109 - Start 09:52:04.850 - _AD_GetObjectProperties For User 109 - End 09:52:04.850 - _AD_GetObjectProperties For User 110 - Start 09:52:05.060 - _AD_GetObjectProperties For User 110 - End 09:52:05.060 - _AD_GetObjectProperties For User 111 - Start 09:52:05.268 - _AD_GetObjectProperties For User 111 - End 09:52:05.268 - _AD_GetObjectProperties For User 112 - Start 09:52:05.472 - _AD_GetObjectProperties For User 112 - End 09:52:05.472 - _AD_GetObjectProperties For User 113 - Start 09:52:05.695 - _AD_GetObjectProperties For User 113 - End 09:52:05.695 - _AD_GetObjectProperties For User 114 - Start 09:52:05.892 - _AD_GetObjectProperties For User 114 - End 09:52:05.892 - _AD_GetObjectProperties For User 115 - Start 09:52:06.091 - _AD_GetObjectProperties For User 115 - End Just for reference.
  17. I thought that when I connected and then performed other actions that the connection would possibly time out.
  18. I use this UDF frequently, so firstly thank you!!! Second, on Windows 8/8.1, I seem to be having some slowness connecting to AD. My script gets the members of an AD group then loops through the members to get account properties such as First Name, Last Name, E-Mail, and SAM Account Name. On Windows 7 and XP the code runs in less than 20 Seconds, on WIndows 8/8.1 it is longer, more than 30 minutes for the exact same code. I am including the relevant code, please let me know if it is an issue with Windows, the UDF, or my code? I am ok with any answer, I just need to know how to correct it. #Region ; Check If Current User Is A Member of The AD Group: Information Services LS_SplashScreen("Update", "Retrieving Information Services Group From AD...") Global $Current_UserName = @UserName Global $Current_FullName = @UserName Global $Current_UserName_IsIS = 0 Global $UserName_DropDown_Content = "" _AD_Open($LS_AD_User & "@" & $LS_AD_Domain, $LS_AD_Password, $LS_AD_DNSDomain, $LS_AD_HostServer, $LS_AD_Configuration) $Information_Services = _AD_GetGroupMembers("CN=IT Personnel,OU=Security Groups,DC=Domain,DC=com") _AD_Close() If IsArray($Information_Services) Then _ArrayDisplay($Information_Services) Dim $ISTech_List[$Information_Services[0]+1][5] _AD_Open($LS_AD_User & "@" & $LS_AD_Domain, $LS_AD_Password, $LS_AD_DNSDomain, $LS_AD_HostServer, $LS_AD_Configuration) For $a = 1 To $Information_Services[0] $Temp_Information_Services = _AD_GetObjectProperties($Information_Services[$a], "GivenName, Mail, sAMAccountName, SN") If IsArray($Temp_Information_Services) Then _ArrayDisplay($Temp_Information_Services) If $Temp_Information_Services[0][0] = 4 Then $ISTech_List[$a][0] = $Temp_Information_Services[3][1] $ISTech_List[$a][1] = $Temp_Information_Services[4][1] $ISTech_List[$a][2] = $Temp_Information_Services[1][1] $ISTech_List[$a][3] = $Temp_Information_Services[4][1] & ", " & $Temp_Information_Services[1][1] $ISTech_List[$a][4] = $Temp_Information_Services[2][1] EndIf EndIf Next _AD_Close() $ISTech_List[0][0] = UBound($ISTech_List) - 1 _ArraySort($ISTech_List, 0, 1, 0, 2) _ArraySort($ISTech_List, 0, 1, 0, 1) For $u = 1 To $ISTech_List[0][0] If @UserName = $ISTech_List[$u][0] Then $Current_UserName = StringUpper($ISTech_List[$u][0]) $Current_FullName = $ISTech_List[$u][3] $Current_UserName_IsIS = 1 $UserName_DropDown_Content &= StringUpper($ISTech_List[$u][0]) & "|" Else $UserName_DropDown_Content &= StringUpper($ISTech_List[$u][0]) & "|" EndIf Next $UserName_DropDown_Content = StringTrimRight($UserName_DropDown_Content, 1) EndIf If ($Current_UserName_IsIS = 0 And (@UserName = "Administrator" Or @UserName = "Alternate")) Then Do UserNameSettings() Until $Current_UserName <> @UserName ElseIf $Current_UserName_IsIS = 1 Then ;Do Nothing Else MsgBox(16, $Script_Name & " Error", "You must be a member of the Domain\IT Personnel group to utilize this script. If you need assistance or feel you have received this message in error, please contact Joshua Barnette @ ext. 12345.") Exit EndIf #EndRegion
  19. When looking more in depth into the issue. The error is BCDEDIT cannot be found. If I run a CMD from the script, it cannot see BCDEDIT in the C:\Windows\System32\ folder, whereas if I just run a CMD from Start>Run I can see it in the C:\Windows\System32\ folder. I did find that in both CMD windows I could find the executable at: @WindowsDir & 'winsxsamd64_microsoft-windows-b..iondata-cmdlinetool_31bf3856ad364e35_6.1.7601.17514_none_e6510234bbcb2a8c, so I pointed the script to that location: RunWait(@ComSpec & ' /c ' & @WindowsDir & '\winsxs\amd64_microsoft-windows-b..iondata-cmdlinetool_31bf3856ad364e35_6.1.7601.17514_none_e6510234bbcb2a8c\bcdedit /set {default} recoveryenabled No', @HomeDrive, @SW_HIDE) RunWait(@ComSpec & ' /c ' & @WindowsDir & '\winsxs\amd64_microsoft-windows-b..iondata-cmdlinetool_31bf3856ad364e35_6.1.7601.17514_none_e6510234bbcb2a8c\bcdedit /set {default} bootstatuspolicy ignoreallfailures', @HomeDrive, @SW_HIDE) This seems to have fixed the issue, although I am unsure why the file cannot be seen. The answer to this question may be helpful to me and others in the future. Thanks for your assistance.
  20. I have been using AutoIT for several years now, although mostly with Windows XP. As my company is undertaking a massive Windows 7 conversion, I find that some of the features of AutoIT do not seem to work as I would think they should, which brings about my question today... I use the AutoIt3Wrapper with my compiled scripts and everything works well generally; however, I have a need to include two commands in an AutoIT script that have to be RunAsAdmin. I have the AutoITWrapper set as "#AutoIt3Wrapper_Res_requestedExecutionLevel=requireAdministrator" and I am prompted for UAC elevation. The commands; however, do not seem to be elevating. RunWait(@ComSpec & ' /c bcdedit /set {default} recoveryenabled No', @HomeDrive, @SW_HIDE) RunWait(@ComSpec & ' /c bcdedit /set {default} bootstatuspolicy ignoreallfailures', @HomeDrive, @SW_HIDE) If I post the commands into an elevated command prompt they work correctly, but via the script they seem to be ignored. I appreciate any ideas and/or assistance. Thanks In Advance!!!
  21. As a side note, I use your "RecFileListToArray" on a near daily basis, it is a fabulous bit of code.
  22. I apologize if you think I was advertising, I was not intending to, only to show the functionality I was looking for.
  23. John, I appreciate the quick response I have seen that posting when searching for a solution before I posted the question. That seems to deal with UAC and those permissions versus actually passing an elevated token, which would give the process admin rights even if the logged on account doesn't have them. Something that may help is to take a look at ViewFinity Privilege Management or BeyondTrust PowerBroker Desktops. Thanks Again.
  24. I need to elevate certain applications, when launched, to run with an elevated (administrator level) security token. The token swap can happen on the fly or as an application wrapper. I have looked at several applications and find them ok, one even stands out above the rest, however my company is in extreme cost savings and are unable/unwilling to spend the money. I have seen Functions such as _Security__CreateProcessWithToken and _Security__AdjustTokenPrivileges, but I am still relatively new to AutoIT and am not sure how to utilize some of the advanced features. I appreciate any help. Thanks, Joshua Barnette
  25. You all make my life easier on a daily basis.
×
×
  • Create New...