Ru-Board.club
← Вернуться в раздел «Программы»

» AutoIT

Автор: diamondxxx
Дата сообщения: 05.01.2009 17:52
Уважаемые пользователи форума помогите пожалуйста разобраться.

Повод: При разворачивании образа "ОС+дрова" с помощью Acronis true image with UR на новое железо при старте системы получаю много окон с предложением установить драйвер такой-то, несмотря на то что стоит галка "пропускать дрова, не запрашивать утверждения"

Что хочу: Надо жать кнопки в окнах установки\обновления драйверов - ""Далее", "Да", "Готово" автоматом. Так как клава у меня беспроводная USB не работает до установки всех предшествующих драйверов.

Что сделал: почитал справку autoit, сделал следующие задания
Проблема: По отдельности задания работают, но мне надо чтобы они отрабатывали по след схеме:
Выполняем задание 1, если есть окно, щелкаем Далее. Если нет окна, тогда переходим к заданию 2, если нет окна задания 2, переходим в заданию 3 и т.д.
Переход между заданиями должен идти по кругу допустим 20 раз или как вариант пока не появится окно, требующее перезагрузки для завершения установки драйвера.
p.s. я не программер абсолютно, не пинайте сильно

; задание 1. Жмем Далее
If WinExists("Мастер обновления оборудования", "&Далее") Then
WinActivate ("Мастер обновления оборудования", "&Далее")
WinWaitActive("Мастер обновления оборудования", "&Далее")
Sleep(1000)
Send("{ENTER}")

; задание 2 Жмем Готово
If WinExists("Мастер обновления оборудования", "&Готово") Then
WinActivate ("Мастер обновления оборудования", "&Готово")
    WinWaitActive("Мастер обновления оборудования", "&Готово")
Sleep(1000)
Send("{ENTER}")

; задание 3 Жмем Да
If WinExists("Предупреждение при обновлении драйвера", "&Да") Then
    WinActivate ("Предупреждение при обновлении драйвера", "&Да")
WinWaitActive("Предупреждение при обновлении драйвера", "&Да")
Sleep(1000)
Send("{LEFT}{ENTER}")

Автор: timsky
Дата сообщения: 05.01.2009 18:40
diamondxxx
А ты в цикл это все заключи:

While 1
Здесь твой код
Wend

Типа такого:


Код: While 1
; задание 1. Жмем Далее
If WinExists("Мастер обновления оборудования", "&Далее") Then
WinActivate ("Мастер обновления оборудования", "&Далее")
WinWaitActive("Мастер обновления оборудования", "&Далее")
Send("{ENTER}")
EndIf

; задание 2 Жмем Готово
If WinExists("Мастер обновления оборудования", "&Готово") Then
WinActivate ("Мастер обновления оборудования", "&Готово")
WinWaitActive("Мастер обновления оборудования", "&Готово")
Send("{ENTER}")
EndIf

; задание 3 Жмем Да
If WinExists("Предупреждение при обновлении драйвера", "&Да") Then
WinActivate ("Предупреждение при обновлении драйвера", "&Да")
WinWaitActive("Предупреждение при обновлении драйвера", "&Да")
Send("{LEFT}{ENTER}")
EndIf

Sleep(500)
Wend
Автор: Zloy_Gelud
Дата сообщения: 05.01.2009 21:52
Как исключить дисковод из

Код: [no]$tblDrives = DriveGetDrive("REMOVABLE")[/no]
Автор: ViSiToR
Дата сообщения: 05.01.2009 22:18
Zloy_Gelud 22:52 05-01-2009
Цитата:
Как исключить дисковод из

Он уже вроде оттуда исключён (за счёт "REMOVABLE")... или это USB-привод?
Автор: Zloy_Gelud
Дата сообщения: 05.01.2009 22:29
ViSiToR

Цитата:
Он уже вроде оттуда исключён (за счёт "REMOVABLE")

Вот и я так думал..у меня А: - обыкновенный дисковод, не знаю чего он вдруг появляется при использовании "REMOVABLE"
Выкрутился так:

Код: #include <GUIListBox.au3>
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>

Opt('MustDeclareVars', 1)

_GUI()

Func
_GUI()
Local $hGUI, $tblDrives, $hListBox
$hGUI
= GUICreate("(UDF Created) ListBox Create", 400, 296)
$hListBox =
_GUICtrlListBox_Create($hGUI, "String upon creation", 2, 2, 396, 296)
GUISetState()
; Добавляем removable-устройства
_GUICtrlListBox_BeginUpdate($hListBox)
_GUICtrlListBox_ResetContent($hListBox)
_GUICtrlListBox_InitStorage($hListBox, 100, 4096)
$tblDrives = DriveGetDrive("REMOVABLE")
If NOT @error Then
For
$i = 1 to $tblDrives[0]
If ($tblDrives[$i] <> "a:") then
; исключаем дисковод

_GUICtrlListBox_AddString($hListBox,"[ " & StringLeft($tblDrives[$i],1) & " ] - " & DriveGetLabel($tblDrives[$i]))
endif
Next
EndIf
_GUICtrlListBox_EndUpdate($hListBox)

Do
Until
GUIGetMsg() = $GUI_EVENT_CLOSE
EndFunc
Автор: Maza Faka
Дата сообщения: 06.01.2009 10:27
Zloy_Gelud

Цитата:
Как исключить дисковод из
Код:$tblDrives = DriveGetDrive("REMOVABLE")


ViSiToR

Цитата:
Он уже вроде оттуда исключён

C каких это пор Floppy-дисковод не является съёмным устройством?

Zloy_Gelud

Цитата:
если выбран какой-нить пункт в Листбоксе, то появлялось сообщение, содержащее букву устройства

Пример:

Код: #include <GUIListBox.au3>
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>

Opt('MustDeclareVars', 1)

Global $hListBox

_GUI()

Func _GUI()
Local $hGUI, $tblDrives

$hGUI
= GUICreate("(UDF Created) ListBox Create", 400, 296)

$hListBox = _GUICtrlListBox_Create($hGUI, "String upon creation", 2, 2, 396, 296)

GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

GUISetState()

; Добавляем removable-устройства
_GUICtrlListBox_BeginUpdate($hListBox)
_GUICtrlListBox_ResetContent($hListBox)
_GUICtrlListBox_InitStorage($hListBox, 100, 4096)

$tblDrives = DriveGetDrive("REMOVABLE")
If Not @error Then
For
$i = 1 To $tblDrives[0]
If ($tblDrives[$i] <> "a:") Then ; исключаем дисковод
_GUICtrlListBox_AddString($hListBox, "[ " & StringLeft($tblDrives[$i], 1) & " ] - " & DriveGetLabel($tblDrives[$i]))
EndIf
Next
EndIf


_GUICtrlListBox_EndUpdate($hListBox)

Do
Until
GUIGetMsg() = $GUI_EVENT_CLOSE
EndFunc ;==>_GUI

Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
Local $iCode = BitShift($wParam, 16) ;Hi Word

Switch $lParam
Case $hListBox
Switch $iCode
Case $LBN_SELCHANGE
Local $iIndex = _GUICtrlListBox_GetCurSel($hListBox)
If $iIndex <> -1 Then ConsoleWrite(_GUICtrlListBox_GetText($hListBox, $iIndex) & @LF)
EndSwitch
EndSwitch

Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
Автор: ViSiToR
Дата сообщения: 06.01.2009 12:14
Maza Faka 11:27 06-01-2009
Цитата:
C каких это пор Floppy-дисковод не является съёмным устройством?

Я так понял речь не о Floppy, а об...

23:29 05-01-2009
Цитата:
А: - обыкновенный дисковод




И вообще, слово "дисковод" подразумивает устройство для обработки дисков, не дискет Имхо.
Автор: Maza Faka
Дата сообщения: 06.01.2009 14:11
ViSiToR

Цитата:
Я так понял речь не о Floppy, а об...

C незапамятных времён буквы A: и B: были зарезервированны для дисководов гибких дисков.


Цитата:
И вообще, слово "дисковод" подразумивает устройство для обработки дисков, не дискет

Мда... а как же тогда называется устройство для считывания информации с гибких дисков?
Автор: Zloy_Gelud
Дата сообщения: 06.01.2009 17:44
ViSiToR
Maza Faka

Цитата:
C незапамятных времён буквы A: и B: были зарезервированны для дисководов гибких дисков.

Maza Faka -- за пример спасибо! Буду дальше сам хелп курить.

Автор: Leagnus
Дата сообщения: 06.01.2009 18:40
Интересно, существует ли скролабл гуй? Или можно ли в ListView поместить контролы? Чтобы при рисайзе появлялись скролбары там, где стало тесно? Я видел это не в АвтоИтовских гуях – объект звался TScrollBox, но на нём были контролы, а не текст или поля/колонки данных.
Мдя, просмотрел в справке на _GUIScrollBars_Init...
Автор: ViSiToR
Дата сообщения: 06.01.2009 22:08
Maza Faka 15:11 06-01-2009
Цитата:
C незапамятных времён буквы A: и B: были зарезервированны для дисководов гибких дисков

Я это знаю


Цитата:
как же тогда называется устройство для считывания информации с гибких дисков?

Так и называется, Floppy Диск , но не в этом суть, если я хочу чтобы меня поняли (все), буду так и писать: «Дисковод гибких дисков», или просто «Floppy», а кодга пишут дисковод без уточнения, то самое логичное предположение что это всё же дисковод обычных дисков (те которые по 700/800 MB, 4.5 GB и т.д. ).
Автор: Zloy_Gelud
Дата сообщения: 07.01.2009 00:47
ViSiToR

Цитата:
а кодга пишут дисковод без уточнения [..]

Будем исправляться бо было понятно меня (всем)
А пока появился еще вопрос (уж извините, не могу пока сам с обработчиком нажатий разобраться..): В [more=этот]
Код: #include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>
#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)

Global $hListView, $hButton

CreateGUI()

Func CreateGUI()
Local $iExWindowStyle = BitOR($WS_EX_DLGMODALFRAME, $WS_EX_CLIENTEDGE)
Local $iExListViewStyle = BitOR($LVS_EX_SUBITEMIMAGES, $LVS_EX_GRIDLINES)

GUICreate("Безопасное извлечение устройства", 470, 250)

$hListView = GUICtrlCreateListView("Имя|Тип|Полный объем|Свободно|Файловая система", 10, 10, 450, 180, -1, $iExWindowStyle)
_GUICtrlListView_SetExtendedListViewStyle($hListView, $iExListViewStyle)
$hButton = GUICtrlCreateButton("Остановить", 10, 200)

GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

GUISetState()

local $hImage = _GUIImageList_Create(16, 16, 5, 3)
_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -8)
_GUICtrlListView_SetImageList($hListView, $hImage, 1)

local $tblDrives = DriveGetDrive("REMOVABLE") ; таблица съемных устройств
If Not @error Then
For
$i = 1 To $tblDrives[0]
if ($tblDrives[$i] <> "a:") then ; исключаем флоппик
local $strLabel = DriveGetLabel($tblDrives[$i])
if ($strLabel == "") then ; если метка отсутствует
$strLabel = "Съемный диск"
endif
local
$nSpaceTotal = DriveSpaceTotal($tblDrives[$i])
local $nSpaceFree = DriveSpaceFree($tblDrives[$i])
local $strFS = DriveGetFileSystem($tblDrives[$i])
local $nItem = _GUICtrlListView_AddItem($hListView, "(" & StringUpper($tblDrives[$i]) & ") " & $strLabel, 0)
_GUICtrlListView_SetItemParam($hListView, $nItem, $tblDrives[$i])
_GUICtrlListView_AddSubItem($hListView, $nItem, "Съемный диск", 1)
_GUICtrlListView_AddSubItem($hListView, $nItem, String_GetFormattedSize($nSpaceTotal*1024^2), 2)
_GUICtrlListView_AddSubItem($hListView, $nItem, String_GetFormattedSize($nSpaceFree*1024^2), 3)
_GUICtrlListView_AddSubItem($hListView, $nItem, $strFS, 4)
EndIf
Next
_GUICtrlListView_SetColumnWidth($hListView, 0, $LVSCW_AUTOSIZE_USEHEADER)
EndIf

While
1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
EndSwitch
WEnd

GUIDelete()
EndFunc

func
String_GetFormattedSize($nBytes, $cFormat = "FMTSIZE_AUTOMATIC")
local $strResult = ""
if ($cFormat == "FMTSIZE_AUTOMATIC") then
if
($nBytes > 1024) then
if
($nBytes / 1024 < 1024) then
$strResult = String(Round($nBytes / 1024, 2)) & " КБ"
else
if
($nBytes / 1024^2 < 1024) then
$strResult = String(Round($nBytes / 1024^2, 2)) & " МБ"
else
if
($nBytes / 1024^3 < 1024) then
$strResult = String(Round($nBytes / 1024^3, 2)) & " ГБ"
else
$strResult = String(Round($nBytes / 1024^4, 2)) & " ТБ"
endif
endif
endif
else
$strResult = String($nBytes)
endif
elseif
($cFormat == "FMTSIZE_BYTES") then
$strResult = String($nBytes)
elseif ($cFormat == "FMTSIZE_KB") then
$strResult = String(Round($nBytes / 1024, 2)) & " КБ"
elseif ($cFormat == "FMTSIZE_MB") then
$strResult = String(Round($nBytes / 1024^2, 2)) & " МБ"
elseif ($cFormat == "FMTSIZE_GB") then
$strResult = String(Round($nBytes / 1024^3, 2)) & " ГБ"
elseif ($cFormat == "FMTSIZE_TB") then
$strResult = String(Round($nBytes / 1024^4, 2)) & " ТБ"
endif
return
StringReplace($strResult, ".", ",")
endfunc

Автор: theHelg
Дата сообщения: 07.01.2009 00:51
Подскажите,
Пишу скрипт, который в графическом приложении кликает по кнопкам.
Эмулирую маус-клик через MouseClick("left")
При этом иногда клик проходит, а иногда не срабатывает.
Заметил тенденцию, что если делать быстрое перемещение MouseMove со скоростью 1 - то не всегда срабатывает, но проблема, что даже при низкой скорости перемещения - иногда кликает "вхолостую".
Специально возле нужного места делаю небольшой зигзаг мышкой - чуть помогло, но не всегда...

Из-за чего это может быть и как с этим можно бороться?
Не всегда можно отследить, что клик был произведен...
Автор: Zloy_Gelud
Дата сообщения: 07.01.2009 00:53
Появился еще вопрос. Посмотрел как авторы загнали либу SQLite.dll в SQLite.dll.au3 и хотелось бы спросить..можно ли подобно внедрить (не знаю как выразиться лучше ) другую длл в .AU3 файл, а потом соот-но использовать функции этой длл в своем скрипте (предварительно подключив этот .AU3).
Автор: ViSiToR
Дата сообщения: 07.01.2009 01:20
Zloy_Gelud 01:47 07-01-2009
Цитата:
Если нажали на кнопку и выбран какой-нить индекс в объекте ListView, то появлялось бы сообщение с выбранным индексом, если же ничего не выбрано, то сообщение с какой-нить руганью. И как установить авто-выравнивание ширины ВСЕХ колонок в зависимости от текста в них.



Код: #include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>
#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)

Global $hListView, $hButton, $hGUI

CreateGUI()

Func CreateGUI()
Local $iExWindowStyle = BitOR($WS_EX_DLGMODALFRAME, $WS_EX_CLIENTEDGE)
Local $iExListViewStyle = BitOR($LVS_EX_SUBITEMIMAGES, $LVS_EX_GRIDLINES)

$hGUI = GUICreate("Безопасное извлечение устройства", 470, 250)

$hListView = GUICtrlCreateListView("Имя|Тип|Полный объем|Свободно|Файловая система", 10, 10, 450, 180, -1, $iExWindowStyle)
_GUICtrlListView_SetExtendedListViewStyle($hListView, $iExListViewStyle)
$hButton = GUICtrlCreateButton("Остановить", 10, 200)

GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

GUISetState()

Local $hImage = _GUIImageList_Create(16, 16, 5, 3)
_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -8)
_GUICtrlListView_SetImageList($hListView, $hImage, 1)

Local $tblDrives = DriveGetDrive("REMOVABLE") ; таблица съемных устройств

If Not @error Then
Local
$iItemsAdded_Count = 0

For $i = 1 To $tblDrives[0]
If ($tblDrives[$i] <> "a:") Then ; исключаем флоппик
$iItemsAdded_Count += 1

Local $strLabel = DriveGetLabel($tblDrives[$i])
If ($strLabel == "") Then ; если метка отсутствует
$strLabel = "Съемный диск"
EndIf
Local $nSpaceTotal = DriveSpaceTotal($tblDrives[$i])
Local $nSpaceFree = DriveSpaceFree($tblDrives[$i])
Local $strFS = DriveGetFileSystem($tblDrives[$i])
Local $nItem = _GUICtrlListView_AddItem($hListView, "(" & StringUpper($tblDrives[$i]) & ") " & $strLabel, 0)
_GUICtrlListView_SetItemParam($hListView, $nItem, $tblDrives[$i])
_GUICtrlListView_AddSubItem($hListView, $nItem, "Съемный диск", 1)
_GUICtrlListView_AddSubItem($hListView, $nItem, String_GetFormattedSize($nSpaceTotal * 1024 ^ 2), 2)
_GUICtrlListView_AddSubItem($hListView, $nItem, String_GetFormattedSize($nSpaceFree * 1024 ^ 2), 3)
_GUICtrlListView_AddSubItem($hListView, $nItem, $strFS, 4)
EndIf
Next

If $iItemsAdded_Count > 0 Then
For $i = 0 To _GUICtrlListView_GetColumnCount($hListView)-1
_GUICtrlListView_SetColumnWidth($hListView, $i, -1)
Next
Else
_GUICtrlListView_SetColumnWidth($hListView, -1, $LVSCW_AUTOSIZE_USEHEADER)
EndIf
EndIf

While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $hButton
Local $sSel_Index = _GUICtrlListView_GetSelectedIndices($hListView, 0)
Local $iSel_Index = Number($sSel_Index)
Local $sSel_Drive = _GUICtrlListView_GetItemText($hListView, $iSel_Index, 0)

If $sSel_Index = "" Then
MsgBox(48, "Внимание!", "Выберите устройство из списка.", 0, $hGUI)
Else
MsgBox(64, "Внимание!", "Выбранное устройство: " & $sSel_Drive, 0, $hGUI)
EndIf
EndSwitch
WEnd

GUIDelete()
EndFunc ;==>CreateGUI

Func String_GetFormattedSize($nBytes, $cFormat = "FMTSIZE_AUTOMATIC")
Local $strResult = ""
If ($cFormat == "FMTSIZE_AUTOMATIC") Then
If ($nBytes > 1024) Then
If ($nBytes / 1024 < 1024) Then
$strResult = String(Round($nBytes / 1024, 2)) & " КБ"
Else
If ($nBytes / 1024 ^ 2 < 1024) Then
$strResult = String(Round($nBytes / 1024 ^ 2, 2)) & " МБ"
Else
If ($nBytes / 1024 ^ 3 < 1024) Then
$strResult = String(Round($nBytes / 1024 ^ 3, 2)) & " ГБ"
Else
$strResult = String(Round($nBytes / 1024 ^ 4, 2)) & " ТБ"
EndIf
EndIf
EndIf
Else
$strResult = String($nBytes)
EndIf
ElseIf ($cFormat == "FMTSIZE_BYTES") Then
$strResult = String($nBytes)
ElseIf ($cFormat == "FMTSIZE_KB") Then
$strResult = String(Round($nBytes / 1024, 2)) & " КБ"
ElseIf ($cFormat == "FMTSIZE_MB") Then
$strResult = String(Round($nBytes / 1024 ^ 2, 2)) & " МБ"
ElseIf ($cFormat == "FMTSIZE_GB") Then
$strResult = String(Round($nBytes / 1024 ^ 3, 2)) & " ГБ"
ElseIf ($cFormat == "FMTSIZE_TB") Then
$strResult = String(Round($nBytes / 1024 ^ 4, 2)) & " ТБ"
EndIf
Return StringReplace($strResult, ".", ",")
EndFunc ;==>String_GetFormattedSize

Func WM_COMMAND($hWnd, $nMsg, $lParam, $wParam)

EndFunc
Автор: Zloy_Gelud
Дата сообщения: 07.01.2009 01:47
ViSiToR

Цитата:
Неплохой скрипт кстати.

Спасибо! Очень приятно слышать от Вас.

Цитата:
А как извлечение будет делаться, просто интересно?

Есть длл ~ 10 кб. Из нее будет вызываться функа. Это тесно связано с вопросом (на который хотелось бы услышать ответ) :

Цитата:
Появился еще вопрос. Посмотрел как авторы загнали либу SQLite.dll в SQLite.dll.au3 и хотелось бы спросить..можно ли подобно внедрить (не знаю как выразиться лучше ) другую длл в .AU3 файл, а потом соот-но использовать функции этой длл в своем скрипте (предварительно подключив этот .AU3).


Цитата:
И ещё, функцию String_GetFormattedSize() можно укоротить в этом случае:

Для меня это слишком сложно пока для восприятия... ;) Оказалось ничего сложного..Немного времени, и я так смогу писать..

Цитата:
Но в общем случае она сама по себе не плохая, сам написал?

Да сам. Этой ночью наваял. А AutoIt изучаю всего 3 ночь..благо что есть довольно большой срок написания скриптов на другом языке..поетому быстро начинаю разбираться с синтаксисом на AutoIt'e.

Добавлено:
ViSiToR -- и спасибо за помощь! Отлично робит. Буду дальше думать..
Автор: Maza Faka
Дата сообщения: 07.01.2009 10:39
Zloy_Gelud

Цитата:
Есть длл ~ 10 кб. Из нее будет вызываться функа

Извлечение можно реализовать WinAPI-функциями не используя сторонних DLL.
Инфа по теме:
USBMon (Мой маленький проект)
Safely Eject a USB Drive
Автор: ViSiToR
Дата сообщения: 07.01.2009 14:54
Zloy_Gelud 01:53 07-01-2009
Цитата:
Посмотрел как авторы загнали либу SQLite.dll в SQLite.dll.au3 и хотелось бы спросить..можно ли подобно внедрить (не знаю как выразиться лучше ) другую длл в .AU3 файл, а потом соот-но использовать функции этой длл в своем скрипте (предварительно подключив этот .AU3).

Я бы не стал этого делать, там каждый раз эта dll'ка пишется в файл (если не найдена предыдущая запись), и только потом происходит обычный DLL-вызов. Для UDF с поставкой аутоита это нужно чтобы не искать файл Dll'ки, а нам можно просто использовать FileInstall (если компиллировать).
Во всяком случае, если я не ошибаюсь, там просто конвертировали тело dll'ки в hex, загнали это в несколько склеенных строк, и при необходимости записывают обратно в файл (sqlite3.dll), но уже как бинарный код (Binary($sData)).
Автор: Zloy_Gelud
Дата сообщения: 08.01.2009 12:34
Maza Faka

Цитата:
Извлечение можно реализовать WinAPI-функциями не используя сторонних DLL.

Согласен. Но что-то я 'очкую' такие функции юзать..Тем более не ясно как они отработают на других машинах (если вообще будут что-нить извлекать). А в твоем срипте кста фейк остается от извлеченного устройства в "Мой компьютер".
И спасибо за инфу! Очень пригодилась мне, как начинающему..


ViSiToR
Тоже спасиб за инфу по вопросу. Но я все-таки запихал .DLL в .AU3


Если кому-нить интересно, то ниже первая рабочая версия моего первого проекта на AutoIt'e



Вопрос. Хотел сам написать функу, проверяющую повторный запуск копии проекта. Но столкнулся с проблемой..как получить дескриптор (или PID) проекта еще до создания GUI. И какой функой можно закрыть проект (тоже до создания GUI) имея дескриптор, ну или PID, ну или вообще объясните как закрыть самого себя?
Автор: ViSiToR
Дата сообщения: 08.01.2009 13:33
Zloy_Gelud 13:34 08-01-2009
Цитата:
Если кому-нить интересно, то ниже первая рабочая версия моего первого проекта на AutoIt'e

Совсем не плохо!


Цитата:
Хотел сам написать функу, проверяющую повторный запуск копии проекта

Она уже есть, называется _SingleTon(), пример:


Код: #include <Misc.au3>

;============# Prevent from secondary run #====================================
If _Singleton("Безопасное извлечение устройства", 1) = 0 Then
$hWnd = WinGetHandle("[CLASS:AutoIt v3 GUI;TITLE:Безопасное извлечение устройства]")

WinSetState($hWnd, "", @SW_RESTORE)
WinActivate($hWnd)

Exit
EndIf

;================================================================================
Автор: NIKZZZZ
Дата сообщения: 08.01.2009 14:48
Zloy_Gelud

Цитата:
Хотел сам написать функу, проверяющую повторный запуск копии проекта.



Код: $list = ProcessList(@ScriptName)
If $list[0][0] > 1 Then Exit
Автор: gal7
Дата сообщения: 08.01.2009 16:04
Может кто-то поможет разобраться в таком вопросе - я пытаюсь уже несколько дней сделать систему остановки Perl-скрипта по сигналу.
этот скрипт запускается (в моей программе) из Autoit с помощью:

Код: $pid = Run(@ComSpec & ' /c perl ' & FileGetShortName(@ScriptDir & '\script.pl'), @ScriptDir, @SW_SHOW, $STDIN_CHILD + $STDOUT_CHILD + $STDERR_CHILD)
Автор: Zloy_Gelud
Дата сообщения: 09.01.2009 00:14
ViSiToR
Я только ЗА..тем более новые фичи появились..


NIKZZZZ
Спасибо, опробуем.
Автор: dafirst
Дата сообщения: 09.01.2009 12:24
Можно ли средствами autoit сделать менюху с выбором диска для установки?
Автор: Maza Faka
Дата сообщения: 09.01.2009 15:56
Zloy_Gelud

Цитата:
Но что-то я 'очкую'

Да ты успокойся (C)


Цитата:
такие функции юзать..Тем более не ясно как они отработают на других машинах (если вообще будут что-нить извлекать)

А где гарантия, что DLL-ка используемая в твоём скрипте будет работать безукоризненно? Кстати, она использует API-функции


Цитата:
А в твоем срипте кста фейк остается от извлеченного устройства в "Мой компьютер".

Это не фейк, это программное извлечение съёмного устройства USB MSDN


Цитата:

ниже первая рабочая версия моего первого проекта на AutoIt'e

Неплохо, молодец


Цитата:
Хотел сам написать функу, проверяющую повторный запуск копии проекта

Так у тебя же в скрипте это реализованно:

Код:
;============# Prevent from secondary run #====================================
$hMutex = DllCall("kernel32.dll", "hwnd", "OpenMutex", "int", 0x1F0001, "int", False, "str", _
                 "Безопасное извлечение устройства")

If $hMutex[0] Then
    $hWnd = WinGetHandle("Безопасное извлечение устройства")
    WinSetState($hWnd, "", @SW_RESTORE)
    DllCall("user32.dll", "int", "SetForegroundWindow", "hwnd", $hWnd)
    Exit
EndIf

$hMutex = DllCall("kernel32.dll", "hwnd", "CreateMutex", "int", 0, "int", False, "str", _
                 "Безопасное извлечение устройства")
;================================================================================
Автор: ViSiToR
Дата сообщения: 09.01.2009 17:30
Maza Faka 16:56 09-01-2009
Цитата:
У меня эта функция не работает

Что именно в ней не работает?
Автор: araneon
Дата сообщения: 09.01.2009 17:41
Товарищи специалисты подскажите как сделать так чтобы в трее висел значёк программы, клацая на который выпадало меню с выбором программ
Автор: ViSiToR
Дата сообщения: 09.01.2009 18:13
araneon 18:41 09-01-2009
Цитата:
как сделать так чтобы в трее висел значёк программы, клацая на который выпадало меню с выбором программ


Пример:


Код: #include <GuiConstants.au3>

Opt("TrayMenuMode", 1)
TraySetClick(16)

$Calc_TrayItem = TrayCreateItem("Калькулятор")
$Notepad_TrayItem = TrayCreateItem("Блокнот")
$CmdLine_TrayItem = TrayCreateItem("Коммандная строка")
$MSPaint_TrayItem = TrayCreateItem("MSPaint")

TrayCreateItem("")

$Exit_TrayItem = TrayCreateItem("Выход")

While 1
Switch TrayGetMsg()
Case $Calc_TrayItem
Run("Calc.exe")
Case $Notepad_TrayItem
Run("Notepad.exe")
Case $CmdLine_TrayItem
Run("Cmd.exe")
Case $MSPaint_TrayItem
Run("MSPaint.exe")
Case $Exit_TrayItem
Exit
EndSwitch
WEnd
Автор: araneon
Дата сообщения: 09.01.2009 18:54
ПРИОГРОМНЕШЕЕ СПАСИБО и как обычно РЕСПЕКТ. А значки прог ни как нельзя приделать туда (это нестоль важно, так просто для красоты) ЗАРАНЕЕ СПАСИБО
Автор: Loopback
Дата сообщения: 09.01.2009 20:37

Цитата:
А значки прог ни как нельзя приделать туда

Это несколько сложнее, но ненамного, если использовать вот эту UDF. Простой пример:


Код: #include <GuiConstants.au3>
#include "ModernMenu.au3"
#NoTrayIcon

$nTrayIcon1 = _TrayIconCreate("Tools", "shell32.dll", -13)
_TrayIconSetClick(-1, 16)
_TrayIconSetState()

$nTrayMenu1 = _TrayCreateContextMenu()
$TrayCalc = _TrayCreateItem("Калькулятор", $nTrayMenu1)
$TrayCMD = _TrayCreateItem("CMD", $nTrayMenu1)
$TrayNotepad = _TrayCreateItem("Блокнот", $nTrayMenu1)
$TrayRegedit = _TrayCreateItem("Редактор реестра", $nTrayMenu1)
_TrayCreateItem("")
_TrayItemSetIcon(-1, "", 0)
$TrayExit = _TrayCreateItem("Выход", $nTrayMenu1)

_TrayItemSetIcon($TrayCalc, "calc.exe", 0)
_TrayItemSetIcon($TrayCMD, "shell32.dll", -3)
_TrayItemSetIcon($TrayNotepad, "notepad.exe", 0)
_TrayItemSetIcon($TrayRegedit, "regedit.exe", 0)
_TrayItemSetIcon($TrayExit, "shell32.dll", -28)

While 1
Switch GUIGetMsg()
Case $TrayCalc
Run("Calc.exe")
Case $TrayNotepad
Run("Notepad.exe")
Case $TrayCMD
Run("Cmd.exe")
Case $TrayRegedit
Run("regedit.exe")
Case $TrayExit
_TrayIconDelete($nTrayIcon1)
Exit
EndSwitch
WEnd

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192

Предыдущая тема: Quintura Search


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.