TC官方合作论坛

标题: 拖盘无法响应消息,求救 [打印本页]

作者: yhmjh    时间: 2015-7-17 16:02
标题: 拖盘无法响应消息,求救
有没有大哥知道使用下面函数创建托盘图标后,相关的消息路由或者消息过程该怎么写,想要鼠标点击那个托盘图标发生点事件,论坛里面的相关托盘响应代码针对的都是TC封装的生成托盘的函数,对下面代码不适用,有没有相关好的思路或方法告知一下,谢谢

功能 创建拖盘(tip)
    变量 hIcon =  GetIconHandle(窗口获取自我句柄())//我们是第一次创建拖盘,所以需要图标
    变量 NOTIFYICONDATA = CreateNOTIFYICONDATA(NIF_ICON + NIF_TIP,tip,"","",hIcon)   //重构结构体内容
    动态库调用("shell32.dll","long","Shell_NotifyIconW","long",NIM_ADD,"pstruct",NOTIFYICONDATA)//创建托盘
结束
作者: 超自然    时间: 2015-7-17 16:17
下个钩子如何...
作者: 超自然    时间: 2015-7-17 17:05
拿去吧,一般写法,装B特技写法都有了
响应托盘 (写法2).rar (1.89 KB, 下载次数: 553) 响应托盘(写法1).rar (1.63 KB, 下载次数: 381)

作者: yhmjh    时间: 2015-7-17 17:15
超自然 发表于 2015-7-17 17:05
拿去吧,一般写法,装B特技写法都有了

非常感谢,这个东西,今天卡了一天了
作者: yhmjh    时间: 2015-7-17 17:40
超自然 发表于 2015-7-17 17:05
拿去吧,一般写法,装B特技写法都有了

大哥,真的很抱歉,可以再帮我写一个删除或者隐藏托盘的方法吗,感激不尽了,确实是刚刚入门,好多东西还不懂,还请赐教一下。。。
作者: 超自然    时间: 2015-7-17 17:43
就猜到你会问.装逼写法2里面消息16下面那段就是删除托盘,16是窗口销毁,放到别的消息下就行了
作者: yhmjh    时间: 2015-7-17 17:50
超自然 发表于 2015-7-17 17:43
就猜到你会问.装逼写法2里面消息16下面那段就是删除托盘,16是窗口销毁,放到别的消息下就行了 ...

恩恩,看了另外一个,疑惑接触了,这样一来就可以实现退出按钮事件里面先删除托盘,然后再关闭自身操作了。程序里面有定时器,线程,经常点击tc的关闭按钮,界面报错,异常退出,强制关闭所有线程都不行,后来就找到关进程的方法试试,结果效果不错,但是又遇到托盘图标不自动消失的问题,然后就来论坛发帖求救了,太感谢超自然老大了!!!程序终于有救了,谢谢!
作者: yhmjh    时间: 2015-7-17 19:24
超自然 发表于 2015-7-17 17:43
就猜到你会问.装逼写法2里面消息16下面那段就是删除托盘,16是窗口销毁,放到别的消息下就行了 ...

大神,已经按照你的方法已经完美解决了我的问题,太感谢了!!
作者: yhmjh    时间: 2015-7-17 21:03
yhmjh 发表于 2015-7-17 17:50
恩恩,看了另外一个,疑惑接触了,这样一来就可以实现退出按钮事件里面先删除托盘,然后再关闭自身操作了 ...

大哥,响应托盘(写法1)这种写法里面删除托盘呢,能给个方法吗?急用,用装逼写法里面那个方法,程序可以正常运行,但是托盘标题乱码(自己设定的标题后面会出现乱码),但是用你的程序重开又没事,但是移植到我的程序里面,托盘标题就乱码,找了好久没有找出原因,求救

22.png (1.55 KB, 下载次数: 0)

22.png

2222.png (6.15 KB, 下载次数: 0)

2222.png

作者: yhmjh    时间: 2015-7-17 21:06
超自然 发表于 2015-7-17 17:05
拿去吧,一般写法,装B特技写法都有了

大哥,响应托盘(写法1)这种写法里面怎么删除托盘呢,能给个方法吗?急用,用装逼写法里面那个方法,程序可以正常运行,但是托盘标题乱码(自己设定的标题后面会出现乱码),但是用你的项目或者新建项目运行又没事,但是移植到我的程序里面,托盘标题就乱码,找了好久没有找出原因,求救

22.png (1.55 KB, 下载次数: 0)

22.png

2222.png (6.15 KB, 下载次数: 0)

2222.png

作者: yhmjh    时间: 2015-7-17 22:42
超自然 发表于 2015-7-17 17:05
拿去吧,一般写法,装B特技写法都有了

最后还是用装逼方法搞定了,无意间解决了托盘标题乱码问题,  NOTIFYICONDATA["szTip"]["wchar"]=111222 //字符串长度(托盘文本),将这个长度扩大就不会出现乱码了,测试了一下确实是长度不够引起的,能否告知这个属性的作用,具体是什么原因造成的呢,感觉是字符编码不一致问题。但是具体是哪里出了问题,确实不懂,求老师普及哈。已经测试NOTIFYICONDATA["szTip"]["wchar"]>字符串长度(托盘文本)才不会乱码。已经改为 NOTIFYICONDATA["szTip"]["wchar"]=字符串长度(托盘文本)+1,然后就不出现乱码了。求老师去测试一下的呢。就是你发我的相应托盘(写法2)里面的问题。非常感谢大大发给我的这个代码,长见识了,学到了好多东西,同时也把自己程序问题解决掉了,再次感谢!

123.png (15.08 KB, 下载次数: 0)

123.png

作者: 超自然    时间: 2015-7-17 22:53
本帖最后由 超自然 于 2015-7-17 22:56 编辑

疏忽了,忘记后面加个字节放\0这个看不见 的字符
字符串在内存中以\0为结尾,A编码字符串最后是一个\0作为结尾,TC用U编码,俩字节表示一个字符,最后面是\0\0表示字符串结束.
NOTIFYICONDATA["szTip"]["wchar"]被声明成了U类型,所以在这里的1内部会转换成2字节,如果声明成
NOTIFYICONDATA["szTip"]["char"],那么就要字符串长度*2+2才不会出现乱码
少了结束符,API去读的时候会读到非法内存去

作者: yhmjh    时间: 2015-7-18 08:57
超自然 发表于 2015-7-17 17:05
拿去吧,一般写法,装B特技写法都有了

老大,能否给个托盘装逼写法里面的气泡显示函数?用其他写法,没有成功




欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) Powered by Discuz! X3.1