2016-04-21 50 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 ...並且它只是在等待,我發現輸入命令被髮送,腳本結束後我立即ALT + TAB,並且看到進入,但不在該ActiveX RDP面板中...任何ideea? – Damian

+0

也許這可能是什麼? https://msdn.microsoft.com/en-us/library/windows/desktop/aa381294(v=vs.85).aspx –

回答

0

您可以嘗試P /調用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

我試過了,仍然不工作,我發現輸入命令被髮送,腳本結束後,我ALT + TAB,我看到進入去,但不是在該ActiveX RDP面板...任何ideea? – Damian

+0

@Damian:我在我的代碼中包含了輸入鍵......但你的意思是?你怎麼知道它不起作用?如果面板集中,它應該將按鍵發送給它。 –