65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Visual Basic 的 Java 系统托盘应用程序

starIconstarIconstarIconemptyStarIconemptyStarIcon

3.00/5 (9投票s)

2002年10月3日

viewsIcon

93793

downloadIcon

810

这是一个简单的 Java 系统托盘应用程序。它只能在 Windows 环境下工作。不需要 JNI。

Sample Image - SystemTray.gif

引言

大家好,这是我在 CodeProject 上的第三篇文章。我已经发布过
Java 中的 SsTab 控件
以及具有高度可定制 GUI 的 Java 聊天应用程序。我希望这个
对所有 Java 开发者也有用。
这是一个简单的 Java 系统托盘应用程序。它工作
只能在 Windows 环境下。不需要 JNI。

描述

在这里,我使用 VB Api 将 Java 应用程序放入
系统托盘。

这是用于系统托盘的 Vb 代码

	Private Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias 
"Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long Private Const WM_MOUSEMOVE = &H200 Private Const NIF_ICON = &H2 Private Const NIF_MESSAGE = &H1 Private Const NIF_TIP = &H4 Private Const NIM_ADD = &H0 Private Const NIM_MODIFY = &H1 Private Const NIM_DELETE = &H2 Private Const MAX_TOOLTIP As Integer = 64 Private Type NOTIFYICONDATA cbSize As Long hwnd As Long uID As Long uFlags As Long uCallbackMessage As Long hIcon As Long szTip As String * MAX_TOOLTIP End Type Private nfIconData As NOTIFYICONDATA .....

这是用于关闭系统托盘应用程序的 Vb 代码。

	Private Const WM_CLOSE = &H10
	Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" 
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
	Private Declare Function FindWindow Lib "user32" Alias "
FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

	Private Sub Form_Load()
	    PostMessage FindWindow(vbNullString, "SystemTray"), WM_CLOSE, ByVal 0, ByVal 0
	End
End Sub

这是 Vb Api 用于将窗口从任务栏隐藏。

	Private Declare Function ShowWindow Lib "user32" 
(ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias 
"FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Const SW_HIDE = 0

Private Sub Form_Load()
    WindowHandle = FindWindow(vbNullString, "SystemTray In Java")
    ShowWindow WindowHandle, SW_HIDE
    End
End Sub

所以,完成所有 VB 部分后,我们需要制作 exe 文件。
之后,使用 process 和 runtime 类,
我们需要调用这些 exe 文件。

这个系统托盘应用程序中的主要步骤是“窗口标题”。
在这里,我将“Java 中的系统托盘”用作窗口标题。
在我们的 Vb 程序中,我们需要使用这个窗口标题来
查找、隐藏和显示窗口。

这是用于系统托盘应用程序的 Java 代码。

/**********Quitting System Tray****************/
try {
   process = Runtime.getRuntime().exec("data/SystemTrayKill.exe");
}catch(IOException _IoExc) { }	
				
dispose();
System.exit(0);
}
});
setLayout(new BorderLayout());
setSize(400, 200);
setTitle("SystemTray In Java"); 
Label LblTray = new Label("System Tray Demo in Java !",1);
LblTray.setBackground(Color.black);
LblTray.setForeground(Color.white);
LblTray.setFont(new Font("Arial",1,25));
add("North",LblTray);
CmdTray = new Button("Go To System Tray");
CmdTray.addActionListener(this);
add("Center",CmdTray);
Label LblDevelop = new Label("Developed By Jeeva S (vavjeeva@yahoo.com)",1);
LblDevelop.setBackground(Color.black);
LblDevelop.setForeground(Color.white);
LblDevelop.setFont(new Font("Arial",1,15));
add("South",LblDevelop);
				
/**********Loading System Tray****************/
try {
   process = Runtime.getRuntime().exec("data/SystemTray.exe");
}catch(IOException _IoExc) { }
show();		
}
	
public void actionPerformed(ActionEvent evt)
{
if (evt.getSource().equals(CmdTray))
{
/**********Hiding Window****************/
try {
  process = Runtime.getRuntime().exec("data/SystemTrayHide.exe");				
}catch(IOException _IoExc) { }
}	
}	
}

结论

我希望这能帮助到大家。如果您有任何疑问,请联系我
我的邮箱是
vavjeeva@yahoo.com
祝您愉快。



Jeeva S



© . All rights reserved.