Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Кнопки на панели Ами - быстрый запуск торг терминала и т.д. Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
GREEN_X5



Зарегистрирован: 13.04.2012
Сообщения: 136

СообщениеДобавлено: Пн Июн 10, 2013 6:29 pm Ответить с цитатой Вернуться к началу

У кого-то подобное уже есть, кому-то это не нужно, мне показалось удобным, сделал, делюсь.
Собственно ничего сложного, никакой интеграции терминала в Ами, просто скрипты к кнопкам.

Image

Первая кнопка у меня запускает Quik с автоподстановкой логина и пароля.
Вторая открывает файл эксель (там у меня расчитываются суммарные позиции).
Третья делает резервную копию папки с Amibroker со всеми формулами и чартами, ибо нечаянная утеря наработок по формулам привела бы к принятию яда. )) Копируется умно, без дублирования, только измененные папки, с итоговым логфайлом.
Всё одним нажатием кнопки, ибо скрипт рулит. Дальше напишу как быстро сделать, мож кто не знает.
Посмотреть профиль Отправить личное сообщение
GREEN_X5



Зарегистрирован: 13.04.2012
Сообщения: 136

СообщениеДобавлено: Пн Июн 10, 2013 7:36 pm Ответить с цитатой Вернуться к началу

Кнопка запуска QUIK (или по аналогии другого терминала)

На профильных конфах перерыты скрипты и выбран вот этот, т.к. корректно работает. vbscript потому что понятный, видно исходный код (без червей), запускается без окна, в отличие например от bat.
Код:
path = "info.exe"
login = "Логин"
pass = "Пароль"
set WshShell = WScript.CreateObject("WScript.Shell")
Set quik = WshShell.Exec(path)
Do Until Dummy = true
WScript.Sleep 500
Loop
Call Logon
Function Dummy
Dummy = false
If WshShell.AppActivate("Идентификация пользователя") then
Dummy = True
Exit Function
End If
End Function
Sub Logon
WshShell.SendKeys login
WshShell.SendKeys "{TAB}"
WScript.Sleep 500
WshShell.SendKeys pass
WScript.Sleep 500
WshShell.SendKeys "{Enter}"
End Sub

Создаем в корневой папке Quik текстовый файл, называем START, расширение меняем на vbs, открываем блокнотом, копируем внутрь этот скрипт, вместо "Логин" и "Пароль" вписываем свои, кавычки оставляем, сохраняем файл, запускаем двойным кликом мыши. Должен открыться и залогиниться QUIK. Если компьютер дохловат и запуск не удался, измените цифры 500 в трех местах кода например на 5000, тогда КВИК будет успевать получать все данные корректно. Если QUIK запускается, но ругается на отсутствие ключей, вероятно файл скрипта вы положили не в корневую папку. Если всё ОК, сделайте ярлык на раб. стол, так удобно запускать руками.
Теперь, как уже описано на этом форуме ранее, создаем в TOOLS Амиброкера команду в меню - TOOLS -> Customize -> Tools, топчем NEW, называем QUIK, указываем пути к файлу, директории (обязательно, иначе КВИК запустится без ключей и справочников),

Image

Image

везде OK, пробуем запускать скрипт из амиброкерского меню TOOLS -> QUIK. Если всё гуд, TOOLS -> Customize -> Toolbars, топчем NEW - создаем ноую панель, называем как хотим, активируем галкой, закладка Commands, строчка TOOLS, цепляем кнопку USER DEFINED TOOL 4 (если команда QUIK расположена четвертой после CUSTOMIZE в меню TOOLS на панели Ами) и тащим мышью на нашу новую панель. Теперь не закрывая окно Customize правой кнопкой мыши топчем на новую кнопку и помадим ей губки как хотим. Проверяем, пользуемся.

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


Дополнения:
1. Если после четвертой строчки скрипта добавить
Код:
WshShell.CurrentDirectory = "C:\QUIK"    '(укажите свой путь в папку с Квиком)

то можно файл скрипта размещать где угодно, оттуда и запускать.

2. Добавив в конце скрипта эмуляцию нажатия Ctrl+Shift+L получаем автозапуск вывода данных по DDE
Код:
WScript.Sleep 1000
WshShell.SendKeys "(+^L)"
или по аналогии другие команды горячими клавишами Квик.

Важно: Пока выполняется скрипт (а Квик неприлично долго подгружает справочники) убираем руки с клавы и мыши, ничего не жмем, чтобы не сбить фокус скрипта на Квик.


Последний раз редактировалось: GREEN_X5 (Ср Июн 12, 2013 2:34 pm), всего редактировалось 3 раз(а)
Посмотреть профиль Отправить личное сообщение
GREEN_X5



Зарегистрирован: 13.04.2012
Сообщения: 136

СообщениеДобавлено: Пн Июн 10, 2013 7:49 pm Ответить с цитатой Вернуться к началу

Кнопка резервного копирования Ами например в папку в корне диска C.

В корне диска C:\ создаем папку RESERV_AMI, внутри неё создаем папку Logs. В корне папки Ами создаем файл скрипта (см. ниже) и по полной аналогии с прежней инструкцией вешаем на новую кнопку. Запускаем, если скрипт рапортует об успехе, значит в созданной папке уже копия. Если ругается, что-то сделали не так (чудес не бывает).
Путей копирования можно указать множество, в т.ч. по сетке.
Скрипт (спасибо автору MasterLin http://www.masterlin.ru за образец)

Код:
' ========== Script Information  ==========
' autor:         MasterLin
' site:          http://www.masterlin.ru
' description:   Скрипт копирует файлы, папки и подпапки с одного источника на несколько, в сети или локально (рассылка файлов).
' При этом происходит проверка на наличие, доступность и время создания файлов. При отсутствии, либо старой версии файла
' происходит его копирование и замена на более новый.

'***********************************************
' Создание объектов оболочки и файловой системы
Set oShell = CreateObject("wscript.shell")
Set oFSO = CreateObject("Scripting.Filesystemobject")
Set WSNetwork = CreateObject("WScript.Network")
LogFolder = "c:\RESERV_AMI\Logs\" ' место расположения лог-файла
StartFolder = "..\AmiBroker\" ' откуда копируем
aEndFolder = array("c:\RESERV_AMI\") ' куда копируем

'***********************************************
' обнуление и описание счетчиков, используемых в скрипте
num_EndFolder = 0      '- общее число папок, места назначения для копируемых данных
num_EndFolder_0 = 0      '- не доступное кол-во папок из  num_EndFolder
num_files = 0         '- общее число обработанных файлов
num_files_copy = 0      '- из них скопировано с заменой на новую версию
err_files_copy = 0      '- из них не скопировано в результате ошибки при работе с num_files_copy
num_files_new = 0      '- из них скопировано новых файлов
err_files_new = 0      '- из них не скопировано в результате ошибки при работе с num_files_new
num_SubFolder = 0      '- обработано папок и подпапок
num_SubFolder_copy = 0      '- из них скопировано новых папок и подпапок
err_SubFolder = 0      '- из них не скопировано в результате ошибки при работе с num_SubFolder

'***********************************************

sLogName = "LogTemp_" & Date & "_" & Time
sLogName = Replace(sLogName, ".", "_")
sLogName = Replace(sLogName, ":", "_")
sLogName = LogFolder & sLogName
Set oLogFile = oFSO.CreateTextFile(sLogName & ".log",true)
oLogFile.WriteLine "========== Script Information  =========="
oLogFile.WriteLine "script name:   Reserv Copy Ami"
oLogFile.WriteLine "version:       1.0"
oLogFile.WriteLine "date:          08.06.2013"
oLogFile.WriteLine "autor:         Amibroker rus community"
oLogFile.WriteLine "site:          http://www.AmiSite.ru"
oLogFile.WriteLine "========== Запуск скрипта ==========" & vbCrLf

'***********************************************

Set oEndFolder = CreateObject("Scripting.FileSystemObject")
For i=0 to UBound (aEndFolder)
   num_EndFolder=num_EndFolder+1
   If oEndFolder.FolderExists ( aEndFolder(i) ) Then
      oLogFile.Writeline "Папка " & "'" & aEndFolder(i) & "'" & " доступна для работы" & vbCrLf
      CopyFolder StartFolder,aEndFolder(i)      
   else
      oLogFile.Writeline
      oLogFile.Writeline "Папка " & "'" & aEndFolder(i) & "'" & " в настоящий момент не доступна. Работа с ней прекращена." & vbCrLf
      WScript.Echo "Папка " & "'" & aEndFolder(i) & "'" & " в настоящий момент не доступна. Работа с ней прекращена."
      num_EndFolder_0=num_EndFolder_0+1
   End if
Next
oLogFile.WriteLine "========== Отчет о копировании ==========" & vbCrLf
oLogFile.WriteLine "Задано " & num_EndFolder & " целевых папок для резевного копирования данных."
oLogFile.WriteLine "Недоступно для работы целевых папок - " & num_EndFolder_0 & " шт. (см.логи выше)"
oLogFile.WriteLine "Обработано скриптом - " & num_files & " файлов."
oLogFile.WriteLine "Из них скопировано с заменой - " & num_files_copy & " шт., не скопировано в результате ошибки - " & err_files_copy & " шт."
oLogFile.WriteLine "Из них скопировано новых файлов - " & num_files_new & " шт., не скопировано в результате ошибки - " & err_files_new & " шт."
oLogFile.WriteLine "Обработано скриптом - " & num_SubFolder & " подпапок."
oLogFile.WriteLine "Из них скопировано новых подпапок - " & num_SubFolder_copy & " шт., не скопировано в результате ошибки - " & err_SubFolder & " шт."
oLogFile.WriteLine
oLogFile.WriteLine "========== Выполнение скрипта завершено ==========" & vbCrLf
WScript.Echo "Резервное копирование завершено."

Sub CopyFolder(sCopyFolder,sEndCopyFolder)
    Set oFolder = oFSO.GetFolder(sCopyFolder)
   Set oEndCopyFolder = oFSO.GetFolder(sEndCopyFolder)
    Set colFiles = oFolder.Files
    For each oFile in colFiles
      'oLogFile.Writeline "     Дата создания:"
      oLogFile.Writeline oFile & "     Дата создания:" & vbTab & oFile.DateCreated
      num_files=num_files+1
      If oFSO.FileExists(oFSO.BuildPath(oEndCopyFolder, oFile.Name)) Then
         oLogFile.Writeline "Такой файл уже существует в папке " & oEndCopyFolder
         oLogFile.Writeline "Проверка актуальность копии:"
         sFileEnd = oFSO.BuildPath(oEndCopyFolder, oFile.Name)
         Set oFileEnd = oFSO.GetFile(sFileEnd)
         If oFileEnd.DateLastModified < oFile.DateLastModified Then
            oLogFile.Writeline "Копия файла устарела, Обновление.     **********" & vbCrLf
            oFSO.CopyFile oFile, sEndCopyFolder & oFile.Name, True
            if err.Number <> 0 then
               oLogFile.Writeline "-----> Error # " & CStr(Err.Number) & " " & Err.Description
               Err.Clear
               err_files_copy=err_files_copy+1
            else
               num_files_copy=num_files_copy+1            
            End if
         else
            oLogFile.Writeline "Копия актуальна." & vbCrLf
         End if
      else
         oLogFile.Writeline "Это новый файл. " & oEndCopyFolder & " Резервное копирование." & vbCrLf
         oFSO.CopyFile oFile, sEndCopyFolder & oFile.Name, True
         if err.Number <> 0 then
            oLogFile.Writeline "-----> Error # " & CStr(Err.Number) & " " & Err.Description
            Err.Clear
            err_files_new=err_files_copy+1
         else
            num_files_new=num_files_copy+1            
         End if
      End if   
   Next
   oLogFile.Writeline "Обработка и копирование всех подпапок из папки " & oEndCopyFolder & vbCrLf
    Set colSubFolders = oFolder.SubFolders
    For Each oSubFolder In colSubFolders
      oLogFile.Writeline "Проверка подпапки " & oSubFolder
      num_SubFolder=num_SubFolder+1   
      If oFSO.FolderExists(oFSO.BuildPath(oEndCopyFolder, oFSO.GetBaseName(oSubFolder.Path))) Then
         oLogFile.Writeline "Такая подпапка уже существует в папке " & oEndCopyFolder
         oLogFile.Writeline vbCrLf & "Проверка всех файлов в подпапке: "
         sSubFolderEnd = oFSO.BuildPath(oEndCopyFolder, oFSO.GetBaseName(oSubFolder.Path)) & "\"
         CopyFolder oSubFolder, sSubFolderEnd         
         ' oLogFile.Writeline
      else      
         oLogFile.Writeline "Такая подпапка отсутствует в папке " & oEndCopyFolder & " Резервное копирование." & vbCrLf
         oFSO.CopyFolder oSubFolder, sEndCopyFolder, True
         if err.Number <> 0 then
            oLogFile.Writeline "-----> Error # " & CStr(Err.Number) & " " & Err.Description
            Err.Clear
            err_SubFolder=err_SubFolder+1
         else
            num_SubFolder_copy=num_SubFolder_copy+1         
         End if
      End if         
   Next
End Sub


Последний раз редактировалось: GREEN_X5 (Ср Июн 12, 2013 8:56 pm), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение
121212



Зарегистрирован: 13.11.2012
Сообщения: 12
Откуда: 111111

СообщениеДобавлено: Ср Июн 12, 2013 11:58 am Ответить с цитатой Вернуться к началу

Все хорошо работает, как определить иконку кнопки?
Посмотреть профиль Отправить личное сообщение
121212



Зарегистрирован: 13.11.2012
Сообщения: 12
Откуда: 111111

СообщениеДобавлено: Ср Июн 12, 2013 1:34 pm Ответить с цитатой Вернуться к началу

Скрипт работает хорошо, резервирует. Как сохранить полную структуру каталога Ами? Как нужно изменить скрипт для резервирования в ZIP или др сжатом формате?
Посмотреть профиль Отправить личное сообщение
GREEN_X5



Зарегистрирован: 13.04.2012
Сообщения: 136

СообщениеДобавлено: Ср Июн 12, 2013 2:30 pm Ответить с цитатой Вернуться к началу

Otokar писал(а):
Все хорошо работает, как определить иконку кнопки?

Резервируется вся папка Amibroker, если вы пути не меняли и файл скрипта положили в корень папки Amibroker. Не редактируются только настройки реестра, но это можно дописать код. Загляните в резервную папку и сравните с исходной - чего там не хватает??
По кнопке, как и написано выше - вызовите и не закрывайте окошко Customize из меню Амиброкера. Пока оно висит открытым, можно нажать на кнопку правой мышей и найти там все настройки - хоть выбирайте иконку, хоть свою рисуйте.
По зип архиву посмотрю позже, есть вроде готовый код.
Посмотреть профиль Отправить личное сообщение
121212



Зарегистрирован: 13.11.2012
Сообщения: 12
Откуда: 111111

СообщениеДобавлено: Ср Июн 12, 2013 2:38 pm Ответить с цитатой Вернуться к началу

Все папки резервируются. Подкаталоги папки DATA первоначального АМИ разворачиваются в корень каталога резерва. Смотри Screen
Посмотреть профиль Отправить личное сообщение
121212



Зарегистрирован: 13.11.2012
Сообщения: 12
Откуда: 111111

СообщениеДобавлено: Ср Июн 12, 2013 2:50 pm Ответить с цитатой Вернуться к началу

По изображению кнопки получилось. Спс
Посмотреть профиль Отправить личное сообщение
GREEN_X5



Зарегистрирован: 13.04.2012
Сообщения: 136

СообщениеДобавлено: Ср Июн 12, 2013 8:51 pm Ответить с цитатой Вернуться к началу

Здесь скрипт архивации
http://yadi.sk/d/D4GtvRzQ5kfpG
Всю папку положить в корень диска C:\, внутри экзешник архиватора 7z и файл скрипта, в котором нужно проверить путь к папке Амиброкера (строка 17 кода). Сейчас
Код:
StartFolder = "C:\Program Files\AmiBroker\"

у кого то может быть
Код:
StartFolder = "C:\Program Files (x86)\AmiBroker\"

или ещё как-н. Проверить имя тома, "С:\" или нет. Цеплять к кнопке Ами как обычно. Скрипт сам обращается к архиватору, по окончании работы рапортует и напоминает куда положил. При повторной архивации в течении дня переписывает архив заново. На следующий день уже будет создавать другой архив (в названии архивов дата). Накапливает логи в той же папке.
Посмотреть профиль Отправить личное сообщение
GREEN_X5



Зарегистрирован: 13.04.2012
Сообщения: 136

СообщениеДобавлено: Ср Июн 12, 2013 8:58 pm Ответить с цитатой Вернуться к началу

Otokar писал(а):
Все папки резервируются. Подкаталоги папки DATA первоначального АМИ разворачиваются в корень каталога резерва. Смотри Screen

Попробуй вот в этой строчке косой слэш поставить
было
Код:
StartFolder = "..\AmiBroker" ' откуда копируем

стало
Код:
StartFolder = "..\AmiBroker\" ' откуда копируем
Посмотреть профиль Отправить личное сообщение
121212



Зарегистрирован: 13.11.2012
Сообщения: 12
Откуда: 111111

СообщениеДобавлено: Пт Июн 14, 2013 6:59 pm Ответить с цитатой Вернуться к началу

Не працює. Попробую сам, ты дал направление мысли, за что - дякую.
Посмотреть профиль Отправить личное сообщение
GREEN_X5



Зарегистрирован: 13.04.2012
Сообщения: 136

СообщениеДобавлено: Сб Июн 15, 2013 4:56 pm Ответить с цитатой Вернуться к началу

Otokar писал(а):
Не працює. Попробую сам, ты дал направление мысли, за что - дякую.

Та нема за що.
хз, у меня все работает. Путь нужно просто правильно прописать. И слэш косой в конце пути.

Image
Посмотреть профиль Отправить личное сообщение
GREEN_X5



Зарегистрирован: 13.04.2012
Сообщения: 136

СообщениеДобавлено: Пн Мар 10, 2014 9:34 am Ответить с цитатой Вернуться к началу

Пришел к тому, что мне удобен одновременный запуск QUIK и Амиброкер кликом по одному ярлычку на рабочем столе. Поэтому модифицировал код vbs.
Создаем текстовый файл, называем его например start, копируем туда код, в первые четыре строчки подставляем свои логин, пароль и пути, сохраняем, меняем расширение файла на vbs, получается имя файла start.vbs , помещаем файл в папку QUIK, на рабочем столе создаем ярлык для этого файла.
Кликаем по ярлыку - запускаются QUIK (с автоподстановкой пароля) и Амиброкер. Теперь код проверяет наличие уже запущенных процессов, поэтому если какая-то программа уже запущена - второй раз не запускается. Если уже были запущены обе - не запустится ничего.
Внимание! Для корректной автоподстановки логина и пароля в QUIK логин и пароль должны содержать только цифры!!!

Код:
login = "111"        'Логин для Quik
pass = "222"  'Пароль для Quik
patchQUIK="C:\QUIK\info.exe"      'Путь к Quik
patchAMI="C:\Program Files (x86)\AmiBroker"  'Путь к Амиброкер

Set objService = GetObject("WinMgmts:\\.\Root\CIMV2")
Set colProcesses = objService.ExecQuery("select * from Win32_Process WHERE Name='Winros.EXE'")
If colProcesses.Count < 1 Then
set WshShell = WScript.CreateObject("WScript.Shell")
createobject("Wscript.Shell").run patchQUIK
Do Until Dummy = true
WScript.Sleep 100
Loop
Call Logon
Function Dummy
Dummy = false
If WshShell.AppActivate("Идентификация пользователя") then
Dummy = True
Exit Function
End If
End Function
Sub Logon
WshShell.SendKeys login
WshShell.SendKeys "{TAB}"
WScript.Sleep 100
WshShell.SendKeys pass
WScript.Sleep 100
WshShell.SendKeys "{Enter}"
End Sub
WScript.Sleep 100
End If
Set objService = GetObject("WinMgmts:\\.\Root\CIMV2")
Set colProcesses = objService.ExecQuery("select * from Win32_Process WHERE Name='Broker.EXE'")
If colProcesses.Count < 1 Then
Set wshShell = WScript.CreateObject("WScript.Shell")
WshShell.CurrentDirectory = patchAMI
createobject("Wscript.Shell").run "Broker.exe"
End If
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen