吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 10189|回复: 76
收起左侧

[原创工具] 更新实用工具倒计时提醒器V2.1.0.7

  [复制链接]
Casper1185 发表于 2021-8-17 20:06
本帖最后由 Casper1185 于 2021-8-19 08:50 编辑

非常要感谢评论区的伙伴,不仅喜欢这款软件,还提出了很多的建议!
于是我又进行了小小的修改
在这里还是要特别感谢
@马云爱逛京东


上正题

8月19日第二次更新,内容如下:
1.取消窗体可放大缩小
2.取消最大化按钮
3.取消退出按钮
3.变化软件内鼠标指针样式
4.增加到时间后会发出windows警告声
5.增加到时间后软件在任务栏中闪烁

有些小伙伴表示倒计时时间到后没能提醒到
就是因为多开时没能起到作用
因此我增加了任务栏闪烁
如图


QQ截图20210819083823.png

即使是隐藏任务栏也可以提醒到!


界面顺序也改了一下


QQ截图20210819084428.png

那么剩下更新的功能就请大家自行体验啦


如发现还有什么可修改的地方,可以留言在评论区,谢谢!
感谢大家对我的支持!

本软件代码有更新,有兴趣的伙伴可以看看

[Visual Basic] 纯文本查看 复制代码
 Private Declare Function FlashWindow Lib "user32" (ByVal hwnd As Long, ByVal bInvert As Long) As Long

Private Sub Command1_Click()
 If h = 0 And m = 0 And s = 0 Then
  Timer1.Enabled = False
 Else
  Timer1.Enabled = Not (Timer1.Enabled)
 End If
 If Timer1.Enabled = Ture Then
  h.Locked = Ture: m.Locked = Ture: s.Locked = Ture
 Else
  h.Locked = False: m.Locked = False: s.Locked = False
 End If
End Sub

Private Sub Form_Load()
Timer1.Enabled = False
End Sub

Private Sub h_LostFocus()
 h = Int(Val(h))
 If h < 0 Then h = 0
 If h > 23 Then h = 23
End Sub

Private Sub m_LostFocus()
 m = Int(Val(m))
 If m < 0 Then m = 0
 If m > 59 Then m = 59
End Sub

Private Sub s_LostFocus()
 s = Int(Val(s))
 If s < 0 Then s = 0
 If s > 59 Then s = 59
End Sub

Private Sub Text1_Change()
Text1.Enabled = False
End Sub

Private Sub Text3_Change()
Text3.Enabled = False
End Sub

Private Sub Text4_Change()
Text4.Enabled = False
End Sub

Private Sub Timer1_Timer()
 If h = 0 And m = 0 And s = 0 Then
  Timer1.Enabled = False
  Dim Title, Response
    Title = "显示文本框输入内容。"
    FlashWindow hwnd, 1&
    Response = MsgBox(Text2, vbExclamation, "快点去")
  h.Locked = False: m.Locked = False: s.Locked = False
 ElseIf s = 0 Then
  s = 59
  If m = 0 Then
   m = 59: h = h - 1
  Else
   m = m - 1
  End If
 Else
  s = s - 1
 End If
End Sub



8月19日第二次更新文件,喜欢的小伙伴别忘了下载鸭

大佬请下载

倒计时提醒器2.1.0.7版本.rar (670.5 KB, 下载次数: 216)



如果不想花币的话请往这边请

链接:https://pan.baidu.com/s/1RkzDuJWWOW0AjPMX8NH4-A?qq-pf-to=pcqq.c2c
提取码:52pj


谢谢大家对我的支持!

免费评分

参与人数 13吾爱币 +11 热心值 +12 收起 理由
未来用户 + 1 我很赞同!
layhon + 1 + 1 谢谢@Thanks!
dantevip + 1 热心回复!
毒谷幽魂 + 1 + 1 感谢分享
hcjoy + 1 + 1 我很赞同!
迈克老狼 + 1 建议①窗口能移动 建议②时间到了不停地震动
wuti90 + 1 + 1 热心回复!
lfm333 + 1 + 1 谢谢@Thanks!
菊糀恠歎滊 + 1 + 1 谢谢@Thanks!
versions + 1 + 1 用心讨论,共获提升!
chao8709 + 1 + 1 热心回复!
ZXB654321 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
miqi1314 + 1 + 1 鼓励转贴优秀软件安全工具和文档!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

马云爱逛京东 发表于 2021-8-18 14:01
Casper1185 发表于 2021-8-18 09:00
大佬我还有个问题哈,求帮忙看一下
就是我想到时间后那个msgbox,可以弹出在所有的进程前面
或者是任务 ...

1、消息框置顶,只需要设置其消息框的参数就可以了。这是VB的消息框函数:
[Visual Basic] 纯文本查看 复制代码
Function MsgBox(Prompt, [Buttons As VbMsgBoxStyle = vbOKOnly], [Title], [HelpFile], [Context]) As VbMsgBoxResult

其中的第二个参数,也就是按钮状态,设置为vbSystemModal即可。
MsgBox 消息内容, vbSystemModal
不过在点击消息框后,窗体不会激活。若要消息框出现之前就先激活窗体,可以让窗体先临时置顶,随后取消。
这里需要先声明API函数:SetWindowPos。
其原型为
[Visual Basic] 纯文本查看 复制代码
Declare Function SetWindowPos Lib "user32" ( _
ByVal hwnd As Long, _
ByVal hWndInsertAfter As Long, _
ByVal X As Long, _
ByVal Y As Long, _
ByVal cx As Long, _
ByVal cy As Long, _
ByVal wFlags As Long _
) As Long 

它的作用是设置窗体位置(当然,除了让窗口置顶以外,也可以改变其位置和大小)。
其中的几个参数:X,Y,CX,CY分别代表窗体的左(Left),上(Top),宽(Width)和高(Height),且其度量单位为像素,而不是VB缺省的缇。
由于只需要置顶窗口,所以这几个参数设置为0就好。
接下来看下面几个需要用到的参数:
第一个hWnd,指定窗体的句柄。这个我在上个回复中提到了。
第二个hWndInsertAfter,指定窗体的ZOrder。ZOrder是窗体的摆放次序。什么叫摆放次序呢?这里作一个简单的例子:上学的时候,小组长收作业,然后交给学科代表。先交作业的同学,他的作业本放最底下,后交作业的同学,他的作业本放上面。现在你跟小组长说,能不能帮忙把你的作业放最上面,小组长说好,于是你的作业本就从中间或者最底下拿到了最上面。老师(用户)最先看到的自然就是你的作业本(窗体)了。
同样,此参数的常量也可在WinUser.h文件找到。
下面是该参数的其中两个常量:
[C++] 纯文本查看 复制代码
#define HWND_TOPMOST    ((HWND)-1)
#define HWND_NOTOPMOST  ((HWND)-2)

虽然其定义的值前面带了“HWND”,但是不需要用到这个HWND,只需要后面的值就可以了。
也就是说,用-1(HWND_TOPMOST)表示置顶窗口,用-2(HWND_NOTOPMOST  )表示取消置顶。
最后一个参数wFlag,用于表示移动窗体和尺寸的标志(当然也包括其他的标志),参数的常量可以在WinUser.h找到,下面是我们所需要的两个常量:
[C++] 纯文本查看 复制代码
#define SWP_NOSIZE          0x0001
#define SWP_NOMOVE          0x0002

这两常量分别代表不要改变尺寸和不要改变大小,所以得把它都用上。
如果要·同时用上两个常量,可以使用+或者Or关键字。一般而言,Or关键字比+更常用,所以就用Or来连接这俩常量。
现在,置顶窗体和取消置顶的代码为
[Visual Basic] 纯文本查看 复制代码
SetWindowPos 窗体.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE     '设置窗口置顶
SetWindowPos 窗体.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE    '取消窗口置顶

为了实现强制让消息框置顶,在MsgBox之前使用置顶窗体的函数;在之后使用取消置顶的函数。

2、任务栏和窗口的闪烁则用到名为FlashWindow的API。其原型如下:
[Visual Basic] 纯文本查看 复制代码
Declare Function FlashWindow Lib "user32" (ByVal hwnd As Long, ByVal bInvert As Long) As Long

用法很简单:
第一个参数传入窗体句柄,第二个参数传入的值如果不是0,则闪烁窗口和任务栏。
如果要实现连续的闪烁,只需把其调用放入到一个开着的钟(Timer)里面即可。
[Visual Basic] 纯文本查看 复制代码
Private Sub timer1_Timer()
    FlashWindow hwnd, 1&
End Sub
马云爱逛京东 发表于 2021-8-18 01:51
这个东西其实有很大的进步空间,首先是无边框窗口的拖拽:你看,你的程序 由于是没有边框的,所以运行时只会固定在一个位置。可以加点东西实现无边框窗口的拖拽。
先上代码和测试效果:
[Visual Basic] 纯文本查看 复制代码
Option Explicit
Private Declare Function ReleaseCapture Lib "user32" () As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const HTCAPTION = 2
Private Const WM_NCLBUTTONDOWN = &HA1

Private Sub Command1_Click()
End
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
ReleaseCapture '释放鼠标
    SendMessage Me.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0& '传递信息
End Sub

1.gif

接下来我将尽可能用容易听得懂的话介绍原理。
首先是两个API函数:ReleaseCapture和SendMessage。
根据API的声明代码,可以看到这俩函数都位于User32的库里面,这个函数库是系统带的,所以不用担心你的电脑没这个东西。
(1)ReleaseCapture函数(返回值为长整数)
ReleaseCapture函数,顾名思义就是Release Capture,即释放鼠标指针。这是系统用来告诉鼠标:“你现在别管这个线程怎么怎么样了,先歇会儿,我给窗体送了点东西,这会儿估计快到了。”
然后鼠标就会暂时从现在这个鼠标按下的过程中挂起(你可以理解为鼠标先跟这个窗体请个假,说:“窗体大哥,系统大哥说他给你点东西,俺就先歇会儿了。”)
如果鼠标释放成功了,返回一个非0的值,不过大多数情况下窗口还是会“让鼠标歇会儿”的(毕竟系统是领导啊,官大一级能压死人,哦,是压死窗体才对),所以取不取返回值都ok。
接着,系统送给窗体东西(消息)的过程就开始了。
(2)SendMessage函数(返回值为长整数)
SendMessage函数,也叫消息传递,是Windows系统中很重要的函数之一。毕竟windows系统就是依靠消息传递机制运转的,没有送信的可不行。
SendMessage,或者我们管它叫“Send通快递”的快递员好了。
我们先看这个函数的参数:ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any
第一个参数指定窗口的句柄。你可以理解为收件人地址,这是系统跟Send通快递的快递员说,“它(窗体)的老家,诶,就住在那个屯儿(窗体句柄),它是这个屯儿里土生土长的人儿”。
第二个参数指定发送的消息类型。跟寄快递差不多,寄快递可能有大件货、小件货,还有什么贵重品、易碎品之类的,表示我这里头送的什么东西。
那系统跟窗体送些什么呢?
代码的功能是要实现拖拽窗体,顾名思义就是鼠标左键先按下,然后移动一段距离后松开鼠标。这时候,送的消息类型就是模拟鼠标(准确地说是模拟鼠标左键)按下,之后移动鼠标和松开鼠标就让用户去完成。
于是,我们便需要一个值,用来表示模拟按下鼠标左键,这个值可以在MSDN上找到。当然比较懒的一种方法是查看C/C++语言经常用的的WinUser.h,里面有一堆需要的常量。

在WinUser.h中,可以找到这样一个常量:
[C++] 纯文本查看 复制代码
#define WM_NCLBUTTONDOWN                0x00A1

这就是按下鼠标左键的常量,即&HA1。
再看这个常量的名称,叫“WM_NCLBUTTONDOWN”,先说后面的“BUTTONDOWN”,这个很明显就是鼠标的按钮按下去的意思;前面的一大串是常量的前缀。
WM - WindowsMessage,就是前面说的窗体消息(是系统给窗体本身的消息)。
NC - NonClient,非客户区,可以简单地理解为有边框的窗体外面那一圈框:
图片.png
如果是移动有边框的窗体,我们都是拖拽它的标题栏,像这个没有边框的窗体,它的标题栏就被隐藏了(不是消失了哦)。
虽然用户看不到这个标题栏,但是Send通快递还是丝毫没有影响的。这个消息类型依然对窗体有效果。
L - Left,左边的。
第三个跟第四个参数,是表示消息的内容,相当于快递里面的东西。你看到的这俩参数wParam和lParam,只有前面的字母不一样,这是历史遗留下的(真的是从Win9x那时候祖传下来的)。前面的wParam一般用于放置消息内容标志,相当于快递里面的产品自带的包装盒(比如电子产品的外包装);后面的lParam一般用于放置消息的具体内容(如果没有的话,设为0&),相当于电子产品本身。当然如果你寄的是一个不需要包装的东西(比如寄的是一个苹果),自然不需要再搞一个包装盒,所以这时候的参数只需要wParam,而lParam就让它为0&。
说了这么多,接下来看看第三个参数wParam。
这个参数里面放的是HTCAPTION。同样地,这个常量也可以在WinUser.h发现。
[C++] 纯文本查看 复制代码
#define HTCAPTION           2

ok,这个常量的后面是Caption,学VB的很清楚Caption这个东西是什么,这个就是窗体的标题栏(虽然被隐藏了),前面的HT,我查了一下,发现是HitTest(击打测试)的缩写,不过我也想不懂为什么取这个名字。

现在,这句SendMessage的调用就解释清楚了:
系统模拟鼠标左键在窗体的非客户区按下,然后让窗体误以为是鼠标左键按在了它的标题栏上(实际上是在客户区,而且是在Form),之后让整个窗体窗体跟着鼠标跑。

综上,你可以捋一捋移动无边框窗体的思路了:
在窗体的MouseDown(鼠标按下)事件中,先释放鼠标(相当于让鼠标强制松开);
然后趁窗体不注意,让系统发个消息给窗体,让窗体误以为鼠标在拖拽它的标题栏,从而实现拖拽效果。

我只能说,这在“三十六计”里被叫做“偷梁换柱”。

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
bzhjl + 1 + 1 用心讨论,共获提升!
Casper1185 + 1 + 1 用心讨论,共获提升!

查看全部评分

alongzhenggang 发表于 2021-8-17 22:41
你看哈  这个呢 初始还可以   但是功能一加   炸啦

就是简洁此时刚好

但也有更多需求


spongebob99t 发表于 2021-8-17 20:11
很nice,要是能有个检测的功能就更好的了
mssss123 发表于 2021-8-17 20:20
自己做的就是好
ZXB654321 发表于 2021-8-17 20:21
不错哈、UI再美化一下、大黄色不好看哦、、、、、
zmkm2018 发表于 2021-8-17 20:27
正需要,先看看
jipinfeche 发表于 2021-8-17 20:30
大神厉害啊膜拜
邓肯 发表于 2021-8-17 20:38
不错 确实是一个实用的时间工具
chris0718 发表于 2021-8-17 20:39
厉害,很实用的小工具,感谢分享
 楼主| Casper1185 发表于 2021-8-17 20:41
ZXB654321 发表于 2021-8-17 20:21
不错哈、UI再美化一下、大黄色不好看哦、、、、、

好的好的,我也再想想,到时候连同优化一起更新!
vethenc 发表于 2021-8-17 20:45
感谢分享,支持原创作品
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-26 22:18

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表