简体   繁体   English

通过Windows用户ID使用Java进行即时消息传递?

[英]Instant messaging in Java via Windows user ID?

I have already created simple instant messaging application in Java using Sockets and Swing. 我已经使用Sockets和Swing在Java中创建了简单的即时消息传递应用程序。 Right now it's communicating by resolving the hostname (PC name) or IP that's passes as a parameter. 现在,它通过解析作为参数传递的主机名(PC名称)或IP进行通信。 But is there a way to make it send a message with the Windows user ID (ie the user ID you use when you logon to Windows) as the parameter? 但是,是否有一种方法可以使其以Windows用户ID(即登录Windows时使用的用户ID)作为参数发送消息? This seems be easily done in C#, but how do I do it in Java? 这似乎很容易在C#中完成,但是如何在Java中完成呢?

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

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

This seems be easily done in C# 这似乎很容易在C#中完成

A 3rd party app (Winsent's Sent utility - winsentmessenger.com/sent) apparently can do this. 第三方应用程序(Winsent的Sent实用程序-winsentmessenger.com/sent)显然可以做到这一点。

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

The application in question is simply a wrapper around net send. 有问题的应用程序只是网络发送的包装。

You could do the same, and invoke the process directly. 您可以执行相同的操作,然后直接调用该过程。

A solution lifted from: http://members.iinet.net.au/~alw1746/awhome/freeware/WinPopup_java.txt 解决方案源自: 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();
         }
    }
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM