पर काम करता है मैंने हाल ही में एक ग्राहक के लिए वर्चुअल कीबोर्ड एप्लिकेशन विकसित किया है। कार्यक्रम लगभग सभी कार्यक्रमों के साथ ठीक काम कर रहा है, लेकिन कुछ आदेश जैसे {ENTER}
या {DEL}
साइट्रिक्स के साथ काम नहीं कर रहे हैं। क्या वर्कअराउंड या SendKeys
का विकल्प है?SendKeys वैकल्पिक जो सिट्रिक्स
संपादित करें 1: मैंने SendInput विधि (विंडोज इनपुट सिम्युलेटर SendInput का उपयोग करता है) और डीएल कुंजी के साथ-साथ तीर कुंजियां अभी भी काम नहीं कर रही हैं। हालांकि एंटर कुंजी काम करता है।
संपादित करें 2: इसे हल करें। साइट्रिक्स के दो अलग-अलग संस्करणों के साथ परीक्षण किया गया। This question helped me a lot.:
Citrix थिन क्लाइंट scancode keybd_event की परम का उपयोग करता है, तब भी जब एमएस कहते यह अप्रयुक्त है और 0. आप जरूरत है इसे पाने के लिए Citrix ग्राहक के लिए रूप में अच्छी तरह शारीरिक scancode आपूर्ति करने के लिए किया जाना चाहिए। साइट्रिक्स क्लाइंट में भी SendInput API के साथ उत्पन्न कुंजीपटल इनपुट के साथ बड़ी समस्या है।
मैं Windows Input Simulator में कोड समझौता:
// Function used to get the scan code
[DllImport("user32.dll")]
static extern uint MapVirtualKey(uint uCode, uint uMapType);
/// <summary>
/// Calls the Win32 SendInput method ...
/// </summary>
/// <param name="keyCode">The VirtualKeyCode to press</param>
public static void SimulateKeyPress(VirtualKeyCode keyCode)
{
var down = new INPUT();
down.Type = (UInt32)InputType.KEYBOARD;
down.Data.Keyboard = new KEYBDINPUT();
down.Data.Keyboard.Vk = (UInt16)keyCode;
// Scan Code here, was 0
down.Data.Keyboard.Scan = (ushort) MapVirtualKey((UInt16)keyCode, 0);
down.Data.Keyboard.Flags = 0;
down.Data.Keyboard.Time = 0;
down.Data.Keyboard.ExtraInfo = IntPtr.Zero;
var up = new INPUT();
up.Type = (UInt32)InputType.KEYBOARD;
up.Data.Keyboard = new KEYBDINPUT();
up.Data.Keyboard.Vk = (UInt16)keyCode;
// Scan Code here, was 0
up.Data.Keyboard.Scan = (ushort)MapVirtualKey((UInt16)keyCode, 0);
up.Data.Keyboard.Flags = (UInt32)KeyboardFlag.KEYUP;
up.Data.Keyboard.Time = 0;
up.Data.Keyboard.ExtraInfo = IntPtr.Zero;
INPUT[] inputList = new INPUT[2];
inputList[0] = down;
inputList[1] = up;
var numberOfSuccessfulSimulatedInputs = SendInput(2,
inputList, Marshal.SizeOf(typeof(INPUT)));
if (numberOfSuccessfulSimulatedInputs == 0)
throw new Exception(
string.Format("The key press simulation for {0} was not successful.",
keyCode));
}
धन्यवाद XSL पारित कर दिया आभासी कुंजी के साथ जुड़े कोड स्कैन भेज देंगे !!! महान खोजें! मैं भी इनपुट सिम्युलेटर (फैब टूल बीटीडब्ल्यू) का उपयोग कर रहा था, लेकिन मुझे आपके द्वारा प्रदान की गई इस चिमटा की आवश्यकता है (ushort) MapVirtualKey ((UInt16) keyCode, 0); उत्कृष्ट कार्य - बहुत धन्यवाद –
क्या आपके पास एक कीप्रेस की बजाय पूरी स्ट्रिंग भेजने का कोई तरीका है? – Mathias