当前位置: 首页 > news >正文

wordpress 一键登录进一步优化营商环境

wordpress 一键登录,进一步优化营商环境,青岛网站建设 百度,网站网站制作开发需要哪些技术一、目标: windows中,打开chromium,任务栏中会出现一个chromium的图标。我们的目标是给这个图标的右上角,加上"有1条新消息"的小提示图标,也叫徽章(badge)注意:本章节纯属娱乐,有需要…

一、目标:

  • windows中,打开chromium,任务栏中会出现一个chromium的图标。
  • 我们的目标是给这个图标的右上角,加上"有1条新消息"的小提示图标,也叫徽章(badge)
  • 注意:本章节纯属娱乐,有需要的集帅可以学习模仿。

具体效果如下:

在这里插入图片描述

二、修改源码:

  • 打开:\ui\views\view.cc
1.头部追加:
#include <Shobjidl.h>
#include <windows.h>
#include <shellapi.h>
2.找到:
bool View::OnMousePressed(const ui::MouseEvent& event) {return false;
}

OnMousePressed()函数是可以点击事件,每次点击浏览器头部时都会触发这个函数。

3.替换为:
void UpdateTaskbarIcon(HWND hwnd, HICON hIcon) {ITaskbarList3* pTaskbarList = nullptr;HRESULT hr = CoCreateInstance(CLSID_TaskbarList, nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pTaskbarList));if (SUCCEEDED(hr)) {pTaskbarList->SetOverlayIcon(hwnd, hIcon, L"有1条新消息");pTaskbarList->Release();  LOG(ERROR) << "SetOverlayIcon成功调用"; }else{LOG(ERROR) << "ERRORERRORERROR"; }
}void SetTaskbarIconOverlay(HWND hwnd) {wchar_t className[256];GetClassName(hwnd, className, sizeof(className) / sizeof(wchar_t));LOG(ERROR) << "窗口类名"; LOG(ERROR) << className; LPCWSTR iconPath = L"C:/Users/Administrator/Desktop/favicon.ico";HICON hIcon = (HICON)LoadImage(NULL, iconPath, IMAGE_ICON, 16, 16, LR_LOADFROMFILE);if (!hIcon) {MessageBox(hwnd, L"无法加载图标。", L"错误", MB_OK | MB_ICONERROR);} else {UpdateTaskbarIcon(hwnd, hIcon);}
}bool View::OnMousePressed(const ui::MouseEvent& event) {CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED);LPCWSTR className = L"Chrome_WidgetWin_1";LPCWSTR windowName = nullptr; // 如果你不知道窗口的标题,可以设置为nullptr// 获取窗口句柄HWND hwnd = FindWindow(className, windowName);if (hwnd != NULL) {HWND parentHwnd = GetParent(hwnd);if (parentHwnd == NULL) {LOG(ERROR) << "hwnd 是一个顶级窗口"; } else {LOG(ERROR) << "hwnd 不是一个顶级窗口"; }}LOG(ERROR) << hwnd;wchar_t windowTitle[256];GetWindowText(hwnd, windowTitle, sizeof(windowTitle) / sizeof(wchar_t));LOG(ERROR) << "窗口标题"; LOG(ERROR) << windowTitle; bool isVisible = IsWindowVisible(hwnd);LOG(ERROR) << "isVisible"; LOG(ERROR) << isVisible; DWORD processId;GetWindowThreadProcessId(hwnd, &processId);LOG(ERROR) << "processId"; LOG(ERROR) << processId; SetTaskbarIconOverlay(hwnd);CoUninitialize();return false;
}

注意:

  1. 将ico图标位置(变量iconPath )替换成你图标的位置,必须是ico其他格式不行。
  2. LOG(ERROR)是用来打印错误日志的,可以忽略
  3. 最终实现原理是调用win32编程api里的SetOverlayIcon()函数。
4.编译
ninja  -C  out/Default chrome
  • 编译完成后,打开浏览器,一旦点击浏览器头部,图标就出现啦!

三、代码生成数字ico

  • 有的同学想到要右上角希望是数字图标,我们总不能准备99张ico图标吧。
  • 于是我们用代码在内存中生成ico

将上面的代码改成:

HICON CreateNumberIcon(int number) {if (number > 99) {number = 99;}// 创建一个16x16的位图HDC hdcScreen = GetDC(NULL);HDC hdcMem = CreateCompatibleDC(hdcScreen);BITMAPINFO bmi = {};bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);bmi.bmiHeader.biWidth = 16;bmi.bmiHeader.biHeight = -16; // 负值表示自上而下bmi.bmiHeader.biPlanes = 1;bmi.bmiHeader.biBitCount = 32; // 32位带透明通道bmi.bmiHeader.biCompression = BI_RGB;bmi.bmiHeader.biSizeImage = 0;bmi.bmiHeader.biXPelsPerMeter = 0;bmi.bmiHeader.biYPelsPerMeter = 0;bmi.bmiHeader.biClrUsed = 0;bmi.bmiHeader.biClrImportant = 0;void* pBits;HBITMAP hBitmap = CreateDIBSection(hdcMem, &bmi, DIB_RGB_COLORS, &pBits, NULL, 0);HBITMAP hOldBitmap = (HBITMAP)SelectObject(hdcMem, hBitmap);// 设置背景为透明memset(pBits, 0, 16 * 16 * 4); // 初始化位图为透明// 设置字体和颜色HFONT hFont = CreateFont(14, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, CLEARTYPE_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"Arial");HFONT hOldFont = (HFONT)SelectObject(hdcMem, hFont);SetTextColor(hdcMem, RGB(255, 0, 0)); // 设置数字颜色为红色SetBkMode(hdcMem, TRANSPARENT);// 计算数字的居中位置std::wstring text = std::to_wstring(number);RECT rect = {0, 0, 16, 16};DrawText(hdcMem, text.c_str(), text.length(), &rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);// 清理SelectObject(hdcMem, hOldFont);DeleteObject(hFont);SelectObject(hdcMem, hOldBitmap);DeleteDC(hdcMem);ReleaseDC(NULL, hdcScreen);// 将位图转换为图标ICONINFO iconInfo = { TRUE, 0, 0, hBitmap, hBitmap };HICON hIcon = CreateIconIndirect(&iconInfo);DeleteObject(hBitmap);return hIcon;
}void UpdateTaskbarIcon(HWND hwnd, HICON hIcon) {ITaskbarList3* pTaskbarList = nullptr;HRESULT hr = CoCreateInstance(CLSID_TaskbarList, nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pTaskbarList));if (SUCCEEDED(hr)) {pTaskbarList->SetOverlayIcon(hwnd, hIcon, L"新消息");pTaskbarList->Release();  LOG(ERROR) << "SetOverlayIcon成功调用"; }else{LOG(ERROR) << "ERRORERRORERROR"; }
}void SetTaskbarIconOverlay(HWND hwnd) {wchar_t className[256];GetClassName(hwnd, className, sizeof(className) / sizeof(wchar_t));LOG(ERROR) << "窗口类名"; LOG(ERROR) << className; //LPCWSTR iconPath = L"C:/Users/Administrator/Desktop/favicon.ico";//HICON hIcon = (HICON)LoadImage(NULL, iconPath, IMAGE_ICON, 16, 16, LR_LOADFROMFILE);HICON hIcon = CreateNumberIcon(72);if (!hIcon) {MessageBox(hwnd, L"无法加载图标。", L"错误", MB_OK | MB_ICONERROR);} else {UpdateTaskbarIcon(hwnd, hIcon);}
}bool View::OnMousePressed(const ui::MouseEvent& event) {CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED);LPCWSTR className = L"Chrome_WidgetWin_1";LPCWSTR windowName = nullptr; // 如果你不知道窗口的标题,可以设置为nullptr// 获取窗口句柄HWND hwnd = FindWindow(className, windowName);SetTaskbarIconOverlay(hwnd);bool isVisible = IsWindowVisible(hwnd);LOG(ERROR) << "isVisible"; LOG(ERROR) << isVisible; CoUninitialize();return false;
}
  • 效果:

在这里插入图片描述

五、优化

  • 还需要优化的是想改成,白色圆形,透明背景。但稍微尝试了下,没改对。
  • 就这样吧,调试太费时间了。题主懒,集帅自行优化吧
http://www.ritt.cn/news/16555.html

相关文章:

  • 企业网站托管外包怎么做郑州seo优化大师
  • 山西省住房城乡建设厅网站sem工作内容
  • 怎样免费网站建设今日足球比赛预测推荐分析
  • 如保做网站赢利活动营销案例100例
  • 电子商务网站建设花费优化推广网站排名
  • 世界做诡异的地方网站上海今天最新新闻10条
  • dw博客网站怎么做百度网盘搜索引擎入口官网
  • 做有网被视频网站百度网址链接是多少
  • 微信做兼职什么网站好google浏览器官网下载
  • 网站建设好卖吗大数据营销的案例
  • 网站 备案 注销 影响软件网站排行榜
  • 东莞网站建设平台seo人员工作内容
  • 网站备案幕布下载优化seo排名
  • 郑州富士康疫情最新消息seo网络营销技巧
  • 做mro的b2b网站网络营销公司哪家可靠
  • 网站运营需要 做哪些工作营销培训
  • 罗村石湾网站制作b2b平台
  • 中心网站设计sem优化推广
  • wordpress vue 关系百家号seo怎么做
  • 怎么做简单网站廊坊优化技巧
  • 总代理大型网站建设做百度推广员赚钱吗
  • 类似一起做网店的网站经典软文案例
  • 五华区网站百度怎么发布自己的广告
  • 安徽工程信息网人员查询seo排名哪家公司好
  • 海山网站建设开鲁网站seo
  • 商务网站建设难不难seo引擎优化外包
  • wordpress 页面和文章武汉seo主管
  • 中国建设银行密码重置网站外贸网站建设推广
  • 秀屿网站建设淘宝运营一般要学多久
  • 收录查询代码湖南优化电商服务有限公司