console 改 win32 最大的变化是 printf 日志输出没有了,为了解决这个问题,改写 printf 为 my_printf,在里面做些文章:
extern HWND hEdit;void my_printf(char const* format, ...){ char line[4096] = { 0 }; va_list vp; va_start(vp, format); vsprintf(line, format, vp); va_end(vp); // replace '\n' to '\r\n' if (strlen(line) > 0) line[strlen(line) - 1] = '\r'; strcat(line, "\n"); //std::wstring data = gb2312_to_unicode(line); // SendMessage(hEdit, WM_SETTEXT, 0, (WPARAM)data.c_str()); SendMessage(hEdit, EM_SETSEL, -2, -1); SendMessageA(hEdit, EM_REPLACESEL, true, (long)line); SendMessage(hEdit, WM_VSCROLL, SB_BOTTOM, 0); OutputDebugStringA(line);}基本就是将日志发往刚才的 hEdit,注意这里不使用 WM_SETTEXT 以免冲掉历史消息,最后上张效果图:

文章插图
再看下新版 set_text_to_active_windows 的实现:
void set_text_to_active_windows(std::string const& data){ int ret = 0; wchar_t const* str; HWND wnd = GetForegroundWindow(); //HWND wnd = GetActiveWindow(); //HWND wnd = GetDesktopWindow(); if (wnd == NULL) { my_printf("no active windows\n"); return; } my_printf("get active window\n"); DWORD SelfThreadId = GetCurrentThreadId(); DWORD ForeThreadId = GetWindowThreadProcessId(wnd, NULL); if (!AttachThreadInput(ForeThreadId, SelfThreadId, true)) { my_printf("attach thread input failed\n"); return; } my_printf("attach thread input\n"); //wnd = GetFocus(); wnd = GetActiveWindow(); if (wnd == NULL) { my_printf("no focus windows\n"); return; } my_printf("get focus window\n"); AttachThreadInput(ForeThreadId, SelfThreadId, false); //std::wstring unicode = gb2312_to_unicode(data); std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter; std::wstring tst = converter.from_bytes(data); str = tst.data(); //ret = SendMessageA(wnd, WM_SETTEXT, 0, (LPARAM)data.c_str()); for (int i=0; str[i] != '\n'; ++i) { ret = SendMessage(hEdit, WM_CHAR, str[i], 0); } my_printf("send text to active window return %d: %s\n", ret, data.c_str());}
经验总结扩展阅读
- 通过openlayers加载dwg格式的CAD图并与互联网地图叠加
- 互联网电视机哪个好 国产品牌小米果断上榜
- vivo互联网机器学习平台的建设与实践
- Go的网络编程详解
- bt是什么
- 三星手机互联网已停止如何修复
- 为什么互联网公司没有进入汽车终端领域
- MES与工业互联网的关联边界在哪里?
- 工业互联网领域的企业,都已经接入了ERP或者MES系统了吗?
- 互联网迷信是什么意思?