C#能不能实现发送ctrl+s这样的组合键盘命令 做一个程序,目的是获取键盘的操作然后再自动发送ctrl+s命令即保存假如当前是word应用程序,我运行C#的应用程序则word就会执行了ctrl+s命令谢谢大家 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 貌似在KEYPRESS的参数E的KEYCODE还是KEYVALUE属性可以区分出来吧 谢谢,我正在找,到是之前有个人教了我下面的代码是捕获鼠标的,你们看下using System;using System.Threading;using System.Runtime.InteropServices;using System.Windows.Forms;namespace MouseControl1{ class MouseControl { /// <summary> /// 鼠标控制参数 /// </summary> const int MOUSEEVENTF_LEFTDOWN = 0x2; const int MOUSEEVENTF_LEFTUP = 0x4; const int MOUSEEVENTF_MIDDLEDOWN = 0x20; const int MOUSEEVENTF_MIDDLEUP = 0x40; const int MOUSEEVENTF_MOVE = 0x1; const int MOUSEEVENTF_ABSOLUTE = 0x8000; const int MOUSEEVENTF_RIGHTDOWN = 0x8; const int MOUSEEVENTF_RIGHTUP = 0x10; /// <summary> /// 鼠标的位置 /// </summary> public struct PONITAPI { public int x, y; } [DllImport("user32.dll")] public static extern int GetCursorPos(ref PONITAPI p); [DllImport("user32.dll")] public static extern int SetCursorPos(int x, int y); [DllImport("user32.dll")] public static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo); [STAThread] static void Main() { PONITAPI p = new PONITAPI(); //GetCursorPos(ref p); //Console.WriteLine("鼠标现在的位置X:{0}, Y:{1}", p.x, p.y); //Console.WriteLine("Sleep 1 sec..."); //Thread.Sleep(1000); p.x = 40; p.y = 30; //p.x = (new Random()).Next(Screen.PrimaryScreen.Bounds.Width); //p.y = (new Random()).Next(Screen.PrimaryScreen.Bounds.Height); Console.WriteLine("把鼠标移动到X:{0}, Y:{1}", p.x, p.y); //System.Windows.Forms.Cursor.Position = new System.Drawing.Point(5, 5); //Console.ReadKey(); SetCursorPos(p.x, p.y); GetCursorPos(ref p); Console.WriteLine("鼠标现在的位置X:{0}, Y:{1}", p.x, p.y); Console.WriteLine("Sleep 1 sec..."); Thread.Sleep(1000); Console.WriteLine("在X:{0}, Y:{1} 按下鼠标左键", p.x, p.y); mouse_event(MOUSEEVENTF_LEFTDOWN, p.x, p.y, 0, 0); Console.WriteLine("Sleep 1 sec..."); Thread.Sleep(1000); mouse_event(MOUSEEVENTF_LEFTDOWN, p.x, p.y, 0, 0); Console.WriteLine("在X:{0}, Y:{1} 释放鼠标左键", p.x, p.y); mouse_event(MOUSEEVENTF_LEFTUP, p.x, p.y, 0, 0); Thread.Sleep(1000); p.x = 50; p.y = 55; SetCursorPos(p.x, p.y); GetCursorPos(ref p); Console.WriteLine("在X:{0}, Y:{1} 按下鼠标左键", p.x, p.y); mouse_event(MOUSEEVENTF_LEFTDOWN, p.x, p.y, 0, 0); Console.WriteLine("Sleep 1 sec..."); Thread.Sleep(1000); Console.WriteLine("在X:{0}, Y:{1} 释放鼠标左键", p.x, p.y); mouse_event(MOUSEEVENTF_LEFTUP, p.x, p.y, 0, 0); //Console.WriteLine("程序结束,按任意键退出...."); //Console.ReadKey(); } }} 实现Ctrl+S保存:在keydown事件中,ctrl捕捉后再预定捕捉S键事件:例子(ArcGIS中的,winform程序差不多) /// <summary> /// 保存当前编辑Ctrl+S /// </summary> /// <param name="e"></param> public void SaveEdit(IMapControlEvents2_OnKeyDownEvent e) { if (e.keyCode == (int)Keys.ControlKey) { m_App.MainMapControl.OnKeyDown += new IMapControlEvents2_Ax_OnKeyDownEventHandler(ForCtrlAndS_OnKeyDown); } } private void ForCtrlAndS_OnKeyDown(object sender, IMapControlEvents2_OnKeyDownEvent e) { if (e.keyCode == (int)Keys.S) m_App.SaveEdit(); } 求一个读取Excel的第三方控件 求助大家——WINFORM获取远程网页HTML的方法! Select语句的模糊查询。 c#怎样清除系统还原点?? 请问ORACLE在我的系统上怎么装不上呀?? 谢 客户端给asp.net页面传参数的问题 com+注册的问题 动态的创建属性及编辑的问题 大家说说C#编程手册这本书 好提议,请大家关注 C#如何执行这条SQL语句str,以实现恢复数据库:str = @"RESTORE DATABASE tDB ...... 请高人指点c#字符串中知起点向前取值的函数
using System;
using System.Threading;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace MouseControl1
{
class MouseControl
{
/// <summary>
/// 鼠标控制参数
/// </summary>
const int MOUSEEVENTF_LEFTDOWN = 0x2;
const int MOUSEEVENTF_LEFTUP = 0x4;
const int MOUSEEVENTF_MIDDLEDOWN = 0x20;
const int MOUSEEVENTF_MIDDLEUP = 0x40;
const int MOUSEEVENTF_MOVE = 0x1;
const int MOUSEEVENTF_ABSOLUTE = 0x8000;
const int MOUSEEVENTF_RIGHTDOWN = 0x8;
const int MOUSEEVENTF_RIGHTUP = 0x10; /// <summary>
/// 鼠标的位置
/// </summary>
public struct PONITAPI
{
public int x, y;
} [DllImport("user32.dll")]
public static extern int GetCursorPos(ref PONITAPI p); [DllImport("user32.dll")]
public static extern int SetCursorPos(int x, int y); [DllImport("user32.dll")]
public static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo); [STAThread]
static void Main()
{
PONITAPI p = new PONITAPI();
//GetCursorPos(ref p);
//Console.WriteLine("鼠标现在的位置X:{0}, Y:{1}", p.x, p.y);
//Console.WriteLine("Sleep 1 sec...");
//Thread.Sleep(1000);
p.x = 40;
p.y = 30;
//p.x = (new Random()).Next(Screen.PrimaryScreen.Bounds.Width);
//p.y = (new Random()).Next(Screen.PrimaryScreen.Bounds.Height);
Console.WriteLine("把鼠标移动到X:{0}, Y:{1}", p.x, p.y);
//System.Windows.Forms.Cursor.Position = new System.Drawing.Point(5, 5);
//Console.ReadKey();
SetCursorPos(p.x, p.y);
GetCursorPos(ref p);
Console.WriteLine("鼠标现在的位置X:{0}, Y:{1}", p.x, p.y);
Console.WriteLine("Sleep 1 sec...");
Thread.Sleep(1000); Console.WriteLine("在X:{0}, Y:{1} 按下鼠标左键", p.x, p.y);
mouse_event(MOUSEEVENTF_LEFTDOWN, p.x, p.y, 0, 0);
Console.WriteLine("Sleep 1 sec...");
Thread.Sleep(1000); mouse_event(MOUSEEVENTF_LEFTDOWN, p.x, p.y, 0, 0);
Console.WriteLine("在X:{0}, Y:{1} 释放鼠标左键", p.x, p.y);
mouse_event(MOUSEEVENTF_LEFTUP, p.x, p.y, 0, 0);
Thread.Sleep(1000); p.x = 50;
p.y = 55;
SetCursorPos(p.x, p.y);
GetCursorPos(ref p);
Console.WriteLine("在X:{0}, Y:{1} 按下鼠标左键", p.x, p.y);
mouse_event(MOUSEEVENTF_LEFTDOWN, p.x, p.y, 0, 0);
Console.WriteLine("Sleep 1 sec...");
Thread.Sleep(1000); Console.WriteLine("在X:{0}, Y:{1} 释放鼠标左键", p.x, p.y);
mouse_event(MOUSEEVENTF_LEFTUP, p.x, p.y, 0, 0);
//Console.WriteLine("程序结束,按任意键退出....");
//Console.ReadKey();
} }
}
在keydown事件中,ctrl捕捉后再预定捕捉S键事件:
例子(ArcGIS中的,winform程序差不多)
/// <summary>
/// 保存当前编辑Ctrl+S
/// </summary>
/// <param name="e"></param>
public void SaveEdit(IMapControlEvents2_OnKeyDownEvent e)
{
if (e.keyCode == (int)Keys.ControlKey)
{
m_App.MainMapControl.OnKeyDown +=
new IMapControlEvents2_Ax_OnKeyDownEventHandler(ForCtrlAndS_OnKeyDown);
}
} private void ForCtrlAndS_OnKeyDown(object sender, IMapControlEvents2_OnKeyDownEvent e)
{
if (e.keyCode == (int)Keys.S)
m_App.SaveEdit();
}