C# SendMessage 或 PostMessage 怎麽發送一個鍵啊,如F1键 谁能以 windows的 計算器为例 给一个提示啊.只要成功就行别人告诉我这们做.PostMessage(WindowHandle, 256, 112, 0);但是这个不能发送F1 到计算器上啊,不知道怎么才能发送..请各位给出点代码.
解决方案 »
- C#2008中怎样用一个DataTable中字段的值更新另一个DataTable中字段的值
- 用c#开发supermap objects组件中添加SuperLegend控件进去出问题了
- C#读入XML数据到数据库
- 我要获取一个需要登陆的网站的内容,请问应该怎样写?谢谢
- binary字段读写问题!急急急!
- 请各位高手,有做论坛经验的人士一起来讨论怎么对TextBox赋值问题!
- 我想在web下做一个菜单,就像vs的工具栏一样.
- 求助,一个计时功能,在线等待
- 创建word插件时,如何能将textBox的内容打印到当前word里面
- (急救﹗)WinForm中DataGrid 中的keydown事件如何重寫?
- 求正则表达式替换方法
- 如何控制RichTextBox控件的滚动条位置呢?
按键定义详见MSDN
不过sendkey 只能对当前活动窗口发送信息.没作用
就是这样子啦关键你还需要通过枚举当前进程列表,在里面找到目标进程的名字,再得到他的当前窗口句柄 WindowHandle 就可以了。
我底子不足,无法知晓为何?难道是由于系统对F1处理了???
发数字1或其他成功。
Process[] ps = Process.GetProcessesByName("calc");
if(ps.Length == 0)
{
MessageBox.Show("未找到计算器")
}
Process p = ps[0];
IntPtr calcHandle = p.MainWindowHandle;
PostMessage(calcHandle, 256, 112, 0);
完成代码如下
using System.Runtime.InteropServices;
using System.Diagnostics;
namespace 发送消息
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} /// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void 发送信息_Click(object sender, EventArgs e)
{
Process[] ps = Process.GetProcessesByName("calc");
if (ps.Length == 0)
{
MessageBox.Show("未找到计算器");
}
Process p = ps[0];
IntPtr calcHandle = p.MainWindowHandle;
PostMessage((int)calcHandle, 256, 0x31, 0); //发送1
}
/// <summary>
///没送消息
/// </summary>
/// <param name="hwnd"> hwnd ----------- Long,接收消息的那个窗口的句柄。如设为HWND_BROADCAST,表示投递给系统中的所有顶级窗口。如设为零,表示投递一条线程消息(参考PostThreadMessage)</param>
/// <param name="wMsg"> wMsg ----------- Long,消息标识符</param>
/// <param name="wParam"> wParam --------- Long,具体由消息决定</param>
/// <param name="lParam"> lParam --------- Any,具体由消息决定</param>
/// <returns></returns>
[DllImport("user32.dll", EntryPoint = "PostMessage")]
public static extern int PostMessage(
int hwnd,
int wMsg,
int wParam,
int lParam
);
}
}