首页
社区
课程
招聘
革命尚未成功,同志仍需努力---待改进的恢复灰色工具栏的程式和源码
2004-8-3 15:13 5124

革命尚未成功,同志仍需努力---待改进的恢复灰色工具栏的程式和源码

2004-8-3 15:13
5124
想写个程式来解决前两天论坛里的一个灰色工具栏的问题,却牺牲的异常壮烈。

原理:先搞一个定时器,然后得到光标处的位置--得到光标处的窗口句柄--判断它的类名是否ToolbarWindow32---如果是的话向工具栏第n个按钮发送一个TB_GETBUTTON消息得到它的命令ID---发送一个TB_ISBUTTONENABLED消息判断是否呈灰色----如呈灰色则发送一个TB_ENABLEBUTTON消息来设定为可按。

附原码与程式(里面有些无用的东东,将就着看*_*):点击下载:附件!tool.rar

对着tbar工具栏时死的情况如下:


对着文件夹工具栏时死的情况如下:


各位兄弟帮忙看看。

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 1
打赏
分享
最新回复 (10)
雪    币: 427
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
鸡蛋壳 2004-8-3 22:15
2
0
参考灰色按钮代码
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
渔夫 2004-8-4 09:14
3
0
没用,工具栏和一般的按钮不同的。
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ecawen 2004-8-4 10:22
4
0
试了什么反映都没有,也没你那种情况,可能是我不会用:)
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
渔夫 2004-8-6 09:04
5
0
win-me下出错
雪    币: 279
活跃值: (375)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
lordor 6 2004-8-6 09:48
6
0
简单看了一下,可能是这个函数出问题了WindowFromPoint

The WindowFromPoint function does not retrieve the handle of a hidden or disabled window, even if the point is within the window. An application should use the ChildWindowFromPoint function for a nonrestrictive search.
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
渔夫 2004-8-7 15:11
7
0
应该不是,我把核心代码改为如下,编译后的程序完全可以把工具栏的第5个按钮删除。这说明获得当前句柄是成功的
程序:点击下载:附件!tool.rar
核心代码:
.if        eax ==        ID_TIMER3
        invoke        KillTimer,hWnd,ID_TIMER3
        invoke        RtlZeroMemory,addr @stPos,sizeof @stPos
        invoke GetCursorPos,addr @stPos
           invoke WindowFromPoint, @stPos.x, @stPos.y
        mov hFileb1,eax
                                                     
         invoke GetClassName,hFileb1,addr @szBuffer2,256
        invoke        wsprintf,addr @szBuffer1,addr szTimeFormat,addr @szBuffer2
        invoke lstrcmpi,addr Toolming,addr @szBuffer1
                .if eax == 0     
         invoke        SendMessage,hFileb1,TB_DELETEBUTTON,5,0
                              
                  .endif
         invoke        SetTimer,hWnd,ID_TIMER3,200,NULL   
  .endif
雪    币: 110
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Elele 2004-11-20 01:16
8
0
恢复灰色工具栏的程式和源码
工具栏上的按钮不是子窗口,我认为你取得的窗口是整个工具栏的不是对应的按钮窗口,(当然不包括向工具栏里加子窗口)
要想使灰色的可用应该在程序中要有相应的处理代码,这样你只要找到在UPDATE_CMDUI时用于判断是否可用的那个内存地址改他的值应该可以吧,我不会汇编,也不知道怎么去找这块内存,应该可以参考一些游戏作弊器
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
渔夫 2004-11-20 18:05
9
0
你的这个方法有点太复杂,我已想了一个“?绝妙?”的主意:用穷举法解决了,反正也不是要那么精确。:D
雪    币: 208
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hxt 2004-11-22 20:49
10
0
BOOL CALLBACK EnumChildProc (HWND hWnd,LPARAM lParam)
{
        if(!IsWindowEnabled(hWnd))
                EnableWindow(hWnd,TRUE);
        return TRUE;
}
void Enable(void)
{
          unsigned long h=0;
        HWND  hWnd;

        while(h<0xffff)
        {

                hWnd=(HWND)(h++);
                if(!IsWindowEnabled(hWnd))
                {
                        EnableWindow(hWnd,TRUE);
                        EnumChildWindows(hWnd,EnumChildProc,1);
                }
        }
        return;
}
....

即可.
雪    币: 16
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
great1234 2004-11-22 21:53
11
0
递归或者穷举一个窗口内的所有的子窗口,让他EnaleWindow
游客
登录 | 注册 方可回帖
返回