现在想用自己的程序另外一个软件,比如在被控制的软件中文本框输入些内容,然后按下某键。给些建议吧。
另外将文件直接从资源管理器中托入程序的特定地方,然后就可以自动打开,这个是哪个消息,如何实现阿?
得到被控制窗体的窗口句柄,通过SendMessage, SendDlgMessage等向窗体发送消息,就行!
第一个问题,简单地控制的话,窗口消息就可以了,找到那些窗口,发消息给它。
第二个,首先接收文件的窗口要打开接收文件拖放的功能,用函数DragAcceptFiles,然后实现WM_DROPFILES消息。
findwindow得到窗口句柄
先获得程序窗口handle等,然后就控制
给你个例子看看
主控程序的实现
新建一工程文件:Sender,选取MFC AppWizard(exe)。
第二步选取Single document(单文档)。
其余几步均为确省值。
添加三个菜单"命令一"、"命令二"、"命令三"及与之对应的函数:
OnSendComm1
{
CString str="Receiver";
CWnd *pWnd=CWnd::FindWindow(NULL,str);
if(pWnd)
pWnd->SendMessage(WM_COMM,0,0);
}
OnSendComm2
{
CString str="Receiver";
CWnd *pWnd=CWnd::FindWindow(NULL,str);
if(pWnd)
pWnd->SendMessage(WM_COMM,0,1);
}
OnSendComm3
{
CString str="Receiver";
CWnd *pWnd=CWnd::FindWindow(NULL,str);
if(pWnd)
pWnd->SendMessage(WM_COMM,1,0);
}
在SenderView.h中添加自定义消息:#define WM_COMM WM_USER+100编译完成即可。
三、底层工作程序的实现
新建工程Receiver、仍是单文档。
在CReceiverApp类的InitInstance()函数末尾添加:
m_pMainWnd->SetWindowText("Receiver");
用以指定底层工作程序的窗口标题,以便主控程序能根据标题获取到此窗口的窗口句柄。
在MainFrm.h中添加自定义消息:#define WM_COMM WM_USER+100。
添加自定义消息WM_COMM的消息映射:
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code !
ON_WM_CREATE()
//}}AFX_MSG_MAP
ON_MESSAGE(WM_COMM,OnSendMsg)
END_MESSAGE_MAP()
完成消息响应函数OnSendMsg()
void CMainFrame::OnSendMsg(WPARAM wParam, LPARAM lParam)
{
if(wParam==0 && lParam==0)
AfxMessageBox("主控程序发送命令一!");
if(wParam==0 && lParam==1)
AfxMessageBox("主控程序发送命令二!");
if(wParam==1 && lParam==0)
AfxMessageBox("主控程序发送命令三!");
}
FindWindow()
用spy++去找你的窗口的类,FindWindow(类,null);