Advertisement
AZJIO

Функции Compare_strings

May 8th, 2013
458
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
AutoIt 22.90 KB | None | 0 0
  1.  
  2.  
  3.  
  4.  
  5. ; Извлекает строки, которые содержатся в обоих файлах. Результат содержит строки в одном экземпляре. При сравнении регистр букв не учитывается.
  6. ; http://www.autoitscript.com/forum/topic/141761-autoit-masters-need-assistance-comparing-and-deleting/#entry997445
  7.  
  8. ; #FUNCTION# ;=================================================================================
  9. ; Function Name ...: _Alike_Lines
  10. ; Description ........: Duplicate strings in 2-x files
  11. ; Syntax................: _Alike_Lines ( $sText1, $sText2 [, $sep = @CRLF [, $sep2 = ''[, $all = 1]]] )
  12. ; Parameters:
  13. ;       $sText1 - Multistring text
  14. ;       $sText2 - Multistring text
  15. ;       $sep - Delimiter of elements at a search
  16. ;       $sep2 - Delimiter of elements is in results
  17. ;       $all - Changes how the string split (See StringSplit)
  18. ;                  |0 - each character in $sep it is a delimiter
  19. ;                  |1 - entire delimiter string in $sep it is a delimiter
  20. ; Return values ....: Success - Returns string
  21. ;                   Failure - '', @error:
  22. ;                  |0 - no error
  23. ;                  |1 - It was not succeeded to do the substitution of character "["
  24. ;                  |2 - Not found
  25. ; Author(s) ..........: AZJIO
  26. ; Remarks ..........: not case sensitive, String = StRiNg = STRING
  27. ; ============================================================================================
  28. ; Имя функции ...: _Alike_Lines
  29. ; Описание ........: Возвращает одинаковые строки в 2-х файлах
  30. ; Синтаксис.......: _Alike_Lines ( $sText1, $sText2 [, $sep = @CRLF [, $sep2 = ''[, $all = 1]]] )
  31. ; Параметры:
  32. ;       $sText1 - Многостроковый текст
  33. ;       $sText2 - Многостроковый текст
  34. ;       $sep - Разделитель элементов при поиске
  35. ;       $sep2 - Разделитель элементов в возвращаемых данных
  36. ;       $all - Определяет как воспринимать разделитель
  37. ;                  |0 - каждый символ параметра $sep является разделителем
  38. ;                  |1 - вся строка параметра $sep является разделителем
  39. ; Возвращаемое значение: Успешно - Возвращает строку
  40. ;                   Неудачно -'', @error:
  41. ;                  |0 - нет ошибок
  42. ;                  |1 - Не удалось сделать подстановку символа "["
  43. ;                  |2 - Не найдено
  44. ; Автор ..........: AZJIO
  45. ; Примечания ..: не учитывает регистр String = StRiNg = STRING
  46. ; ============================================================================================
  47. Func _Alike_Lines($sText1, $sText2, $sep = @CRLF, $sep2 = '', $all = 1)
  48.     Local $i, $k, $aText, $s, $Trg = 0
  49.  
  50.     If $all And $sep2 == '' Then $sep2 = $sep
  51.     If StringInStr($sText1 & $sText2, '[') And $sep <> '[' Then ; если сбойный символ есть до заменяем его
  52.         For $i = 0 To 255
  53.             $s = Chr($i)
  54.             If Not StringInStr($sText1 & $sText2, $s) Then
  55.                 If StringInStr($sep, $s) Then ContinueLoop
  56.                 $sText1 = StringReplace($sText1, '[', $s)
  57.                 $sText2 = StringReplace($sText2, '[', $s)
  58.                 $Trg = 1
  59.                 ExitLoop
  60.             EndIf
  61.         Next
  62.         If Not $Trg Then Return SetError(1, 0, '')
  63.     EndIf
  64.  
  65.     $aText = StringSplit($sText1, $sep, $all) ; Создаём переменные первого файла
  66.     For $i = 1 To $aText[0]
  67.         Assign($aText[$i] & '/', -2, 1)
  68.     Next
  69.     Assign('/', 2, 1)
  70.  
  71.     $aText = StringSplit($sText2, $sep, $all)
  72.  
  73.     $k = 0
  74.     $sText1 = ''
  75.     For $i = 1 To $aText[0]
  76.         Assign($aText[$i] & '/', Eval($aText[$i] & '/') + 1, 1) ; создаём локальные переменные или увеличиваем значение для уже созданных
  77.         If Eval($aText[$i] & '/') = -1 Then
  78.             $sText1 &= $aText[$i] & $sep2
  79.             $k += 1
  80.         EndIf
  81.     Next
  82.     If $k = 0 Then Return SetError(2, 0, '')
  83.     If $Trg Then $sText1 = StringReplace($sText1, $s, '[')
  84.     Return SetError(0, $k, StringTrimRight($sText1, StringLen($sep2)))
  85. EndFunc   ;==>_Alike_Lines
  86.  
  87. ; Извлекает уникальные строки из второго файла, которых нет в первом файле. Причём строки будут в единственном экземпляре, даже если они повторялись во втором файле.
  88.  
  89. ; данный способ Assign имеет проблему со спец-символом "[", поэтому в функцию добавлен участок кода, временно заменяющий этот символ на любой другой из 256 символов, который отсутствует в текстах, а в результирующем тексте символ будет востановлен. Остальные спец-символы !@#$%^&*()-+<>?/\|{}] не имеют проблем.
  90.  
  91. ; http://www.autoitscript.com/forum/topic/141761-autoit-masters-need-assistance-comparing-and-deleting/#entry997445
  92. ; http://autoit-script.ru/index.php/topic,4861.msg35292.html#msg35292
  93. ; http://autoit-script.ru/index.php?topic=2930.msg21226#msg21226
  94. ; http://autoit-script.ru/index.php?topic=4861.new#new
  95.  
  96. ; #FUNCTION# ;=================================================================================
  97. ; Function Name ...: _Unique_Lines_Text2
  98. ; Description ........: Returns unique 2-file strings which are not present in the first
  99. ; Syntax................: _Unique_Lines_Text2 ( $sText1, $sText2 [, $sep = @CRLF [, $sep2 = ''[, $all = 1]]] )
  100. ; Parameters:
  101. ;       $sText1 - Multistring text
  102. ;       $sText2 - Multistring text
  103. ;       $sep - Delimiter of elements at a search
  104. ;       $sep2 - Delimiter of elements is in results
  105. ;       $all - Changes how the string split (See StringSplit)
  106. ;                  |0 - each character in $sep it is a delimiter
  107. ;                  |1 - entire delimiter string in $sep it is a delimiter
  108. ; Return values ....: Success - Returns string
  109. ;                   Failure - '', @error:
  110. ;                  |0 - no error
  111. ;                  |1 - It was not succeeded to do the substitution of character "["
  112. ;                  |2 - Not found
  113. ; Author(s) ..........: AZJIO
  114. ; Remarks ..........: not case sensitive, String = StRiNg = STRING
  115. ; ============================================================================================
  116. ; Имя функции ...: _Unique_Lines_Text2
  117. ; Описание ........: Возвращает уникальные строки 2-го файла, которых нет в первом
  118. ; Синтаксис.......: _Unique_Lines_Text2 ( $sText1, $sText2 [, $sep = @CRLF [, $sep2 = ''[, $all = 1]]] )
  119. ; Параметры:
  120. ;       $sText1 - Многостроковый текст
  121. ;       $sText2 - Многостроковый текст
  122. ;       $sep - Разделитель элементов при поиске
  123. ;       $sep2 - Разделитель элементов в возвращаемых данных
  124. ;       $all - Определяет как воспринимать разделитель
  125. ;                  |0 - каждый символ параметра $sep является разделителем
  126. ;                  |1 - вся строка параметра $sep является разделителем
  127. ; Возвращаемое значение: Успешно - Возвращает строку
  128. ;                   Неудачно -'', @error:
  129. ;                  |0 - нет ошибок
  130. ;                  |1 - Не удалось сделать подстановку символа "["
  131. ;                  |2 - Не найдено
  132. ; Автор ..........: AZJIO
  133. ; Примечания ..: не учитывает регистр String = StRiNg = STRING
  134. ; ============================================================================================
  135. Func _Unique_Lines_Text2($sText1, $sText2, $sep = @CRLF, $sep2 = '', $all = 1)
  136.     Local $i, $k, $aText, $s, $Trg = 0
  137.  
  138.     If $all And $sep2 == '' Then $sep2 = $sep
  139.     If StringInStr($sText1 & $sText2, '[') And $sep <> '[' Then ; если сбойный символ есть до заменяем его
  140.         For $i = 0 To 255
  141.             $s = Chr($i)
  142.             If Not StringInStr($sText1 & $sText2, $s) Then
  143.                 If StringInStr($sep, $s) Then ContinueLoop
  144.                 $sText1 = StringReplace($sText1, '[', $s)
  145.                 $sText2 = StringReplace($sText2, '[', $s)
  146.                 $Trg = 1
  147.                 ExitLoop
  148.             EndIf
  149.         Next
  150.         If Not $Trg Then Return SetError(1, 0, '')
  151.     EndIf
  152.  
  153.     $aText = StringSplit($sText1, $sep, $all) ; Создаём переменные первого файла
  154.     For $i = 1 To $aText[0]
  155.         Assign($aText[$i] & '/', 2, 1)
  156.     Next
  157.     Assign('/', 2, 1)
  158.  
  159.     $aText = StringSplit($sText2, $sep, $all)
  160.  
  161.     $k = 0
  162.     $sText1 = ''
  163.     For $i = 1 To $aText[0]
  164.         Assign($aText[$i] & '/', Eval($aText[$i] & '/') + 1, 1) ; создаём локальные переменные или увеличиваем значение для уже созданных
  165.         If Eval($aText[$i] & '/') = 1 Then
  166.             $sText1 &= $aText[$i] & $sep2
  167.             $k += 1
  168.         EndIf
  169.     Next
  170.     If $k = 0 Then Return SetError(2, 0, '')
  171.     If $Trg Then $sText1 = StringReplace($sText1, $s, '[')
  172.     Return SetError(0, $k, StringTrimRight($sText1, StringLen($sep2)))
  173. EndFunc   ;==>_Unique_Lines_Text2
  174.  
  175.  
  176.  
  177.  
  178.  
  179. ; #FUNCTION# ;=================================================================================
  180. ; Function Name ...: _StringUnique
  181. ; Description ........: Returns unique strings of the one file, removes duplicates
  182. ; Syntax................: _StringUnique ( $sText [, $sep = @CRLF [, $sep2 = ''[, $all = 1]]] )
  183. ; Parameters:
  184. ;       $sText - Multistring text
  185. ;       $sep - Delimiter of elements at a search
  186. ;       $sep2 - Delimiter of elements is in results
  187. ;       $all - Changes how the string split (See StringSplit)
  188. ;                  |0 - each character in $sep it is a delimiter
  189. ;                  |1 - entire delimiter string in $sep it is a delimiter
  190. ; Return values ....: Success - Returns string
  191. ;                   Failure - '', @error:
  192. ;                  |0 - no error
  193. ;                  |1 - It was not succeeded to do the substitution of character "["
  194. ;                  |2 - Not found
  195. ; Author(s) ..........: AZJIO
  196. ; Remarks ..........: not case sensitive, String = StRiNg = STRING
  197. ; ============================================================================================
  198. ; Имя функции ...: _StringUnique
  199. ; Описание ........: Возвращает уникальные строки одного файла, удаляет повторы
  200. ; Синтаксис.......: _StringUnique ( $sText [, $sep = @CRLF [, $sep2 = ''[, $all = 1]]] )
  201. ; Параметры:
  202. ;       $sText - Многостроковый текст
  203. ;       $sep - Разделитель элементов при поиске
  204. ;       $sep2 - Разделитель элементов в возвращаемых данных
  205. ;       $all - Определяет как воспринимать разделитель
  206. ;                  |0 - каждый символ параметра $sep является разделителем
  207. ;                  |1 - вся строка параметра $sep является разделителем
  208. ; Возвращаемое значение: Успешно - Возвращает строку
  209. ;                   Неудачно -'', @error:
  210. ;                  |0 - нет ошибок
  211. ;                  |1 - Не удалось сделать подстановку символа "["
  212. ;                  |2 - Не найдено
  213. ; Автор ..........: AZJIO
  214. ; Примечания ..: не учитывает регистр String = StRiNg = STRING
  215. ; ============================================================================================
  216. Func _StringUnique($sText, $sep = @CRLF, $sep2 = '', $all = 1)
  217.     Local $i, $k, $aText, $s, $Trg = 0
  218.     If $all And $sep2 == '' Then $sep2 = $sep
  219.     If StringInStr($sText, '[') And $sep <> '[' Then
  220.         For $i = 0 To 255
  221.             $s = Chr($i)
  222.             If Not StringInStr($sText, $s) Then
  223.                 If StringInStr($sep, $s) Then ContinueLoop
  224.                 $sText = StringReplace($sText, '[', $s)
  225.                 $Trg = 1
  226.                 ExitLoop
  227.             EndIf
  228.         Next
  229.         If Not $Trg Then Return SetError(1, 0, '')
  230.     EndIf
  231.  
  232.     $aText = StringSplit($sText, $sep, $all)
  233.     Assign('/', 2, 1)
  234.     $k = 0
  235.     $sText = ''
  236.     For $i = 1 To $aText[0]
  237.         If Not IsDeclared($aText[$i] & '/') Then
  238.             Assign($aText[$i] & '/', 0, 1)
  239.             $sText &= $aText[$i] & $sep2
  240.             $k += 1
  241.         EndIf
  242.     Next
  243.     If $k = 0 Then Return SetError(2, 0, '')
  244.     If $Trg Then $sText = StringReplace($sText, $s, '[')
  245.     Return SetError(0, $k, StringTrimRight($sText, StringLen($sep2)))
  246. EndFunc   ;==>_StringUnique
  247.  
  248.  
  249.  
  250.  
  251.  
  252. ; #FUNCTION# ;=================================================================================
  253. ; Function Name ...: _CountingStringUnique
  254. ; Description ........: Returns unique strings of the one file, counting up the amount of reiterations of these strings
  255. ; Syntax................: _CountingStringUnique ( $sText [, $sep = @CRLF [, $sep2 = ''[, $all = 1]]] )
  256. ; Parameters:
  257. ;       $sText - Multistring text
  258. ;       $sep - Delimiter of elements at a search
  259. ;       $sep2 - Delimiter of elements is in results
  260. ;       $all - Changes how the string split (See StringSplit)
  261. ;                  |0 - each character in $sep it is a delimiter
  262. ;                  |1 - entire delimiter string in $sep it is a delimiter
  263. ; Return values ....: Success - Returns string
  264. ;                   Failure - '', @error:
  265. ;                  |0 - no error
  266. ;                  |1 - It was not succeeded to do the substitution of character "["
  267. ;                  |2 - Not found
  268. ; Author(s) ..........: AZJIO
  269. ; Remarks ..........: not case sensitive, String = StRiNg = STRING
  270. ; ============================================================================================
  271. ; Имя функции ...: _CountingStringUnique
  272. ; Описание ........: Возвращает уникальные строки одного файла, подсчитывая количество повторений этих строк
  273. ; Синтаксис.......: _CountingStringUnique ( $sText [, $sep = @CRLF [, $sep2 = ''[, $all = 1]]] )
  274. ; Параметры:
  275. ;       $sText - Многостроковый текст
  276. ;       $sep - Разделитель элементов при поиске
  277. ;       $sep2 - Разделитель элементов в возвращаемых данных
  278. ;       $all - Определяет как воспринимать разделитель
  279. ;                  |0 - каждый символ параметра $sep является разделителем
  280. ;                  |1 - вся строка параметра $sep является разделителем
  281. ; Возвращаемое значение: Успешно - Возвращает строку
  282. ;                   Неудачно -'', @error:
  283. ;                  |0 - нет ошибок
  284. ;                  |1 - Не удалось сделать подстановку символа "["
  285. ;                  |2 - Не найдено
  286. ; Автор ..........: AZJIO
  287. ; Примечания ..: не учитывает регистр String = StRiNg = STRING
  288. ; ============================================================================================
  289. Func _CountingStringUnique($sText, $sep = @CRLF, $sep2 = '', $all = 1)
  290.     Local $i, $k, $aText, $s, $Trg = 0
  291.     If $all And $sep2 == '' Then $sep2 = $sep
  292.     If StringInStr($sText, '[') And $sep <> '[' Then
  293.         For $i = 0 To 255
  294.             $s = Chr($i)
  295.             If Not StringInStr($sText, $s) Then
  296.                 If StringInStr($sep, $s) Then ContinueLoop
  297.                 $sText = StringReplace($sText, '[', $s)
  298.                 $Trg = 1
  299.                 ExitLoop
  300.             EndIf
  301.         Next
  302.         If Not $Trg Then Return SetError(1, 0, '')
  303.     EndIf
  304.  
  305.     $aText = StringSplit($sText, $sep, $all)
  306.     Assign('/', 2, 1)
  307.     $k = 0
  308.     $sText = ''
  309.     For $i = 1 To $aText[0]
  310.         Assign($aText[$i] & '/', Eval($aText[$i] & '/') + 1, 1)
  311.         If Eval($aText[$i] & '/') = 1 Then
  312.             $k += 1
  313.             $aText[$k] = $aText[$i]
  314.         EndIf
  315.     Next
  316.     For $i = 1 To $k
  317.         $sText &= Eval($aText[$i] & '/') & @Tab & $aText[$i] & $sep2
  318.     Next
  319.     If $k = 0 Then Return SetError(2, 0, '')
  320.     If $Trg Then $sText = StringReplace($sText, $s, '[')
  321.     Return SetError(0, $k, StringTrimRight($sText, StringLen($sep2)))
  322. EndFunc   ;==>_CountingStringUnique
  323.  
  324. ; функция создаёт диалог с чекбоксом и возможностью отложить вопрос до следующего старта программы или до следующего события в текущей сессии работы с программой. Естественно, чтобы отложить вопрос до следующего старта, потребуется сохранить состояние @extended в ini-файл.
  325. ; Функция позволяет установить тексты всех элементов окна, размеры окна, чтобы вместить текст вопроса и умолчальное состояние чекбокса.
  326. ; Параметры:
  327. ;               $sTitle - Заголовок окна
  328. ;               $sText - Текст окна
  329. ;               $iSizeX - Ширина окна, по умолчанию 270
  330. ;               $iSizeY - Высота окна, по умолчанию 170
  331. ;               $iCheckbox - Состояние чекбокса, по умолчанию 0 - нет галочки
  332. ;               $LngCheck - текст чекбокса, по умолчанию 'Больше не спрашивать'
  333. ;               $LngYes - текст кнопки "Да", по умолчанию "Да"
  334. ;               $LngNo - текст кнопки, "Нет", по умолчанию "Нет"
  335. ;               $hWnd - дескриптор родительского окна
  336. ; Возвращает:
  337. ;               0 - Нет, Отмена или закрытие окна
  338. ;               1 - Да, ОК
  339. ; в случае, если потребуется отличать закрытие окна от кнопки "Нет" используйте проверку @error
  340. Func _MsgAsk($sTitle, $sText, $iSizeX = 270, $iSizeY = 170, $iCheckbox = 0, $LngCheck = 'Not to ask any more', $LngYes = 'Yes', $LngNo = 'No', $hWnd = 0)
  341.     Local $hGUIChild, $iYes, $iNo, $iCheck, $iMode, $iAnswer = 0, $iError = 0, $iTrWnd = 0
  342.     If $iSizeX < 170 Then $iSizeX = 170
  343.     $iMode = Opt('GUIOnEventMode', 0)
  344.     If IsHWnd($hWnd) Then
  345.         GUISetState(@SW_DISABLE, $hWnd)
  346.         $iTrWnd = 1
  347.     Else
  348.         $hWnd = 0
  349.     EndIf
  350.    
  351.     $hGUIChild = GUICreate($sTitle, $iSizeX, $iSizeY, -1, -1, BitOR($WS_CAPTION, $WS_SYSMENU, $WS_POPUP), -1, $hWnd)
  352.     GUICtrlCreateLabel($sText, 10, 10, $iSizeX - 20, $iSizeY - 75)
  353.    
  354.     $iCheck = GUICtrlCreateCheckbox($LngCheck, 10, $iSizeY - 65, $iSizeX - 20, 17)
  355.     If $iCheckbox Then GUICtrlSetState(-1, 1)
  356.    
  357.     $iYes = GUICtrlCreateButton($LngYes, ($iSizeX - 150) / 2, $iSizeY - 40, 70, 28)
  358.     $iNo = GUICtrlCreateButton($LngNo, ($iSizeX - 150) / 2 + 80, $iSizeY - 40, 70, 28)
  359.     GUISetState(@SW_SHOW, $hGUIChild)
  360.     While 1
  361.         Switch GUIGetMsg()
  362.             Case $iYes
  363.                 $iAnswer = 1
  364.                 ExitLoop
  365.             Case $iNo
  366.                 ExitLoop
  367.             Case $GUI_EVENT_CLOSE
  368.                 $iError = 1
  369.                 ExitLoop
  370.         EndSwitch
  371.     WEnd
  372.     If GUICtrlRead($iCheck) = 1 Then
  373.         $iCheckbox = 1
  374.     Else
  375.         $iCheckbox = 0
  376.     EndIf
  377.     If $iTrWnd Then GUISetState(@SW_ENABLE, $hWnd)
  378.     GUIDelete($hGUIChild)
  379.     Opt('GUIOnEventMode', $iMode)
  380.     Return SetError($iError, $iCheckbox, $iAnswer)
  381. EndFunc   ;==>_MsgAsk
  382.  
  383. Func _TypeGetPath($type)
  384.     Local $aPath = ''
  385.     Local $typefile = RegRead('HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.' & $type, 'Progid')
  386.     If @error Or $typefile = '' Then
  387.         $typefile = RegRead('HKCR\.' & $type, '')
  388.         If @error Then
  389.             $aPath = RegRead('HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.' & $type & '\OpenWithList', 'a')
  390.             If @error Or $aPath = '' Then Return SetError(1)
  391.         EndIf
  392.     EndIf
  393.     If $aPath = '' Then
  394.         Local $Open = RegRead('HKCR\' & $typefile & '\shell', '')
  395.         If @error Or $Open = '' Then $Open = 'open'
  396.         $typefile = RegRead('HKCR\' & $typefile & '\shell\' & $Open & '\command', '')
  397.         If @error Then
  398.             $aPath = RegRead('HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.' & $type & '\OpenWithList', 'a')
  399.             If @error Or $aPath = '' Then
  400.                 Return SetError(1)
  401.             Else
  402.                 $typefile = $aPath
  403.             EndIf
  404.         EndIf
  405.     Else
  406.         $typefile = $aPath
  407.     EndIf
  408.     Local $aPath = StringRegExp($typefile, '(?i)(^.*)(\.exe.*)$', 3)
  409.     If @error Then Return SetError(1)
  410.     $aPath = StringReplace($aPath[0], '"', '') & '.exe'
  411.     Opt('ExpandEnvStrings', 1)
  412.     If FileExists($aPath) Then
  413.         $aPath = $aPath
  414.         Opt('ExpandEnvStrings', 0)
  415.         Return $aPath
  416.     EndIf
  417.     Opt('ExpandEnvStrings', 0)
  418.     If FileExists(@SystemDir & '\' & $aPath) Then
  419.         Return @SystemDir & '\' & $aPath
  420.     ElseIf FileExists(@WindowsDir & '\' & $aPath) Then
  421.         Return @WindowsDir & '\' & $aPath
  422.     EndIf
  423.     Return SetError(1)
  424. EndFunc   ;==>_TypeGetPath
  425.  
  426. Func _ChildCoor($Gui, $w, $h, $c = 0, $d = 0)
  427.     Local $aWA = _WinAPI_GetWorkingArea(), _
  428.             $GP = WinGetPos($Gui), _
  429.             $wgcs = WinGetClientSize($Gui)
  430.     Local $dLeft = ($GP[2] - $wgcs[0]) / 2, _
  431.             $dTor = $GP[3] - $wgcs[1] - $dLeft
  432.     If $c = 0 Then
  433.         $GP[0] = $GP[0] + ($GP[2] - $w) / 2 - $dLeft
  434.         $GP[1] = $GP[1] + ($GP[3] - $h - $dLeft - $dTor) / 2
  435.     EndIf
  436.     If $d > ($aWA[2] - $aWA[0] - $w - $dLeft * 2) / 2 Or $d > ($aWA[3] - $aWA[1] - $h - $dLeft + $dTor) / 2 Then $d = 0
  437.     If $GP[0] + $w + $dLeft * 2 + $d > $aWA[2] Then $GP[0] = $aWA[2] - $w - $d - $dLeft * 2
  438.     If $GP[1] + $h + $dLeft + $dTor + $d > $aWA[3] Then $GP[1] = $aWA[3] - $h - $dLeft - $dTor - $d
  439.     If $GP[0] <= $aWA[0] + $d Then $GP[0] = $aWA[0] + $d
  440.     If $GP[1] <= $aWA[1] + $d Then $GP[1] = $aWA[1] + $d
  441.     $GP[2] = $w
  442.     $GP[3] = $h
  443.     Return $GP
  444. EndFunc   ;==>_ChildCoor
  445.  
  446. Func _WinAPI_GetWorkingArea()
  447.     Local Const $SPI_GETWORKAREA = 48
  448.     Local $stRECT = DllStructCreate("long; long; long; long")
  449.  
  450.     Local $SPIRet = DllCall("User32.dll", "int", "SystemParametersInfo", "uint", $SPI_GETWORKAREA, "uint", 0, "ptr", DllStructGetPtr($stRECT), "uint", 0)
  451.     If @error Then Return 0
  452.     If $SPIRet[0] = 0 Then Return 0
  453.  
  454.     Local $sLeftArea = DllStructGetData($stRECT, 1)
  455.     Local $sTopArea = DllStructGetData($stRECT, 2)
  456.     Local $sRightArea = DllStructGetData($stRECT, 3)
  457.     Local $sBottomArea = DllStructGetData($stRECT, 4)
  458.  
  459.     Local $aRet[4] = [$sLeftArea, $sTopArea, $sRightArea, $sBottomArea]
  460.     Return $aRet
  461. EndFunc   ;==>_WinAPI_GetWorkingArea
  462.  
  463. Func _Restart()
  464.     Local $sAutoIt_File = @TempDir & "\~Au3_ScriptRestart_TempFile.au3"
  465.     Local $sRunLine, $sScript_Content, $hFile
  466.  
  467.     $sRunLine = @ScriptFullPath
  468.     If Not @Compiled Then $sRunLine = @AutoItExe & ' /AutoIt3ExecuteScript ""' & $sRunLine & '""'
  469.     If $CmdLine[0] > 0 Then $sRunLine &= ' ' & $CmdLineRaw
  470.  
  471.     $sScript_Content &= '#NoTrayIcon' & @CRLF & _
  472.             'While ProcessExists(' & @AutoItPID & ')' & @CRLF & _
  473.             '   Sleep(10)' & @CRLF & _
  474.             'WEnd' & @CRLF & _
  475.             'Run("' & $sRunLine & '")' & @CRLF & _
  476.             'FileDelete(@ScriptFullPath)' & @CRLF
  477.  
  478.     $hFile = FileOpen($sAutoIt_File, 2)
  479.     FileWrite($hFile, $sScript_Content)
  480.     FileClose($hFile)
  481.  
  482.     Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & $sAutoIt_File & '"', @ScriptDir, @SW_HIDE)
  483.     Sleep(1000)
  484.     Exit
  485. EndFunc   ;==>_Restart
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement