用windows.api唄,当然,仅仅是我的建议
先找到A的指针,然后用SetForegroundWindow提到前面,再模拟SendKey就可以了。。。
能说的具体点吗?比如A指针怎么获取
@ssh800:
Process p = Process.GetProcessByName("A的名字");
IntPtr h = p.MainWindowHandle;
SetForegroundWindow(h);
@ssh800: 句柄也可以呀,网上找找,其实句柄就是windows的指针,用windows api 应该可以搞定你的需求了
@XiaoFaye: Process[] p = Process.GetProcessesByName("123.exe");
IntPtr h = p[0].MainWindowHandle;
返回的是数组,好象不能你呢样写啊
@ssh800:
都说到这份上了你还不会,赶紧去补基础知识吧。。。
@XiaoFaye:
Process p = Process.GetProcessByName("A的名字"); IntPtr h = p.MainWindowHandle;
SetForegroundWindow(h);
呵呵,这部份搞定了,如果这个窗口中有多个文本框,怎么使指定的文本框获取焦点,还请指教谢谢。
@ssh800: 知道SPY++这个程序吗?用它的原理,找到你要的文本框,再发送一个Focus的消息就可以了。
如果文本框有相应的快捷键那更简单,直接用SendKey发送对应的快捷键就行了。
1 private void Form1_Load(object sender, EventArgs e) 2 { 3 //注册热键Shift+S,Id号为100。HotKey.KeyModifiers.Shift也可以直接使用数字4来表示。 4 HotKey.RegisterHotKey(Handle, 100, HotKey.KeyModifiers.Shift, Keys.S); 5 6 } 7 8 private void Form1_FormClosing(object sender, FormClosingEventArgs e) 9 { 10 //注销Id号为100的热键设定 11 HotKey.UnregisterHotKey(Handle, 100); 12 } 13 14 /// 监视Windows消息 15 /// 重载WndProc方法,用于实现热键响应 16 protected override void WndProc(ref Message m) 17 { 18 const int WM_HOTKEY = 0x0312; 19 //按快捷键 20 switch (m.Msg) 21 { 22 case WM_HOTKEY: 23 switch (m.WParam.ToInt32()) 24 { 25 case 100: //按下的是Shift+S 26 SendKeys.Send("aaaaaaaaaaa"); 27 //MessageBox.Show("shift+s"); 28 //此处填写快捷键响应代码 29 break; 30 } 31 break; 32 } 33 base.WndProc(ref m); 34 }
1 class HotKey 2 { 3 //如果函数执行成功,返回值不为0。 4 //如果函数执行失败,返回值为0。要得到扩展错误信息,调用GetLastError。 5 [DllImport("user32.dll", SetLastError = true)] 6 public static extern bool RegisterHotKey( 7 IntPtr hWnd, //要定义热键的窗口的句柄 8 int id, //定义热键ID(不能与其它ID重复) 9 KeyModifiers fsModifiers, //标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效 10 Keys vk //定义热键的内容 11 ); 12 13 [DllImport("user32.dll", SetLastError = true)] 14 public static extern bool UnregisterHotKey( 15 IntPtr hWnd, //要取消热键的窗口的句柄 16 int id //要取消热键的ID 17 ); 18 19 //定义了辅助键的名称(将数字转变为字符以便于记忆,也可去除此枚举而直接使用数值) 20 [Flags()] 21 public enum KeyModifiers 22 { 23 None = 0, 24 Alt = 1, 25 Ctrl = 2, 26 Shift = 4, 27 WindowsKey = 8 28 } 29 }
网上找到的hotkey代码,修改了下,你可以复制到winform,运行程序,然后打开notepad之类的,按快捷键shift+s,就会自动输入aaaaa,这个给你参考。
sendkeys发送文本有很多限制,可以考虑用剪贴板,按快捷键的时候复制内容到剪贴板,并模拟ctrl+v,可以达到目的。
这里模拟ctrl+v也可以用这个
[DllImport("user32.dll", EntryPoint = "keybd_event", SetLastError = true)] public static extern void keybd_event(Keys bVk, byte bScan, uint dwFlags, uint dwExtraInfo);