Ana sayfa › Forumlar › PROGRAMLAMA › Diğer Programlama Dilleri › Python › Klavye Kontrol Modülü
- Bu konu 0 yanıt içerir, 1 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:57 #16036özgürİzleyici
# -*- coding: cp1254 -*-
import time #Duraklamalar için
import win32api #Klavye hareketleri ve sanal tuş kodları için
import win32con #Windows sabitleridef PressKey(down, key):
“””Bir tuşa basmayı yada basılı olanı durdurma.Bir tuşa basar gibi ya da basılı tutar gibi yapıyoruz
Parametreler:
down: bir tuşa basılıp basılmadığı yada basılı tutulup tutulmadığını ifade eder
key: Kullanılacak tuşun sanal kodunu ifade eder
“””
win32api.keybd_event(key, 0, (not down) * win32con.KEYEVENTF_KEYUP)def TypeKey(key, keystroke_time=0):
“””Sanal bir tuşa basılmasını ifade eder.Parametlerler:
key: hangi tuşa basılacağını ifade eder
keystroke_time: tuşa saniye olarak ne uzunlukta basılacağını ifade eder.
Not: 0 olarak gayet güzel çalışmaktadır.geriye bir şey döndürmez.
“””# Bu sadece PressKey fonksiyonuna gecikme süresi kadar bekleme ekler
PressKey(True, key)
time.sleep(keystroke_time)
PressKey(False, key)def TypeString(string_to_type,
use_modifiers=False,
keystroke_time=0,
time_between_keystrokes=0):
“””Klavyeyle bir şeyler yazar gibi kullanıyoruz.parametreler:
string_to_type: yazılacak yazı
use_modifiers: aşağıdaki tanımlayıcı kelimelerin yazılıp yazılmayacığı belirtir.
aktif olduğunda:
{abc}: karakterleri ALT tuşu basılı yazdırır
[abc]: karakterleri CTRL tuşu basılı gibi yazdırır
use_modifiers True ise kaçış karakteri ve {}[] bu işaretleri aslına uygun şekilde
kullanılır
p işareti işlemleri 1 saniyelik duraklatır menüleri kullanırken baya kullanışlıdır
1-9 işaretleri F tuşlarını ifade eder, ise F10’uÖzellikleri: SHIFT i , yazdırılmayan ifadeleri (F tuşları, ESC, ok tuşları vs),
sağ/sol SHIFT ALT WINDOWS tuşlarını tam olarak destekler.keystroke_time:saniye olarak tuşların basılı tutulacağı süreyi ifade eder
time_between_keystrokes: saniye olarak tuşlar arasındaki duraksamayı ifade edergeriye bir şey döndürmez.
“””shift_held = win32api.GetAsyncKeyState(win32con.VK_SHIFT ) < 0 ctrl_held = win32api.GetAsyncKeyState(win32con.VK_CONTROL) < 0 alt_held = win32api.GetAsyncKeyState(win32con.VK_MENU ) < 0 next_escaped = False escape_chars = { 'a': 'a', 'b': 'b', 'f': 'f', 'n': 'n', 'r': 'r', 't': 't', 'v': 'v'} for char in string_to_type: vk = None handled = False # {abc} ve [abc] gibi modifiyeli tuşların olup olmadığını kontrol ediyoruz. if use_modifiers and not next_escaped: handled = True if char == "{" and not alt_held: alt_held = True PressKey(True, win32con.VK_MENU) elif char == "}" and alt_held: alt_held = False PressKey(False, win32con.VK_MENU) elif char == "[" and not ctrl_held: ctrl_held = True PressKey(True, win32con.VK_CONTROL) elif char == "]" and ctrl_held: ctrl_held = False PressKey(False, win32con.VK_CONTROL) else: handled = False # Eğer bir kaçış ifadesi varsa onu uygun kodla değiştiriyoruz if next_escaped and char in escape_chars: char = escape_chars[char] #Eğer p ifadesi varsa 1 saniye bekletiyoruz if next_escaped and char == 'p': time.sleep(1) next_escaped = False handled = True # Eğer (d) ifadesi varsa F tuşlarını kullanıyoruz. if next_escaped and char.isdigit(): fkey = int(char) if not fkey: fkey = 10 next_escaped = False vk = win32con.VK_F1 + fkey - 1 # Eğer ters slah ifadesi varsa bir sonraki ifadeyi kaçış ifadesi olarak kullanıyoruz if not next_escaped and char == "\": next_escaped = True handled = True #Eğer bunu yaparsak, bu özel bir karakter yada özel kaçış ifadesi olmayacak # düzene uygun bir ifade olacaktır. if not handled: next_escaped = False if not vk: vk = win32api.VkKeyScan(char) # VkKeyScan() fonksiyonu taranan verinin küçük harfle byte değerini döndürür. # Büyük ifadesi verilen karakterin üretilmesini ifade eder. # Burada biz sadece SHIFT ile ilgileniyoruz.SHIFT komutunu tanımlıyor ve # şu ana göre düzenliyoruz. Bu SHIFT'e basmak ya da basılı tutmaktan farklıdır. new_shift_held = bool(vk & (1<<8)) if new_shift_held != shift_held: PressKey(new_shift_held, win32con.VK_SHIFT) shift_held = new_shift_held # Belirlenen tuşları yazdırıyor ve belirlenen kadar duraklatıyoruz. TypeKey(vk & 0xFF, keystroke_time) time.sleep(time_between_keystrokes) # Düzenlenen tuşları eğer basılı haldelerse bırakıyoruz if shift_held: PressKey(False, win32con.VK_SHIFT) if ctrl_held: PressKey(False, win32con.VK_CONTROL) if alt_held: PressKey(False, win32con.VK_MENU) if __name__ == "__main__": # Hadi bir test yapalım bakalım. # Çalıştırı açmak için Windows-R tuşuna basıyoruz PressKey(True, win32con.VK_LWIN) TypeKey(ord('R')) PressKey(False, win32con.VK_LWIN) # ekranın geldiğinden emin olmak için 1 saniye bekliyoruz time.sleep(1) # Çalıştır'dan wordpad'i çağırıyoruz TypeString("wordpadn") # Bir saniye daha bekleyip Yazmaya Başlıyoruz. time.sleep(1) TypeString("Bu keyboard.py modulünün testidir.nn") TypeString("Bu satırın üstünde ve altında boş satırlar olması gerekiyor.nn") TypeString("Bu satırlar [b]kalın yazı[b] , [i]italik yazı[i]" " ve normal yazı yazıp yazamadığımızı kontrol amaçlıdır..nn", use_modifiers=True) TypeString("Bu satır, kelimeler arasında geçerli bir süre aralıkla yazılmaktadır" " ve bittiğinde sonunda 3 saniyelik bir bekleme olacaktır." "3 saniyenin sonunda ise kayıt menüsü açılacak , dosyaya 'Deneme'" "adı verilecek, ve test sonlanacaktır." "ppp[s]Denemeppp", use_modifiers=True, keystroke_time=0.01, time_between_keystrokes=0.01)
-
YazarYazılar
- Bu konuyu yanıtlamak için giriş yapmış olmalısınız.