Войти

Показать полную графическую версию : [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 [54] 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78

Maza Faka
03-11-2008, 15:07
Busel
Так?

FileCreateShortcut(@ScriptDir & "\program.exe", @ScriptDir & "\MyProgram.lnk", @ScriptDir, "Setup.exe -uninstall")

Ты бы код запостил, что бы нам не гадать, какой параметр куда лепить :)

Babullika, получается что все файлы копируются с одинаковыми префиксами »
И правильно получается, ты ведь функцию Random() один раз вызываешь :)
Попробуй так:
$source = "C:\Temp2"
$dest = "C:\Temp3"

$hSearch = FileFindFirstFile($source & "\*.txt")
If $hSearch = -1 Then Exit

While 1
$file = FileFindNextFile($hSearch)
If @error Then ExitLoop

Do
$UnicFile = Random(-10, 10, 1) & ".txt"
Until FileExists($dest & "\" & $UnicFile) = 0

FileCopy($source & "\" & $file, $dest & "\" & $UnicFile, 9)
WEnd

FileClose($hSearch)
Если количество файлов будет превышать количество вариантов чисел возвращаемых Random(), то цикл Do... Until зациклится

amel27
03-11-2008, 17:30
Creat0R

видимо не ту версию скачал (нужно ту что для 3.2.10.0) - Ведь если вызывать функции постоянно это уже и будет динамический »
вроде ту, хотя их там многовато... у тебя вроде одна CallBack-функция и регистрируется/удаляется она единожды, вот если бы функция обработки каждого нового контрола регистрировалась как отдельная CallBack-функция, пожалуй тогда бы это было динамическое создание/удаление хэндлов :)

проблема есть, и заключается она в том, что Аутоит "вылетает" когда от него это не ожидается »
ну это все-таки баг и не более... кроме того, как я понял - если обеспечить парность создания/закрытия хэндлов, то ошибки не будет?.. создание парных UDF создания/освобождения косвенно решает эту задачу

А как быть с LAST_HOVERED_ELEMENT? »
извиняюсь, глубоко не вдавался... действительно, WM_TIMER не способен передавать пользовательские данные (в отличие от других WM-сообщений), поэтому хистори придется хранить в глобальных данных, хотя это принципиально ничего не меняет кроме количества параметров в UDF

этого не будет достаточно если нужно чтобы обработка OnHover была и при не активном GUIможет быть... мне все же привязка к GUI кажется искусственной, хотя обобщить при желании не проблема :)

Creat0R
03-11-2008, 23:33
amel27, у тебя вроде одна CallBack-функция и регистрируется/удаляется она единожды »
В том то и дело что нет, она регистрируется/удаляется каждый раз как нужно задать/убрать «OnHover» для элемента (если это первый или последний элемент в списке/в массиве). Я это продемонстрировал в примере ранее (http://forum.oszone.net/post-941571.html#post941571).

если обеспечить парность создания/закрытия хэндлов, то ошибки не будет? »
Тут видимо проблема в том, что если регистрировать и освобождать CallBack в цикле (быстро), то процесс высвобождения не успевает завершиться (видимо он происходит на "уровне системы"), а в то время происходит попытка высвобождения хендла, который уже считается высвобождённым :clever-ma . Вот такая вот сомнительная теория :).

привязка к GUI кажется искусственной, хотя обобщить при желании не проблема »
Согласен. Ну, если народу сильно нужно будет, попробую усовершенствовать, добавив поддержку внешних элементов, а пока сей функционал никому (и мне в том числе) вроде не нужен.

morgan1991
04-11-2008, 15:04
Скажите пожалуйста можно ли вот это C++ реализовать в Autoit3:
#include <windows.h>
#include <stdio.h>
#include <iostream>

using namespace std;
//hier werden alle Bytes definiert die wir brauchen
//(sie werden spдter an die entsprechenden Speicherstellen geschrieben).

BYTE nametags1[6] = { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90};
BYTE nametags2[2] = { 0x90, 0x90};

BYTE laser1[2] = { 0x75, 0x18};
BYTE laser2[2] = { 0x75, 0x0F};

BYTE UAV[4]= { 0xB0, 0x01, 0x90, 0xC3};

BYTE recoil[6] = { 0x0F, 0x85, 0xAA, 0x02, 0x00, 0x00};

int main()
{

cout << "Call of Duty 4 MemoryHack\ncoded by root.\n";
bool beenden=1;
while(beenden=1) //Diese Schleife lдuft so lange bis das Programm sich beendet, um Spaghetticode (goto x) zu verhidern.
{

cout << "Was willst du tun?\n0=‚л室 1=Џ®¤бўҐвЄ* *ЁЄ®ў 2=Laser 3=Radar 4=Verbugtes NoRecoil\n";
int eingabe=0;
cin>>eingabe;
if(eingabe==0)
{
return 0;
}
cout << "Searching for Cod4... \n";
HWND window = NULL;
while(window == NULL)
{
Sleep(100);
window = FindWindow(NULL, "Call of Duty 4"); //Finde das Call of Duty 4 Fenster (Danke an KN4CK3R fьr diesen Teil)
}
DWORD prozess;
GetWindowThreadProcessId(window, &prozess);
HANDLE handle;
handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, prozess);
DWORD puffer = NULL;
cout << "Writing to Memory... \n"; //Jetzt ьberprьfen wir, was der Benutzer denn eigentlich will
switch(eingabe)
{
case 1:
WriteProcessMemory(handle,(void*)(0x42E1AC),&nametags1,6,&puffer);
WriteProcessMemory(handle,(void*)(0x42E1CE),&nametags2,2,&puffer);
break;
case 2:
WriteProcessMemory(handle,(void*)(0x456E5B),&laser1,2,&puffer);
WriteProcessMemory(handle,(void*)(0x456E52),&laser2,2,&puffer);
break;
case 3:
WriteProcessMemory(handle,(void*)(0x56B662),&UAV,4,&puffer);
break;
case 4:
WriteProcessMemory(handle,(void*)(0x457C79),&recoil,6,&puffer);
break;
}
CloseHandle(handle); //Und brav wieder schlieЯen


}
return 0;
}

Creat0R
04-11-2008, 15:23
можно ли вот это C++ реализовать в Autoit3 »
Думаю можно, см. в сторону этих функции:

#include <WinAPI.au3>

_WinAPI_WriteProcessMemory()
_WinAPI_GetWindowThreadProcessId()
_WinAPI_OpenProcess()
_WinAPI_CloseHandle()

morgan1991
04-11-2008, 15:29
спс, только у меня autoit-v3.2.8.1, а внем такое есть?

Creat0R
04-11-2008, 23:16
morgan1991, у меня autoit-v3.2.8.1, а внем такое есть? »
Нет, но раньше использовалась библиотека A3LLibrary для подобных целей, там это вроде есть. Остатки библиотеки можно поискать по оф. форуму, если не найдётся, то постараюсь найти у себя.

Но если есть возможность, лучше перейти на последнюю версию аутоита.

morgan1991
04-11-2008, 23:23
Не нету возможности, а на счёт библиотеки можно поподробнее?

Creat0R
05-11-2008, 01:33
можно поподробнее? »
WinAPI.zip (http://creator-lab.ucoz.ru/AutoIt/WinAPI.zip) (108 Kb) - Поместить содержимое в Папку\установки\AutoIt3\Include.

Правда при проверке синтаксиса ругается на параметры функции, это видимо только лишь ошибка синтакс чекера, сами функии вроде работают.

amel27
05-11-2008, 04:12
Creat0R
Я это продемонстрировал в примере ранее.
в упор не вижу в либе _GUICtrlUnSetOnHover :o ...а чем не устраивает, к примеру, такой вариант:
#include <GuiConstants.au3>
#include <GUICtrlSetOnHover_UDF_For 3.2.10.0.au3>

$GUI = GUICreate("Test Script", 300, 200)

$Button = GUICtrlCreateButton("Button", 20, 40, 60, 20)

For $i = 1 To 10
If Mod($i, 2) = 0 Then
_GUICtrlOnHoverSet($Button, "Hover_Func", "Leave_Hover_Func")
Else
_GUICtrlOnHoverUnSet($Button)
EndIf
Next

GUISetState(@SW_SHOW, $GUI)

_GUICtrlOnHoverStart()

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

_GUICtrlOnHoverStop()

morgan1991у меня autoit-v3.2.8.1у тебя консольный исходник и данные принимаются из StdIn, компиляция скрипта "в консоль" поддерживается только v3.2.12.0. Поэтому, либо обновляй версию, либо меняй источник данных - например, из файла

morgan1991
05-11-2008, 13:56
Creat0R, спс, а случайно не раскажешь как пользоваться командами?

#include <WinAPI.au3>
_WinAPI_WriteProcessMemory()
_WinAPI_GetWindowThreadProcessId()
_WinAPI_OpenProcess()
_WinAPI_CloseHandle()
»

Creat0R
05-11-2008, 14:04
amel27, в упор не вижу в либе _GUICtrlUnSetOnHover »
Извиняюсь, я видимо ещё не запостил последнюю версию, где эта функция добавлена :sorry: , прикрепил новый UDF к посту. Кстати, есть ещё и версия без DllCalbackRegister, на основе WM_TIMER, но там есть свои ограничения (привязка к фиктивному GUI).

чем не устраивает, к примеру, такой вариант »
Устраивает, также как и текущий. Хотя лишний раз вызывать функции мне кажется лишним. Тут это только пример показывающий баг у DllCallBackFree, не более.

компиляция скрипта "в консоль" поддерживается только v3.2.12.0 »
Но есть для ранних версиях патч (http://www.autoitscript.com/forum/index.php?s=&showtopic=59862&view=findpost&p=468043) ;).

Creat0R
05-11-2008, 14:08
morgan1991,
случайно не раскажешь как пользоваться командами? »
В справке есть описания параметров, я лично с этими функциям не работал ещё.

morgan1991
05-11-2008, 14:12
В справке есть описания параметров »
Качал последнюю справку с офф. сайта v3.2.5.4, позднее нету. Дак вот в ней описания и нету.
Может можно гдето скачать хотябы английский мануал?

Creat0R
05-11-2008, 18:27
Качал последнюю справку с офф. сайта »
Это не последняя версия справки (разве что если на русском).
Я говорил про справку в составе с AutoIt'ом (в последней версии).

morgan1991
05-11-2008, 18:57
Может можно гдето скачать хотябы английский мануал? »
Просто у меня нетвозможности ставить последнюю версию Autoit?

Creat0R
05-11-2008, 19:04
нетвозможности ставить последнюю версию Autoit »
Её не обязательно ставить, можно распаковать установщик тем же винраром и вытащить отдельно файл справки ;) (в крайнем случае 7zip'ом).

semiono
05-11-2008, 20:02
$InstallPath=@ProgramFilesDir & "\MediaStudio"

; Проверка установленной программы, собсно это и хочется закоментировать и пойти другим путём.
If FileExists(@ProgramFilesDir & "\Ulead Systems\Ulead MediaStudio Pro 8.0\veditor.exe") Then Exit

; Тута не скажу что ставиться, секрет ;-
ShellExecute("****.exe", "/verysilent", "$ScriptDir")

Blockinput(1)

Run("Ulead MediaStudio Pro 8.0.exe")

WinWaitActive("", "Welcome")
ControlClick("", "", "[Class:Button; Instance:1]", "left", 1)

WinWaitActive("", "License Agreement")
ControlClick("", "", "[Class:Button; Instance:2]", "left", 1)

WinWaitActive("", "Choose Destination Location")
ControlClick("", "", "[Class:Button; Instance:3]", "left", 1)
Send($InstallPath)
Sleep(800)
ControlClick("", "", "[Class:Button; Instance:1]", "left", 1)
Sleep(800)
ControlClick("", "", "[Class:Button; Instance:1]", "left", 1)
Sleep(800)
Send("{BS 32}")
Send($InstallPath & "\Preview")
Sleep(800)
ControlClick("", "", "[Class:Button; Instance:3]", "left", 1)
Sleep(800)
ControlClick("", "", "[Class:Button; Instance:6]", "left", 1)
Sleep(200)
ControlClick("", "", "[Class:Button; Instance:9]", "left", 1)
Sleep(800)
ControlClick("", "", "[Class:Button; Instance:2]", "left", 1)
Sleep(800)
ControlClick("", "", "[Class:Button; Instance:1]", "left", 1)

WinWaitActive("", "InstallShield Wizard Complete")
ControlClick("", "", "[Class:Button; Instance:4]", "left", 1)

Blockinput(0)

Вопросы:
1. Если установленна уже была программа, то при повторной установке откроется MsgBox с заголовком
"Uninstall blah-blah?" и двумя(ми) кнопкоми Yes, No. Довольно частая ситуация, хотелось бы какой нибудь
код предпринять, чтоб напр. Uninstall нажать. Но я не знаю что в If Then... EndIf вписать, подскажите?
Я пробовал так
Run("Ulead MediaStudio Pro 8.0.exe")
If
WinWaitActive("Uninstall", "") = 0 Then
....
else
ControlClick("", "", "[Class:Button; Instance:4]", "left", 1)
EndIf
не получается...
Как кстати указать чтоб все ошибки репортировались? Потому что в данном случае ошибки были, но молча было :)
2. Что меня удивило тут, то что Sleep действительно нужен! Иначе в многих местах не срабатывает и появляются пропуски... Но почему? Приложение большое - 128 мег, может от этого? Или тут какие-то спецэффекты в окнах. Я помню Sleep не использовал раньше вообще, или лучше всегда и везде так подстраховывать? Хотя я думаю лучше "быстрее" установить чем во время Sleep какоенить посторонее окно может выскочить? :)
3. Как правильно очищать поле ввода [C:\Program Fils\MyApp] ? Его бы выделить сначала, для уверенности,
но как-то всё коряво получается, того и гляди слетит.... Всё что у меня ума хватило это вбивать Send("{BS 32}")
Но зафокусировать поле ввода вообще не знаю как. ? Пожалуста отвечайте кодом, ато я в хелпе потеряюсь совсем...

morgan1991
05-11-2008, 22:08
semiono, я тоже както маялся над этим вопросом, вот решение, только не факт что оно комуто покажется хорошим, я в Autoit ещё не мастер:
Global $InstallPath=@ProgramFilesDir & "\MediaStudio"
Blockinput(1)
; Тута не скажу что ставиться, секрет ;-
ShellExecute("****.exe", "/verysilent", "$ScriptDir")
Run("Ulead MediaStudio Pro 8.0.exe")

While 1 = 1
$i = $i - 1
$install = WinWaitActive("", "Welcome", 1)
$deinstall = WinWaitActive("deinstall", "text", 1)
If $install = 1 Then install()
If $deinstall = 1 Then deinstall()
If $i = 1 Then MsgBox(16, "", "error")
WEnd

Func deinstall()
;Удаление проги
EndFunc

Func install()
ControlClick("", "", "[Class:Button; Instance:1]", "left", 1)
WinWaitActive("", "License Agreement")
ControlClick("", "", "[Class:Button; Instance:2]", "left", 1)
WinWaitActive("", "Choose Destination Location")
ControlClick("", "", "[Class:Button; Instance:3]", "left", 1)
Send($InstallPath)
Sleep(800)
ControlClick("", "", "[Class:Button; Instance:1]", "left", 1)
Sleep(800)
ControlClick("", "", "[Class:Button; Instance:1]", "left", 1)
Sleep(800)
Send("{BS 32}")
Send($InstallPath & "\Preview")
Sleep(800)
ControlClick("", "", "[Class:Button; Instance:3]", "left", 1)
Sleep(800)
ControlClick("", "", "[Class:Button; Instance:6]", "left", 1)
Sleep(200)
ControlClick("", "", "[Class:Button; Instance:9]", "left", 1)
Sleep(800)
ControlClick("", "", "[Class:Button; Instance:2]", "left", 1)
Sleep(800)
ControlClick("", "", "[Class:Button; Instance:1]", "left", 1)
WinWaitActive("", "InstallShield Wizard Complete")
ControlClick("", "", "[Class:Button; Instance:4]", "left", 1)
EndFunc

Blockinput(0)
Не забудь тыкнуть спасибо

можно распаковать установщик тем же винраром и вытащить отдельно файл справки (в крайнем случае 7zip'ом) »
Не хочет ни тот ни другой распаковывать говорит это не архив(((

semiono
05-11-2008, 23:17
А что надо распаковать? AutoIt? unattended.org.ua/unattended_soft/winrar/скачать_uniextract-1600 у меня распаковывает.
AutoIt3.chm v3.2.12.1: slil.ru/26305991




© OSzone.net 2001-2012