নন জাভাস্ক্রিপ্ট উপায়
প্রকৃতপক্ষে, আমি সমাধানগুলি পছন্দ করি, যা জাভাস্ক্রিপ্টের উপর ভিত্তি করে হতে পারে, যেহেতু তারা সম্ভবত ওয়েব সম্পর্কিত এবং ভাল সম্ভাবনাগুলি - ওএস-ইন্ডিপেন্ডেন্ট। তবে আমি ভাবছিলাম - সমস্ত ব্রাউজারগুলির জন্য আপনার সমস্যাটি কীভাবে সমাধান করবেন, যেহেতু জাভাস্ক্রিপ্ট সমাধানগুলি এই ক্ষেত্রে, সমস্ত সম্ভাব্য ব্রাউজারগুলির জন্য সামঞ্জস্য করা কঠিন হবে (আমি নিশ্চিত না যে এটি আদৌ সম্ভব কিনা)।
সুতরাং, আপনি যেমনটি উল্লেখ করেছেন, এর আরেকটি উপায় রয়েছে - অর্থাত্ ওএস স্তরে আচরণ অনুকরণ করা। এটির আরও একটি সুবিধাও রয়েছে - আপনি নিশ্চিত হতে পারেন যে ব্রাউজারের জন্য এটি মানুষের মতো 100% দেখাচ্ছে (কারণ এটি ভাল, এটি ড্রাইভার যা সংকেত প্রেরণ করছে)। সুতরাং আপনি যেকোন ব্রাউজারের সাথে ড্রাইভার / ডিভাইস-ভিত্তিক সমাধানগুলি ব্যবহার করতে পারেন (বা এমনকি জাভাস্ক্রিপ্ট অক্ষম থাকলেও)।
লিনাক্স
দুর্ভাগ্যক্রমে, ড্রাইভার / ডিভাইস জড়িত করার সাথে সাথেই ওএস নির্ভরতা তৈরি করে। সুতরাং প্রতিটি ওএসের জন্য আপনার নিজের সমাধান প্রয়োজন। এই পোস্টে আমি লিনাক্স-ভিত্তিক সমাধান (তাই, লিনাক্সের সাথে কাজ করবে) - এবং ম্যাক ওএসে একটু দৃষ্টি নিবদ্ধ করছি। লিনাক্স দ্বারা, স্পষ্টভাবে ডিভাইসে ইভেন্টগুলি লেখা সম্ভব, সুতরাং নীচে প্রধান লুপের সাথে ফাংশনের নমুনা দেওয়া হল:
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;
}
ইস্যুটির জন্য আমার সম্পূর্ণ কোডটি এখানে পাওয়া যাবে । প্রোগ্রামটি "কাঁপুনি" এর প্রশস্ততা জিজ্ঞাসা করবে এবং এর ফ্রিকোয়েন্সি হবে (এইভাবে, "কাঁপুন" এর মধ্যে মাইক্রো সেকেন্ডে কত সময় থাকে)। পরিস্থিতি অনুকরণ করতে, এটি মাউসকে এলোমেলোভাবে 0..X
পয়েন্টের জন্য এলোমেলোভাবে চলতে বাধ্য করবে (উপরে-নীচে-বাম-নীচে) এবং 0..Y
পরের "কম্পন" অবধি এলোমেলোভাবে মাইক্রো সেকেন্ড অপেক্ষা করবে X
, "কাঁপুন" এর প্রশস্ততা থাকবে এবংY
ফ্রিকোয়েন্সি রয়েছে "
আরেকটি বিষয় হতে পারে আপনার সিস্টেমের জন্য প্রোগ্রামটি মানিয়ে নেওয়া। প্রোগ্রামটি "ডামি" এবং নিজেই মাউস সনাক্ত করতে পারে না, তাই "/dev/input/event4"
হার্ড-কোডেড। আপনার সিস্টেমের জন্য কী সনাক্তকারী হতে পারে তা বুঝতে আপনি চেষ্টা করতে পারেন:
user@host:/path$ cat /proc/bus/input/devices | grep mouse
H: Handlers=mouse0 event3
H: Handlers=mouse1 event4
এবং তাই সম্ভাবনাগুলি "event3"
এবং "event4"
- তবে আপনার সিস্টেমের জন্য অন্যান্য মান থাকতে পারে। সুতরাং, যদি এটি বর্তমানে সি কোডে ব্যবহৃত থেকে পৃথক হয় তবে কেবলমাত্র সংশ্লিষ্ট লাইনটি পরিবর্তন করুন (সুতরাং, int fd = open("/dev/input/event4", O_RDWR);
আপনার ডিভাইসের সাথে লাইন করুন এবং তার পরিবর্তে আপনার ডিভাইসটি রাখুন)event4
)
এই প্রোগ্রামের জন্য একটি GIF ডেমো (কম ফ্রেম রেট, দুর্ভাগ্যবশত, তাই চিত্রটি অত্যন্ত বড় রাখতে না) এখানে ।
একটি সামান্য পার্শ্ব নোট (আপনি যদি সি কোড দিয়ে কী করতে না জানেন) - উপরের প্রোগ্রামটি সংকলন করতে, কেবল ব্যবহার করুন:
user@host:/path$ gcc -std=gnu99 file.c -o m
file.c
আপনার সি উত্স কোড ফাইলের নাম কোথায় , তারপরে আপনি কার্যকর করতে পারবেন, m
আপনার ডিরেক্টরিতে ডাকা হবে । সম্ভবত আপনার সরাসরি মাউস ডিভাইসে লেখার অনুমতি প্রয়োজন হবে, যাতে আপনি ব্যবহার করতে পারেন sudo
:
user@host:/path$ sudo ./m
অন্যান্য ওএস
যুক্তি একই থাকবে:
- আপনার মাউস ডিভাইস অ্যাক্সেস করার জন্য একটি উপায় খুঁজুন
- চলমান মাউসের ইভেন্ট লিখুন
- আপনার ইভেন্টে এলোমেলোকরণ প্রয়োগ করুন
এটাই. উদাহরণস্বরূপ, ম্যাক ওএসের মাউস দিয়ে কাজ করার নিজস্ব পদ্ধতি রয়েছে (লিনাক্সের মতো নয়, ম্যাকও তেমন করেনি procfs
), এটি এখানে ভালভাবে বর্ণিত ।
উপসংহার হিসেবে
আরও ভাল - জাভাস্ক্রিপ্ট বা ডিভাইস-ভিত্তিক সমাধান - আপনার উপর নির্ভর করে কারণ নির্দিষ্ট শর্ত (যেমন ক্রস-ব্রাউজার বা ক্রস-ওএস) এই ক্ষেত্রে সবকিছু ঠিক করতে পারে। অতএব, ওএস স্তরে কীভাবে এটি প্রয়োগ করা যায় তার নির্দিষ্ট কাজের উদাহরণ সহ আমি একসাথে গাইডলাইন সরবরাহ করেছি। এখানে সুবিধাটি হ'ল সমাধানটি ক্রস ব্রাউজার, তবে ব্যয় হিসাবে আমাদের কাছে ওএস-বাইন্ডেড প্রোগ্রাম রয়েছে।