Показать полную графическую версию : [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.
Maza Faka
14-01-2009, 10:19
А также есть ещё такой диалог для завершения работы (обычно выводится разными программами для перезапуска системы): »
Неплохой пример, но непонятно, почему проверяется версия ОС и в соответствии с этим задаётся тип данных (char или wchar), но в функции DllCall всё равно используется тип wstr? Вроде бы так будет корректно:
_RestartDialog('Установка программы успешно завершена!')
Func _RestartDialog($sPrompt = '', $iFlag = 2, $hWnd = 0)
Local $sStringType = "str"
If @OSTYPE = "WIN32_NT" Then $sStringType = "wstr"
Local $aRet = DllCall("Shell32.dll", "int", "RestartDialog", _
"hwnd", $hWnd, _
$sStringType, $sPrompt, _
"int", $iFlag)
Return $aRet[0]
EndFunc ;==>_RestartDialog
непонятно, почему проверяется версия ОС и в соответствии с этим задаётся тип данных (char или wchar), но в функции DllCall всё равно используется тип wstr? »
Проверяется это для структуры :) - Хотя как я понял она вообще не нужна, да и в последней версии аутоита вообще и сама проверка не нужна, ведь Win 9x уже не поддерживается, т.ч можно сразу использовать "wstr".
Вроде бы так будет корректно »
Не совсем, у тебя перепутаны параметры местами, в первом параметре передаёшь тест вместо hWnd :tongue:
Maza Faka
14-01-2009, 13:22
Проверяется это для структуры »
Я знаю, для чего это применяется, я говорю о том, что, если пользователь будет использовать этот код в среде Win 9x, то функция не сработает, так, как в функции у тебя используется wstr-тип данных. Да и вообще, вызов функции неправильный, для чего создаётся структура, если в MSDN-e сказано:
A null-terminated Unicode string that contains the text that displays in the dialog box which prompts the user.
а, если даже и создаётся структура, то нужно указывать на неё используя DllStructGetPtr
у тебя перепутаны параметры местами, в первом параметре передаёшь тест вместо hWnd »
А при чём здесь порядок передачи параметров? В самой функции параметры используются по порядку. Я передаю, так, как мне удобно. Или это аксиома?
в функции у тебя используется wstr-тип данных »
Это не у меня, функцию я взял отсюда (http://www.autoitscript.com/forum/index.php?showtopic=67521&hl=customdialog) :tongue:
А при чём здесь порядок передачи параметров? В самой функции параметры используются по порядку. Я передаю, так, как мне удобно. Или это аксиома? »
:o :tomato2: - Пересмотри пожалуйста свой пример с объективной точки зрезния (как будто это не твоей "рукой" написано), и скажи мне, что в нём не так...
Maza Faka
14-01-2009, 13:45
Пересмотри пожалуйста свой пример »
Вот млин, на вызов функции внимания не обратил :fingal: Сорри :)
Здравствуйте чтото не могу понять как зделать чтобы закрытие вызваного окна по
#include"My okno.au3"
не вызывалозакрытие всего скрипта.
Не поиму предназначение функции: exitloop
Пример из справки работает хотя непредставляю ищо как его дописать к своему окну хотя в нем есть большой недостаток при повторном вызове окна основной скрипт слетает с ошибкой. Пробовал убить его спомощью
WinClose("My okno", "")
WinKill("My okno", "")
без результатно
Пример из справки
#include <GUIConstants.au3>
GUICreate("My GUI") ; will create a dialog box that when displayed is centered
GUISetState () ; will display an empty dialog box
; Run the GUI until the dialog is closed
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
Wend
GUIDelete(); ; will return 1
Maza Faka
14-01-2009, 15:30
litus
А если прятать окно? GuiSetState(@SW_HIDE, $hGUI)
Подскажите хочу сделать autoit скрипт для автоматической установки sql 2000
[CODE]Run(".\SETUPSQL.EXE")
WinWait("Setup")
WinActivate ("Setup")
WinWaitActive("Setup")
Send("!s")
Send ( '{ENTER}' )
Вот оно
http://voler.ru/win.jpg
Но почему то не нажимает на окно предупреждения, когда ставишь на XP.
Creat0R, 1. свой диалог shutdown нельзя! у меня проблемы с перезагрузкой, работают только графический Пуск... и Диспетчер Задач тоже самое - кнопки и клики. Если выполнить shutdown.exe или
шатдаун() в автоит то зависнет! я пробовал уже. Только GUI кнопками работает! Трабла такая у мну :)
2. И вообще это интересно и любопытно, как taskmgr можно нажимать, чисто интересно, пожалуйста попытайтесь написать код?
ЗЫ Раз есть проблем у мну, то он может быть не только у мну, а значит уже не надёжно всётаки, но дел не в этом,
просто хочется альтернативу иметь тоже.
как taskmgr можно нажимать, чисто интересно »
Примерно так:
#include <WindowsConstants.au3>
#include <SendMessage.au3>
#include <GuiMenu.au3>
Run("taskmgr.exe")
WinWait("[CLASS:#32770;REGEXPTITLE:.*Windows.*]", "", 5)
$hTskMgr = WinGetHandle("[CLASS:#32770;REGEXPTITLE:.*Windows.*]")
If Not WinExists($hTskMgr) Then Exit
$hMenu = _GUICtrlMenu_GetMenu($hTskMgr)
$hSubMenu = _GUICtrlMenu_GetItemSubMenu($hMenu, 4) ;change to 3th submenu (zero-based), now it will only show the "About" window.
$iItemID = _GUICtrlMenu_GetItemID($hSubMenu, 3) ;2 = Shutdown, 3 = Restart (2 and 3 it's zero-based item from the top of menu)
_SendMessage($hTskMgr, $WM_COMMAND, $iItemID, 0)
Кстати, можно и скрыто это сделать (кроме икокни в трее), нужно заменить Run("taskmgr.exe") на Run("taskmgr.exe", "", @SW_HIDE).
FlatX007
15-01-2009, 01:50
Вообщем в некой части скрипта есть во такой код (который устанавливает прогресс бар)
Вопрос .... ! можно это ещё как либо доработать ??? Creat0R ;) (скрипт рабочий) и ещё у меня ошибка в начале где : If $ySize_Total == 451490049 Then и я немогу понять почему.
;*********
$ScriptDir = @ScriptDir
$sDrive_Selected = "D:\"
;Проверяем размер копируеммых файлов
$ySize_Menu = DirGetSize($ScriptDir & "\" & "Menu"); Папка на источника
$ySize_Soft = DirGetSize($ScriptDir & "\" & "Soft"); Папка на источника
$ySize_Total = $ySize_Soft + $ySize_Menu ; Размер фалов на источнике всего - 451 490 049 байт
;~ If $ySize_Total == 451490049 Then
;~ ContinueLoop
;~ Else
;~ MsgBox(0, "Внимание", "Произошла ошибка при проверке размера копируемых файлов")
;~ Exit
;~ EndIf
IniWrite (@TempDir & '\CopyToUsb.ini', "settings", "KeyDrive", $sDrive_Selected); Записывам в INI выбранный диск например J:\
IniWrite (@TempDir & '\CopyToUsb.ini', "settings", "KeyPATH", $ScriptDir) ; Записываем в INI путь папки из которой запущен скрипт
GUISetState(@SW_DISABLE, $hGUI) ;Блокируем GUI на время копирования
ProgressOn("", "Идёт копирование", "" ,100 ,100 ,1)
FileInstall (@ScriptDir & '\CopyToUsb.exe', @TempDir & '\CopyToUsb.exe', 1)
Run(@TempDir & '\CopyToUsb.exe')
$w = 0
While $w < 1
$zSize_Menu = DirGetSize($sDrive_Selected & "Menu");папка на приёмнике
$zSize_Soft = DirGetSize($sDrive_Selected & "Soft");папка на приёмнике
$zSize_Total = $zSize_Soft + $zSize_Menu ; Размер фалов на приёмнике Итог после окончания копирования должен быть 451 490 049 байт
$zSize_1 = $zSize_Total / 1000000; Итог 451.ххх
$zSize_PrBar = Round(($zSize_1) + 49) / 5; = 100
$Ver_Copy = IniRead(@TempDir & '\CopyToUsb.ini', "settings", "Copy", "default") ; Cчитываем из INI значение о правильности копирования
ProgressSet($zSize_PrBar, $zSize_PrBar & " % выполнения")
sleep(300)
If $zSize_Total < 451490049 Then
$w = 0
Else
If $Ver_Copy = 1 Then
ProgressSet(100 , "Готово", "Выполнено")
sleep(3000)
ProgressOff()
$w = 2
MsgBox(64, "Внимание", "Копирование прошло удачно")
EndIf
If $Ver_Copy = 0 Then
ProgressSet(100 , "Ошибка", "Не выполнено")
sleep(3000)
ProgressOff()
MsgBox(16, "Внимание", "Произошла ошибка при копировании")
Exit
EndIf
EndIf
WEnd
GUISetState(@SW_ENABLE, $hGUI)
Case $GUI_EVENT_CLOSE, $Cancel_Button
ExitLoop
EndSwitch
WEnd
Впоследствии это станет "CopyToUsb.exe" который находится внутри закомпилированного скрипта (он выше) и сопсн говоря это приложение и будет выполнять копирование
#NoTrayIcon
$sDrive = IniRead(@TempDir & '\CopyToUsb.ini', "settings", "KeyDrive", "default1"); Считываем из INI выбранный диск например J:\
$sScriptDir = IniRead(@TempDir & '\CopyToUsb.ini', "settings", "KeyPATH", "default2"); Считываем из INI путь папки из которой запущен скрипт
While 1
$xVer_1 = DirCopy($sScriptDir & "\" & "Menu", $sDrive & "Menu")
$xVer_2 = DirCopy($sScriptDir & "\" & "Soft", $sDrive & "Soft")
$xVer = $xVer_2 + $xVer_1
If $xVer == 2 Then
IniWrite (@TempDir & '\CopyToUsb.ini', "settings", "Copy", "1"); Записывам в INI о том что копирование удачно
ExitLoop
Else
IniWrite(@TempDir & '\CopyToUsb.ini', "settings", "Copy", "0") ; Записываем в INI о том что копирование неудачно
ExitLoop
EndIf
WEnd
;~ FileDelete(@TempDir & '\CopyToUsb.ini')
Exit
Примерно так: »
а вчём примерно ошибки могут быть? класс чтоль не тот? taskmgr открывается, но ничего не происходит.
титул: Windows Task Manager
меню: Shut Down
/список: Stand By | Hibernate | Turn Off | Restart | Log Off Semiono | Lock Computer WinKey + L
надо Restart нажать! :)
меню: Shut Down / Stand By | Hibernate | Turn Off | Restart | Log Off Semiono | Lock Computer WinKey + L »
А какое по счёту меню «Shut Down» слева?
P.S
4 нужно заменить на 3 в скрипте.
Maza Faka
15-01-2009, 07:27
voler, не нажимает на окно предупреждения »
А если так:
ControlClick("Setup", "component is not supported", "OK")
можно это ещё как либо доработать ? »
Хотя вопрос задан не мне...
Во первых - пример не рабочий, во вторых - неправильное использование функции FileInstall (читаем справку).
P.S.
Если хочешь получить грамотную помощь - задавай грамотные вопросы, с рабочими примерами ;)
Maza Faka А если прятать окно?
GuiSetState(@SW_HIDE, $hGUI)
А откуда взялась переменая $hGUI если нетрудно перепешите . Раньше это было два разных скрипта и если я вызывал с основного скрипта по функции run диалоговое окно то оно отрабатывалось как отдельный скрипт и спокойно закрывалось поExit не затрагивая работу основного скрипта.
но хотелось бы зделать по компактнее.
Ребята, а подскажите как выгрузить из процесса одну dll. То есть, есть процесс (допустим explorer.exe) к нему подгружается одна dll вот как её выгрузить не убивая сам процесс ?
TERMINAL
15-01-2009, 12:53
Возможно ли при присутствии 4 разделов жёсткого диска определить какие системы находятся на других жёстких дисках?
Maza Faka
15-01-2009, 14:05
Раньше это было два разных скрипта »
Выложи их здесь и обьясни поподробней, что нужно сделать :)
TERMINAL
Либо парсить boot.ini, либо искать папки с именами: Windows, WinNT и т.д.
TERMINAL
15-01-2009, 14:25
Либо парсить boot.ini » - это неподойдет и по имени папок неподойдёт, может по наличию каких-либо файлов ?
FlatX007
15-01-2009, 17:21
Хотя вопрос задан не мне...
Во первых - пример не рабочий, во вторых - неправильное использование функции FileInstall (читаем справку....
»
очень странно но у меня всё работает ... что, неправильно в FileInstall ? файлик CopyToUsb.exe попадает во временную папку и от туда запускается
А да извиняюсь ошибка есть ... компилятор выдал только при компиляции скрипта в ЕХЕ
Вот так работает : FileInstall ("CopyToUsb.exe", @TempDir & '\CopyToUsb.exe', 1)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.