求一段获得活动窗口,并且可以发送按键消息的代码

吾非大神 2011-01-04 11:17:36
获得窗口之后,即使将窗口切换成非当前活动窗口,发送按键的代码仍然有效
就是 传说中的“后台操作。。”

各位不嫌我俗的话, 我可以购买 QQ:463436437

多谢
...全文
142 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
龍过鸡年 2011-01-05
  • 打赏
  • 举报
回复
赫赫 楼主想搞个按键精灵撒!
Awbeci 2011-01-05
  • 打赏
  • 举报
回复
学习学习,我也不太懂!
wy811007 2011-01-05
  • 打赏
  • 举报
回复

/// <summary>
/// 发送消息
/// </summary>
/// <param name="hWnd">句柄</param>
/// <param name="Msg">消息</param>
/// <param name="wParam"></param>
/// <param name="lParam"></param>
/// <returns></returns>
[DllImport("user32.dll")]
static extern bool PostMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[DllImport("user32.dll")]
static extern bool SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);

上面的两个方法就是发送消息的。

你首先如果要后台操作一个窗体就要得到窗体的句柄。


//根据窗体类或标题获得句柄
[DllImport("user32.dll")]
static extern IntPtr FindWindow(string strClass, string strWindow);


调用如下。

//查找游戏窗体句柄 可以用spy++查找一个窗体的类或标题
ptrTaskbar = FindWindow("窗体类", "窗体标题");
//发送消息
SendMessage(ptrTaskbar, WM_RBUTTONDOWN, 0, p.fx.X + (p.fx.Y << 16));
//之前要定义消息类型。
//按下鼠标左键
int WM_LBUTTONDOWN = 0x201;
//释放鼠标左键
int WM_LBUTTONUP = 0x202;
//双击鼠标左键
int WM_LBUTTONDBLCLK = 0x203;
//按下鼠标右键
int WM_RBUTTONDOWN = 0x204;
//释放鼠标右键
int WM_RBUTTONUP = 0x205;
//双击鼠标右键
int WM_RBUTTONDBLCLK = 0x206;

wuyq11 2011-01-04
  • 打赏
  • 举报
回复

API:GetForegroundWindow
获得前台窗口的句柄
[DllImport( "user32.dll ")]
private static extern int GetForegroundWindow(); public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
static void Main(string[] args)
{
foreach (Process thisproc in Process.GetProcesses())
{
if (thisproc.MainWindowHandle.ToInt32() == GetForegroundWindow().ToInt32())
{
Console.WriteLine(thisproc.ProcessName);
}
}
Console.Read();
}


[DllImport("User32.Dll")]
public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

[DllImport("User32.Dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, string lParam);

//调用类似以下:
SendMessage(ParenthWnd, WM_KEYDOWN, (IntPtr)31, "0");
SendMessage(ParenthWnd, WM_KEYUP, (IntPtr)31, "0");

110,580

社区成员

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

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

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