我想知道C#如何开发外挂(辅助程序)

cn_free 2011-11-16 05:58:23
网上搜了些,木有搜到....
有人能做一个实例么?
开发一个简单的外挂,实现的功能是运行 的时候打开画图程序,然后在上面画一个圆。
要win7系统下的。
谢谢了,让开开思路的。
...全文
452 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ordimega 2011-11-17
  • 打赏
  • 举报
回复
顶楼主,搜索按键精灵不可以吗?
帮顶了
merui 2011-11-17
  • 打赏
  • 举报
回复
不懂,,,,
cn_free 2011-11-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ordimega 的回复:]

顶楼主,搜索按键精灵不可以吗?
帮顶了
[/Quote]

抓包什么的,修改包,重新发送包 是怎么一回事?
zincy 2011-11-17
  • 打赏
  • 举报
回复
顶楼主,搜索按键精灵
cn_free 2011-11-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fengyarongaa 的回复:]

你问的也太不专业了
你也要看做什么的外挂啊
[/Quote]

是啊,不了解啊,所以不专业啊
大蛮 2011-11-16
  • 打赏
  • 举报
回复
如果是辅助 那就类似按键精灵了 这里提供一个控制鼠标的方法


可以通过两个函数操作鼠标:


[DllImport("user32.dll")]   
static extern bool SetCursorPos(int X, int Y);
[DllImport("user32.dll")]
static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo);
[Flags]
enum MouseEventFlag : uint
{
Move = 0x0001,
LeftDown = 0x0002,
LeftUp = 0x0004,
RightDown = 0x0008,
RightUp = 0x0010,
MiddleDown = 0x0020,
MiddleUp = 0x0040,
XDown = 0x0080,
XUp = 0x0100,
Wheel = 0x0800,
VirtualDesk = 0x4000,
Absolute = 0x8000
}

SetCursorPos使鼠标移动到指定位置;mouse_event使用MouseEventFlag枚举中的Move,也可以使鼠标移动。

mouse_event中使用不同的枚举值可以模拟不同的鼠标事件。

值得注意的是有几点:

1. 我们不能用mouse_event(MouseEventFlag.LeftDown, 10, 10, 0, UIntPtr.Zero);去模拟在(10, 10)处的左键事件,我们需要把这步拆成两步:

第一步:移动鼠标到(10,10)处,用SetCursorPos(10, 10);

第二步:触发左键,用mouse_event(MouseEventFlag.LeftDown, 0, 0, 0, UIntPtr.Zero);

本质上是两步的事件,不能把window API 想的太聪明,认为它会自动跑到(10,10)处,再左键

2. MouseEventFlag的枚举值可以多个一起用,使用 | 操作符

鼠标左键按下和松开两个事件的组合即一次单击:
mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )

两次连续的鼠标左键单击事件 构成一次鼠标双击事件:
mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )
mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )

3. MouseEventFlag中有个Absolute枚举,如果没指定Absolute, 则mouse_event的操作是相对于上次鼠标所在的位置;如果指定了Absolute,则是相对于整个屏幕坐标的位置。

这里要注意,指定Absolute,鼠标的坐标会被约束在[0, 65535]之间。0即对应屏幕左,65535即对应屏幕右下角。

MSDN原话如下:

If MOUSEEVENTF_ABSOLUTE value is specified, dx and dy contain normalized absolute coordinates between 0 and 65,535. The event procedure maps these coordinates onto the display surface. Coordinate (0,0) maps onto the upper-left corner of the display surface, (65535,65535) maps onto the lower-right corner.

所以模拟在(10, 10)处的左键,代码应改为:

mouse_event(MOUSEEVENTF_LEFTDOWN, 10 * 65536 / Screen.PrimaryScreen.Bounds.Width, 10 * 65536 / Screen.PrimaryScreen.Bounds.Height, 0, 0);

如果显示器是一拖二的,想在第二个屏上使用mouse_event,就不能用Screen.PrimaryScreen了
  • 打赏
  • 举报
回复
抓包 修改包 重新发送包
ycproc 2011-11-16
  • 打赏
  • 举报
回复
你问的也太不专业了
你也要看做什么的外挂啊
MKing0412 2011-11-16
  • 打赏
  • 举报
回复

110,499

社区成员

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

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

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