Autoit Soru-Cevap Bölümü

Ufak bir yerde takıldınızmı ? buyrun sorun cevaplayalım :P Diğer topiclerden farklı sorular soran arkadaşlar oldu, o yuzden bunu açmaya karar verdim. Herhangi bir sorunuz varsa diğer topicler kullanılmasın, burdan sorabilirsiniz elimden geldiğince yardımcı olmaya çalışırım. Yalnız bir kaç şartım var :P

- Aşırı yüklenme olmasın lütfen :P, yani aynı post içinde şu nasıl yapılıyor, bu nasıl yapılıyor ve birde bu var o nasıl yapılıyor. şeklinde sormayın tek tek sorarsanız daha rahat yardımcı olurum.

- Bu bölümü ufak tefek sorular için kullanın. Orn olarak pencere boyutlarını nasıl değiştirebilirim, bir tuşu nasıl iptal edebilirim veya listviewdeki seçili satırı nasıl bulabilirim, internet explorerda bir nesneye nasıl yazı yazdırabilirim, buraya uygun sorulardır. Nasıl koxp yazabilirim ? nasıl bir hesap makinesi yazabilirim, nasıl bir trainer yazabilirim buraya uygun bir soru değildir. Bu tip soruları cevaplamıcam. Ama aynı soru trainer yazmanın mantığı nedir şeklinde sorulursa bunu cevaplarım, veya güzel bi soru gelirse o konuda bir makale hazırlarım.

- Eger sizden once 4-5 den fazla soru varsa lütfen ekleme yapmayın bana biraz zaman verin, her zaman bakamıyorum boş zamanımda anca girebiliyorum.

- Son olarakda kesinlikle bana hazır script gönderirmisin, bana şunu yazarmısın şeklinde sorular göndermeyin :(

- He birde :P adsız olarak gönderi yapanları sevmiyorum, bi arkadaşa bakıp çıkıcam gibi olmasın ltfn. :D Belirtmek istediğim birşey daha var azar azar öğrenebileceğiniz şekilde ip ucu veririm ona göre, he baktık olmuyor dahada detaya ineriz :P

hepsi bu kadar :)

232 yorum:

«En Eski   ‹Eski   201 – 232 / 232
Adsız dedi ki...

ucretlı facebooktakı guvenlık kodunu asmayacak sekılde uye profılıne tıkladngıda ona gonderecek mesajın ıcerıgını kendısı yazacak scrıpt yazdırlacaktır paralı

Aydın dedi ki...

Merhaba Üstad,

benim bi sorunum var

bu eski script:
lobal $iSitStuck = 0
Global $aTop[2]
Global $sTableChecksums = StringSplit(FileRead('..\data\table.txt'),',')
Global $iBlind = 0
Global $xBank = 0
Global $yBank = 0
Global $zBank = 0
Global $tableBuyin=20
Global $bPaused=False


Func _Table($iStart=0)
Local $aPosition[2]

Local $aWinPos = WinGetPos($browserTitle)
If IsArray($aWinPos) And $aWinPos[2] And $aWinPos[0]>0 Then
If $iStart==0 Then
$iStart = $iStart+$aWinPos[1]
EndIf
$aSearch = PixelSearch($aWinPos[0],$iStart,$aWinPos[2],$aWinPos[3], 0x364C63);
Else
$aSearch = PixelSearch(0,$iStart,@DesktopWidth,@DesktopHeight, 0x364C63);
EndIf

If @error <> 0 Then
Return $aPosition
EndIf
$iChecksum = PixelChecksum($aSearch[0]-1,$aSearch[1]-1,$aSearch[0],$aSearch[1])
For $i = 1 to $sTableChecksums[0]
If $iChecksum==Int($sTableChecksums[$i]) Then
$aPosition[0] = $aSearch[0]
$aPosition[1] = $aSearch[1]
EndIf
Next
If Not $aPosition[0] Then
$aPosition = _Table($aSearch[1]+1)
EndIf
Return $aPosition
EndFunc


**************

OLAY ŞU ŞİMDİ ESKİDEN BİR TANE MASA VARDI AMA ŞİMDİ 3 ADET DAHA MASA OLUŞTURULDU AMA BENİM PROGRAM ESKİ MASALARI OUKUYOR BUNU NASIL DÜZELTE BİLİRİM YARDIMLARIN İÇİN ŞİMDİDEN TEŞEKÜRLER.

The original pixelcolor
0x364C63
The new pixelcolors for the new tables
0x29100B
0x081A0C
0x01030F

aydın

Aydın dedi ki...

yani bu masaları da tesadüfen gördüğünde okumasını istiyorum bu masalara denk geldiğinde program duruyor.

Unknown dedi ki...

Global $iSitStuck = 0
Global $aTop[2]
Global $sTableChecksums = StringSplit(FileRead('..\data\table.txt'),',')
Global $iBlind = 0
Global $tableBuyin=20
Global $bPaused=False


Global $sTableChecksums = StringSplit(FileRead(@ScriptDir & '\data\table.txt'), ',')
Global $TableLastPos
Global Const $cTablePixelColor = 0x364C63

Func _Table()
local $BlankArray[2]
$Windowhandle = wingethandle($browserTitle)
;first, check if the table has moved since we last checked
If _TableVerifyChecksum ($TableLastPos) Then
Return $TableLastPos
EndIf

;default - search screen
$SearchLeft =0
$searchRight = @DesktopWidth
$searchTop = 0
$searchBottom = @DesktopHeight

If IsHWnd($WindowHandle) Then
;search only in the window's area
$aWinPos = WinGetPos($WindowHandle)
If IsArray($aWinPos) Then
$SearchLeft =$aWinPos[0]
$searchRight =$aWinPos[0]+$aWinPos[2]
$searchTop = $aWinPos[1]
$searchBottom =$aWinPos[1]+$aWinPos[3]
EndIf
EndIf

;if the window is moved so only part of it is showing...
If $searchTop < 1 Then $searchTop = 1
If $SearchLeft < 1 Then $SearchLeft = 1
If $searchRight > @DesktopWidth Then $searchRight = @DesktopWidth
If $searchBottom > @DesktopHeight Then $searchBottom = @DesktopHeight

While $searchTop < $searchBottom
$aPos = PixelSearch($SearchLeft,$searchTop,$searchRight,$searchBottom, $cTablePixelColor)

If @error Then
Return $BlankArray
Else
If _TableVerifyChecksum($aPos) Then
$TableLastPos = $aPos
Return $TableLastPos
EndIf
EndIf
$searchTop = $aPos[1]+1 ;continue on from the next row
WEnd

Return $BlankArray
EndFunc


VEYA ,



Func _Table($iStart=0)
Local $aPosition[2]

Local $aWinPos = WinGetPos($browserTitle)
If IsArray($aWinPos) And $aWinPos[2] And $aWinPos[0]>0 Then
If $iStart==0 Then
$iStart = $iStart+$aWinPos[1]
EndIf
$aSearch = PixelSearch($aWinPos[0],$iStart,$aWinPos[2],$aWinPos[3], 0x081A0C);
Else
$aSearch = PixelSearch(0,$iStart,@DesktopWidth,@DesktopHeight, 0x081A0C);
EndIf

If @error <> 0 Then
Return $aPosition
EndIf
$iChecksum = PixelChecksum($aSearch[0]-1,$aSearch[1]-1,$aSearch[0],$aSearch[1])
For $i = 1 to $sTableChecksums[0]
If $iChecksum==Int($sTableChecksums[$i]) Then
$aPosition[0] = $aSearch[0]
$aPosition[1] = $aSearch[1]
EndIf
Next
If Not $aPosition[0] Then
$aPosition = _Table($aSearch[1]+1)
EndIf
Return $aPosition
EndFunc



BENİM YAPMAK İSTEDİĞİM İSE ŞU ŞU 4 DEĞERİ AYNI ANDA YAZMAK İSTİYORUM

(0x01030F , 0x081A0C , 0x29100B , 0x364C63 )


YANİ BU 4 DEĞERDEN BİRİNİ GÖRDÜĞÜNDE OKEY DİYİP DEVAM ETSİN. İNŞ ANLATABİLMİŞİMDİR YARDIMLAR İÇİN ŞİMDİDEN TEŞEKKÜRLER.

Adsız dedi ki...

Ben Bir Program Yazmak İstiyorum Ama Pek Bir Bilgim Yok Silkroad İçin Yardımcı Bir Program Karakterin HP MP SP GOLD EXP Durumunu Gösterecek Ve Status Barda İçermesi Lazım Nasıl Yapabilirim Silkroad İçerikli?

Adsız dedi ki...

Oyundaki Karakter Bilgilerini Forma Aktarabilirim

taha dedi ki...

Bir program yaptim klavyeden basılan tuslari kaydediyor bir nevi keylogger yani :P ama söyle bi sorunum var while dongusunde sleep kullanirsam arada key kacırabiliyor :( kullanmazsamda pc'yi cok kasıyor %30 %40 cpu bellek harcıo rahat.. Hem pc kasmayacak hemde key kacırmayacak sekilde bunu nasıl ayarlayabilirim ?

taha dedi ki...

Not: Sleep(1) yapsam bile key kacırıyor. :(

313 dedi ki...

naber taha :D
kaçırır, daha önce bende keylog tarzı bişey denemiştim :P _ispressed keylog için sağlıklı değil. Ne yaparsan yap iyi sonuç alamıyorsun malesef. Ya adam 1 kere a ya bassa bile aaaaa alıyor yada kaçırıyor. Benden yana 2 öneri olabilir.

1. Eğer while in içine direk:

if ispressed() then
xasdasd
elseif ispressed....
asdasd
endif

şeklinde yazıyorsan, birde:
While _ispressed(key)
asdasdasd
Wend

olarak dene. ana döngüyede bi 50 sleep attır gitsin.

2. önerim windowsun keyboard bufferine hook araştırman. VB C+ falan yapmışlardır, ordan artık tercüme edicen. Auto it script foruma bakma bu konuda girip konuda açma sakın kızıyorlar :D bi sonuç alırsan bizide bilgilendir. Ama yinede en iyisi 1. öneri gibi gözüküyor, windows key buffer biraz araştırma ve diğer programlama dillerinde bilgi gerektiriyor gibi.

Public Declare Function SetWindowsHookEx Lib "user32" _
Alias "SetWindowsHookExA" (ByVal idHook As Long, _
ByVal lpfn As Long, _
ByVal hmod As Long, _
ByVal dwThreadId As Long) As Long

bak amca burda hook atmış vb ile. user32.dll iş görüyor normal olarak. Dllexport viewer programıyla baktığımızda user32 de bu fonksiyonu görüyoruz. Demekki, DLLopen(user32.dll) kullanarak bu işi halledebiliriz :D ama bilmediğim ve denemediğim için şuan birşey söylemem mümkün değil. Daha önceden DLLCall kullandıysan bi dene bakalm ne oluyor .

taha dedi ki...

DllCall("user32", "int", "GetAsyncKeyState", "int", $hex

seklinde dllcall kullandm :D 1. öneriyi bi deneyeyim bakalim :D ama anlamadiğim bisey var ben


if _ispressed(numarayi hatrlayamadm xd) then
_LogKeyPress("a")
endif

yapiyorum.

While _ispressed(key)
asdasdasd
Wend

derken kast ettiğin

While _ispressed(numarayi hatrlayamadm xd)
_LogKeyPress("a")
Wend

mi oluyor ? :D

313 dedi ki...

aynen. Ana döngü içine direk ekleyebilirsin.

While 1
While(_ispressed())
Logkey
Wend

While (_ispressed())
Log başka key
Wend
Wend

Hatta bunu direk bi fonksiyonla yapsan daha güzel olabilir.

While 1
_Logkey()
Sleep(50)
Wend

Func _Logkey()
While (_ispressed(1))
Logkey(1)
Wend

While (_ispressed(2))
Logkey(2)
Wend
Endfunc

taha dedi ki...

While 1
_Logkey()
Sleep(50)
Wend

Func _Logkey()
While (_ispressed(1))
Logkey(1)
Wend

While (_ispressed(2))
Logkey(2)
Wend
Endfunc



seklinde yaptim ama gene key kaciriyor.. :/

313 dedi ki...

o zman hook şart :D

veya şöyle bir örnek daha var. benim yaptığım projede, direk keylog alıp yazdırmak yerine scripte düzenli bir yazdırma rutini vermişim. Yani burda düşündüğüm şey, tek keyi log alıp dosyaya yazdırmak, basılan keyi sürekli yazdırmaktan daha yavaş diyemi düşünmüşüm emin değilim :D

Ben bu scripti denemiştim, pek key kaçırmıyordu, tek eksiği ard arda basılan 2 keyi almıyor o kadar. yani adam 2 kere a basarsa yalan :D

Scripti blogda yayınliyim, maksat kalabalık olsun bakarsın belki işine yarar.

taha dedi ki...

Haklisin :D keye basıldıgı an loglari yazdirmak yerine alinan loglari her 5 dakikada bir yazdırmak daha duzenli log alımı saglayabilir. :D ayrıca paylastigin keyloggere baktim benim keyloggerimin daha cok islevi var bi kere :P resim cekebilio log dosyasını pc ismi + tarihe göre düzenliyo bilgisayarı acıp kapatabilio acamıoda :D kapatıo işte :D sonracıma sadece BACKSPACE, ENTER, DELETE, TAB, SPACE leri değil tüm keyleri kaydedio HOME, SCROOL LOCK, PRINT SCRN fln yani :D Num Lock tuslarida dahil :P ama key kacırıo iste.. :( bide bisey daha sorucam isleri biraz daha ilerletip kaydedilen loglari nası kendimize gönderebiliriz? :P :D

taha dedi ki...

http://i32.servimg.com/u/f32/13/02/48/42/finder11.jpg

Resimdeki Window Info programinda oldugu gibi "Finder Tool" kısmını auto it ile yapabilmemiz mümkünmü mümkünse nasıl yapabiliriz ? Example dosyasına baktim bisey bulamadım da. :S

313 dedi ki...

vala yapabiliyoruzdur muhtemelen de ben bilmiyorum :D autoit forumda drag&drop falan aratmak lazım belki birşeyler çıkar veya en basit olarak "like finder tool" diye arat.

taha dedi ki...

hmm herseyin hayirlisi o zaman :D:D neyse xd bisey daha sorucam bi download programi yaptim ftp adresime film upload ediyorum ( film diyince yanlis anlasilmasin :p belgesel fln yani.. :D ) linki arkadasima veriyorum programa linki yazip download butonuna tıkladiğinda film iniyor ama %kac oldugunu kac mb kaldiğini fln göremiyoruz

InetGet("http://autoitscript.blogspot.com/film.avi" , "C:\film.avi", 1)

seklinde indiriyorum download % sini gösterebilecegim ya da "100mbda 10mb indi 90mb kaldi" gibi kac mb kaldiğini gösterebilecegim veyahut xd download işlemi bittiğinde bi msgbox ile "film indirildi" die uyarıyı nasıl verebilirim? Aslinda sadece film indirme islemi bittiğinde film indirildi diye uyarı vermesi yeterli olur evet evet aslinda tamda bunu istiyorum :D film indiğinde uyarı vermeli bunu yapmam gerek bu konuda yardimci olabilirmisin :D

313 dedi ki...

uzmanlık alanıma hoşgeldin :D
@inetgetbytesread indirilen byte miktarını gösterir. bunu 1024 e bölüp roundlarsak kb miktarını elde ederiz. onuda 1024e bölüp roundlaMAZsak mb miktarını elde ederiz :D roundlamamamızın nedeni 0.22 MB şeklindede göstermesi. ama o uzar gider 0.222232324343 şeklinde. o halde stringlen 4 den büyükse stringleft 4 alırız sadece soldan 4 gözükür. noktayıda unutmamak lazım :D

download olayının mantığı şudur. download tuşuna bastıktan sonra scripti bir döngüye alıcaksın.

While @inetgetactive
$indirilen = Round(@inetgetbytesread / 1024)
mesaj kutusu "indirilen: " & $indirilen &" KİLOBAYTxD
Wend

şaklinde. burda unutmamak gereken script bu döngüyü download işlemi bitene kadar sürdürecek. Yani başka döngülerde varsa bunlar görmezden gelinicek unutma. download bitince @inetgetactive false olacağından döngüden çıkıcak olan script, Wend kısmından sonra bir mesaj kutusu "download bitti" ile karşılaşırsa, download bitti diye mesaj verip ana döngüsüne devam edecek :D

Download benim işim upload senin xD

taha dedi ki...

Meraba, gene ben xd bişey daha sorucam :D:D dediğim programa söyle birşey yapmak istiyorum programa tikladiklarinda program acilmadan önce 200x300 buyuklugnde bi reklam ekrani cikcak bu reklama tikladikalrinda ana pencere gelecek bunu nasıl saglayabilirim ?
GUISetState(@SW_SHOW) la yapabilirim sanirim dmi ?

taha dedi ki...
Bu yorum yazar tarafından silindi.
taha dedi ki...

Bi cevap ver lütfen yaa :D

313 dedi ki...

zuha la.
neyin peşindesin? :D

formu oluştur. $oIE değişkeniyle shell.explorer2 miydi. onu oluştur. $oIE.navigate('http://reklamsayfan') olarak gönder ve _IELoadWait() ile yüklenmesini beklettir. Hemen ardından sayfanın urlsini bir değişkende tut. $sayfa = "http://reklamsayfan" olarak. hemen ardından do loop yap. loop içinde $oIE nin adresini sürekli aldır. ve until $adres <> $sayfa yap. (burdaki mantık adam reklama tıklayınca doğal olarak sayfanın değişmesi) he şayet reklam blank pencerede açılıyorsa. controlgetpos falan kullanarak mouse pozisyonunu al. ispressed(01) kullanarakda istenilen pozisyonlar içindeyse (yani reklam üzerindeyse) reklama tıklanıldığını anlarsın. bundan sonra doğal olarak do loop sonlanır ve ardındanda guidelete($reklamform) dersin reklamı geçmiş olur. Daha nasıl açıklayıcı yaziym? :D

taha dedi ki...

deneyecegim :D ama sonra xd delphide ögrenmeye calisiyorum sabahdan beridir kod görmekden migdem bulandı :D:D

gökhan dedi ki...

autoit ile yeni tanıştım 1 saat önce :)
ama yaptıklarını görünce niye bu dili öğrenmedim dedim. vb ve delphi bilgim var artık autoit programıyla da scrip yazmak istiyorum. bu scripti öğrenmem aslında oyun sebebiyle :) metin2 oyununda otomatik balık tutma programı yapmak istiyorum. forumlarda geçen kodlara güvenemediğimden kurmadım. kendim yapsam daha emin olurum( komplo teorisi ama ne yaparsınız bilgisayarcılar böyle)

autoit i araştıracağım ama ilk olarak bakmam gereken yer ne olmalı . ekranda balık sembolü göründüğünü nasıl programa bildireceğim . tuşa basma işini yaparım belki ama ekrandaki görüntü değişince nasıl olacak. gui kodlarına baktım ama kafam karıştı. yol gösterirseniz sevinirim.

not: çalışan programların mantığı şu galiba (hepsi aynı şeyi yazmış)
oyunu tam ekranda açık ,karakterin üstünden bakacak şekilde konumlamak ve yakınlaştırmak. bu sayede balık simgesi çıktığında ekranda kocaman bir balık şekli oynuyor ve onu algılıyor. sonrası ise tuşlara atadığınız itemlerin çalışması.
kolay gelsin...

313 dedi ki...

mrb gökhan, hg. Autoit dediğin gibi ufak çapda işler için en uygun dil. Daha önce 2moons için kendime bir balık botu yapmıştım. Hepsinin ayı şeyi demesi ekrandaki rengi algılamasından kaynaklanıyor. 2Moonsdaki tecrübelerimi anlatiym. Balık tutarken önce mouse ile oltayı sallatıyordum. Daha sonra belirli bir süre geçince oltaya balık takılıyordu. Bu olduğunda ekranın sol köşesinde bir bar (loading gibi) çıkıyor. ilk çıktığında bu bar yeşil oluyor. ekranın o kısmında yeşil renk göründüğünde bot space tuşuna basılı tutuyor. (Balığın oltaya takıldığını bu şekilde anlıyordu) Space basılı tuttuğunda oltayı çekiyor ve o bar inmeye başlıyor. Eğer oltaya çok asılırsak bu bar kırmızıya doğru kaymaya başlıyordu :) bot ordaki renk kırmızı olduğunda space basmayı bırakıyor ve tekrar yeşile çıkıncaya kadar bekliyor. Yeşil gördüğünde tekrar başlıyor asılmaya :) bu şekilde yapa yapa balığı çekip alıyor. Tabi her balığı tutamıyordu, bazı balıkların yakalanması zordu. :) Sol üstteki bar kaybolduğunda (yani ne yeşil, ne kırmızı renk orada yokken) bot balık tutma işleminin bittiğine karar verip tekrar oltayı sallıyo ve başlıyo beklemeye. Anlatırken çok yoruldum ya çok zormuş böyle yapıyordu, atıyordu, tutuyordu gibi anlatmak :D

neyse, işlemler bundan ibaret. Pixel fonksiyonlarını araştırabilirsin. Tabi bunları yapabilmemiz için ekranın aktif olması gerekiyor. Ekran aktif değilkende pixel fonksiyonlarının yapılabildiğini duydum eğer metin2 de control send komutu kullanabiliyorsan (yani ekran aktif değilkende tuş gönderebiliyorsan) bunuda bir araştırabilirsin. Veya gece yatarken bırakıcan artık :P

Kısaca sana gereken fonksiyonlar:
Send veya ControlSend
PixelSearch
PixelGetColor
MouseClick veya MouseDown

gökhan dedi ki...

teşekkür ederim inceliyeceğim bu komutları

gökhan dedi ki...

konuyla uğraşıyorum ve sonunda balığın geldiğini gösterdim :) balık gelince mesaj variyor bu mesajın yerine tuşa basmasını istiyorum ama send komutu ile yapamadım. kullanabildiği tuşlar 1-2-3-4-F1-F2-F3-F4 bunlardan herhangi birisine dahi atasam olur. yani balık gelince 2 sn bekledikten sonra tuşa basacak.yazdığım kod şu şekildenerde hatayı bulmadım :)

dim $var,$tus
Do
$tus=HotKeySet("{ESC}")
$var = PixelGetColor( 800 , 500 )
if $var>999999 Then
sleep(2000)
send("{F4}")
MsgBox(0,"Balık", "balık geldi")
Exit;deneme yapmak amacıyla yazdım
EndIf
Until $tus=1

313 dedi ki...

Öncelikle hotkeyset komutunu yanlış kullanmışın, keyi atamışsın ancak fonksiyon belirtmemişsin :D birde do loop içinde sürekli hotkeyset yapmana gerek yok loop dışında bir kere ataman yeterlidir. konuya gelirsek;
Opt("SendKeyDownDelay",200)

bunu en üste ekle ve Send("{F4}",1) olarak bir dene. olmazsa:
ControlSend("Oyun pencere adı", "", "", "{F4}")
veya,
ControlSend("Oyun pencere adı", "", "", "{F4}", 1)
olarakda dene. bunlarda olmazsa oyunun görünmez bir hile engelleme koruması var demektir :P Bu durumda user32.dll kullanmak yerine direct input dll leri kullanman gerekebilir.

kolay gelsin. inş başarılı olursun.

taha dedi ki...

Pixel sörç :D edeceginize pointer ve offset kullanarak tutsanıza balıgınızı.. :D

313 dedi ki...

taha bey anlatta adamda yapsın oyle :D hatta bi tutorial yapta bloga koyalım xD

Unknown dedi ki...

autoıt hakkında deteğiniz devam edior mu acaba ?

Unknown dedi ki...

Üstad bir sorun olacak mü saitmisiniz acaba.

«En Eski ‹Eski   201 – 232 / 232   Yeni› En yeni»

Yorum Gönder