控制台程序进程间WM_COPYDATA通信
来源:互联网 发布:windows欢迎界面后黑屏 编辑:程序博客网 时间:2024/06/03 17:26
进程间通信最简单的方式是用WM_COPYDATA,但对于控制台程序,无法直接接收消息。
一种解决方法是:生成一个隐藏窗口来接收消息
<span style="font-size:14px;">unsigned int __stdcall rcvMessage(PVOID pM){//生成一个隐藏窗口接收消息HINSTANCE hInstance = GetModuleHandle(NULL);MSG m_msg;WNDCLASSEX wc = {sizeof(WNDCLASSEX), CS_DBLCLKS, WndProc, 0, 0, hInstance,LoadIcon(0, IDI_APPLICATION), LoadCursor(0, IDC_ARROW), HBRUSH(COLOR_WINDOW+1), 0, winName, LoadIcon(0, IDI_APPLICATION)};if(!RegisterClassEx(&wc))return 1;//WS_EX_NOACTIVATEHWND hWnd = CreateWindowEx(0, winName, winName, WS_OVERLAPPEDWINDOW, 0,0,10,10,NULL,NULL,hInstance,NULL);if(!hWnd)return 1;GetErrorManager().PrintfLog("message", ERRORMANAGER_LOG|ERRORMANAGER_TRACE|ERRORMANAGER_CONSOLE, "message window build");ShowWindow(hWnd, SW_SHOW);while(!isStopped && GetMessage(&m_msg, 0, 0, 0)){//TranslateMessage(&m_msg);DispatchMessage(&m_msg);}return 0;}LRESULT WINAPI WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){//处理消息switch(uMsg){case WM_DESTROY:PostQuitMessage(0);return 0L;case WM_COPYDATA:{//接收数据GetErrorManager().PrintfLog("WndProc", ERRORMANAGER_LOG|ERRORMANAGER_TRACE|ERRORMANAGER_CONSOLE, "received a notify!");COPYDATASTRUCT* pCopyData = (COPYDATASTRUCT*)lParam;WCHAR buffer[100];memset(buffer, 0, sizeof(buffer));wsprintf(buffer, (WCHAR*)pCopyData->lpData);int flag = pCopyData->dwData;//创建线程处理EnterCriticalSection(&g_cs);if(index_del < numDelThread){hFunc[index_del] = (HANDLE)_beginthreadex(NULL, 0, fHandle, NULL, 0, NULL);index_del += 1;}LeaveCriticalSection(&g_cs);}default:return DefWindowProc(hWnd, uMsg, wParam, lParam);}}</span>
发送进程首先FindWindow,再SendMessage就好了
参考资料
[1] 进程通信之一 使用WM_COPYDATA C++及C#实现
[2] windows进程通信 -- WM_COPYDATA消息
[3] 进程间通信 --windows篇
[4] windows进程间通信
0 0
- 控制台程序进程间WM_COPYDATA通信
- WM_COPYDATA 进程间通信
- WM_COPYDATA实现进程间通信
- 用WM_COPYDATA实现进程间通信
- 利用WM_COPYDATA实现进程间通信
- 关于进程间通信之WM_COPYDATA
- WM_COPYDATA 消息实现进程间通信
- 进程间消息WM_COPYDATA通信示例
- 使用WM_COPYDATA消息完成进程间通信
- WM_COPYDATA 消息实现进程间通信
- 使用WM_COPYDATA消息进程间通信
- WM_COPYDATA 消息实现进程间通信
- 通过WM_COPYDATA消息完成进程间通信
- 通过WM_COPYDATA消息完成进程间通信
- 使用WM_COPYDATA实现进程间通信
- 通过WM_COPYDATA消息完成进程间通信
- 进程间通信WM_COPYDATA的基本实现
- 通过WM_COPYDATA消息完成进程间通信
- PhotoKit 详解
- iOS自定义转场动画实战讲解
- Uva 1347 tour(DAG)
- 挑7
- flex Error#2048跨域问题的解决方法
- 控制台程序进程间WM_COPYDATA通信
- 啊哈算法学习-快速排序
- 动效解析工厂:Mask 动画
- Linux chmod命令详解
- 那些年奇葩的面试题
- 5-11拆分窗口
- LeetCode *** 171. Excel Sheet Column Number
- java程序导出为jar包的问题
- mac系统下恢复和禁止.DS_store的生成