ShmelOmaticay
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору #cs ---------------------- Приложение: игры от Reflexive (в принципе, любые игры, запакованные InnoSetup - ес-но, для других игр нужно будет выбросить часть кода, отвечающую за активацию) Автор скрипта: Sanja Alone (http://forum.oszone.net/member.php?userid=28800) На каких играх тестировалось: 10TalismansSetup.exe 7LandsSetup.exe 7WondersSetup.exe AbraAcademySetup.exe ActionBallSetup.exe AliceGreenfingersSetup.exe AlienStarsSetup.exe AncientSudokuSetup.exe AncientTrijongSetup.exe AncientTripeaksIISetup.exe AngkorSetup.exe AstroFurySetup.exe AtlantisAdventureSetup.exe AtlantisSetup.exe AztecBricksSetup.exe BeadsSetup.exe Bejeweled2DeluxeSetup.exe BigKahunaReef2Setup.exe BigKahunaReefSetup.exe BigKahunaWordsSetup.exe BookwormAdventuresDeluxeSetup.exe BookwormDeluxeSetup.exe BoomVoyageSetup.exe BrainBoosterSetup.exe BricksOfEgyptSetup.exe BricktopiaSetup.exe BrixoutXPSetup.exe BubblefishBobSetup.exe BugatronWorldsSetup.exe CactusBruceSetup.exe CannonBlastSetup.exe CashCowSetup.exe CashOutSetup.exe CasinoIslandToGoSetup.exe CathysCaribbeanClubSetup.exe Chainz2Setup.exe ChameleonGemsSetup.exe CharmTaleSetup.exe ChickenChaseSetup.exe ChickenInvaders3Setup.exe CityMagnateSetup.exe ClickOPackSetup.exe CosmicBugsSetup.exe DaVincisSecretSetup.exe DeathOnTheNileSetup.exe DemocracySetup.exe DinerDashFloOnTheGoSetup.exe DNASetup.exe DropEmDeluxeSetup.exe DruidsBattleOfMagicSetup.exe DynastySetup.exe EasterBonusSetup.exe EgyptoidSetup.exe EliteMahjongSetup.exe EvilInvasionSetup.exe FairiesSetup.exe FamilyFeudHollywoodSetup.exe FlipOrFlopSetup.exe FlipWords2Setup.exe FlowerShopBigCityBreakSetup.exe FluffEmUpSetup.exe FroggysAdventuresSetup.exe FruitFallSetup.exe GardenDreamsSetup.exe GemSliderDeluxeSetup.exe GemsweeperSetup.exe GishSetup.exe HappyHourSetup.exe HiddenExpeditionTitanicSetup.exe HideAndSecretSetup.exe IceCreamTycoonSetup.exe IcePuzzleDeluxeSetup.exe IncaBallSetup.exe IncaQuestSetup.exe InSpherationSetup.exe JetJumperSetup.exe JewelMatchSetup.exe JewelMinerSetup.exe JewelQuestSetup.exe JewelsOfCleopatraSetup.exe LEGOChicBoutiqueSetup.exe LotusDeluxeSetup.exe LucyQDeluxeSetup.exe LuxorAmunRisingSetup.exe LuxorSetup.exe MagicAcademySetup.exe MagicBall2NewWorldsSetup.exe MagicMatchTheGeniesJourneySetup.exe MahjongEscapeAncientJapanSetup.exe MahjongFortuna2DeluxeSetup.exe MahjongGardenToGoSetup.exe MahjongTalesAncientWisdomSetup.exe MauiWoweeSetup.exe MerriamWebstersSpellJamSetup.exe MosaicTombofMysterySetup.exe MysteryOfSharkIslandSetup.exe MysterySolitaireSecretIslandSetup.exe MysticInnSetup.exe NeonWarsSetup.exe OceanExpressSetup.exe PandaCrazeSetup.exe PaparazziSetup.exe PeggleDeluxeSetup.exe PennyPuzzleSetup.exe PipelineSetup.exe PiratePoppersSetup.exe PizzaPanicSetup.exe PrivateEyeGreatestUnsolvedMysteriesSetup.exe ProfitvilleSetup.exe PuzzleDetectiveSetup.exe RageOfMagic2Setup.exe RealmsOfGoldSetup.exe RhombisSetup.exe RicochetInfinitySetup.exe RIPStrikeBackSetup.exe RiskIISetup.exe RockFrenzySetup.exe RomanBowlSetup.exe SaintsAndSinnersBingoSetup.exe SaintsAndSinnersBowlingSetup.exe SewerRunSetup.exe SheeplingsSetup.exe ShopmaniaSetup.exe SlingoQuestSetup.exe SnakyJakeSetup.exe SpaceboundSetup.exe SparkleSetup.exe SpinandPlaySetup.exe SproinkSetup.exe SudokuMayaGoldSetup.exe SudokuPagodaSetup.exe SuperCollapsePuzzleGallerySetup.exe SuperGranny3Setup.exe SuperSlyderSetup.exe TalismaniaSetup.exe TempleOfBricksSetup.exe TempleOfTangramSetup.exe TheApprenticeSetup.exe TheLegendOfElDoradoSetup.exe ThePoppitShowSetup.exe TheRiseOfAtlantisSetup.exe ThwartPokerSetup.exe TiksTexasHoldEmSetup.exe TileQuestSetup.exe TimelineSetup.exe TinosFruitStandSetup.exe TreasureOfPersiaSetup.exe TubeTwistSetup.exe TumbleBugsSetup.exe WestwardSetup.exe WildWestBillySetup.exe WonderlandAdventuresSetup.exe WordKrispiesSetup.exe WordWhackySetup.exe WorldClassSolitaireSetup.exe ZenPuzzleGardenSetup.exe ZodiacSetup.exe Какие игры нельзя установить/активировать этим скриптом: BudRedheadSetup.exe - нельзя активировать, т.к. запускается сама игра в полноэкранном режиме, а не окно активации CrimsonlandSetup.exe - нельзя активировать, т.к. запускается сама игра в полноэкранном режиме, а не окно активации (в новых версиях запускается launcher) RicochetLostWorldsSetup.exe - нельзя активировать, т.к. запускается сама игра в полноэкранном режиме, а не окно активации PokerPopSetup.EXE - нельзя установить, т.к. используется другой инсталлятор (Wise) ---------------------- #ce ;предотвращение возможности множественного запуска скрипта If WinExists(@ScriptName) Then Exit AutoItWinSetTitle(@ScriptName) ;Отображать текущую строку сценария с помощью индикатора системной панели в режиме отладки. AutoItSetOption("TrayIconDebug", 1) ;убийство процесса "Punto Switcher" If ProcessExists ( "ps.exe" )<>0 Then ProcessClose ( "ps.exe" ) ProcessWaitClose ( "ps.exe" ) EndIf ;блокируем мышь и клаву ;If @OSType="WIN32_NT" Then BlockInput ( 1 ) #cs ---------------------- объявление переменных ---------------------- $Keygen_1 - кейген для игр с ProductID начинающимся с цифры (старые) $Keygen_A - кейген для игр с ProductID начинающимся с "A" (не очень старые) $Keygen_C - кейген для игр с ProductID начинающимся с "C" (новые) $GamesSetupDir - каталог с установочными файлами игр (exe-файлами) $GamesInstallToDir - в какой каталог устанавливать игры (в этом каталоге будут созданы подкаталоги с именами, соотв-щими названиям игр) $programgroup - в какую программную группу положить подпапки с ярлыками игр $LnkMovefromDesktopTo - в какой каталог на "Рабочем столе" поместить ярлыки для запуска игр $NoIcons - (1 - не создавать ярлыки для игр: 0 - создавать) Это теоретически, а практически все равно не работает - ярлыки создаются в любом сл. $SettingsFile - путь и имя временного файла с настройками автоустановки игр (создается и заполняется данными с пом. этого скрипта) $firstrun_1, $firstrun_A, $firstrun_C - эти переменные нужны для того, чтобы многократно не запускать кейгены ---------------------- #ce Global $Keygen_1=@ScriptDir & '\raukgxmas-egoist.exe' Global $Keygen_A=@ScriptDir & '\KeyGen.exe' Global $Keygen_C=@ScriptDir & '\Reflexive 2006-July.exe' Global $GamesSetupDir=@ScriptDir & '\Games' Global $programgroup='Игры\Reflexive' Global $LnkMovefromDesktopTo=@DesktopDir & '\Reflexive' Global $NoIcons='0' Global $SettingsFile=@TempDir & '\settings.txt' Global $firstrun_1='yes' Global $firstrun_A='yes' Global $firstrun_C='yes' Global $h=1, $mute=0, $code, $ProductID, $GamesInstallToDir, $gTitle, $file, $i, $j, $type, $hwnd_1, $hwnd_A, $hwnd_C ;целевой каталог If $CmdLine[0] = 0 Then $GamesInstallToDir='C:\Games\Reflexive' Else $GamesInstallToDir=$CmdLine[1] EndIf If StringRight(StringStripWS($GamesInstallToDir,3),1)='\' Then $GamesInstallToDir=StringTrimRight($GamesInstallToDir,1) EndIf ;защита "от дурака" (проверка корректности пути целевого каталога, указанного в командной строке) If Not FileExists($GamesInstallToDir&'\') Then If DirCreate ( $GamesInstallToDir )=0 Then MsgBox(16,'Error','Directory <'&$GamesInstallToDir&'> can not be created' ) Exit EndIf EndIf #region CODE ;создание списка устанавливаемых игр (exe-файлов) $s=_FileListToArray($GamesSetupDir,"*.exe",1) ;основной цикл - установка и активация игр For $i=1 to UBound($s)-1 ;определение названия игры (имя файла без суффикса "Setup", а если этого суффикса нет - имя файла без расширения) $set=StringInStr($s[$i],"Setup") If $set<>0 Then $gamename=StringLeft($s[$i],$set-1) Else $gamename=StringLeft($s[$i],StringInStr($s[$i],".exe")-1) EndIf ;создание файла ответов для установки игры (режим перезаписи обязателен, т.к. для каждой игры исп-ся тот же самый файл ответов) $file=FileOpen($SettingsFile,2) FileWrite($file,'[Setup]'&@CRLF&'Lang=default'&@CRLF&'Dir='&$GamesInstallToDir&'\'&$gamename&@CRLF&'Group='&$programgroup&'\'&$gamename&@CRLF&'NoIcons='&$NoIcons&@CRLF&'Components='&@CRLF&'Verysilent=1'&@CRLF) FileClose($file) ;установка игры в автоматическом режиме RunWait($GamesSetupDir & '\' & $s[$i] & ' /loadinf="' & $SettingsFile & '"','',@SW_HIDE) #region activation ;активация $e=_FileListToArray($GamesInstallToDir&'\'&$gamename,"*.exe",1) For $j=1 to UBound($e)-1 ;запуск основного исполняемого файла игры (предварительно исключаем файлы, содержащие в имени "unin", "RAW", "SendBugReport.exe", "InstallBoard.exe", "installMauiWoweeSS.exe", "wfreport.exe", "FAKECD.EXE", "JetJumper.exe", "Language.exe", "SlgClientServicesRedists.exe", "ReceiveMessage.exe", "ResourceUnpacker.exe", "gish manual.exe", "glloader.exe", "Options.exe") If (StringInStr($e[$j],"unin")=0 and StringInStr($e[$j],"RAW")=0 and StringInStr($e[$j],"InstallBoard")=0 and StringInStr($e[$j],"SendBugReport")=0 and StringInStr($e[$j],"install")=0 and StringInStr($e[$j],"wfreport")=0 and StringInStr($e[$j],"FAKECD")=0 and StringInStr($e[$j],"JetJumper")=0 and StringInStr($e[$j],"Language")=0 and StringInStr($e[$j],"SlgClientServicesRedists")=0 and StringInStr($e[$j],"ReceiveMessage")=0 and StringInStr($e[$j],"ResourceUnpacker")=0 and StringInStr($e[$j],"gish manual")=0 and StringInStr($e[$j],"glloader")=0 and StringInStr($e[$j],"Options")=0) Then AutoItSetOption("WinTitleMatchMode",4) AutoItSetOption("MouseCoordMode",2) AutoItSetOption("SendKeyDelay",15) AutoItSetOption("SendKeyDownDelay",10) AutoItSetOption("WinWaitDelay",300) AutoItSetOption("MouseClickDownDelay",15) ;КЕЙГЕН - запуск If $firstrun_A='yes' Then mute() Run($Keygen_A) Do Sleep ( 200 ) $hwnd_A = WinGetHandle ( "classname=..:[ECLiPSE]:.." ) Until $hwnd_A <> "" WinWait ( $hwnd_A ) WinActivate ( $hwnd_A ) WinWaitActive ( $hwnd_A ) $firstrun_A='no' EndIf ;game (запуск основного исполняемого файла игры для активации) Run($GamesInstallToDir&'\'&$gamename&'\'&$e[$j]) Do Sleep ( 200 ) $hwnd_Game = WinGetHandle ( "classname=ReflexiveGameWrapper" ) Until $hwnd_Game <> "" WinWait ( $hwnd_Game ) Sleep(200) WinActivate ( $hwnd_Game ) WinWaitActive ( $hwnd_Game ) ;ОКНО АКТИВАЦИИ ИГРЫ - кнопка "Already Paid" MouseClick("left",635,435,1,0) Sleep (2500) ;определение типа активационного окна (0 - цифра; 2 - A; 5 - C) MouseClick("left",60,290,1,0) $type=MouseGetCursor() ;активация игры Select Case $type=5 ;ОКНО АКТИВАЦИИ ИГРЫ - ссылка "I'm not connected to the internet" Send ('+{TAB}') Send ('+{TAB}') Send ('+{TAB}') Send ('{ENTER}') ;ОКНО АКТИВАЦИИ ИГРЫ - переход к полю "Below is the product code for "название игры" on this computer" Sleep (100) Send ('+{TAB}') Send ('+{TAB}') Send ('+{TAB}') ;ОКНО АКТИВАЦИИ ИГРЫ - помещаем ProductID в буфер обмена Sleep (100) Send ('^{INS}') Sleep (100) $ProductID=ClipGet() ;ОКНО АКТИВАЦИИ ИГРЫ - переход к полю ввода кода Send ('{TAB}') Send ('{TAB}') Send ('{TAB}') ;КЕЙГЕН - запуск If $firstrun_C='yes' Then Run($Keygen_C) Do Sleep ( 200 ) $hwnd_C = WinGetHandle ( "Keygen for Magic Lanterns" ) Until $hwnd_C <> "" WinWait ( $hwnd_C ) $firstrun_C='no' EndIf ;КЕЙГЕН - переключение на окно кейгена WinActivate($hwnd_C) ControlSetText($hwnd_C,'','Edit1',$ProductID) Sleep(100) ;КЕЙГЕН - кнопка "Gen" ControlClick($hwnd_C,'','Button1') If WinWait('error','',1)=0 Then $code=ControlGetText($hwnd_C,'','Edit2') ClipPut($code) ;ОКНО АКТИВАЦИИ ИГРЫ - переход в окно ввода кода WinActivate($hwnd_Game) WinWaitActive($hwnd_Game) Sleep (100) Send ('+{INS}') Sleep (100) ;ОКНО АКТИВАЦИИ ИГРЫ - "Submit" Send ('{ENTER}') Sleep (100) Else NotReg() EndIf Case $type=0 Send ('{TAB}') Send ('{TAB}') ;ОКНО АКТИВАЦИИ ИГРЫ - помещаем ProductID в буфер обмена Sleep (100) Send ('^{INS}') Sleep (100) $ProductID=ClipGet() ;ОКНО АКТИВАЦИИ ИГРЫ - переход к полю ввода кода Send ('{TAB}') ;КЕЙГЕН - запуск If $firstrun_1='yes' Then mute() Run($Keygen_1) Do Sleep ( 200 ) $hwnd_1 = WinGetHandle ( "classname=TeaM TSRh Keygen" ) Until $hwnd_1 <> "" WinWait ( $hwnd_1 ) $firstrun_1='no' EndIf ;КЕЙГЕН - переключение на окно кейгена WinActivate($hwnd_1) ControlSetText($hwnd_1,'','Edit1',$ProductID) Sleep(100) $code=ControlGetText($hwnd_1,'','Edit2') If $code<>"It is not a Registration ID!" Then ClipPut($code) ;ОКНО АКТИВАЦИИ ИГРЫ - переход в окно ввода кода WinActivate($hwnd_Game) WinWaitActive($hwnd_Game) Sleep (100) Send ('+{INS}') Sleep (100) ;ОКНО АКТИВАЦИИ ИГРЫ - "Submit" Send ('{TAB}') Send ('{SPACE}') Sleep (100) Else NotReg() EndIf Case $type=2 ;ОКНО АКТИВАЦИИ ИГРЫ - закладка "Enter Unlock Code" Send ('+{TAB}') Send ('+{TAB}') Send ('{ENTER}') ;ОКНО АКТИВАЦИИ ИГРЫ - ссылка "Click Here to view your product ID" Sleep (100) Send ('{TAB}') Send ('{TAB}') Send ('{ENTER}') ;ОКНО АКТИВАЦИИ ИГРЫ - помещаем ProductID в буфер обмена Sleep (100) Send ('^{INS}') Sleep (100) $ProductID=ClipGet() ;ОКНО АКТИВАЦИИ ИГРЫ - кнопка "OK" Send ('{TAB}') Send ('{ENTER}') Sleep (100) ;ОКНО АКТИВАЦИИ ИГРЫ - переход к полю ввода кода Send ('+{TAB}') Send ('+{TAB}') ;КЕЙГЕН - переключение на окно кейгена WinActivate($hwnd_A) WinWaitActive($hwnd_A) ControlSetText($hwnd_A,'','Edit1',$ProductID) ;КЕЙГЕН - generate MouseClick("left",40,308,1,0) Sleep (450) $code=ControlGetText($hwnd_A,'','Edit2') If $code<>"Wrong Product ID!" Then ClipPut($code) ;ОКНО АКТИВАЦИИ ИГРЫ - переход в окно ввода кода WinActivate($hwnd_Game) WinWaitActive($hwnd_Game) ;ОКНО АКТИВАЦИИ ИГРЫ - переход в поле "Enter Unlock Code Here:" MouseClick("left",110,295,1,0) Sleep (100) Send ('+{INS}') Sleep (100) ;ОКНО АКТИВАЦИИ ИГРЫ - "Submit" Send ('{ENTER}') Sleep (3000) Else NotReg() EndIf Case Else MsgBox(48,'Warning','We have unsupported activation window type',7) EndSelect ;закрытие окна активации игры WinClose($hwnd_Game) WinWaitClose($hwnd_Game) $hwnd_Game="" EndIf Next #endregion activation Next ;закрытие кейгенов WinClose ( $hwnd_A ) WinClose ( $hwnd_C ) WinClose ( $hwnd_1 ) ;включение звука Send('{VOLUME_MUTE}') ;перенос ярлыков с "Рабочего стола" в папку на нем же ;("C:\Documents and Settings\Имя_пользователя\Рабочий стол" -> "C:\Documents and Settings\Имя_пользователя\Рабочий стол\Reflexive") $d=_FileListToArray(@DesktopDir,"*.lnk",1) For $i=1 to UBound($d)-1 $sc=FileGetShortcut(@DesktopDir & '\' & $d[$i]) If Not FileExists($LnkMovefromDesktopTo) Then DirCreate($LnkMovefromDesktopTo) ;если целевой файл ярлыка находится в каталоге $GamesInstallToDir If StringInStr($sc[0],$GamesInstallToDir) Then FileCopy(@DesktopDir & '\' & $d[$i], $LnkMovefromDesktopTo & '\', 1) FileDelete(@DesktopDir & '\' & $d[$i]) EndIf Next ;отключение блокировки мыши и клавы ;BlockInput ( 0 ) #endregion CODE ;---------------------------------------------- ; Ф-ции ;---------------------------------------------- #region FUNCTIONS Func _FileListToArray($sPath, $sFilter = "*", $iFlag = 0) Local $hSearch, $sFile, $asFileList[1] If Not FileExists($sPath) Then SetError(1) Return "" EndIf If (StringInStr($sFilter, "\")) or (StringInStr($sFilter, "/")) or (StringInStr($sFilter, ":")) or (StringInStr($sFilter, ">")) or (StringInStr($sFilter, "<")) or (StringInStr($sFilter, "|")) or (StringStripWS($sFilter, 8) = "") Then SetError(2) Return 0 EndIf If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then SetError(3) Return "" EndIf $asFileList[0] = 0 $hSearch = FileFindFirstFile($sPath & "\" & $sFilter) If $hSearch = -1 Then SetError(0) Return 0 EndIf While 1 $sFile = FileFindNextFile($hSearch) If @error Then ExitLoop If $iFlag = 1 Then If StringInStr(FileGetAttrib($sPath & "\" & $sFile), "D") <> 0 Then ContinueLoop EndIf If $iFlag = 2 Then If StringInStr(FileGetAttrib($sPath & "\" & $sFile), "D") = 0 Then ContinueLoop EndIf ReDim $asFileList[UBound($asFileList) + 1] $asFileList[0] = $asFileList[0] + 1 $asFileList[UBound($asFileList) - 1] = $sFile WEnd FileClose($hSearch) SetError(0) If $asFileList[0] = 0 Then Return "" Return $asFileList EndFunc ;==>_FileListToArray Func NotReg() If Not FileExists($LnkMovefromDesktopTo) Then DirCreate($LnkMovefromDesktopTo) $gTitle=WinGetTitle($hwnd_Game) $file = FileOpen($LnkMovefromDesktopTo & '\! NOT REGISTERED GAMES.txt',1) If $file <> -1 Then FileWriteLine($file,$h&'. '&$gTitle&@TAB&'('&$GamesInstallToDir&'\'&$gamename&')') $h=$h+1 EndIf FileClose($file) EndFunc ;==>NotReg Func mute() If $mute=0 Then ;выключение звука (чтобы кейген не шумел) Send('{VOLUME_MUTE}') $mute=1 EndIf EndFunc #endregion FUNCTIONS |