Javascript olmayan yol
Aslında, javascript tabanlı olabilecek çözümleri seviyorum, çünkü daha fazla web bağlantılı ve iyi şanslar - işletim sisteminden bağımsız. Ancak, düşündüm - tüm tarayıcılar için sorununuzu nasıl çözeceğiniz, çünkü javascript çözümlerinin, bu durumda, tüm olası tarayıcılar için ayarlanması zor olacaktır (mümkün olup olmadığından emin değilim).
Dediğiniz gibi, başka bir yol var - yani OS seviyesinde davranışı taklit etmek. Bunun başka bir avantajı daha var - tarayıcı için insan gibi% 100 göründüğünden emin olabilirsiniz (çünkü, sinyali gönderen sürücüdür). Bu nedenle, herhangi bir tarayıcıda (veya javascript devre dışı bırakıldığında bile) sürücü / aygıt tabanlı çözümler kullanabilirsiniz.
Linux
Ne yazık ki, sürücüyü / aygıtı dahil etmek derhal işletim sistemine bağımlılığa neden olur. Yani her işletim sistemi için kendi çözümüne ihtiyacınız olacak. Bu yazıda Linux tabanlı çözüme odaklandım (yani Linux ile çalışacak) - ve Mac OS biraz. Linux ile cihaza olayları açıkça yazmak mümkündür, bu yüzden aşağıda ana döngü ile fonksiyon örneği verilmiştir:
int main()
{
struct input_event event, event_end;
int fd = open("/dev/input/event4", O_RDWR);
long ma = getInteger("Enter max amplitude [points, 0..50]: ", 0, 50);
long ta = getInteger("Enter max wait time [usecs , 0..200000]: ", 0, 200000);
if (fd < 0)
{
printf("Mouse access attempt failed:%s\n", strerror(errno));
return -1;
}
memset(&event, 0, sizeof(event));
memset(&event, 0, sizeof(event_end));
gettimeofday(&event.time, NULL);
event.type = EV_REL;
gettimeofday(&event_end.time, NULL);
event_end.type = EV_SYN;
event_end.code = SYN_REPORT;
event_end.value = 0;
while(1)
{
event.code = rand() % 2 ? REL_X : REL_Y;
event.value = (rand() % 2 ? -1 : 1) * randomTill(ma);
write(fd, &event, sizeof(event));
write(fd, &event_end, sizeof(event_end));
usleep(randomTill(ta));
}
close(fd);
return 0;
}
Benim tam kod sorunu için bulunabilir buraya . Program, "titreme" nin genliğini ve sıklığını soracaktır (bu nedenle, "titreme" arasında mikro saniyede kaç zaman vardır). Durumu taklit etmek için, fareyi 0..X
rastgele yönde (yukarı-aşağı-sol-alt) noktalar için rastgele hareket etmeye zorlar ve bir 0..Y
sonraki "titreme" ye kadar rasgele mikro saniye bekler X
, "titreme" genliği vardır veY
frekansıdır "
Başka bir şey, programı sisteminize uyarlamak olabilir. Program "kukla" ve fare kendi başına algılayamaz, bu yüzden "/dev/input/event4"
sabit kodlanmıştır. Sisteminiz için neyin tanımlayıcı olabileceğini anlamak için deneyebilirsiniz:
user@host:/path$ cat /proc/bus/input/devices | grep mouse
H: Handlers=mouse0 event3
H: Handlers=mouse1 event4
Ve böylece olasılıklar "event3"
ve "event4"
- ancak sisteminiz için başka değerlere sahip olabilir. Bu, şu anda C kodunda kullanılmakta olandan farklıysa, karşılık gelen satırı değiştirin (yani, satır int fd = open("/dev/input/event4", O_RDWR);
yerine ve cihazınızı yerine yerleştirin event4
)
Bu program için bir gif demo (düşük kare hızı, maalesef, bu nedenle görüntüyü çok büyük değil tutmak) burada .
Küçük bir yan not (C kodu ile ne yapacağınızı bilmiyorsanız) - yukarıdaki programı derlemek için şunları kullanın:
user@host:/path$ gcc -std=gnu99 file.c -o m
file.c
C kaynak kodu dosyanızın adı nerede ise, m
dizininizde çağrılan yürütülebilir dosyayı alırsınız . Büyük olasılıkla doğrudan fare cihazına yazmak için izinlere ihtiyacınız olacaktır, bu nedenle şunları kullanabilirsiniz sudo
:
user@host:/path$ sudo ./m
Diğer İşletim Sistemleri
Mantık aynı kalacaktır:
- Fare cihazınıza erişmenin bir yolunu bulun
- Hareketli fare yazma olayı
- Etkinliğinize rastgele uygulama uygulayın
Bu kadar. Örneğin, Mac OS'nin fare ile çalışmak için kendi yolu vardır (Linux gibi değil, Mac de yoktur procfs
), burada iyi tanımlanmıştır .
Sonuç olarak
Daha iyisi - javascript veya cihaz odaklı çözümler - size bağlıdır, çünkü belirli durum (çapraz tarayıcı veya çapraz işletim sistemi gibi) bu durumda her şeye karar verebilir. Bu nedenle, işletim sistemi düzeyinde nasıl uygulanacağına dair bazı çalışma örnekleri ile birlikte yönergeler sağladım. Buradaki fayda, çözümün çapraz tarayıcı olmasıdır, ancak maliyet olarak işletim sistemine bağlı programımız var.