《深度历险》里提过解决方法,可是我没有成功……是setwindowtext吧,记不清了……

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ShowWindow(FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'Button', nil), False);
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      ShowWindow(FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'Button', nil), True);
    end;
      

  2.   

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      NewImage := TPicture.create;
      NewImage.LoadFromFile('C:\Windows\Black Thatch.bmp');
      StartButton := FindWindowEx
                     (FindWindow(
                        'Shell_TrayWnd', nil),
                         0,'Button', nil);
      OldBitmap := SendMessage(StartButton,
                               BM_SetImage, 0,
                               NewImage.Bitmap.Handle);
    end;
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      SendMessage(StartButton,BM_SetImage,0,OldBitmap);
      NewImage.Free;
    end;
      

  3.   

    //转贴
    我要回复 ¦ 我感兴趣 ¦ 打印贴子 ¦ 推荐给朋友 ¦ 关闭窗口  
    主  题:★ 再讨论如何替换 Windows 开始菜单, 非高手勿进!!!
    作  者:heartbeat_hb
    所属论坛:Delphi
    问题点数:138
    回复次数:16
    发表时间:2001-10-30 17:28:03  
      在CSDN下载了一个网管程序:下载地址:
        http://202.103.69.33/cnshare/showsoft.php3?id=2586
        http://www.csdn.net/soft/openfile.asp?kind=1&id=14320  它能够虚拟 Windows 开始菜单,且开始菜单始终在最上层,不会被其它网管的开始
    菜单覆盖,不知是怎么实现的?回复贴子: 
    回复人: houling(houling) (2001-10-30 17:36:16)  得2分 
    我下载了并试了一下,这开始菜单好像是Windows本身的吧,我猜可能用了其它的软件
    修改了Windows的资源,我以前用SOFTICE修改了一下,后来Windows出现非法操作,
    不知道他是怎么改的,有没有高手能解决此问题???!!!  
    回复人: Focus(老鱼) (2001-10-30 17:49:22)  得3分 
    确实是高手所编
    它是用vxd技术实现的
    但我想是否可以用钩子注入的方法实现
    没试过  
    回复人: darrell(horns tiger) (2001-10-31 10:04:54)  得30分 
    技术上没有甚麽,我能实现其中的一部分,但无法完全模仿出来,你下载的程序都是自己写了
    按纽的控件代码你看一下,大家可以共同研究
    procedure TForm1.ShowStartButton(bvisible : boolean);
    var 
      h : hwnd; 
      TaskWindow : hwnd; 
    begin 
      if bvisible then 
      begin 
        h := FindWindowEx(GetDesktopWindow,0,'Button',nil); 
        TaskWindow := FindWindow('Shell_TrayWnd', nil); 
        ShowWindow(h,1); 
        Windows.SetParent(h,TaskWindow); 
      end else 
      begin 
        h := FindWindowEx(FindWindow('Shell_TrayWnd', nil),0,'Button',nil); 
        ShowWindow(h,0);
        Windows.SetParent(h,0); 
      end;
    end;procedure TForm1.Button4Click(Sender: TObject);
    begin
      ShowStartButton(false); // or true to reshow end;procedure TForm1.Button5Click(Sender: TObject);
    begin
    ShowStartButton(true); // or true to reshow end;procedure TForm1.Button6Click(Sender: TObject);
    var 
      b: TButton;  // or another Type of button
      h, Window : hwnd; 
    begin
      Window := FindWindow('Shell_TrayWnd', nil);
      b := TButton.Create(nil);
    b.ParentWindow := handle;
      //b.Parent:=form1;
      b.Glyph.LoadFromfile('f:\start.bmp');
      b.Caption := '';
      b.Width := 51;
      b.font.style := [fsbold];
      b.Visible:=true;
    end;  
    回复人: kevin_gao(困了!累了!睡觉了!) (2001-10-31 10:12:34)  得1分 
    关注...............  
    回复人: wddarkknight(暗黑武士) (2001-10-31 21:44:57)  得2分 
    我觉得可以换一个思路,找到“桌面”这个窗口,隐藏,隐藏工具栏,这时候开始按牛也没有了,然后自己做一个form,上面放一个bitbtn之类的东西,点击弹处另一个menu(最好是一个像菜单的form), 问题基本就解决了。我看美萍使用的是就是这个方法
    回复人: heartbeat_hb(あとはオ-トツモです=九連寶燈[ドヲ]) (2001-10-31 22:24:32)  得0分 
    Windows 开始菜单真的这么难替换吗?不知道哪位高手可以把它换掉的,请赐教!如果用钩子,怎么钩呢?(我不会钩子)还有就是怎么才能弹出像 Windows 那样的菜单?  
    回复人: yandong_mars(信) (2001-11-1 16:13:47)  得1分 
    关注...............  
    回复人: sillyou(小傻瓜) (2001-11-1 16:42:15)  得1分 
    up.  
    回复人: xzm2000(凌风) (2001-11-1 22:55:38)  得5分 
    同意darrell(horns tiger)的想法,先把开始按键隐藏,然后动态的创建一个bitbtn,让它的父窗口为'Shell_TrayWnd',left和top为0,再加上一个图片,调整大小,最后对这个按键写代码就可以实现了,完全可以达到你的要求  
    回复人: lubing317(天行者) (2001-11-1 23:24:35)  得1分 
    可以吗?  
    回复人: heartbeat_hb(あとはオ-トツモです=九連寶燈[ドヲ]) (2001-11-1 23:39:32)  得0分 
    好像还是不行~各位高手帮忙啊!~  
    回复人: cobi(我是小新) (2001-11-2 7:59:06)  得1分 
    重点关注  
    回复人: xzm2000(凌风) (2001-11-2 23:56:31)  得30分 
    怎么不行,明明可以的,我试过的
    procedure TForm1.Button3Click(Sender: TObject);
    var
      b: TButton;
    begin
      h := FindWindowEx(FindWindow('Shell_TrayWnd', nil),0,'Button',nil);
      ShowWindow(h,0);
      b := TButton.Create(Self);
      b.Visible := true;
      b.Width := 50;
      b.Height := 21;
      b.Caption := '我的开始';
      b.ParentWindow := FindWindow('Shell_TrayWnd', nil);
      b.Left := 0;
      b.Top := 0;
    end;
    然后加上自己的处理菜单代码  
    回复人: heartbeat_hb(あとはオ-トツモです=九連寶燈[ドヲ]) (2001-11-3 18:26:02)  得0分 
    To xzm2000(不不)(每天都要进步):
    怎么加图片啊?还有就是如何添加自己的处理菜单代码呢?
    能不能给个完整例子啊?  
    回复人: xzm2000(凌风) (2001-11-3 20:43:51)  得30分 
    动态创建一个bitbtn就可以加入图片了,然后加入一个popupmenu
      b := TButton.Create(Self);
      b.glyph.loadfromfile('c:\start.bmp');
      b.onchick := mychick;
      b.Visible := true;
      b.Width := 50;
      b.Height := 21;
      b.Caption := '我的开始';
      b.ParentWindow := FindWindow('Shell_TrayWnd', nil);
      b.Left := 0;
      b.Top := 0;procedure mychick(sender: tobject);
    begin
      popupmenu1.popup(x, y);  //x,y是坐标
    end;回复人: xzm2000(凌风) (2001-11-3 20:45:31)  得31分 
    b := TButton.Create(Self); -> b := TBitbtn.Create(Self);