আমি কীভাবে প্রোগ্রামিয়ালি এমন একটি ইভেন্ট তৈরি করতে পারি যা কী-বোর্ডে চাপানো কোনও কী অনুকরণ করে?
আমি কীভাবে প্রোগ্রামিয়ালি এমন একটি ইভেন্ট তৈরি করতে পারি যা কী-বোর্ডে চাপানো কোনও কী অনুকরণ করে?
উত্তর:
প্রশ্নটি ডাব্লুপিএফ ট্যাগ করা আছে তবে এখনও পর্যন্ত উত্তরগুলি নির্দিষ্ট উইনফোর্স এবং উইন 32।
ডাব্লুপিএফ-এ এটি করার জন্য, কেবলমাত্র একটি কীভেন্টআর্গগুলি তৈরি করুন এবং লক্ষ্যবস্তুতে রাইসইভেন্টকে কল করুন। উদাহরণস্বরূপ, সন্নিবেশ কী কীডাউন ইভেন্টটি বর্তমানে মনোনিবেশ করা উপাদানটিতে পাঠাতে:
var key = Key.Insert; // Key to send
var target = Keyboard.FocusedElement; // Target element
var routedEvent = Keyboard.KeyDownEvent; // Event to send
target.RaiseEvent(
new KeyEventArgs(
Keyboard.PrimaryDevice,
PresentationSource.FromVisual(target),
0,
key)
{ RoutedEvent=routedEvent }
);
এই সমাধানটি নেটিভ কল বা উইন্ডোজ ইন্টারনালের উপর নির্ভর করে না এবং অন্যদের তুলনায় অনেক বেশি নির্ভরযোগ্য হওয়া উচিত। এটি আপনাকে একটি নির্দিষ্ট উপাদানটিতে একটি কীপ্রেস অনুকরণ করতে দেয়।
মনে রাখবেন যে এই কোডটি কেবলমাত্র প্রিভিউকিডাউন, কীডাউন, প্রিভিউকিউইউপি এবং কীআপ ইভেন্টগুলিতে প্রযোজ্য। আপনি যদি পাঠ্য ইনপুট ইভেন্টগুলি প্রেরণ করতে চান তবে আপনি এটি পরিবর্তে এটি করবেন:
var text = "Hello";
var target = Keyboard.FocusedElement;
var routedEvent = TextCompositionManager.TextInputEvent;
target.RaiseEvent(
new TextCompositionEventArgs(
InputManager.Current.PrimaryKeyboardDevice,
new TextComposition(InputManager.Current, target, text))
{ RoutedEvent = routedEvent }
);
এটিও নোট করুন:
নিয়ন্ত্রণগুলি পূর্বরূপ ইভেন্টগুলি পাওয়ার প্রত্যাশা করে, উদাহরণস্বরূপ, প্রাকদর্শন কীডাউন কি-ডাউনের আগে হওয়া উচিত
টার্গেট.রোসইভেন্ট (...) ব্যবহার করে মেটা-প্রসেসিং যেমন এক্সিলারেটর, পাঠ্য রচনা এবং আইএমই ছাড়াই ইভেন্টটিকে সরাসরি লক্ষ্যতে প্রেরণ করে। এটি সাধারণত আপনি চান অন্যদিকে, যদি আপনি কোনও কারণে প্রকৃত কীবোর্ড কীগুলি অনুকরণ করতে সত্যিই করেন তবে আপনি পরিবর্তে ইনপুটম্যানেজার.প্রসেসইনপুট () ব্যবহার করবেন।
Keyboard.PrimaryDevice.ActiveSource
দেখুন stackoverflow.com/questions/10820990/...
Ctrl+C
উইন্ডোজ ফর্ম প্রসঙ্গ ছাড়াই মূল ইভেন্টগুলি তৈরি করতে, আমরা নিম্নলিখিত পদ্ধতিটি ব্যবহার করতে পারি,
[DllImport("user32.dll")]
public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);
নমুনা কোড নীচে দেওয়া হয়েছে:
const int VK_UP = 0x26; //up key
const int VK_DOWN = 0x28; //down key
const int VK_LEFT = 0x25;
const int VK_RIGHT = 0x27;
const uint KEYEVENTF_KEYUP = 0x0002;
const uint KEYEVENTF_EXTENDEDKEY = 0x0001;
int press()
{
//Press the key
keybd_event((byte)VK_UP, 0, KEYEVENTF_EXTENDEDKEY | 0, 0);
return 0;
}
ভার্চুয়াল কীগুলির তালিকা এখানে সংজ্ঞায়িত করা হয়েছে ।
সম্পূর্ণ ছবি পেতে, দয়া করে নীচের লিঙ্কটি ব্যবহার করুন, http://tksinghal.blogspot.in/2011/04/how-to-press-and-hold-keyboard-key.html
আমি এটি ব্যবহার করি নি, তবে সেন্ডকি আপনি যা চান তা করতে পারে।
সক্রিয় অ্যাপ্লিকেশনে কীস্ট্রোক এবং কীস্ট্রোক সংমিশ্রণ প্রেরণের জন্য সেন্ডকি ব্যবহার করুন। এই শ্রেণিটি তাত্ক্ষণিকভাবে চালু করা যায় না। কোনও ক্লাসে কীস্ট্রোক প্রেরণ এবং অবিলম্বে আপনার প্রোগ্রামের প্রবাহটি চালিয়ে যেতে, প্রেরণটি ব্যবহার করুন use কীস্ট্রোক দ্বারা শুরু হওয়া কোনও প্রক্রিয়াটির জন্য অপেক্ষা করতে, সেন্ডওয়েট ব্যবহার করুন।
System.Windows.Forms.SendKeys.Send("A");
System.Windows.Forms.SendKeys.Send("{ENTER}");
সহজে! (কারণ ইতিমধ্যে অন্য কেউ আমাদের জন্য কাজটি করেছে ...)
প্রস্তাবিত উত্তরগুলির সাথে এটির জন্য প্রচুর সময় ব্যয় করার পরে আমি এই কোডপ্লেক্স প্রকল্পটি উইন্ডোজ ইনপুট সিমুলেটর জুড়ে এসেছি যা একটি মূল প্রেসের অনুকরণ করার জন্য এটি সহজ করে তুলেছিল :
প্যাকেজটি ইনস্টল করুন, সম্পন্ন করা যেতে পারে বা নিউগেট প্যাকেজ ম্যানেজার বা প্যাকেজ ম্যানেজার কনসোল থেকে যেমন:
ইনস্টল-প্যাকেজ ইনপুটসিমুলেটর
এই 2 লাইন কোড ব্যবহার করুন:
inputSimulator = new InputSimulator()
inputSimulator.Keyboard.KeyDown(VirtualKeyCode.RETURN)
এবং এটাই!
------- সম্পাদনা --------
Codeplex উপর প্রকল্প পাতা কোনো কারণে পতাকাঙ্কিত করা হয়, এই NuGet গ্যালারি লিংক।
উইন্ডোজ সেন্ডমেসেজ এপিআই পাঠান ডাব্লুএম_কেইডাউন দিয়ে ।