Jump to content

İleri düzey AutoIT örnekleri


sk8er_boi
 Share

Recommended Posts

Bir Sorum olacak.Ekran çözünürlüğünü geçici veya devamlı olarak değiştirebilirmiyiz.

Mesela şu an bilgisayarım 1024*768 çözünürlükte ama ben bunu 5 dk.lığına veya sürekli 1280*1024 yapmak istiyorum.

Link to comment
Share on other sites

Arkadaşlar Bende C:Documant and Setting-user-start menü-programlar-başlangıç'daki bir dosyayı silmek istiyorum autoıt kodu lazım bunun içinde

@ProgramsCommonDir & "\Başlangıç\a.exe"

burada a.exe senin sileceğin program adı.

Link to comment
Share on other sites

@recep demirci

Global $Desktop_With = @DesktopWidth
Global $Desktop_Height = @DesktopHeight

MsgBox(64,"Uygulanacak çözünürlülük!","1024 X 768")
_ChangeScreenRes(1024,768)
Sleep(5000); Sleeep komutuyla bekleme yapabilirsin (5 saniye)
MsgBox(64,"Uygulanacak çözünürlülük!",$Desktop_With & " X " & $Desktop_Height)
_ChangeScreenRes($Desktop_With,$Desktop_Height)

Func _ChangeScreenRes($i_Width = @DesktopWidth, $i_Height = @DesktopHeight, $i_BitsPP = @DesktopDepth, $i_RefreshRate = @DesktopRefresh)
    If Not IsDeclared("OpenUser32Dll") Then Local $OpenUser32Dll = @WindowsDir & "\system32\user32.dll"
    Local Const $DM_PELSWIDTH = 0x00080000
    Local Const $DM_PELSHEIGHT = 0x00100000
    Local Const $DM_BITSPERPEL = 0x00040000
    Local Const $DM_DISPLAYFREQUENCY = 0x00400000
    Local Const $CDS_TEST = 0x00000002
    Local Const $CDS_UPDATEREGISTRY = 0x00000001
    Local Const $DISP_CHANGE_RESTART = 1
    Local Const $DISP_CHANGE_SUCCESSFUL = 0
    Local Const $HWND_BROADCAST = 0xffff
    Local Const $WM_DISPLAYCHANGE = 0x007E
    If $i_Width = "" Or $i_Width = -1 Then $i_Width = @DesktopWidth; default to current setting
    If $i_Height = "" Or $i_Height = -1 Then $i_Height = @DesktopHeight; default to current setting
    If $i_BitsPP = "" Or $i_BitsPP = -1 Then $i_BitsPP = @DesktopDepth; default to current setting
    If $i_RefreshRate = "" Or $i_RefreshRate = -1 Then $i_RefreshRate = @DesktopRefresh; default to current setting
    Local $DEVMODE = DllStructCreate("byte[32];int[10];byte[32];int[6]")
    Local $b = DllCall($OpenUser32Dll, "int", "EnumDisplaySettings", "ptr", 0, "long", 0, "ptr", DllStructGetPtr($DEVMODE))
    If @error Then
        $b = 0
        SetError(1)
        Return $b
    Else
        $b = $b[0]
    EndIf
    If $b <> 0 Then
        DllStructSetData($DEVMODE, 2, BitOR($DM_PELSWIDTH, $DM_PELSHEIGHT, $DM_BITSPERPEL, $DM_DISPLAYFREQUENCY), 5)
        DllStructSetData($DEVMODE, 4, $i_Width, 2)
        DllStructSetData($DEVMODE, 4, $i_Height, 3)
        DllStructSetData($DEVMODE, 4, $i_BitsPP, 1)
        DllStructSetData($DEVMODE, 4, $i_RefreshRate, 5)
        $b = DllCall($OpenUser32Dll, "int", "ChangeDisplaySettings", "ptr", DllStructGetPtr($DEVMODE), "int", $CDS_TEST)
        If @error Then
            $b = -1
        Else
            $b = $b[0]
        EndIf
        Select
            Case $b = $DISP_CHANGE_RESTART
                $DEVMODE = ""
                Return 2
            Case $b = $DISP_CHANGE_SUCCESSFUL
                DllCall($OpenUser32Dll, "int", "ChangeDisplaySettings", "ptr", DllStructGetPtr($DEVMODE), "int", $CDS_UPDATEREGISTRY)
                DllCall($OpenUser32Dll, "int", "SendMessage", "hwnd", $HWND_BROADCAST, "int", $WM_DISPLAYCHANGE, _
                        "int", $i_BitsPP, "int", $i_Height * 2 ^ 16 + $i_Width)
                $DEVMODE = ""
                Return 1
            Case Else
                $DEVMODE = ""
                SetError(1)
                Return $b
        EndSelect
    EndIf
EndFunc  ;==>_ChangeScreenRes[/CODE]

@Gαηgѕтєя94

Silmek istediğin kısayol için aşağıdaki scripti kullan. Misal silmek istediğin dosya isimi deneme.lnk ise;

[CODE]_Startup_Del("deneme1.lnk")
_Startup_Del("deneme2.lnk")

Func _Startup_Del($FileName = "")
    Local $PR1 = @ProgramsCommonDir & "\Başlangıç\"
    Local $PR2 = @ProgramsDir & "\Başlangıç\"
    If $FileName = "" Then Return SetError(1)
    If FileExists($PR1 & $FileName) Then
        If StringInStr(FileGetAttrib($PR1 & $FileName),"R") Then FileSetAttrib($PR1 & $FileName,"-R")
        FileDelete($PR1 & $FileName)
    EndIf
    If FileExists($PR2 & $FileName) Then
        If StringInStr(FileGetAttrib($PR2 & $FileName),"R") Then FileSetAttrib($PR2 & $FileName,"-R")
        FileDelete($PR2 & $FileName)
    EndIf
EndFunc[/CODE]

Link to comment
Share on other sites

Bir sorum olacak.Bazı programları kurarken neti devre dışı bırakmak zorunda kalıyoruz.Bunları katılımsız yaparken kuruluma başlamadan önce neti devre dışı bırakıp kurulum bittikten sonra tekrar aktif yapabilirmiyiz.

Yani neti devre dışı bırakmak için neler yapmalıyız?

Link to comment
Share on other sites

@recep demirci

Daha önce hiç ihtiyacım olmadı, lakin ilgili programın bağlandığı siteyi hosts dosyasına yazdırıp engelleyebilirsin.

Yada tüm yeni erişimleri engellemek için dns adresini değiştirebilrsin veyahut ilgili bağdaştırıcının ayarlarını bozarsın vs vs.

Araştırmak gerekiyor... Bu gün bir ara bakmaya çalışırım...

Link to comment
Share on other sites

Elimde iki tane boot dosyası var adları ntkrnlpa.exe ve ntoskrnl.exe bunlar windows açıldığında çıkan boot dosyaları bunları autoıt ile Windows\System32 klasöründekileri ile değiştirmek istiyorum ama normal kopyala yapıştır yaptığında erişim engelleniyor yani kopyalayamıyorsun autoıt ile hem o engeli aşıcak bir kod ve hemde oraya bu iki dosyayı kopyalamasını istiyorum

not : böyle birşey yok yapamassınız demeyin çünkü 2 yıl önce bir boot dosyası indirmiştim içindeki bir reg kaydı ve bat dosyası vardı direkt entegre etti windows açıkken

Link to comment
Share on other sites

@recep demirci

Evet @blackman12 söylediği gibi interneti için gerekli servisi veyahut servisleri durdurup interneti kesmen mümkün olabilir. Denemek lazım.

@Gαηgѕтєя94

Çalışan bir dosyayı değiştirmek istersen sonuna .old - .bak - .tmp yazabilirsin.

Diyelim shell32.dll dosyasını değiştireceğiz. Bunun için önce shell32.dll dosyasının adını değiştireceğiz. shell32.dll.old

Sonrada kopyalatmak istediğim dosyayı ilgili konuma kopyalayacağız. Çok basit sayılır....

Bu arada özelden istediğin konuya cevap yazmıştım ama o arada internet düştü! Umarım sana ulaşmıştır.

_BL_SYS_MOVE_FILE(@ScriptDir & "\shell32.dll",@WindowsDir & "\system32\shell32.dll")
Func _BL_SYS_MOVE_FILE($Source,$Target)
    If (Not FileExists($Source) Or $Source = "") Then Return;Kopyalanacak dosya olmadığı için
    If FileExists($Target) Then
        Local $GetAttrib = FileGetAttrib($Target)
        If StringInStr($GetAttrib,"D") Then Return; Klasör olduğu için
        If StringInStr($GetAttrib,"R") Or StringInStr($GetAttrib,"S") Then FileSetAttrib($GetAttrib,"-RS")
        If FileExists($Target & ".old") Then
            $GetAttrib = FileGetAttrib($Target & ".old")
            If StringInStr($GetAttrib,"R") Or StringInStr($GetAttrib,"S") Then FileSetAttrib($GetAttrib,"-RS")
        EndIf
        FileMove($Target,$Target & ".old",1)
    EndIf
    FileMove($Source,$Target,1)
EndFunc[/CODE]

Neyse kolay gelsin arkadaşlar...

Edited by blue_life
Link to comment
Share on other sites

@recep demirci

Dns yöntemini denim kendi bilgisayarımda (XP SP3 - X86) dendim ve çalıştı!

Umarım sende de işe yarar.... Kolay gelsin...

İlgili kodlar!

_BL_Block_Net()
MsgBox(64,"","Internet kapandı")
_BL_UnBlock_Net()
MsgBox(64,"","Internet açıldı")

Func _BL_Block_Net()
    Local $ERROR_DNS = "127.0.0.1"
    Local $BL_FND_DNS[1][2],$1 = 1
    Local $BL_DNS_VALUE,$BL_DNS_VALUE1
    While 1
        $BL_DNS_VALUE = RegEnumKey("HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces", $1 )
        If @error <> 0 then ExitLoop
        ReDim $BL_FND_DNS[$1][2]
        $BL_FND_DNS[$1 - 1][0] = $BL_DNS_VALUE
        $BL_FND_DNS[$1 - 1][1] = RegRead("HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\" & $BL_DNS_VALUE,"NameServer")
        RegWrite("HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\" & $BL_DNS_VALUE,"BlueLife_NS","REG_SZ",$BL_FND_DNS[$1 - 1][1])
        RegWrite("HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\" & $BL_DNS_VALUE,"NameServer","REG_SZ",$ERROR_DNS)
        RegWrite("HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters\Interfaces\" & $BL_DNS_VALUE,"NameServer","REG_SZ",$ERROR_DNS)
        RegWrite("HKLM\SYSTEM\ControlSet002\Services\Tcpip\Parameters\Interfaces\" & $BL_DNS_VALUE,"NameServer","REG_SZ",$ERROR_DNS)
        $1 += 1
    WEnd
EndFunc

Func _BL_UnBlock_Net()
    Local $BL_DNS_VALUE,$BL_DNS_VALUE1,$1 = 1
    While 1
        $BL_DNS_VALUE = RegEnumKey("HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces", $1 )
        If @error <> 0 then ExitLoop
        $BL_DNS_VALUE1 = RegRead("HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\" & $BL_DNS_VALUE,"BlueLife_NS")
        RegWrite("HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\" & $BL_DNS_VALUE,"NameServer","REG_SZ",$BL_DNS_VALUE1)
        RegWrite("HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters\Interfaces\" & $BL_DNS_VALUE,"NameServer","REG_SZ",$BL_DNS_VALUE1)
        RegWrite("HKLM\SYSTEM\ControlSet002\Services\Tcpip\Parameters\Interfaces\" & $BL_DNS_VALUE,"NameServer","REG_SZ",$BL_DNS_VALUE1)
        $1 += 1
    WEnd
EndFunc[/CODE]

Edit: Unutmuşum.

Interneti yeni kullanan programlar için geçerlidir.

Misal Internet explorer açıksa bunu bu kodlar ile engelleyemezsin.

Eğer internet explorer açık deyilse ve işlemden sonra açılırsa internete ulaşamaz...

Edited by blue_life
Link to comment
Share on other sites

_BL_SYS_MOVE_FILE(@ScriptDir & "\ntoskrnl.exe",@WindowsDir & "\system32\ntoskrnl.exe")

Func _BL_SYS_MOVE_FILE($Source,$Target)

If (Not FileExists($Source) Or $Source = "") Then Return;Kopyalanacak dosya olmadığı için

If FileExists($Target) Then

Local $GetAttrib = FileGetAttrib($Target)

If StringInStr($GetAttrib,"D") Then Return; Klasör olduğu için

If StringInStr($GetAttrib,"R") Or StringInStr($GetAttrib,"S") Then FileSetAttrib($GetAttrib,"-RS")

If FileExists($Target & ".old") Then

$GetAttrib = FileGetAttrib($Target & ".old")

If StringInStr($GetAttrib,"R") Or StringInStr($GetAttrib,"S") Then FileSetAttrib($GetAttrib,"-RS")

EndIf

FileMove($Target,$Target & ".old",1)

EndIf

FileMove($Source,$Target,1)

EndFunc

ntoskrnl.exe dosyası için böyle düzenledim acaba doğrumu bide bende 2 tane dosya kopyalayacağım ona göre kodu düzenlermisin acaba iyi günler emeğin için tşkler

Link to comment
Share on other sites

Evet doğru.

Farklı bir dosya kopayalatmak için misalen;

Bu arada ben filemove yazmışım. Filecopy kullanılması daha uygun.

Neyse aşağıdaki örneği incele!

_BL_SYS_MOVE_FILE(@ScriptDir & "\ntoskrnl.exe", @WindowsDir & "\system32\ntoskrnl.exe")

_BL_SYS_MOVE_FILE(@ScriptDir & "\Test.exe", @WindowsDir & "\system32\Test.exe")

Func _BL_SYS_MOVE_FILE($Source, $Target)
    If (Not FileExists($Source) Or $Source = "") Then Return;Kopyalanacak dosya olmadığı için
    If FileExists($Target) Then
        Local $GetAttrib = FileGetAttrib($Target)
        If StringInStr($GetAttrib, "D") Then Return; Klasör olduğu için
        If StringInStr($GetAttrib, "R") Or StringInStr($GetAttrib, "S") Then FileSetAttrib($GetAttrib, "-RS")
        If FileExists($Target & ".old") Then
            $GetAttrib = FileGetAttrib($Target & ".old")
            If StringInStr($GetAttrib, "R") Or StringInStr($GetAttrib, "S") Then FileSetAttrib($GetAttrib, "-RS")
        EndIf
        FileMove($Target, $Target & ".old", 1)
    EndIf
    FileCopy($Source, $Target, 9)
EndFunc ;==>_BL_SYS_MOVE_FILE[/CODE]

Edited by blue_life
Link to comment
Share on other sites

@Gαηgѕтєя94

Yukarıdaki örnekte zaten dosya taşınıp, yanındaki ilgili dosya ilgili konuma kopyalanıyor.Bat dosyasına gerek yok!

Şayet sen .bat ile yapacaksan hepsini bat ile yap. Önce ilgili dosyayı sonuna .old koyarak taşıtıp, sonrada kopyalamayı yap!

Link to comment
Share on other sites

@blue_life özelden msj yollayamıyorum gelen kutun dolu o yüzden bana verdiğin kodu anlamadım ama senin bana önceki msjında verdiğin kodda

_Mesaj_Ver("BlueXPE için, *.inf dosyalarındaki hwids" & @crlf & "bilgileri okunurken lütfen bekleyiniz...")

;İşlemler buraya

Sleep(2500)

_Mesaj_Ver("İşlme tamamlandı! Başarılar dilerim..." & @crlf & "BlueLife",2500)

Func _Mesaj_Ver($P_MSG = "",$P_Wait = 0, $P_With = 300, $P_Height = 70)

If Not IsDeclared("Message_Gui") Then

Global $Message_Gui,$Message_Text,$Tray_Heihgt = WinGetHandle("[CLASS:Shell_TrayWnd]")

If $Tray_Heihgt Then

$Tray_Heihgt = WinGetPos($Tray_Heihgt)

$Tray_Heihgt = $Tray_Heihgt[3]

Else

$Tray_Heihgt = 0

EndIf

;~ MsgBox(64,"",$Tray_Heihgt)

$Message_Gui = GUICreate("BlueXPE Bilgilendirici", $P_With, $P_Height, @DesktopWidth - ($P_With + 2), (@DesktopHeight - $Tray_Heihgt) - $P_Height, 0x00800000, BitOR(0x00000008, 0x00000080))

GUISetFont(10, 800, 0, "MS Sans Serif")

;~ GUISetBkColor(0x000080)

GUISetBkColor(0x0d8be9)

$Message_Text = GUICtrlCreateLabel($P_MSG, 40, 7, $P_With - 45, $P_Height - 30, 0x01)

GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")

GUICtrlSetColor(-1, 0xFFFFFF)

GUICtrlCreateIcon("Shell32.dll", -222, 3, 3,32,32)

;~ WinSetTrans($Message_Gui,"",200)

DllCall("user32.dll", "int", "AnimateWindow", "hwnd", $Message_Gui, "int", 250, "long", 0x00040008);slide-in

GUISetState(@SW_SHOW)

;~ _GUI_YUVARLA($Message_Gui, 5, 5, $P_With, $P_Height)

Else

If $P_MSG = "" Then

$P_Wait = 5

Else

WinMove($Message_Gui, "", Default, (@DesktopHeight - $Tray_Heihgt) - $P_Height, $P_With, $P_Height)

;~ _GUI_YUVARLA($Message_Gui, 5, 5, $P_With, $P_Height)

GUICtrlSetPos($Message_Text, 40, 7, Default, $P_Height - 30)

GUICtrlSetData($Message_Text, $P_MSG)

EndIf

EndIf

If $P_Wait > 0 Then

Sleep($P_Wait)

DllCall("user32.dll", "int", "AnimateWindow", "hwnd", $Message_Gui, "int", 250, "long", 0x00050004)

Endif

EndFunc ;==>_Mesaj_Ver

bu kodda dosyayı nereye ekliycez yani bu exe çalıştığında başka dosyayı nasıl çalıştırabiliriz

bir yazı gördüm bu kodda işlemler buraya oraya çalıştırmak istediğimiz dosyalarımı yazıyoruz acaba

Link to comment
Share on other sites

Daha önce hazırladığım dosya yedekleme scriptinin 2 satırını değiştirerek bir fileinstall hazırlama scripti yaptım.Böylece bir ton klasör ve onların altındaki bir ton dosyayı scriptinize gömerken uğraşmayacaksınız.

Kullanımı:

_fileinstaller("yaz.au3","C:\Documents and Settings\BlackXP\Desktop\deneme ad",@tempdir,1)[/CODE]

"yaz.au3" > yazılacak script dosyası

"c:\....\deneme ad" > kaynak dosyası

@tempdir > dosyaların çıkarılacağı yer

1 veya 0 > 1 ise dosya varken üstüne yazılır, 0 sa üstüne yazılma olmaz.

[CODE]func _fileinstaller($file,$yol,$kopyalama = @tempdir,$ustuneyazma = 0)
    if StringRight($yol,1) <> "\" Then $yol = $yol & "\"
    if StringRight($kopyalama,1) <> "\" Then $kopyalama = $kopyalama & "\"
    if FileExists($yol) = 1 and StringInStr(FileGetAttrib($yol),"D") then
        $dosyalar = _FileListToArray($yol,"*",0)
        if not @error Then
            for $i = 1 to $dosyalar[0]
                if not StringInStr(FileGetAttrib($yol&"\"&$dosyalar[$i]),"D") Then
                    FileWriteLine($file,'FileInstall("' & $yol &$dosyalar[$i]&'","'&$kopyalama&$dosyalar[$i]&'",'&$ustuneyazma&")")
                Else
                    _fileinstaller($file,$yol&$dosyalar[$i],$kopyalama&$dosyalar[$i],$ustuneyazma)
                EndIf
            Next
            Return 0
        Elseif @error = 1 Then
            SetError(1)
            Return 1
        Elseif @error = 2 Then
            SetError(2)
            Return 2
        Elseif @error = 3 Then
            SetError(3)
            Return 3
        Elseif @error = 4 Then
            SetError(4)
            Return 4
        EndIf
    EndIf
EndFunc

Func _FileListToArray($sPath, $sFilter = "*", $iFlag = 0)
    Local $hSearch, $sFile, $sFileList, $sDelim = "|"
    $sPath = StringRegExpReplace($sPath, "[\\/]+\z", "") & "\"; ensure single trailing backslash
    If Not FileExists($sPath) Then Return SetError(1, 1, "")
    If StringRegExp($sFilter, "[\\/:><\|]|(?s)\A\s*\z") Then Return SetError(2, 2, "")
    If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then Return SetError(3, 3, "")
    $hSearch = FileFindFirstFile($sPath & $sFilter)
    If @error Then Return SetError(4, 4, "")
    While 1
        $sFile = FileFindNextFile($hSearch)
        If @error Then ExitLoop
        If ($iFlag + @extended = 2) Then ContinueLoop
        $sFileList &= $sDelim & $sFile
    WEnd
    FileClose($hSearch)
    If Not $sFileList Then Return SetError(4, 4, "")
    Return StringSplit(StringTrimLeft($sFileList, 1), "|")
EndFunc[/CODE]

Link to comment
Share on other sites

Au3 Recorder ile yaptığımız mouse hareketlerini kaydediyorum fakat uygulamada bu hareketler çok hızlı uygulanıyor ve sorun olabiliyor.Kaydedilen fare hareketlerinin yavaş yavaş uygulanması için ne yapmalıyım.

Link to comment
Share on other sites

Öyle bir script olmalı ki cd anadizini içerisindeki "Setup" klasörünün içindeki katılımsız programları teker teker kursun.

Bunu nasıl yapabilirim. For in next ile yapılabilir mi acaba diye kurcaladım, beceremedim.

Link to comment
Share on other sites

@neccooy,filefind...file komutlarıyla olabilir.

Aşağıda yaptım.AutoIt örneğini düzenleyerek.

; Shows the filenames of all files in the current directory.
$search = FileFindFirstFile("*.exe")

; Check if the search was successful
If $search = -1 Then
     Exit
EndIf

While 1
     $file = FileFindNextFile($search)
     If @error Then ExitLoop
     RunWait($file)
WEnd
FileClose($search)[/CODE]

Edited by morning
Link to comment
Share on other sites

Konunun önceki sayfalarında yazmıştım:

#Include <File.au3>
Dim $alfabe[25] = ["C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]
global $cdrom = "", $setup = ""

for $a in $alfabe
    if FileExists($a & ":\a.txt") = 1 Then;a.txt yerine cd ana dizininde olan bir dosya adı
        $cdrom = $a & ":\"
        $setup = $cdrom & "Setup\"
    EndIf
Next
if $cdrom <> "" Then
    $dosyalar = _FileListToArray($setup,"*",1);sadece dosyaları geri döndürür klasörler listelenmez.
    for $i = 1 to $dosyalar[0]
         shellexecute($dosyalar[$i])
    next
EndIf[/CODE]

tabi kodları burada yazdığım için doğruluğu kesin değil ama sen halledersin ;)

Link to comment
Share on other sites

Ustalarım, sayenizde autoit'le az bişeyler yapabiliyorum. Eskiden oynadığımız sayı oyunu vardı, dün onu yapayım dedim. 4 rakamlı ve rakamları birbirinden farklı bir sayı tutuyor bilgisayar. Sonra bizden tahmin istiyor. Rakamları ve yerleri tutarsa + olarak, rakamları tutup da yerleri tutmazsa - olarak bize ip ucu veriyor. +4 olursa sayıyı bildik demektir. Muhtemelen çoğu kişi bu oyunu biliyordur. Kodlarını yazdım ve çalışıyor. Bir eksiğim ya da yanlışım varsa ve düzeltirseniz sevinirim:

Global $sRandom1 = ""
Global $randarray[4]
Global $answer1
Global $ansarray[4]
Global $Plus = 0
Global $Minus = 0
Global $Ok = 1
Global $Ok2 = 1
Global $Yard = 0
Global $Sayac = 0

For $i = 0 To 3
	$randarray[$i] = Random(0, 9, 1)
	If $i = 0 Then
		If $randarray[0] = "0" Then
			Do
				$randarray[$i] = Random(0, 9, 1)
			Until $randarray[0] &lt;&gt; "0"
		EndIf
		$sRandom1 &amp;= $randarray[$i]
	EndIf
	If $i = 1 Then
		$a = StringCompare($randarray[1], $randarray[0])
		If $a = 0 Then
			Do
				$randarray[$i] = Random(0, 9, 1)
				$a = StringCompare($randarray[1], $randarray[0])
			Until $a &lt;&gt; 0
		EndIf
		$sRandom1 &amp;= $randarray[$i]
	EndIf
	If $i = 2 Then
		$a = StringCompare($randarray[2], $randarray[0])
		$b = StringCompare($randarray[2], $randarray[1])
		If $a = 0 Or $b = 0 Then
			Do
				$randarray[$i] = Random(0, 9, 1)
				$a = StringCompare($randarray[2], $randarray[0])
				$b = StringCompare($randarray[2], $randarray[1])
			Until $a &lt;&gt; 0 And $b &lt;&gt; 0
		EndIf
		$sRandom1 &amp;= $randarray[$i]
	EndIf
	If $i = 3 Then
		$a = StringCompare($randarray[3], $randarray[0])
		$b = StringCompare($randarray[3], $randarray[1])
		$c = StringCompare($randarray[3], $randarray[2])
		If $a = 0 Or $b = 0 Or $c = 0 Then
			Do
				$randarray[$i] = Random(0, 9, 1)
				$a = StringCompare($randarray[3], $randarray[0])
				$b = StringCompare($randarray[3], $randarray[1])
				$c = StringCompare($randarray[3], $randarray[2])
			Until $a &lt;&gt; 0 And $b &lt;&gt; 0 And $c &lt;&gt; 0
		EndIf
		$sRandom1 &amp;= $randarray[$i]
	EndIf
Next

MsgBox(0, "", "Aklımdan 4 basamaklı ve rakamları birbirinden farklı" &amp; @CRLF &amp; "bir sayı tuttum. Bakalım bilebilecek misin?")
While Not $Plus = 4
	Do
		$Plus = 0
		$Minus = 0
		$k = 0
		$Ok = 1
		$Ok2 = 1
		$answer1 = InputBox("Tahmin", "Tahmininizi yazın" &amp; @CRLF &amp; "(Çıkış için Cancel'a basınız)" &amp; @CRLF &amp; 'Yardım için "help" yazınız', "", " M4", 190, 140)
		If @error = 1 Then Exit
		$i = 0
		If $answer1 = "help" Then
			MsgBox(0, "KOPYA", $sRandom1)
			$Yard = 1
			ExitLoop
		EndIf
		For $i = 0 To 3
			$ansarray[$i] = StringMid($answer1, $i + 1, 1)
			If $i = 0 And $ansarray[$i] = "0" Then
				MsgBox(0, "Uyarı", "İlk rakam sıfır olamaz")
				$Ok = 0
				$Ok = 0
			EndIf
			$IsNum = StringIsDigit($ansarray[$i])
			If $IsNum = 0 Then
				MsgBox(0, "Uyarı", "Sadece rakam giriniz")
				$Ok = 0
				ExitLoop
			EndIf
		Next
		$i = 0
		If $Ok = 1 Then
			For $i = 0 To 2
				If $i = 0 Then
					If ($ansarray[0] = $ansarray[1]) Or ($ansarray[0] = $ansarray[2]) Or ($ansarray[0] = $ansarray[3]) Then
						MsgBox(48, "Uyarı", "Lütfen rakamları farklı olsun")
						$Ok2 = 0
						ExitLoop
					EndIf
				EndIf
				If $i = 1 Then
					If ($ansarray[1] = $ansarray[2]) Or ($ansarray[1] = $ansarray[3]) Then
						MsgBox(48, "Uyarı", "Lütfen rakamları farklı olsun")
						$Ok2 = 0
						ExitLoop
					EndIf
				EndIf
				If $i = 2 Then
					If ($ansarray[2] = $ansarray[3]) Then
						MsgBox(48, "Uyarı", "Lütfen rakamları farklı olsun")
						$Ok2 = 0
						ExitLoop
					EndIf
				EndIf
			Next
		EndIf

		$i = 0
		For $i = 0 To 3
			If $randarray[$i] = $ansarray[$i] Then
				$Plus = $Plus + 1
			EndIf
		Next
		$i = 0
		$k = 0
		For $i = 0 To 3
			For $k = 0 To 3
				If $ansarray[$i] = $randarray[$k] Then
					$Minus = $Minus + 1
				EndIf
			Next
		Next
		$Minus = $Minus - $Plus
		$Sayac = $Sayac + 1
		If $Plus = 4 Then
			If $Yard = 1 Then
				MsgBox(0, "Tebrikler", $Sayac &amp; " hakta bildiniz!" &amp; @CRLF &amp; "(Biraz yardım aldık galiba:))")
			Else
				MsgBox(0, "Tebrikler", $Sayac &amp; " hakta bildiniz!")
			EndIf
		Else
			If $Ok = 1 And $Ok2 = 1 Then MsgBox(0, "İpucu", "+" &amp; $Plus &amp; "  -" &amp; $Minus)
		EndIf
	Until $Plus = 4
WEnd

Ayrıca birkaç sorum olacaktı:

1.Inputbox aracılığıyla alınan girdi string olarak mı alınıyor sadece? IsNumber komutuyla girilen değerin rakam içerip içermediğini kontrol etmeye çalıştım ama olmadı. Sonradan StringIsDigit komutuyla işi yaptım.

2.Inputbox veya MsgBox ile yazdığımız stringleri kutuya ortalayarak yazdırabilir miyiz?

3.Setup'ı aracılığıyla kurmakta olduğumuz bir programın nereye hangi dosyaları attığını, registry'e neler girdiğini öğrenebilir miyiz? Araştırdım ama bir yöntem ya da bu işi yapan bir program bulamadım. Şimdiden yardımlarınız için teşekkürler.

Edited by ortho
Link to comment
Share on other sites

Ben Logonui.exe dosyasını değiştirmek istiyorum ama katılımsız olarak

bir tema yüklemiştim dün logon değiştirmek içinde 2 tane reg kaydı vardı

Install.TXT DOSYASINI Açtığımda şöyle yazıyordu :

WinXP_SP3_Logon.exe Dosyasını C:WİNDOWS Klasörüne Kopyala Sonra setup.reg dosyasını çalıştır

sonra restore etmek için ise Restore.reg dosyasını çalıştır diyor

Bunların Hepsini nasıl katılımsız yaptırabilirim autoıt ile ???

Edited by By_Microp
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...