我已经使用 Sockets 和 Swing 在 Java 中创建了简单的即时消息应用程序。现在它通过解析作为参数传递的主机名(PC 名称)或 IP 进行通信。但是有没有办法让它以 Windows 用户 ID(即您登录 Windows 时使用的用户 ID)作为参数发送消息?这似乎在 C# 中很容易完成,但是如何在 Java 中完成呢?
问问题
733 次
2 回答
1
可以使用 System.getProperty 获取用户名:
于 2011-08-09T13:42:34.143 回答
0
这似乎很容易在 C# 中完成
第 3 方应用程序(Winsent 的 Sent 实用程序 - winsentmessenger.com/sent)显然可以做到这一点。
http://www.winsentmessenger.com/netsend/
有问题的应用程序只是网络发送的包装器。
您也可以这样做,并直接调用该过程。
一个解决方案来自: http: //members.iinet.net.au/~alw1746/awhome/freeware/WinPopup_java.txt
/*
WinPopup: send message to PC(s) on a Windows network from a Java program (like winpopup or net send).
Usage:
java WinPopup "user1,user2,..." "message"
eg. java WinPopup "peter" "where are you?" or java WinPopup 192.168.14.20 "Hello"
Build:
javac WinPopup.java
Alex Wong, Feb 2001
*/
import java.util.*;
import java.text.*;
import java.io.*;
public class WinPopup {
public static void main(String args[]) throws Exception {
String status;
if (args.length < 2) {
System.out.println("Usage: java WinPopup \"user1,user2,...\" \"msg\"");
System.exit(1);
}
if (args[0].length() < 1) {
System.out.println("User not found");
System.exit(1);
}
if (args[1].length() < 1) {
System.out.println("Message not found");
System.exit(1);
}
WinPopup popup=new WinPopup();
status=popup.alert(args[0],args[1]);
if (!status.equals("OK"))
System.out.println(status);
}
public String alert(String users,String msg) {
//loop thru list of users and net send the msg.
String buf,userList,user;
StringBuffer popup;
int ulen;
try {
if (users.length() < 1)
throw new Exception("User list not found.");
if (msg.length() < 1)
throw new Exception("Message not found.");
popup=new StringBuffer();
StringTokenizer st=new StringTokenizer(users,",");
while (st.hasMoreTokens()) {
buf=st.nextToken();
popup.append(buf).append(",");
}
if (popup.length() > 0) {
popup=popup.deleteCharAt(popup.length()-1);
userList=popup.toString();
ulen=userList.length();
for (int start=0,fin=0; fin <= ulen; fin++) {
if ((fin==ulen && fin > start) || userList.charAt(fin)==',') {
user=userList.substring(start,fin);
dosCmd("net send "+user+" \""+msg+"\"");
fin++;
start=fin;
}
}
}
return "OK";
}
catch (Exception e) {
return e.toString();
}
}
public void dosCmd(String cmd) {
//spawns a DOS process to run the net send command.
java.lang.Runtime rt;
Process proc;
try {
rt=java.lang.Runtime.getRuntime();
proc=rt.exec("c:\\winnt\\system32\\cmd.exe /C "+cmd);
StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream(), "ERROR");
StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream(), "OUTPUT");
errorGobbler.start();
outputGobbler.start();
int exitVal=proc.waitFor();
}
catch (Exception e1) {
System.out.println("dosCmd exception.");
System.out.println(e1.toString());
}
}
class StreamGobbler extends Thread {
//eat all stderr and stdout output.
InputStream is;
String type;
StreamGobbler(InputStream is, String type) {
this.is = is;
this.type = type;
}
public void run() {
try {
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line=null;
while ( (line = br.readLine()) != null)
;
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
}
于 2011-08-09T14:40:49.447 回答