WM_COPYDATA注意点
typedef struct tagCOPYDATASTRUCT {
ULONG_PTR dwData;
DWORD cbData;
PVOID lpData;
} COPYDATASTRUCT, *PCOPYDATASTRUCT;
/********
注释:
1、dwData.为自定义数据;
2、cbData.即lpData指向的数据的长度,要是这个变量的值设置错误,就会导致WM_COPYDATA传输/*数据失败;
3、lpData.传输的数据.最好使用基础数据类型;
********/
使用WM_COPYDATA时要用SendMessage而不能使用PostMessage,因为SendMessage是阻塞的,会等待消息响应窗体处理消息完毕后再返回;而PostMessage是异步的,这样就可能会导致当消息响应窗体接收到WM_COPYDATA的时候,COPYDATASTRUCT对象已经被析构了,导致访问数据发生异常;
由于使用SendMessage,所以不应该在WM_COPYDATA中处理数据,可以在消息响应窗体的WM_COPYDATA中先把COPYDATASTRUCT对象中的数据复制出来,通过自定义消息发送到消息响应窗体,然后立即返回,来减少父进程的阻塞时间。这样就把处理数据的代
case WM_COPYDATA:
{
COPYDATASTRUCT* data = (COPYDATASTRUCT*)lParam;
// TODO: 处理pCopyData->lpData指向的数据
}
break;
ShellExecute无法打开浏览器网页问题
先获取浏览器路径在打开
wstring GetBrowserPath(LPCTSTR Value)
{
TCHAR Path[MAX_PATH] = _T("http\\shell\\open\\command");
wstring path(Path);
HKEY hKey;
if (RegOpenKeyEx(HKEY_CLASSES_ROOT,path.c_str(),NULL,KEY_READ|KEY_WOW64_64KEY ,&hKey) != ERROR_SUCCESS)
{
return _T("");
}
TCHAR szValue[MAX_PATH];
DWORD dwType,dwLen = MAX_PATH;
if(RegQueryValueEx(hKey,Value,NULL,&dwType,(BYTE*)szValue,&dwLen)!=ERROR_SUCCESS)
return _T("");
RegCloseKey(hKey);
return szValue;
}
void OpenUrlWithBrowser(string &url)
{
string browserPath = "";
string path = unicodeToChar(GetBrowserPath(_T("")).c_str());
if (!path.empty())
{
path = path.substr(path.find_first_of('\"') + 1);
path = path.substr(0, path.find_first_of('\"'));
browserPath = path;
}
ShellExecuteA(NULL,"open",url.c_str(),NULL,NULL,SW_SHOW);
int err = GetLastError();
if (err != 0 && !browserPath.empty())
{
ShellExecuteA(NULL,"open",browserPath.c_str(),url.c_str(),NULL,SW_SHOW);
}
}
curl_slist_append添加HTTP头踩坑问题
User-Agent:agent_test
ContentType:application/json
Cookie:testCookie:abcdef
类似这种需要注意添加的时候注意需要逐条添加 ,否则ContentType的值会修改成application/form格式,导致请求时服务端处理异常。(目前原因还不清楚,如果有大佬知道可以留言)
duilib 嵌入cef显示网页 xp/win7下滑动滚动条崩溃问题
经过排查发现是是duilib消息循环在处理WM_MOUSEWHEEL消息时可能存在问题。
解决方案:
- 设置 multi_threaded_message_loop = true;
- 不再使用duilib的消息循环【CPaintManagerUI::MessageLoop()】,采用cef的消息循环【CefRunMessageLoop()】
通过这些操作崩溃问题解决,具体原因还未弄清楚,有知道的大佬欢迎留言
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。