1。我的问题是这样的,一个主程序 A , 另外一个程序 B
启动B的运行,但是A要传递给B两个参数: CString name ;int fun ;
怎么办?
方法一:
发送消息;
A :SendMessage(HWnd,WM_MYMESSAGE,WPARAM name.GetBuffer(0),LPARAM fun) ;
B: ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)
afx void OnMyMessage(WPARAM name,LPARAM fun)
..
OnMyMessage(WPARAM name,LPARAM fun)
{
CString strTmp = name ;
int nTmp = fun ;
}
// 错,不能传递字符串。进程之间的数据是私有的吧
方法二:
ShellExcute() ;
其中含有一个进程启动的参数但是我不知道怎么能够把这个参数解析出来?谢谢!
启动B的运行,但是A要传递给B两个参数: CString name ;int fun ;
怎么办?
方法一:
发送消息;
A :SendMessage(HWnd,WM_MYMESSAGE,WPARAM name.GetBuffer(0),LPARAM fun) ;
B: ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)
afx void OnMyMessage(WPARAM name,LPARAM fun)
..
OnMyMessage(WPARAM name,LPARAM fun)
{
CString strTmp = name ;
int nTmp = fun ;
}
// 错,不能传递字符串。进程之间的数据是私有的吧
方法二:
ShellExcute() ;
其中含有一个进程启动的参数但是我不知道怎么能够把这个参数解析出来?谢谢!
-----------------------------
void CAaaDlg::OnButton1()
{
char* p1 = "Willis";
char* p2 = "VCHelp";
SendMessage(WM_CURRENTINFO, (WPARAM)p1, (LPARAM)p2 );
}LRESULT CAaaDlg::OnCurrentInfo(WPARAM wParam, LPARAM lParam )
{
MessageBox((LPSTR)wParam,(LPSTR)lParam, 0 );
return 0;
}
--------------------------------------
CString strPara = _T("fggg");
::SendMessage(hWnd,WM_XXXX,0,(LPARAM)(LPCTSTR)strPara);
在消息处理函数里接收字符串
OnMessageXXXX(WPARAM wParam,LPARAM lParam)
{
CString strddd = (LPCTSTR)lParam;
}
2、申请对方进程的空间,然后发送消息
VirtualAlloc
能不能详细一点点啊?谢谢
你可以直接重载WM_COPYDATA消息就可以了。
WM_COPYDATA
The WM_COPYDATA message is sent when an application passes data to another application. WM_COPYDATA
wParam = (WPARAM) (HWND) hwnd; // handle of sending window
lParam = (LPARAM) (PCOPYDATASTRUCT) pcds; // pointer to structure with data 重载WM_COPYDATA消息
将第一个参数作为 int值,第二个参数为指针由于对于系统消息,若要传递指针,且两个进程不属同一进程事,
OS会自动得将buffer复制到目的进程得地址空间,然后将新的指针给进程(改变lparam值)对于非系统消(自定义消息)没有上面得功能