Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Закрытая тема
Настройки темы
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

(*.*)


Сообщения: 36561
Благодарности: 6694


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


Изменения
Автор: Vadikan
Дата: 21-01-2009
Описание: архив
Внимание!


В связи с созданием отдельного форума по AutoIt, эта тема переводится в архивное состояние. Если у вас есть вопрос, создайте новую тему или поднимите существующую, если в ней обсуждается аналогичная проблема.

Пожалуйста, не создавайте тем с названием "Помогите!" или "Нужна помощь по AutoIt". Это и так понятно Заголовок темы должен быть осмысленным.



Сайт программы
Русская справка
Коллекция AutoIt скриптов от Sanja Alone
Коллекция AutoIt скриптов от MSFN (могут быть устаревшие).


Справочник по командам rundll32 (команды запуска диалоговых окон и не только...)

AutoIt скрипты - введение и FAQ (статья содержит вводную информацию по AutoIt, а также ответы на ЧаВо).

Архивы старых тем по AutoIt или они же в 7z архиве (версии для печати) - 846 кб (настоятельно рекомендуется к прочтению/поиску)
(он же прикреплен в шапке)


Данная тема предназначена для общих вопросов по AutoIt. Вопросы по установке приложений при помощи AutoIt следует задавать в соответствии с правилами форума "Автоматическая установка приложений". Таким образом, если вы хотите узнать как установить Winamp 5.x при помощи AutoIt, то создайте тему [autoit] Winamp 5.х (если таковой еще нет на форуме). Проверить наличие тем можно при помощи поиска или фильтров.
Цитата Vadikan:
В теме уже свыше 500 сообщений и поиск нужной информации в ней усложняется. Есть предложение собрать все решения (скрипты) и разместить их на Wiki по принципу "один скрипт - одна статья wiki", добавляя статьи в категорию Autoit. Речь, в принципе, идет об общих решениях, а не о скриптах для установки конкретной программы. Название статьи, очевидно, должно отражать назначение скрипта. Затем можно в шапке просто разместить ссылки на статьи Wiki.

-------
Канал Windows 11, etc | Чат @winsiders

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:02, 05-02-2006

 

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


amel27, да, именно так! Спасибо огромное, все работает!

Отправлено: 20:49, 11-04-2008 | #431



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для KillHunter

Пользователь


Сообщения: 143
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата NikLok:
Может проще его удалять из AutoIt скрипта в конце?! »
Может и проще,но мне интересно понять где я ошибся....
Если напишешь как ярлык удалить буду благодарен.

-------
http://www.2ip.ru/bar/ip21.gif


Отправлено: 02:31, 12-04-2008 | #432


Аватара для Maza Faka

Ветеран


Сообщения: 604
Благодарности: 133

Профиль | Отправить PM | Цитировать


amel27
Подскажи пожалуйста, имеется такая функция:
Код: Выделить весь код
Global Const $FO_COPY = 0x0002
Global Const $FOF_ALLOWUNDO = 0x0040

_ExplorerCopy("d:\Video\Clips\New\02.avi", "C:\")

Func _ExplorerCopy($source, $dest)

    Local $SHFILEOPSTRUCT, $source_struct, $dest_struct

    $SHFILEOPSTRUCT = DllStructCreate("hwnd hWnd;uint wFunc;ptr pFrom;ptr pTo;int fFlags;" & _
                                      "int fAnyOperationsAborted;ptr hNameMappings;ptr lpszProgressTitle")

    $source_struct = DllStructCreate("char[" & StringLen($source) + 2 & "]")
    DllStructSetData($source_struct, 1, $source)
    DllStructSetData($source_struct, 1, 0, StringLen($source) + 2)

    $dest_struct = DllStructCreate("char[" & StringLen($dest) + 2 & "]")
    DllStructSetData($dest_struct, 1, $dest)
    DllStructSetData($dest_struct, 1, 0, StringLen($dest) + 2)

    DllStructSetData($SHFILEOPSTRUCT, "hWnd", 0)
    DllStructSetData($SHFILEOPSTRUCT, "wFunc", $FO_COPY)
    DllStructSetData($SHFILEOPSTRUCT, "pFrom", DllStructGetPtr($source_struct))
    DllStructSetData($SHFILEOPSTRUCT, "pTo", DllStructGetPtr($dest_struct))
    DllStructSetData($SHFILEOPSTRUCT, "fFlags", $FOF_ALLOWUNDO)

    DllCall("shell32.dll", "int", "SHFileOperation", "ptr", DllStructGetPtr($SHFILEOPSTRUCT))
EndFunc   ;==>_ExplorerCopy
В вышеуказанной функции копируется один файл, а как скопировать несколько файлов из одной директории?
Поискал в инете, нашёл такое описание:
Цитата:
pFrom
Указатель на буфер, содержащий пути к одному или нескольким файлам. Если файлов несколько, между путями ставится нулевой байт. Список должен заканчиваться двумя нулевыми байтами.
Пример для Дельфи:
Цитата:
Для удобства дальнейших экспериментов напишем функцию, создающую из массива строк буфер для передачи его в качестве параметра pFrom. После каждой строки в буфер вставляется нулевой байт, в конце списка - два нулевых байта.
Код: Выделить весь код

type TBuffer = array of Char;

procedure CreateBuffer( Names : array of string; var P : TBuffer );
var I, J, L : Integer;
begin
  for I := Low( Names ) to High( Names ) do
    begin
      L := Length( P );
      SetLength( P, L + Length( Names[ I ] ) + 1 );
      for J := 0 to Length( Names[ I ] ) - 1 do
        P[ L + J ] := Names[ I, J + 1 ];
      P[ L + J ] := #0;
    end;
  SetLength( P, Length( P ) + 1 );
  P[ Length( P ) ] := #0;
end;
Полдня бьюсь, не получается

Отправлено: 16:20, 12-04-2008 | #433


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Maza Faka,
Цитата Maza Faka:
В вышеуказанной функции копируется один файл, а как скопировать несколько файлов из одной директории? »
зависит от того как передавать список файлов в функцию - массивом, строкой с разделителями или еще как... заполнить структуру можно так:
Код: Выделить весь код
$sList = "File1" &Chr(0)& "File2" &Chr(0)& "File3" &Chr(0)&Chr(0)
$bList = StringToBinary($sList)

$iListLen = BinaryLen($bList)
$tList = DllStructCreate("byte["& $iListLen &"]")
DllStructSetData($tList, 1, $bList)

ConsoleWrite(DllStructGetData($tList,1) &@CRLF)
З.Ы. В примере на DELFI каждая строка заносится в структуру отдельной командой со сдвигом (чтобы оставлять нулевые байты), в моем примере сначала формируем искомую строку, которую потом сохраняем в структуре.
Это сообщение посчитали полезным следующие участники:

Отправлено: 06:27, 13-04-2008 | #434


Аватара для Maza Faka

Ветеран


Сообщения: 604
Благодарности: 133

Профиль | Отправить PM | Цитировать


amel27
Низкий тебе поклон за помощь и отличный пример! В жизни бы не додумался преобразовать строку в бинарник. А я ведь пытался формировать строку с Chr(0) вот по этому примеру:
Цитата:
uses ShellApi;
...
var SHFileOpStruct:TSHFileOpStruct;
From:array [0..255] of Char;
begin
From:='D:\1.txt'+#0+'D:\2.txt'+#0+#0;
with SHFileOpStruct do begin
Wnd:=Handle;
wFunc:=FO_COPY;
pFrom:=@From;
pTo:='D:\';
fFlags:=FOF_RENAMEONCOLLISION;
fAnyOperationsAborted:=False;
hNameMappings:=nil;
lpszProgressTitle:=nil;
end;
SHFileOperation(SHFileOpStruct);
end;
да только безуспешно, так, как символы после первого нулевого байта игнорировались. Ещё раз огромное спасибо!

P.S.
Интересно, а почему на Дельфи такое формирование строки получается, а на AutoIt-е нужно преобразовывать в бинарный код?

-------
Сообщение помогло? Не забудьте нажать на Полезное сообщение


Последний раз редактировалось Maza Faka, 13-04-2008 в 09:21.


Отправлено: 09:10, 13-04-2008 | #435


Новый участник


Сообщения: 14
Благодарности: 0

Профиль | Отправить PM | Цитировать


Можно ли написать скрипт который бы включал и отключал сетевую плату через диспетчер устройств?

Отправлено: 19:28, 13-04-2008 | #436


Ветеран


Сообщения: 825
Благодарности: 50

Профиль | Отправить PM | Цитировать


KillHunter,
Цитата KillHunter:
Если напишешь как ярлык удалить буду благодарен. »
Ну это детский вопрос и возможно мой ответ будет правильным.
Ярлык это файл с расширением lnk. Поэтому удалив этот файл ты удалишь ярлык.
Вот например я удаляю тотал мандер из автозапуска:
Код: Выделить весь код
	If FileExists(@StartupDir & "\Total Commander.lnk") Then
	   FileDelete(@StartupDir & "\Total Commander.lnk")
	EndIf
Аналогично с программами.
Когда хочешь удалить из панели быстрого запуска просто нужно правильно указать положение файла.
Это скорре всего что- то типа
Код: Выделить весь код
 @UserProfileDir & "\Application Data\Microsoft\Internet Explorer\Quick Launch\Твоя программа.lnk"

Отправлено: 21:43, 13-04-2008 | #437


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Maza Faka,
Цитата:
почему на Дельфи такое формирование строки получается, а на AutoIt-е нужно преобразовывать в бинарный код? »
ну хотя бы потому, что AutoIT не поддерживает указатели на переменные (в данном случае строковые) - только на структуры, поэтому приходится формировать структуру в два приема: сначала создаем строку (так же как в DELFI), потом присваиваем (т.е. "копируем") это значение в структуру... но при выполнении последней операции (копирования строки) AutoIT просто обязан оборвать строку на первом нулевом байте (конец строки!), только бинарные строки позволяют содержать нулевые байты (как в юникоде)


KillHunter
Цитата:
мне интересно понять где я ошибся »
похоже, что при входе в окно выбора компонент курсор находится совсем не в том месте где предполагалось - не на выборе режима (Standard/Custom), а уже на списке компонент, т.е. первый TAB будет лишний... Самое неприятное, что при таком положении "SPACE" отрабатывает не на компоненте ярлыка, а на кнопке "Next" что сбивает весь дальнейший ход установки. И еще неприятный момент - если вручную вернуться на этап выбора компонент (через "Back") курсор встанет как и положено на "Standard/Custom".

Цитата KillHunter:
Всё равно ярлык остаётся »
все оказалось не так просто - галка снимается, но до установщик "не догоняет", что компоненту не нужно ставить... тем не менее выход есть - использовать новую ф-цию _GUICtrlTreeView_ClickItem(), но она доступна пока только в бэте:
Код: Выделить весь код
#include <GuiTreeView.au3>

$Title='DAEMON

WinWait($Title,"Choose Components")
$hDTCtrl = ControlGetHandle($Title, "", "SysTreeView321")  ; ищем элемент окна
$hDTItem = _GUICtrlTreeView_FindItem($hDTCtrl, "Desktop Shortcut") ; ищем нужный пункт списка

WinActivate($Title,"Choose Components")
WinWaitActive($Title,"Choose Components")
_GUICtrlTreeView_ClickItem ($hDTCtrl, $hDTItem)
Это сообщение посчитали полезным следующие участники:

Отправлено: 04:07, 14-04-2008 | #438


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата MaxxQ:
Можно ли написать скрипт который бы включал и отключал сетевую плату через диспетчер устройств? »
Насколько важно именно через Диспетчер устройств?.. AFAIK через "сетевые подключения" можно добиться такого же результата... Как альтернатива для Висты можно использовать WMI, для 2К/XP - утилиту DevCon... думаю можно замутить аналогичное и в AutoIT через SetupAPI но вопрос: насколько это необходимо?
Код: Выделить весь код
Func _NetConnection_Disable($sConnectionName)
    Local $sFolderName = "Сетевые подключения"
    Local $sVerbDisable= "&Отключить"

        Local $oNetConnections, $oConnection
    Local $oShellApp = ObjCreate("Shell.Application")
    Local $oControlPanel = $oShellApp.Namespace(3)
    For $oFolderItem In $oControlPanel.Items
        If $oFolderItem.Name = $sFolderName Then
            $oNetConnections = $oFolderItem.GetFolder
            ExitLoop
        EndIf
    Next
    If Not(IsObj($oNetConnections)) Then Return SetError(1, 0, False)
    For $oFolderitem In $oNetConnections.Items
        If StringInStr($oFolderitem.Name, $sConnectionName) Then
            $oConnection = $oFolderitem
            ExitLoop
        EndIf
    Next
    If Not(IsObj($oConnection)) Then Return SetError(2, 0, False)
    $oConnection.InvokeVerb($sVerbDisable)
    Sleep(1000)
EndFunc

Отправлено: 10:29, 14-04-2008 | #439


Аватара для TERMINAL

Ветеран


Сообщения: 753
Благодарности: 28

Профиль | Отправить PM | Цитировать


amel27, что-то попробовал скомпелировать чаты по твоей ссылке-все ошибки выдают

-------
Автоматизация прежде всего....


Отправлено: 12:50, 14-04-2008 | #440



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[архив - Часть 2] AutoIt скрипты Vadikan AutoIt 985 21-01-2008 09:58
Вопрос - [Архив] Антивирусные программы - ОБЩИЕ ВОПРОСЫ FOX RED Защита компьютерных систем 67 21-11-2007 15:05
[Архив - Часть 1.3] AutoIt скрипты biork AutoIt 503 09-06-2007 11:27
[Архив - Часть 1.2] AutoIt скрипты Dirk Diggler AutoIt 505 02-12-2006 11:00
[Архив - Часть 1.1] AutoIt скрипты EgOrus AutoIt 335 04-02-2006 16:58




 
Переход