zoukankan      html  css  js  c++  java
  • paip.提高用户体验增添开始菜单类似360小助手按钮总结 (补充c925)

    paip.提高用户体验----增添开始菜单类似360小助手按钮总结 (补充c925)


    作者Attilax ,  EMAIL:1466519819@qq.com 
    来源:attilax的专栏
    地址:http://blog.csdn.net/attilax


    1.加按钮
    /
    昨日.就是可以找到Shell_TrayWnd ..就是CreateWindowEx fail..今天用API Monitor V2 (Alpha-r5) 跟踪累挂..是个好东东.也能API上断点调试了...
    发现CLASS,TITLE是乱码,  我的代码黑头是 (LPCWSTR)"button" ..不个哪更改成 L"button",                   L"atiBtn",一挂噪好兰..阿.原来中个阿..


    其实这个按钮不是个扩展..走是个普通窗体..袖管哪个窗体也能了..




    2.扩展位置
    /
    按钮加是加上兰.就是内个位置腾不开..over着了..API Monitor 跟踪累挂360小助手的.好像是有TIMMER 定时 MoveWindow了..走做磊个timmer,定时刷新ReBarWindow32的位置..




     
    3.任务栏结构如下:
    // 
    Shell_TrayWnd
         |- Button
         |- TrayNotifyWnd
         |        |- TrayClockWClass
         |        \- ToolbarWindow32
         \- ReBarWindow32
                  |- MSTaskSwWClass
                  |         \- SysTabControl32
                  \- ToolbarWindow32


     
    4.源码
    --------------------


        //AppWnd= FindWindow(L"Notepad",NULL );
        //add satrt menu buttonNULL  CreateWindow  Shell_TrayWnd
    find_taskbar:
        HWND WinhandTask=   FindWindow(L"Shell_TrayWnd",NULL);


         //WinhandTask= FindWindowEx(WinhandTask, 0,L"Button", NULL);
     qDebug()<<"---ati:WinhandTask-----"<<WinhandTask;






         move_toolbar:


        DWORD       cs_style=WS_VISIBLE ;  // WS_CHILD | |


        HWND  ReBarWin=FindWindowExW (WinhandTask, NULL, L"ReBarWindow32", NULL );
     qDebug()<<"---ati:ReBarWin-----"<<ReBarWin;


    // WINBOOL ReBarWinMoveResult=  MoveWindow ( ReBarWin, 0, 0, 0x0000006e,700, TRUE );
    //  qDebug()<<"---ati:ReBarWinMoveResultaa-----"<<ReBarWinMoveResult;
    WINBOOL  ReBarWinMoveResult=  MoveWindow ( ReBarWin, 0, 0, 0x0000006e,600, TRUE );
     qDebug()<<"---ati:ReBarWinMoveResult-----"<<ReBarWinMoveResult;


        ReBarWinMoveResult=  MoveWindow ( ReBarWin, 0, 100, 0x0000006e,600, TRUE );
      qDebug()<<"---ati:ReBarWinMoveResult-----"<<ReBarWinMoveResult;


    create_start_menu_button:




    //   WS_BORDER;
       int  cs_x= 1;
       int      cs_y= 30;
       int       cs_cx= 45;
       int       cs_cy= 30;


       /*
       //WS_EX_APPWINDOW WS_EX_CLIENTEDGE
       //WS_EX_LAYERED  temin effect
       //WS_VISIBLE|WS_OVERLAPPED|WS_SYSMENU|WS_POPUP
       //    WS_CHILD | WS_VISIBLE | WS_BORDER,
       //WS_OVERLAPPED
    //   Over lapped
      // 创建一个重叠的窗口,有一个标题栏和一个边框,等同于WS_TILED风格
       //WS_EX_APPWINDOW    当窗口可视时,强制位于任务栏顶层 WS_EX_APPWINDOW
       // | WS_VISIBLE|  WS_OVERLAPPED
       //WS_POPUP     创建pop-up窗口,不能与WS_CHILD风格共用
       //WS_EX_TOPMOST    创建窗口在所有未设置该属性的窗口的上面,并保持这一状态,甚至窗口被停用,添加或删除这一风格,使用SetWindowPos函数
       //WS_EX_TOOLWINDOW
       //WS_EX_LAYERED  WS_CLIPSIBLINGS
       */
       HWND mybtnc922= CreateWindowEx(   WS_EX_TOPMOST|WS_EX_TOOLWINDOW  ,
                                    L"button",
                                    L"atiBtn",
                             WS_VISIBLE|WS_POPUP,
                                      cs_x,
                                      cs_y,
                                      cs_cx,
                                      cs_cy,
                                     WinhandTask,
                                      NULL,
                                       (HINSTANCE)  0x00400000,
                                      NULL);
    //    CreateWindowEx (    WS_EX_CLIENTEDGE,
    //                        L"button",
    //                       L"contrl title",
    //                        WS_VISIBLE  ,
    //                        200,
    //                        50,
    //                        160,
    //                        70,
    //                        AppWnd,
    //                        NULL ,
    //                        NULL,
    //                        NULL
    //                        );
    qDebug()<<"---ati:mybtnc922-----"<<mybtnc922;
     qDebug()<<"---ati:WS_VISIBLE-----"<<(int)WS_VISIBLE;


     //SetParent(mybtnc922,WinhandTask);




    //move_btn:
    // WINBOOL  mybtnc922_move_btn_result=  MoveWindow ( mybtnc922, 5, 60, 45,30, TRUE );
    //  qDebug()<<"---ati:move_btn-----"<<mybtnc922_move_btn_result;


    //move_btn2:
    //    mybtnc922_move_btn_result=  MoveWindow ( mybtnc922, 10, 60, 45,30, TRUE );
    //  qDebug()<<"---ati:move_btn-----"<<mybtnc922_move_btn_result;




    //  ReBarWinMoveResult=  MoveWindow ( ReBarWin, 0, 100, 0x0000006e,600, TRUE );
    //qDebug()<<"---ati:ReBarWinMoveResult-----"<<ReBarWinMoveResult;


    ///end start menu btn
     qDebug()<<GetLastError();


    create_start_menu_button_End:












    timer_4_refresh_taskbar:
     QTimer* timer=new QTimer();
     taskbar* taskbarCls=new taskbar();


        QObject:: connect(timer,SIGNAL(timeout()),taskbarCls,SLOT(refresh_taskbar()));
         timer->start(200);












    参考:
    paip.提高用户体验----增添开始菜单类似360小助手按钮总结
    WinAPI  FindWindow、FindWindowEx - 查找窗口 - 万一 - 博客园.htm
    VC++ 高手进 :findwindow函数怎么获取不到这个窗口?_百度知道.htm
    用C++ Builder在Windows“开始”按钮上绘图 - CSDN论坛 - CSDN.NET.htm
    C# CreateWindowEx创建按钮事件 - CSDN论坛 - CSDN.NET.htm
    CreateWindowEx_百度百科.htm
    CreateWindowEx函数 作用翻译 (一)_idol_新浪博客.htm.lnk
    CreateWindowEx函数 作用翻译 (二)_idol_新浪博客.htm
    关于CreateWindowEx的显示问题 - CSDN论坛 - CSDN.NET.htm
    如何用CreateWindowEx创建一个BUTTON(VC,Win32)_百度知道.htm
    FindWindow返回句柄失败, GetLastError()却返回0!!!! 易语言俱乐部 - 易语言汉语编程官方论坛.htm
    HOW TO:将程序窗口嵌入到任务栏中 - Alexis·M - 博客频道 - CSDN.NET.htm


    D:\Program Files\360\360Safe\SoftMgr\SML\SoftMgrLite.exe
  • 相关阅读:
    hive报错 java.sql.SQLException: No suitable driver found for jdbc:hive://localhost:10000/default
    使用Beeline连接Hive
    hive报错 root is not allowed to impersonate root (state=08S01,code=0)
    hive报错 Could not open client transport with JDBC Uri: jdbc:hive2://node01:10000/default:java.net.ConnectException refused
    excel快速删除空值单元格,数据上移
    FineBI 图表选择
    数据库连接池大小设置?
    工作中有待留❤️积累的一些经验
    内存包括随机存储器(RAM),只读存储器(ROM),以及高速缓存(CACHE)。RAM最重要
    我自己ood的复习思路:抄
  • 原文地址:https://www.cnblogs.com/attilax/p/15199525.html
Copyright © 2011-2022 走看看