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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值