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
作者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