如何在任务栏上增加一个类似于开始按钮的按钮,可参考360软件小助手或QQ桌面小助手

KingStarSolo 2013-01-21 04:10:28
RT,研究了很久无果。
我要做的这个软件类似于360软件小助手、QQ桌面小助手。

托盘图标完全满足不了我现在做的这个软件。


这个按钮并不是什么WIN7上的“将此程序锁定到任务栏”这么简单。
他完完全全是另外一个开始按钮,因为他的位置在开始按钮和其他“将此程序锁定到任务栏”的图标之间的一个按钮
求高手解答。
...全文
1914 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
u013330547 2014-07-03
  • 打赏
  • 举报
回复
+1 C#懂的就不多,Delphi完全不知道,关于那个注入explorer.exe ,思路貌似明白一点,但不会动手,求助!
zq1564171310 2014-07-03
  • 打赏
  • 举报
回复
请教楼主如何解决的?
zq1564171310 2014-07-02
  • 打赏
  • 举报
回复
完全看不懂
Delta 2014-03-20
  • 打赏
  • 举报
回复
引用 25 楼 ma_yingkun 的回复:
直接创建的话 会有问题的,钩子dll注入,m_hwndTask为你创建的窗口 1.子类化m_oldWndProcTask = (WNDPROC)GetWindowLong(m_hwndTask, GWL_WNDPROC); SetWindowLong(m_hwndTask, GWL_WNDPROC, (LONG)WndProcTask); WndProcTask里面自己处理WM_WINDOWPOSCHANGING消息,在这个消息里面调整位置 其他的消息交给系统处理 CallWindowProc(m_oldWndProcTask, hwnd, message, wParam, lParam); 2.子类化 MSTaskListWClass, 同上处理 LRESULT CALLBACK WndProcTask(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_WINDOWPOSCHANGING: // restrict size and position {//位置处理 } return CallWindowProc(m_oldWndProcTask, hwnd, message, wParam, lParam); } void UnSubclassStartButton(void) { if(m_hwndTask && IsWindow(m_hwndTask) && m_oldWndProcTask) SetWindowLong(m_hwndTask, GWL_WNDPROC, (LONG)m_oldWndProcTask); m_oldWndProcTask = NULL; } idThread = GetWindowThreadProcessId(hwndTaskbar, NULL); // 给任务栏安装一个hookg_hhook = SetWindowsHookEx(WH_CALLWNDPROC, (HOOKPROC)CallWndProc,g_hInst, idThread);
朋友,谢谢您提供相送消息。但我还有些不太懂,可以麻烦您说的再详细一些吗?我是学习C#的。谢谢
sss564 2013-12-04
  • 打赏
  • 举报
回复
注入explorer.exe ,获取任务栏的消息。调整程序图标显示位置。
ma_yingkun 2013-10-28
  • 打赏
  • 举报
回复
直接创建的话 会有问题的,钩子dll注入,m_hwndTask为你创建的窗口 1.子类化m_oldWndProcTask = (WNDPROC)GetWindowLong(m_hwndTask, GWL_WNDPROC); SetWindowLong(m_hwndTask, GWL_WNDPROC, (LONG)WndProcTask); WndProcTask里面自己处理WM_WINDOWPOSCHANGING消息,在这个消息里面调整位置 其他的消息交给系统处理 CallWindowProc(m_oldWndProcTask, hwnd, message, wParam, lParam); 2.子类化 MSTaskListWClass, 同上处理 LRESULT CALLBACK WndProcTask(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_WINDOWPOSCHANGING: // restrict size and position {//位置处理 } return CallWindowProc(m_oldWndProcTask, hwnd, message, wParam, lParam); } void UnSubclassStartButton(void) { if(m_hwndTask && IsWindow(m_hwndTask) && m_oldWndProcTask) SetWindowLong(m_hwndTask, GWL_WNDPROC, (LONG)m_oldWndProcTask); m_oldWndProcTask = NULL; } idThread = GetWindowThreadProcessId(hwndTaskbar, NULL); // 给任务栏安装一个hookg_hhook = SetWindowsHookEx(WH_CALLWNDPROC, (HOOKPROC)CallWndProc,g_hInst, idThread);
申城 2013-10-27
  • 打赏
  • 举报
回复
好高端的样子,都是大神
ma_yingkun 2013-10-25
  • 打赏
  • 举报
回复
逆向分析了360助手的代码,得到的方法就是程线程注入explorer.exe做的
ma_yingkun 2013-10-25
  • 打赏
  • 举报
回复
这个 很明显是 远程线程注入做的, 注入explorer.exe, 要32 和64为2个dll, 子类化 任务栏窗口过程,在自己的 窗口过程中实现
fengsirui 2013-10-19
  • 打赏
  • 举报
回复
仅仅将一个按钮放在任务栏里面而已,不要想的太复杂,不过按键的外观有点难搞
KingStarSolo 2013-01-23
  • 打赏
  • 举报
回复
楼上的 是什么 玩意?
gwg7107 2013-01-23
  • 打赏
  • 举报
回复
void treeView1_DragDrop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) { files = (string[])(e.Data.GetData(DataFormats.FileDrop)); 。。。。。。。。。。。。。。。。。。 } } void treeView1_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.All; }
gwg7107 2013-01-23
  • 打赏
  • 举报
回复

发错图片了
gwg7107 2013-01-23
  • 打赏
  • 举报
回复



每个按钮的位置大小均可调,,快捷键直接在鼠标位置打开窗口。

KingStarSolo 2013-01-23
  • 打赏
  • 举报
回复
求解答···
KingStarSolo 2013-01-23
  • 打赏
  • 举报
回复
引用 19 楼 bdmh 的回复:
本帖最后由 bdmh 于 2013-01-23 14:04:21 编辑 下面是一段delphi代码,你在c# 中引入api 即可 C# code?123456789101112131415161718192021222324252627282930procedure TForm1.Button1Click(Sender: TObject)……
你是我的上帝··· 这就是我 想要的····分你拿去···其他楼也谢谢你们 参与
bdmh 2013-01-23
  • 打赏
  • 举报
回复
下面是一段delphi代码,你在c# 中引入api 即可

procedure TForm1.Button1Click(Sender: TObject);
var
i:HWND;
cs:CREATESTRUCT;
begin
// i := FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'Button', nil);
i := FindWindow('Shell_TrayWnd', nil);//这里可以通过FindWindowEx找到开始按钮,并得到他的按钮区域( GetWindowRect ),并以此来指定新按钮的区域
cs.lpszClass:= 'Button';
cs.lpszName:= '我的按钮';
cs.style:= WS_CHILD or WS_VISIBLE or WS_BORDER;
cs.hMenu:= 0;
cs.hwndParent:= i;
cs.lpCreateParams:= nil;
cs.x:= 100;
cs.y:= 0;
cs.cx:= 20;
cs.cy:= 30;
cs.hInstance:= 0;
i := CreateWindow(cs.lpszClass,
cs.lpszName,
cs.style,
cs.x,
cs.y,
cs.cx,
cs.cy,
cs.hwndParent,
cs.hMenu,
cs.hInstance,
cs.lpCreateParams);
end;

就是右边这个白色的
nonocast 2013-01-22
  • 打赏
  • 举报
回复
那就考虑替代开始啊...
KingStarSolo 2013-01-22
  • 打赏
  • 举报
回复
继续顶起·····
KingStarSolo 2013-01-22
  • 打赏
  • 举报
回复
引用 9 楼 nonocast 的回复:
引用 6 楼 Gary87517 的回复:5楼的也不是我想要的。难道就没有人用过这2款软件? 我感觉思路应该是获取到系统Menu的句柄(GetSystemMenu) 然后在这个Menu上增加按钮 我用过360,看到一次这样的图标删一次,何必呢?
个人喜好不同·这样的软件放那个位置最合适不过了,最好能代替开始按钮
加载更多回复(10)
CSKIN-15.1.28 1.优化SkinTabControl标签移入移出效果。 2.将SkinTextBox改为容器边框,其他控件可放进其里面。 3.设置SkinTextBox中的TextBox为不可点击,详细参数在属性栏里设置。 4.SkinPanel添加属性(BorderColor:边框颜色)。 5.添加(SkinPushPanel:抽屉控件列表,根据Items添加。)和(SkinCaptionPanel:面板控件单独)。 6.添加(SkinCode:验证码控件。)。 7.减少SkinTreeView的闪烁。 8.窗体XP下最大化移动BUG修复。 9.修复SkinButton的禁止状态绘制不显示的问题。 10.修复SkinDataGridView的一些设置BUG。 11.修复SkinRadioButton属性Text为空报错问题。 12.修复属性(Shadow:是否启用窗体阴影)。 13.加入(日期面板控件:SkinMonthCalendar),(日期选择框控件:SkinDateTimePicker)。 14.加入(弹出承载控件:SkinDropDown) 使用方法: SkinDropDown _SkinDropDown = new SkinDropDown(控件:Control); _SkinDropDown.Show(new Point(0, 22)); 15.添加SystemInformationHelper静态类,获得操作系统版本。 16.添加控件(SkinHotKey:自定义热键注册控件)。 17.窗体添加属性(XTheme:窗体主题,类型:继承CCSkinMain的窗体),增加皮肤更换属性,更好的对换肤支持。 18.增加了MDI支持,并多了一些属性设置MDI。 19.对好友列表进行了绘制优化,效率MAX,真正达到了千人不卡。 20.好友列表添加属性(SmoothScroll:是否平滑滚动),对好友列表加入平滑滚动的效果。 21.修复异形窗体SkinMain不可在透明区域放控件的BUG。 22.好友列表好友拖动效果优化。 23.解决SkinMain异形窗体无法点击触发点击事件问题。 24.修复SkinToolTip的字体颜色及大小BUG。 CSKIN-14.8.26 1.修复SkinPanel滚动条不显示的问题。 2.修复SkinPanel右下边框不显示的问题。 3.修复好友列表头像闪烁的一些BUG。 4.修复SkinMain异形窗体点击任务栏最小化操作。 5.加入内置工具类FastBitmap,此类用来快速Bitmap读写像素,如何使用看:http://bbs.cskin.net/thread-83-1-1.html。 6.修复截图控件的未选框双击错误BUG,增加截图控件属性BmpLayerCurrent:控件所截图的图片。 7.SkinToolStrip添加BaseItemNorml属性,BaseItem默认背景图。 8.修复SkinComboBox下拉框项的细节样式。 9.加入SkinFileTansfersContainer控件与SkinFileTransfersItem控件。 SkinFileTansfersContainer:文件传输列表容器,这里面内置Add,Remove,Search等操作ItemList方法。 SkinFileTransfersItem:文件传输列表项,用于添加进列表容器。 10.SkinToolStrip控件添加BindTabControl=(绑定要操作的TabControl)属性,绑定后点击ToolStripButton就可以根据ToolStripButton中的Tag=(TabPage的Index值)进行切换TabPage。 11.优化设计时SkinTabControl略卡的问题。 12.SkinTabePage添加属性(BorderColor:边框颜色)。 13.修复好友列表闪烁状态下好友被删除,分组依然闪烁。 14.SkinButton、SkinCheckBox、SkinRadioButton添加属性(IsEnabledDraw:是否画禁用状态下的效果,默认true)。 15.好友列表添加三个事件: (DownSubItem:用鼠标按下子项时发生) (UpSubItem:用鼠标按下并释放子项时发生) (ClickSubItem:用鼠标单击子项时发生) 16.SkinTabControl添加两个事件: (TabePageClosed:TabPage容器关闭后。) (TabePageClosing:TabPage容器关闭前。) 17.加入彗星小助手案例DEMO。 CSKIN-14.7.2 1.SkinTabContro

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧