Ana sayfa › Forumlar › PROGRAMLAMA › Diğer Programlama Dilleri › Python › Mouse Kontrol Modülü
- Bu konu 3 yanıt içerir, 3 izleyen vardır ve en son 12 yıl 3 ay önce özgür tarafından güncellenmiştir.
-
YazarYazılar
-
7 Eylül 2012: 12:58 #16037özgürİzleyici
# -*- coding: cp1254 -*-
import time #Duraklamalar için
import win32api #Fare olayları için
import win32con #Windows sabitleri
import win32gui #Pencere seçenekleri içindef ScreenToMouse(pt):
“””Fareyi verilen konumun koordinatlarına taşır.
Fare konumunu 16 bite göre normalleştirilen yere taşır,
Ekranın sol üst köşesi (0), sağ alt köşesine 65535 uzaklıkta olarak temsil edilir,
Bu fonksiyon ekran boyutlarını modülün yüklendiği ana göre belirler ve değiştirilemezParametreler:
pt:Farenin konumunu değiştirmek için kullanılacak koordinatlar
Değiştirilen noktayı geri döndürür.
“””# İlk başlatılmasında ekran boyutlarına ilk değerini atar.
# Ekran boyutları ayarlarını bu fonksiyon çalıştırıldığı sürece değiştirilemeyeceğini
#unutmayınız.
if not ScreenToMouse._SCREEN_DIMENSIONS:
desktop = win32gui.GetClientRect(win32gui.GetDesktopWindow())
ScreenToMouse._SCREEN_DIMENSIONS = (desktop[2], desktop[3])return ((65535 * pt[0]) / ScreenToMouse._SCREEN_DIMENSIONS[0],
(65535 * pt[1]) / ScreenToMouse._SCREEN_DIMENSIONS[1])ScreenToMouse._SCREEN_DIMENSIONS = None
def PressButton(down, button=’left’):
“””Fare düğmesine basma ya da basılı halini bırakma olayını temsil etmektedir.Parametreler:
down: farenin düğmesine basılıp basılmayacağını belirtir
button: hangi düğmenin kullanılacağını belirtirGeriye bir şey döndürmez
“””# Fare olayını belirtilen uygun duruma işaretler
flags = {
‘left’: (win32con.MOUSEEVENTF_LEFTUP, win32con.MOUSEEVENTF_LEFTDOWN),
‘middle’: (win32con.MOUSEEVENTF_MIDDLEUP, win32con.MOUSEEVENTF_MIDDLEDOWN),
‘right’: (win32con.MOUSEEVENTF_RIGHTUP, win32con.MOUSEEVENTF_RIGHTDOWN)
}# Düğmeye basar
win32api.mouse_event(flags[button][down], 0, 0)def ClickButton(button=’left’, click_time=0):
“””Farenin o anda bulunduğu yerde fareyi basılı hale getirir.Parametreler:
button: Hangi düğmenin basılacağını belirtir
click_time: Basma ve bırakma arasındaki süreyi belirtirGeriye bir şey döndürmez
“””
PressButton(True, button)
time.sleep(click_time)
PressButton(False, button)def DoubleClickButton(button=’left’, click_time=0, time_between_clicks=0):
“””Farenin o anda bulunduğu yerde fareye çift tıklatır.Parametreler:
button: Hangi düğmenin basılacağını belirtir
click_time: Basma ve bırakma arasındaki süreyi belirtir
time_between_clicks: Tıklamalar arasındaki duraksama süresini belirtirGeriye bir şey döndürmez
“””
ClickButton(button, click_time)
time.sleep(time_between_clicks)
ClickButton(button, click_time)def MoveToLocation(pos, duration=0, tick=0.01):
“””Fareyi bulunduğu konumdan belirtilen koordinatlara taşır.Parametreler:
pos: Farenin taşınacağı ekran koordinatlarını belirtir.
duration: Farenin tıklamasından bırakmaya kadarki geçen süreyi belirtir.
tick: Farenin peşpeşe hareketleri arasındaki zaman miktarını ifade eder.Geriye bir şey döndürmez
“””
# hedefe kaç adımda gidileceğini hesaplıyoruz.
num_steps = (duration/tick)+1# farenin o anki ve taşınacağı pozisyonu alıyoruz
current_location = ScreenToMouse(win32gui.GetCursorPos())
end_location = ScreenToMouse(pos)# adım boyutlarını belirliyoruz
step_size = ((end_location[0]-current_location[0])/num_steps,
(end_location[1]-current_location[1])/num_steps)
step = 0while step < num_steps: # fareyi bir adım hareket ettiriyoruz. current_location = (current_location[0]+step_size[0], current_location[1]+step_size[1]) # pywin32 de hata almamak için konum bilgilerini integere dönüştürüyoruz. win32api.mouse_event( win32con.MOUSEEVENTF_MOVE|win32con.MOUSEEVENTF_ABSOLUTE, int(current_location[0]), int(current_location[1])) step += 1 time.sleep(tick) def ClickAtLocation(pos, button='left', click_time=0): """Ekran koordinatları belirtilen yere tıklatıyoruz. Parametreler: pos: ekran koordinatları (x,y) noktaları belirtiyoruz button: hangi düğmenin tıklanılacağını belirtiyoruz click_time: tıklama süresi Geriye bir şey döndürmez """ MoveToLocation(pos) ClickButton(button, click_time) def ClickInWindow(hwnd, offset=None, button='left', click_time=0): """Belirtilen pencerenin orta noktasına tıklatır. Parametreler: hwnd: tıklanacak pencereyi tutar offset: nereye tıklanacağını belirtir,varsayılan tam orta noktadır button: hangi düğmenin tıklayacağını belirtir. click_time: tıklama süresini belirtir Geriye bir şey döndürmez """ rect = win32gui.GetClientRect(hwnd) if offset is None: offset = (rect[2]/2, rect[3]/2) # pencerenin tam orta noktasının koordinatlarını alıyoruz pos = win32gui.ClientToScreen(hwnd, offset) ClickAtLocation(pos, button, click_time) def DoubleClickInWindow( hwnd, offset=None, button='left', click_time=0, time_between_clicks=0.1): """Belirtilen pencerenin orta noktasına çft tıklatır. Parametreler: hwnd: tıklanacak pencereyi tutar offset: nereye tıklanacağını belirtir,varsayılan tam orta noktadır button: hangi düğmenin tıklayacağını belirtir click_time: tıklama süresini belirtir time_between_clicks: tıklama süreleri arasındaki duraklama süresini belirtir Geriye bir şey döndürmez """ ClickInWindow(hwnd, offset, button, click_time) time.sleep(time_between_clicks) ClickInWindow(hwnd, offset, button, click_time) if __name__ == "__main__": # Hadi bir test yapalım bakalım screen_size = win32gui.GetClientRect(win32gui.GetDesktopWindow()) screen_size = (screen_size[2], screen_size[3]) # fareyi anında tam 0 noktasına taşıyoruz MoveToLocation((screen_size[0], 0)) # fareyi 5 saniye içerisinde sol alt köşeye taşıyoruz MoveToLocation((0, screen_size[1]), 5) # sol tıklatıp Başlat menüsünü açıyoruz # tabi eğer görev çubuğu alt kısımdaysa ClickButton() # bir süre bekleyip içerik menüsünü açmak için sağ tıklıyoruz time.sleep(3) ClickButton('right') # fareyi uzaklaştırıp boş bir alana tıklıyor ve içerik menüsünü kapatmış oluyoruz MoveToLocation((screen_size[0]/2, screen_size[1]/2), 3) MoveToLocation((0, 0), 3) ClickButton()
7 Eylül 2012: 18:20 #16040BahadirÜyeanlatım sizemi ait hocam .
7 Eylül 2012: 21:26 #16041AnonimPasifbu tür düzenli dersleri siteye ekleyerek yeni etkinliğe katılabilirsiniz.
düzenli ders konuları forumda başlıklar arasında kaybolacağı için tavsiyem tek makale de olsa siteye ekleminiz.üye girşi yaptığınızda üst menüde makale ekle seçeneği aktif olacaktır. siz daha önce etkinliklere katıldığınız için içerik klemey yetkilisiniz. eklene içerikler kontrolden geçip ilgili başlığa ekleneceği için doğrudan yayınlanmayacaktır.
ilgi ve desteğiniz için şimdiden teş.
10 Eylül 2012: 16:06 #16043özgürİzleyicitavsiyeleriniz için teşekkürler uymaya çalışacağım
teşekkürler -
YazarYazılar
- Bu konuyu yanıtlamak için giriş yapmış olmalısınız.