void csendmessagedlg::onsendcopydat()
copydatastruct cpd; // 給copydatastruct結構賦值
char *ch = "1234";
cpd.dwdata = 0; //這個我也沒弄懂 啥意思
cpd.cbdata =strlen(ch)+1; //防止亂碼,因為strlen只計算字串的個數,不計算最後的\0,所以這裡加1
cpd.lpdata = (void*)ch; //內容
//afxmessagebox();
/** * *pwnd_resv,目的視窗的控制代碼,
* wm_copydata, 傳遞的值型別是
* (wparam)::getforegroundwindow(),獲取當前的主視窗
* (lparam)&cpd 前面定義的結構體
*/::sendmessage(*pwnd_resv, wm_copydata, (wparam)::getforegroundwindow(), (lparam)&cpd);
}
bool cvm_copydata_testdlg::oncopydata(cwnd* pwnd, copydatastruct* pcopydatastruct)
typedef struct tagwndinfo
wndinfo, *lpwndinfo;
bool callback myenumproc(hwnd hwnd,lparam lparam)
return
true;
} hwnd getprocessmainwnd(dword dwprocid)
hwnd getxhandle(lpctstr strprocessname)//procname 被呼叫程序名稱
if(invalid_handle_value == handle32snapshot)
processentry32 pentry;
pentry.dwsize = sizeof(processentry32);
if(process32first(handle32snapshot,&pentry))
while((!b_found) && process32next(handle32snapshot,&pentry))
}if(b_found)
}dword d = getlasterror();
closehandle(handle32snapshot);
return
null;
}void onsendcopydat()
copydatastruct cpd; // 給copydatastruct結構賦值
char *ch =
"1234";
cpd.dwdata =
0; //這個我也沒弄懂 啥意思
cpd.cbdata =strlen(ch)+
1; //防止亂碼,因為strlen只計算字串的個數,不計算最後的\0,所以這裡加1
cpd.lpdata = (void
*)ch; //內容
//afxmessagebox();
/** * *pwnd_resv,目的視窗的控制代碼,
* wm_copydata, 傳遞的值型別是
* (wparam)::getforegroundwindow(),獲取當前的主視窗
* (lparam)&cpd 前面定義的結構體
*/::sendmessage(pwnd_resv, wm_copydata, (wparam)::getforegroundwindow(), (lparam)&cpd);
}
文 使用WM COPYDATA訊息通訊
對於少量資料可以用wm copydata方便地實現通訊。由於sendmessage 是阻塞的,只有接收方響應了訊息,sendmessage 才能返回,否則一直阻塞。所以,對於大量資料來說,用sendmessage 就容易造成視窗假死。在win32中,wm copydata訊息主要目的是允許在程序間傳...
用WM COPYDATA實現程序通訊
用wm copydata的前提 1,知道接收訊息程序的控制代碼。2,接收訊息程序過載了wm copydata訊息對映 傳送端 void csenddlg onbnclickedsend 接收端 宣告afx msg bool oncopydata cwnd pwnd,copydatastruct pc...
程序通訊 使用WM COPYDATA訊息通訊
使用wm copydata訊息通訊 對於少量資料可以用wm copydata方便地實現通訊。由於sendmessage 是阻塞的,只有接收方響應了訊息,sendmessage 才能返回,否則一直阻塞。所以,對於大量資料來說,用sendmessage 就容易造成視窗假死。通過wm copydata訊息...