2016-04-21 7 views
0

Я пытаюсь подражать различные задачи в Win7 и у меня есть некоторые проблемы с этой функцией:Эмуляция клавиатуры ввести ключ в C#

LeftMouseClick(Cursor.Position.X - 720, Cursor.Position.Y - 45); 
System.Threading.Thread.Sleep(1000); 

// Simulate each key stroke 
InputSimulator.SimulateKeyDown(VirtualKeyCode.RETURN); 
InputSimulator.SimulateKeyUp(VirtualKeyCode.RETURN); 

InputSimulator.SimulateTextEntry("cmd"); 
System.Threading.Thread.Sleep(1000); 


InputSimulator.SimulateKeyDown(VirtualKeyCode.RETURN); 
InputSimulator.SimulateKeyUp(VirtualKeyCode.RETURN); 

Все, что я хочу сделать, это нажать START, написать CMD, нажмите клавишу ВВОД. Все работает гладко, за исключением нажатия клавиши ввода.

Все это происходят на RDP ActiveX, вот код:

var client = (IMsRdpClient7)rdp.GetOcx(); 
    // client.RemoteProgram2.RemoteProgramMode = true; 
((MSTSCLib.IMsRdpClientAdvancedSettings5)rdp.AdvancedSettings).DisplayConnectionBar = true; 
((MSTSCLib.IMsRdpClientAdvancedSettings5)rdp.AdvancedSettings).ConnectionBarShowPinButton = true; 
((MSTSCLib.IMsRdpClientAdvancedSettings5)rdp.AdvancedSettings).BitmapVirtualCache32BppSize = 48; 
((MSTSCLib.IMsRdpClientAdvancedSettings5)rdp.AdvancedSettings).ConnectionBarShowRestoreButton = false; 
((MSTSCLib.IMsRdpClientAdvancedSettings5)rdp.AdvancedSettings).ConnectionBarShowMinimizeButton = true; 

((MSTSCLib.IMsRdpClientAdvancedSettings5)rdp.AdvancedSettings).EnableWindowsKey = 1; 
((MSTSCLib.IMsRdpClientAdvancedSettings5)rdp.AdvancedSettings).GrabFocusOnConnect = true; 
((MSTSCLib.IMsRdpClientAdvancedSettings5)rdp.AdvancedSettings).RedirectDrives = true; 
((MSTSCLib.IMsRdpClientAdvancedSettings5)rdp.AdvancedSettings).RedirectClipboard = true; 
((MSTSCLib.IMsRdpClientAdvancedSettings5)rdp.AdvancedSettings).RedirectPrinters = true; 
((MSTSCLib.IMsRdpClientAdvancedSettings5)rdp.AdvancedSettings).RedirectPOSDevices = true; 

rdp.Server = "1.2.3.4"; 
rdp.UserName = "Rmlabuser2"; 
IMsTscNonScriptable secured = (IMsTscNonScriptable)rdp.GetOcx(); 
secured.ClearTextPassword = "Rmlabuser2"; 
// rdp.FullScreenTitle = "Full Screen"; 
// rdp.SecuredSettings.FullScreen = 1; 
// rdp.SecuredSettings.StartProgram = "calc"; 
rdp.Connect(); 

Повторяю, ключи работы, я не могу ударить войти.

Спасибо.

+0

Вы пробовали SendKeys.Send ("{ENTER}"); ? Я нашел его здесь, если это помогает: https://msdn.microsoft.com/en-us/library/ms171548(v=vs.110).aspx –

+0

дает мне ошибку прерывания, я могу использовать только SendKeys.SendWait ... и он просто ждет, я узнал, что команда ввода отправлена, i ALT + TAB, как только конец скрипта, и я вижу, что происходит, но не в том, что ActiveX RDP Panel ... любой идее? – Damian

+0

Возможно, это может быть что-то? https://msdn.microsoft.com/en-us/library/windows/desktop/aa381294(v=vs.85).aspx –

ответ

0

Вместо этого вы можете попробовать P/Invoking Windows keybd_event.

[DllImport("user32.dll")] 
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, 
int dwExtraInfo); 

const uint KEYEVENTF_EXTENDEDKEY = 0x0001; 
const uint KEYEVENTF_KEYUP = 0x0002; 

Затем, когда вы хотите нажать на нее:

keybd_event((byte)System.Windows.Forms.Keys.Enter, 0x45, KEYEVENTF_EXTENDEDKEY, 0); //Key down 
keybd_event((byte)System.Windows.Forms.Keys.Enter, 0x45, KEYEVENTF_EXTENDEDKEY |KEYEVENTF_KEYUP, 0); //Key up 
+0

Каков код для ввода ключа? – Damian

+0

Я пробовал, все еще не работает, я узнал, что команда ввода отправлена, i ALT + TAB, как только конец скрипта, и я вижу, что происходит, но не в этой панели ActiveX RDP ... любой идее? – Damian

+0

@ Damian: Я включил ключ ввода в свой код ... Но как вы это понимаете? Откуда вы знаете, что это не работает? Если панель сфокусирована, она должна отправить на нее клавишу. –