怎么打开另外一个程序实现发送一个命令来点击该程序的按钮
如何打开另外一个程序实现发送一个命令来点击该程序的按钮?
我写了一个程序Project1.exe实现下面的任务:
1.点击Project1.exe界面上的“打开”按钮打开另外一个程序Project2.exe;
2.程序Project2.exe界面上有一个按钮和一个Edit控件;
3.如何不用人工第二次操作直接在Project2.exe界面上Edit中输入文字,然后自动发送一个命令执行点击该程序上的按钮操作。
------解决方案--------------------
Project1中,假设有主窗体为Form1,类名为TForm1,窗体上放一个TButton,名为Button1,在Button1的OnClick事件中添加以下代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String strExeFile( "project2.exe "); // 注意这里的路径
// 运行project2
ShellExecute(Handle, "Open ", strExeFile.c_str(), NULL, NULL, SW_SHOW);
// 延时两秒
DWORD dwTick(GetTickCount());
while(GetTickCount() - dwTick < 2000)
Application-> ProcessMessages();
// 查找project2的窗口句柄
// 注意FindWindow的参数要和你使用的类名和标题相符
// 以下仅仅为举例
HWND hForm = FindWindow( "TForm2 ", "TForm2_Test ");
if(hForm)
{
// 查找Edit窗口
HWND hEdit = FindWindowEx(hForm, NULL, "TEdit ", NULL);
if(hEdit)
// 更改Edit窗口内容
SendMessage(hEdit, WM_SETTEXT, 0, LPARAM( "要发送虾米文字? "));
// 查找Button按钮
HWND hBtn = FindWindowEx(hForm, NULL, "TButton ", "Button1 ");
if(hBtn)
// 模拟点击按钮
SendMessage(hBtn, BM_CLICK, 0, 0);
}
}
Project2中,假设主窗体为Form2,类名为TForm2,窗体上放一个Edit和一个TButton,其中Button的标题为Button1,在Button1的OnClick事件中添加以下代码:
void __fastcall TForm2::Button1Click(TObject *Sender)
{
MessageBox(Handle, "按钮被点击了 ",
Edit1-> Text.c_str(), MB_OK | MB_ICONINFORMATION);
}
最后要注意的一个地方:可以在设计时就将Form2的标题设为:TForm2_Test,也可以在代码中设定,例如在Form2的构造函数中:
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
Caption = "TForm2_Test ";
}
这样就OK了。
编译两个工程,运行project1, 点击按钮就可以看到效果了。(如果两个工程不在同一个目录下,请设置Project1中strExeFile的路径。
我写了一个程序Project1.exe实现下面的任务:
1.点击Project1.exe界面上的“打开”按钮打开另外一个程序Project2.exe;
2.程序Project2.exe界面上有一个按钮和一个Edit控件;
3.如何不用人工第二次操作直接在Project2.exe界面上Edit中输入文字,然后自动发送一个命令执行点击该程序上的按钮操作。
------解决方案--------------------
Project1中,假设有主窗体为Form1,类名为TForm1,窗体上放一个TButton,名为Button1,在Button1的OnClick事件中添加以下代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String strExeFile( "project2.exe "); // 注意这里的路径
// 运行project2
ShellExecute(Handle, "Open ", strExeFile.c_str(), NULL, NULL, SW_SHOW);
// 延时两秒
DWORD dwTick(GetTickCount());
while(GetTickCount() - dwTick < 2000)
Application-> ProcessMessages();
// 查找project2的窗口句柄
// 注意FindWindow的参数要和你使用的类名和标题相符
// 以下仅仅为举例
HWND hForm = FindWindow( "TForm2 ", "TForm2_Test ");
if(hForm)
{
// 查找Edit窗口
HWND hEdit = FindWindowEx(hForm, NULL, "TEdit ", NULL);
if(hEdit)
// 更改Edit窗口内容
SendMessage(hEdit, WM_SETTEXT, 0, LPARAM( "要发送虾米文字? "));
// 查找Button按钮
HWND hBtn = FindWindowEx(hForm, NULL, "TButton ", "Button1 ");
if(hBtn)
// 模拟点击按钮
SendMessage(hBtn, BM_CLICK, 0, 0);
}
}
Project2中,假设主窗体为Form2,类名为TForm2,窗体上放一个Edit和一个TButton,其中Button的标题为Button1,在Button1的OnClick事件中添加以下代码:
void __fastcall TForm2::Button1Click(TObject *Sender)
{
MessageBox(Handle, "按钮被点击了 ",
Edit1-> Text.c_str(), MB_OK | MB_ICONINFORMATION);
}
最后要注意的一个地方:可以在设计时就将Form2的标题设为:TForm2_Test,也可以在代码中设定,例如在Form2的构造函数中:
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
Caption = "TForm2_Test ";
}
这样就OK了。
编译两个工程,运行project1, 点击按钮就可以看到效果了。(如果两个工程不在同一个目录下,请设置Project1中strExeFile的路径。