PC, kendi programını kendi kullansın

Başlatan bunalmis, 04 Ekim 2004, 13:57:09

z

DOS ortamında çalışırken herhangi bir ticari programı insan yerine PC nin kendine kullandırabiliyordum.

Amacım Source kodu olmayan yada script yazma özelliği olmayan herkangi bir programın benim istediğim gibi davranmasını sağlamaktı.

Örneğin ticari program, ekranda Adınızı giriniz: yazdığında memory resident programım, "Adınızı giriniz:" mesajının ekran ramda x,y koordinatlarında olup olmadığını her 100ms de kontrol ediyor, bulduğu anda da keyboard buffera daha önceden belirlediğim isimi yazarak enter tuşuna basıyordu.
(Bu örnek çok çok basit oldu, gerçekte karmaşık bir program tamamen pc tarafından kullanılyordu)

Bu sayede PC, kendi programını kendi kullanmış oluyor ve bazı programlarda bana müthiş kolaylık sağlıyordu. Böylece makine başında beklemem gerekmiyor ama PC nin benim yerime programı hatasız kullandığından da emin oluyordum.

Şimdi benzer uygulamayı Win 2000 ortamında yapmayı çok istiyorum.

Bunun için ekranda görülmeyecek bir yazılım (biz yazacağız), sürekli olarak ekranı gözleyecek.

Ekranda ise çalışır durumda ticari bir programımız var.

Ekranda belirlediğim X,Y koordinatlarında beklenen mesaj yakalandığı anda,  mouse cursoru ekran üzerinde koordinatları belli bir buton üzerine bizim programımız tarafından yürütülecek ve butonu clikleyecek.......

(Tabiki ekranda karaktereri bmp olarak arayacağız.)


Problemi yeterince açıklayamadı isem bir de aşağıdaki örneğe bakın.

Windowsda çalışan satranç programımız olsun. Programı çalıştırdığımızda
gerekli soruların kullanıcı tarafından cevaplanıp oyuna başlanması gerekecektir.

Ben aynı PC ye öyle bir program yazayımki, bu program ekranda satranç programı çıktığı anda devreye girsin, mousu ilgili yerlere götürüp cevap bekleyen girişlere klavyeden veri girsin ( keyboard buffera sanki tusa basılmış gibi veri yükleyecek)

Ardından satranç oyunun başlamasını sağlayacak.

Hamle bize geçtiğinde ekrandaki BMP haritadan PC nin yaptığı hamleyi tespit edecek ve karşı hamleyi hesaplayacak ardından mouse cursoru ilgili taşa doğru hareket etirecek vs vs vs

Sanırım problem daha anlaşılır oldu.

Windowsun kısıtlamaları ve donanım routinelerine eklenti yapmayı bilmediğimden bu türde bir programı yazmak beni aşıyor.

Bu programın Win 2000 de yazılması için yardımlarınıza ihtiyacım var.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

cozturk

Hocam bunun daha kolayı var: sanal key denen tuşlar ile bizim yazdığımız program başka bir programa "tuş" gönderebiliyor. bmpyi algılayacak TSR çok daha zor iştir.  Mesela delphide yazacağın program "pencere başlığına" bakarak ilgili pencereyi bulur. "tab" ile ilgili "edite" ulaşır, içini, dodurur, yine "tab" ile Tamam'ı bulup tıklayıverir.

z

Bahsettiğiniz olayı bilmiyordum gerçekten çok işime yarayacak.

Ancak uygulamamda BMPye bakmam şart. Ekranda alt alta listelenmiş
isimler var. İşlemi yapabilmem için isimlerin bold olup olmadığına bakmam gerekecek. Eğer bold ise işlem yapılacak demektır, işlemi bittiğin de normale donuyor.

Ayrıca bazen uygulama küçük bir kutucukta hata mesajı verebiliyor, bunu da algılayabilmem lazım.

Eğer ekran ramını okuyabilirsem işin bir kısmını çözmüş olurum.

Peki yazacağımız program ekran ramın içeriğinin nasıl okur ?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

DumrulBey

Hocam,

Bu tür üst seviye programlama tekniklerini www.programlama.com sitesine soruyor musun? Aslında mutlaka soruyorsundur, benimki de boş laf işte. Neyse bir hatırlatayım dedim.

Yardımcı olmak isterdim ama henüz o aşamalara gelemedik. Ama belleğe direkt erişme olayları için Delphi yerine C tavsiye ederim. Mesela Borland'ın C++ Builder'ı var. Borland'ın diğer ürünleri ile çok uyumlu harika bir ürün.

Aslında yapmak istediğin satranç ile ilgili olsaydı bu konuda çok güzel bir program önerebilirim. Satrançın müptelaları bilirler; program için üçüncü parti motoları var ve program içinde bunları savaştırıyorsun...:)

Son olarak her şeyi ekrandan halletmek soruna yol açabileceğini belirteyim. Programın durumu hakkında bilgiye ihtiyaç duyulabilir. Hangi programı yönetmek istiyorsun?

Başarılar...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)

z

Sorun kullanılacak programlama dilinden öte windows işletim sisteminin yasaklamalarından kaynaklanıyor. (protected mode)

Bu yasakları aşmayı yada izin almayı bilmiyorum.

PC başında oturup,  mouse ile  Ekranda çıkan görüntüye göre butonlardan hangisine basmama karar vermem gereken zamanımı çalan ve kafamı kullanmamı gerektirmeyen can sıkıcı bu uygulamayla ben değilde PC uğraşsın istiyorum.

Aslında pek çok programa uygulanabilir....
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

DumrulBey

Alıntı yapılan: "bunalmis"PC başında oturup,  mouse ile  Ekranda çıkan görüntüye göre butonlardan hangisine basmama karar vermem gereken zamanımı çalan ve kafamı kullanmamı gerektirmeyen can sıkıcı bu uygulamayla ben değilde PC uğraşsın istiyorum.
...
Yoksa para kazandıran uygulamalardan mı bahsediyorsun? Hani hareket olmayınca ara sıra ekranın rast gele bir yanına çıkar, onaylamazsan saatin işlemez dolayısıyla para kazanamasın. Böyle bir program yazarsam komisyon isterem...:)

Aslında dil seçimi önemli. İşletim sistemindeki kısıtlamalarda haklısın. Ama Delphi'nin yeri ayrı C++'ın yeri apayrı. Delphi'de bazı basit işler için bile bileşene ihtiyaç duyuyoruz. Bu bileşenlerin neredeyse çoğu C'de yazılmış. Nedeni ne acaba? Eğer işletim sistemi alt edililecekse en iyisi C. Bence BMC...:)

Sevgiler, saygılar...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)

z

Eger bahsettiğin tarzda para kazandıran bir program varsa evet yazacağımız  program bu iş için ideal bilgisayar operatorlüğü yapacaktır.

Açıkcası ne delphiyi nede C++ iyi denecek seviyede kullanamadığımdan
iki dili mukayese yapamıyorum.

Sadece delphiyi daha kolay buluyorum ve asm desteği hoşuma gidiyor.

Video ramı okumak için aklıma çok güzel bir 3 kağıt geldi.

Yazacağım program bir şekilde prntscr tuşuna basarsa, zaten bu eylem ekranı bmp formatına çeviriyor. Geriye copy edilmiş bu verilerin yazılımla programımdaki BMP alanına paste edilmesi kalıyor.  Delphi kodlaması nasıl bilmiyorum. Ama çok zor olmasa gerek gerisi algoritma.

Peki mouse pointeri yazılımla nasıl saga sola ileri geri oynatırız?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

cozturk

Arkadaşlar bu para kazandıraN  program çok işe yarar.
Hani bir ara parakesesi.com gibi bişey vardı. belirtiğimiz linklere her gün x dakika arayla tıklayınız. her sitede x dakika bekleyiniz.  şukadar günde bukadar para kazanırsınız diyordu. Tabi sonradan bir email geliyor. "usulüne uygun tıklamadınız. paranız sıfırlandı keh keh keh.. " Belki de doğrudur. ilgili reklam  yeteri kadar süre "izlenmez" ise para etmiyordur.
Bunalmış , Bmpyi okuma işine niye taktın anlamıyorum. prntscr filan. bunun içinden metni bulmak acayip zoriş. Sen OCR gibi bişey yapmak zorundasın. dsp vs.  çok zor. çok.

z

Hayır hayır karmaşık OCR ile işim yok.

Ekrandaki görüntü kayık değil dahası koordinatları ve karakterin tipini zaten biliyorum. Dolayısı ile OCR bu uygulamada çok zor değil.

(Ekrana kamera vs ile bir başka PC den baksamydım evet çok zor olacaktı)

Yazılacak program, 1024*768 çözünürlükteki ekranda 100x100 koordinatlarında atıyorum siyah renkte bold bir görüntü varsa ilk karakteri de (karakter tipi vs sabit) şu ise beklediğim görüntü ekranda belirlendi diyebilmesi için BMP işlerine bulaşmam gerekecek.

Bunun içinde karşılaştırmak istediğim karakterin görüntüsünü programa gömerim ve ilgili koordinatta bu patern aynen varmı diye bakarım.

Ekrandaki görüntüyü program bilmezse nasıl işlem yapsın? Bizlerde ekrandaki görüntüye göre hangi tuşlara basacağımıza karar vermiyormuyuz?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

cozturk

EH madem . mesela 50 x 50 piksel görüntüyü  resource  içine aynen atarsın. bunalrdan 10 belki de 50 adet olacak. peki  bunun bulduktan sonra  "edite" nasıl gideceksin? Kesin hwnd.. gibi "proccess" veya "pencere" gibi birşey ile bu nun numarasına bakıp ayrıca içindeki "kontrol"ün numarasına bakman lazım.

Haaa unutmadan: Resource hacker gibi program  ile "exe" nin içine gidip istediğin kontroller ve kısa yollar ile oynayabilirsin. ayrıca yeni text filan da ekleyebilirsin.  örn. az önce w98 de notepade baktım. klavye kısayolları şöyle imiş. BUnları beğenmezsen değiştirebiliyorsun :D
1 ACCELERATORS
LANGUAGE LANG_TURKISH, 0x1
{
	VK_INSERT, 769, CONTROL, VIRTKEY
	VK_F1, 5, VIRTKEY
	VK_F3, 8, VIRTKEY
	VK_F5, 12, VIRTKEY
	VK_BACK, 25, ALT, VIRTKEY
	"^Z", 25
	"^X", 768
	"^C", 769
	"^V", 770
}

z

Alıntı yapılan: "cozturk"..... peki  bunun bulduktan sonra  "edite" nasıl gideceksin? Kesin hwnd.. gibi "proccess" veya "pencere" gibi birşey ile bu nun numarasına bakıp ayrıca içindeki "kontrol"ün numarasına bakman lazım.

Bu kısmı anlamadım. Biraz açarmısın? Edite gitmekle ne demek istiyorsun?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

cozturk

Diyelim şifreyi giriniz: diyor. Bunun karşısındaki, şifreyi girdiğimiz kutucuk "edit"tir. buna birşey yazdırmak için kesin imleci buraya getirmen lazım. diyelim 250, 450 koordinayoına getirdin. fakat buraya birşey yazmak için tıklayıp, içine girmen lazım. bunun  kolayı ise  "tab" ile direk ilgili edite ulaşmaktır.  fare ile iş zor gibi

z

Evet şimdi anladım evet tab pozisyonu resetlenebiliyorsa tabla ilerlemek kolaylık sağlar.

Genede mouse cursoru yazılımla hareket ettirmenin yöntemini merak ediyorum.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com