jb.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("按钮被点击")
}
})
看下来应该是键盘“先要进入某个可输入文字的组件中”,通常点击窗口后 JFrame 会尝试把键盘焦点恢复到之前焦点从这个 JFrame 窗体离开时当时焦点所在的那个组件上,如果当时没有输入组件接收焦点的话,就会自动重新计算第一个可接收输入焦点的组件。然后之后的键盘事件就会自动发送到这个输入组件上了。因此,当只是激活当前窗体的 JFrame 比如鼠标点了标题栏而不是在 JFrame 的 Content Pane 的区域内,那么输入焦点并不会自动恢复。我们需要在 JFrame 的 Content Pane 中点击一次。要了解一点,Windows 编程中图形组件有两种,一种是 Window 窗体(包括 JFrame, JDialog, Frame, Dialog) 它们是直接与 Windows *** 作系统打交道的,它的标题栏实际上与 *** 作系统直接相关,比如最大化最小化后被当前窗体遮挡的应用程序窗体需要重画,第二种是 JPanel, JTextField 之类的 Window 内的组件。
焦点点击在 Window 窗体型组件时有额外的事情需要做的。
其实不用Hook,也不用模块,检查系统闲置时间已有专用函数,不必这么复杂。完整代码如下:
Option Explicit
Private Declare Function GetLastInputInfo Lib "user32" (plii As LASTINPUTINFO) As Boolean
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Type LASTINPUTINFO
cbSize As Long
dwTime As Long
End Type
Dim lii As LASTINPUTINFO
Private Sub Form_Load()
Timer1.Interval = 1000
lii.cbSize = Len(lii)
End Sub
Private Sub Timer1_Timer()
If GetLastInputInfo(lii) Then
If (GetTickCount - lii.dwTime) / 60000 >= 15 Then
Shell "shutdown.exe -s -t 180"
Call MsgBox("由于本机15分钟没有 *** 作,如果3分钟后没有反应,系统将强制关机", vbYesNo + vbExclamation + vbDefaultButton2, "提示")
End If
End If
End Sub
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)