Обмен мгновенными сообщениями в Java через идентификатор пользователя Windows? - PullRequest
2 голосов
/ 09 августа 2011

Я уже создал простое приложение для обмена мгновенными сообщениями на Java, используя Sockets и Swing.Прямо сейчас он общается путем разрешения имени хоста (имени ПК) или IP, который передается в качестве параметра.Но есть ли способ заставить его отправить сообщение с идентификатором пользователя Windows (т.е. идентификатором пользователя, который вы используете при входе в Windows) в качестве параметра?Кажется, это легко сделать в C #, но как мне это сделать в Java?

Ответы [ 2 ]

1 голос
/ 09 августа 2011

Получить имя пользователя можно с помощью System.getProperty:

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

0 голосов
/ 09 августа 2011

Это, кажется, легко сделать в C #

Стороннее приложение (утилита Sent от Winsent - winsentmessenger.com/sent), по-видимому, может сделать это.

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

Рассматриваемое приложение является просто оболочкой для net send.

Вы можете сделать то же самое и вызвать процесс напрямую.

Решение, поднятое с: 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();
         }
    }
  }
}
...