通过Windows用户ID在Java中进行即时消息传递



我已经使用Sockets和Swing在Java中创建了简单的即时消息传递应用程序。现在它通过解析主机名(PC名)或作为参数传递的IP进行通信。但是有一种方法可以使它发送一个消息与Windows用户ID(即用户ID你使用当你登录到Windows)作为参数?这似乎很容易在c#中完成,但我如何在Java中做到这一点?

获取用户名可以使用System.getProperty:

String name = System.getProperty("user.name");

这在c#中似乎很容易做到

第三方应用程序(Winsent的Sent实用程序- winsentmessenger.com/sent)显然可以做到这一点。

http://www.winsentmessenger.com/netsend/

所讨论的应用程序只是对net send的包装。

您也可以这样做,并直接调用该流程。

摘自:http://members.iinet.net.au/alw1746/awhome/免费软件/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();
         }
    }
  }
}

相关内容

  • 没有找到相关文章

最新更新