您的位置:首页 > 其它

使用WinForm程序控制其他窗口程序

2009-08-24 16:54 435 查看
主要使用WIN32API函数 FindWindowEx ,SendMessage,PostMessage等

引用WIN32API函数

// Find Window

// 查找窗体

// @para1: 窗体的类名 例如对话框类是"#32770"

// @para2: 窗体的标题 例如打开记事本 标题是"无标题 - 记事本" 注意 - 号两侧的空格

// return: 窗体的句柄

[DllImport("User32.dll", EntryPoint = "FindWindow")]

public static extern IntPtr FindWindow(string className, string windowName);

// Find Window Ex

// 查找窗体的子窗体

// @para1: 父窗体的句柄 如果为null,则函数以桌面窗口为父窗口,查找桌面窗口的所有子窗口

// @para2: 子窗体的句柄 如果为null,从@para1的直接子窗口的第一个开始查找

// @para3: 子窗体的类名 为""表示所有类

// @para4: 子窗体的标题 为""表示要查找的窗体无标题 如空白的textBox控件

// return: 子窗体的句柄

[DllImport("user32.dll", EntryPoint = "FindWindowEx")]

private static extern IntPtr FindWindowEx(

IntPtr hwndParent,

IntPtr hwndChildAfter,

string lpszClass,

string lpszWindow);

// SendMessage

// 向窗体发送消息

// @para1: 窗体句柄

// @para2: 消息类型

// @para3: 附加的消息信息

// @para4: 附加的消息信息

[DllImport("User32.dll", EntryPoint = "SendMessage")]

private static extern int SendMessage(

IntPtr hWnd,

int Msg,

IntPtr wParam,

string lParam);

//与SendMessage区别在与 SendMessage是阻塞,而PostMessage为异步
[DllImport("User32.dll", EntryPoint = "PostMessage")]

private static extern bool PostMessage(

IntPtr hWnd,

int Msg,

IntPtr wParam,

string lParam);

// 消息类型(部分)

const int WM_GETTEXT = 0x000D;  // 获得窗体文本 如获得对话框标题
const int WM_SETTEXT = 0x000C;  // 设置窗体文本 如设置文本框内容
const int WM_CLICK = 0x00F5;  // 发送点击消息如调用该窗体(按钮)的"button1_Click();"
const int WM_COPYDATA = 0x004A;
const int WM_CTLCOLORBTN = 0x0135;
const int WM_PASTE = 0x0302;
const int WM_COMMAND = 0x0111;


主要程序

IntPtr Wnd = new IntPtr(0);// 主窗体
IntPtr txt1 = new IntPtr(0);// 文本框
IntPtr txt2 = new IntPtr(0);// 文本框
IntPtr txt3 = new IntPtr(0);// 文本框
IntPtr txt4 = new IntPtr(0);// 文本框
IntPtr txt5 = new IntPtr(0);// 文本框
IntPtr btn1 = new IntPtr(0);// 查询按钮
Wnd = FindWindowEx((IntPtr)0, (IntPtr)0, null, "标题名");// 主窗体
//Gnd = FindWindowEx(Wnd, (IntPtr)0, null, "基本操作选项:");     // textBox控
//Twn = FindWindowEx(Wnd, (IntPtr)0, null, "选择密匙");
txt1 = FindWindowEx(Wnd, (IntPtr)0, null, "");     // textBox控件
txt2 = FindWindowEx(Wnd, txt1, null, "");     // textBox控件
txt3 = FindWindowEx(Wnd, txt2, null, "");     // textBox控件
txt4 = FindWindowEx(Wnd, txt3, null, "");     // textBox控件
txt5 = FindWindowEx(Wnd, txt4, null, "");     // textBox控件
btn1 = FindWindowEx(Wnd, (IntPtr)0, null, "保护"); // 按钮

if (SendMessage(txt4, WM_SETTEXT, (IntPtr)0, path_temp_exe) == 0)
return false;
if (SendMessage(txt5, WM_SETTEXT, (IntPtr)0, path_ntclt_exe) == 0)
return false;
EnableWindow(btn1, true);//使变灰的按钮可用!

Clipboard.Clear();//清除剪贴板

Clipboard.SetText("string");复制字符到剪切板

if (!PostMessage(btn1, WM_CLICK, (IntPtr)0, ""))
return false;
SendMessage(txt3, WM_PASTE, (IntPtr)0, "");
//复制剪切板内容到txt3
IntPtr m_com = new IntPtr(10);
if (!(PostMessage(Wnd, WM_COMMAND, m_com, null)))
return false;
////触发窗体菜单ID为10的单击事件,菜单ID可以用SPY++获取
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: