如果是输入A,用WM_KEYDOWN就行了,如果是ALT+A好像就不止一种方式了。可以是在param中的某位设定(有一位是表示Alt是否按下的),还可以是另外一种消息吧好像。
原来写一个小游戏的外挂的时候做过类似的程序,不过很久了,已经忘得差不多了,呵呵~硬盘格过所以没源码了,不然就解决你得问题了~你可以查查MSDN得,里面应该有。
原来写一个小游戏的外挂的时候做过类似的程序,不过很久了,已经忘得差不多了,呵呵~硬盘格过所以没源码了,不然就解决你得问题了~你可以查查MSDN得,里面应该有。
解决方案 »
- C# + ArcGIS10.0创建shapefile,为什么汉字不能写入到.dbf属性文件里(请看代码)
- C#写资源管理器,遇到难题望赐教~~~标题一定要长?好吧~~~~~
- 做个应用程序,打开就播放D盘根目录的一首歌,却出现错误
- reporting service 与水晶报表有何区别???
- 如何处理POST过来的XML数据?
- 如何用C#做网上的调查表
- 找工作或想跳槽的请进
- RSS中的xml的问题
- 像这中规则TreeView该如何添加节点
- 为什么用C#做出来的FORM程序一般都很大呀(最小的一个也要18000K左右)?
- Microsoft Jet 数据库引擎打不开文件'\\xxx.xxx.x.xx\test.mdb'。它已经被别的用户以独占方式打开,或没有查看数据的权限
- Windows窗体控件中加入OCX控件,在IE中使用的问题
wParam好像是按键对应的16进制数,而lParam是一些标志位吧,隐约的影响,供你参考。
如:
System.Windows.Forms.SendKeys.Send("{TAB}");//模拟发送tab键
也可以发送组合键,请参看msdn中关于SendKeys类的介绍。
using System.Runtime.InteropServices;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;namespace xajhAuto
{
/// <summary>
/// remoteClass 的摘要说明。
/// </summary>
public class remoteClass
{
public remoteClass()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
#region keyboard event
[DllImport("user32.dll", EntryPoint="keybd_event")]
public static extern void keybd_event (
byte bVk,
byte bScan,
int dwFlags,
int dwExtraInfo
);
/// <summary>
/// 模拟按下一个按键
/// </summary>
/// <param name="keyValue">要摹拟的按键的键值</param>
public void keyDown(byte keyValue)
{
keybd_event(keyValue,(byte)0,0,0);
}
/// <summary>
/// 模拟释放一个按键
/// </summary>
/// <param name="keyValue">要摹拟的按键的键值</param>
public void keyPress(byte keyValue)
{
keybd_event(keyValue,0,2,0);
}
/// <summary>
/// 模拟一次完整的按键过程
/// </summary>
/// <param name="keyValue">要摹拟的按键的键值</param>
public void key(byte keyValue)
{
keybd_event(keyValue,0,0,0);
keybd_event(keyValue,0,2,0);
}
/// <summary>
/// 模拟一次完整的按键过程
/// </summary>
/// <param name="keyValue">要摹拟的按键的键值</param>
/// <param name="ptr">要处理的窗口句柄</param>
public void key(byte keyValue,int ptr)
{
keybd_event(keyValue,0,0,ptr);
keybd_event(keyValue,0,2,ptr);
}
#endregion
#region cut screen
[ System.Runtime.InteropServices.DllImportAttribute ( "gdi32.dll" ) ]
private static extern bool BitBlt (
IntPtr hdcDest , // 目标 DC的句柄
int nXDest ,
int nYDest ,
int nWidth ,
int nHeight ,
IntPtr hdcSrc , // 源DC的句柄
int nXSrc ,
int nYSrc ,
System.Int32 dwRop // 光栅的处理数值
) ;
/// <summary>
/// 截屏
/// </summary>
/// <returns></returns>
public Stream GetImage()
{
//得到一个最大化没有标题栏的窗体,为了截取整个屏幕
Form f=new Form();
f.FormBorderStyle=System.Windows.Forms.FormBorderStyle.None;
f.WindowState=System.Windows.Forms.FormWindowState.Maximized;
//获得当前屏幕的大小
Rectangle rect = new Rectangle () ;
rect = Screen.GetBounds (f) ;
//创建一个以当前屏幕为模板的图象
Graphics g1 = f.CreateGraphics ( ) ;
//创建以屏幕大小为标准的位图
Image MyImage = new Bitmap ( rect.Width , rect.Height , g1 ) ;
Graphics g2 = Graphics.FromImage ( MyImage ) ;
//得到屏幕的DC
IntPtr dc1 = g1.GetHdc ( ) ;
//得到Bitmap的DC
IntPtr dc2 = g2.GetHdc ( ) ;
//调用此API函数,实现屏幕捕获
BitBlt( dc2 , 0 , 0 , rect.Width , rect.Height , dc1 , 0 , 0 , 13369376 ) ;
//释放掉屏幕的DC
g1.ReleaseHdc ( dc1 ) ;
//释放掉Bitmap的DC
g2.ReleaseHdc ( dc2 ) ;
f.Dispose();
Stream s=new System.IO.MemoryStream();
//以JPG文件格式来保存
MyImage.Save(s,ImageFormat.Jpeg);
MyImage.Dispose();
return s;
} #endregion
#region cdrom event
[DllImport("winmm.dll")]
public static extern long mciSendStringA (string lpstrCommand,string lpstrReturnString,long uReturnLength,long hwndCallback);
// lpstrCommand 这是控制命令参数
// lpstrReturnString 这是返回值
// uReturnLength 返回值长度参数
/// <summary>
/// 打开光驱
/// </summary>
public void OpenCDRom()
{
mciSendStringA("set CDAudio door open", "", 0, 0);
}
/// <summary>
/// 关闭光驱
/// </summary>
public void CloseCDRom()
{
mciSendStringA("set CDAudio door closed", "", 0, 0);
} #endregion #region lock mouse
[StructLayout(LayoutKind.Explicit)]
public struct Rect
{
[FieldOffset(0)] public int left;
[FieldOffset(4)] public int top;
[FieldOffset(8)] public int right;
[FieldOffset(12)] public int bottom;
}
[DllImport("User32.dll")]
public static extern void ClipCursor(ref Rect rect);
/// <summary>
/// 锁定鼠标在特定的矩形区域
/// </summary>
/// <param name="top">top</param>
/// <param name="left">left</param>
/// <param name="right">right</param>
/// <param name="buttom">buttom</param>
public void lockMouse(int top,int left,int right,int buttom)
{
Rect r;
r.bottom=buttom;
r.left=left;
r.top=top;
r.right=right;
ClipCursor(ref r);
}
#endregion #region mouse click
//鼠标单击事件
//mouse_event API中的鼠标模拟方法
[DllImport("User32.dll")]
public static extern void mouse_event(int dwFlags,int dx,int dy,uint dwData,ulong dwExtraInfo);
private const int MOUSEEVENTF_LEFTDOWN=2;
private const int MOUSEEVENTF_LEFTUP=4;
private const int MOUSEEVENTF_RIGHTDOWN=8;
private const int MOUSEEVENTF_RIGHTUP=16;
[DllImport("User32.dll")]
public static extern bool SetCursorPos(int x,int y);//定位鼠标的位置 /// <summary>
/// 模拟鼠标左键单击
/// </summary>
/// <param name="x">x的相对屏幕的相对位置</param>
/// <param name="y">y的相对屏幕的相对位置</param>
public void mouse_Click(float x,float y)
{
//计算相对于屏幕的绝对位置
int screenX=(int)(x*Screen.PrimaryScreen.Bounds.Width);
int screenY=(int)(y*Screen.PrimaryScreen.Bounds.Height);
//在屏幕上定位鼠标事件的位置
SetCursorPos(screenX,screenY);
mouse_event(MOUSEEVENTF_LEFTDOWN,screenX,screenY,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,screenX,screenY,0,0);
}
/// <summary>
/// 模拟鼠标左键双击
/// </summary>
/// <param name="x">x的相对屏幕的相对位置</param>
/// <param name="y">y的相对屏幕的相对位置</param>
public void mouse_DoubleClick(float x,float y)
{
int screenX=(int)(x*Screen.PrimaryScreen.Bounds.Width);
int screenY=(int)(y*Screen.PrimaryScreen.Bounds.Height);
SetCursorPos(screenX,screenY);
mouse_event(MOUSEEVENTF_LEFTDOWN,screenX,screenY,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,screenX,screenY,0,0);
mouse_event(MOUSEEVENTF_LEFTDOWN,screenX,screenY,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,screenX,screenY,0,0);
}
/// <summary>
/// 模拟鼠标右键单击
/// </summary>
/// <param name="x">x的相对屏幕的相对位置</param>
/// <param name="y">y的相对屏幕的相对位置</param>
public void mouse_rightClick(float x,float y)
{
int screenX=(int)(x*Screen.PrimaryScreen.Bounds.Width);
int screenY=(int)(y*Screen.PrimaryScreen.Bounds.Height);
SetCursorPos(screenX,screenY);
mouse_event(MOUSEEVENTF_RIGHTDOWN,screenX,screenY,0,0);
mouse_event(MOUSEEVENTF_RIGHTUP,screenX,screenY,0,0);
}
#endregion
}
}