C#能不能实现发送ctrl+s这样的组合键盘命令

junsanrao 2009-02-27 02:01:46
做一个程序,目的是获取键盘的操作然后再自动发送ctrl+s命令即保存
假如当前是word应用程序,我运行C#的应用程序则word就会执行了ctrl+s命令
谢谢大家
...全文
347 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lhq545 2009-03-13
  • 打赏
  • 举报
回复
实现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();
}
junsanrao 2009-02-27
  • 打赏
  • 举报
回复
请你们也把自己知道的拿出来分享下喽。谢谢
junsanrao 2009-02-27
  • 打赏
  • 举报
回复
谢谢,我正在找,到是之前有个人教了我下面的代码是捕获鼠标的,你们看下
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();
}

}
}
hhxxcj 2009-02-27
  • 打赏
  • 举报
回复
可以,但是我忘了是怎么弄的了,你可以找找看

帮你顶着
TechStone 2009-02-27
  • 打赏
  • 举报
回复
貌似在KEYPRESS的参数E的KEYCODE还是KEYVALUE属性可以区分出来吧
apoclast 2009-02-27
  • 打赏
  • 举报
回复
用win32的API

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧