2014-09-15 3 views
0

Я хочу сделать то, что задано здесь: How to open a file without saving it to disk, но с текстом.Вставить текст в внешний текстовый редактор

Я понимаю, что невозможно открыть файл, не сохраняя его где-нибудь на диске, возможно, как временный файл.

Я хотел бы спросить, возможен ли другой подход.

Другой подход: 1. создать строку, 2. исправить это в буфер обмена, 3. открыть текстовый редактор, 4. вставить строку в редактор.

Шаги 1,2,3 в порядке. Можно сделать шаг 4?

Мысли: В окнах можно было бы запустить файл bat из приложения java, который сделает пасту в блокноте. Но я предпочел бы что-то делать только с java и независимой от платформы.

+0

Я не понимаю вашу точку зрения. Я спросил, возможен ли шаг 4. Не 1,2,3. Что вы имеете в виду, если вы говорите? – geo

+0

Это возможно (будет работать только на WIN32), если вы вызываете вызовы API Win32 с Java. Что-то, что может помочь в этом, - это JNA. См. Это [ссылка] (http://en.wikipedia.org/wiki/Java_Native_Access). Однако, как только у вас есть JNA, нет необходимости делать пасту, но вы можете это сделать. Это нетривиально, потому что вам нужно понять, как отправлять сообщения другим приложениям для имитации вставки. –

+0

Вы рассмотрели [этот ответ] (http://stackoverflow.com/a/12964272/1392132) на вопрос, с которым вы связались? Если да, почему вы это исключили? – 5gon12eder

ответ

0

Шаг 4 может быть выполнен. Один из способов будет использовать робота и имитировать команду CTRL + V, как показано ниже:

 Robot robot = new Robot(); 

     // For platform independence: 
     int ctrlOrCmdKey = -1; 
     if(System.getProperty("os.name").toLowerCase().contains("mac")) { 
      ctrlOrCmdKey = KeyEvent.VK_META; 
     } else { 
      ctrlOrCmdKey = KeyEvent.CTRL_MASK; 
     } 

     robot.keyPress(ctrlOrCmdKey); 
     Thread.sleep(10); 
     robot.keyPress(KeyEvent.VK_V); 
     Thread.sleep(10); 
     robot.keyRelease(KeyEvent.VK_V); 
     Thread.sleep(10); 
     robot.keyRelease(KeyEvent.CTRL_MASK); 

Если вы пытаетесь отправить данные в другое приложение, которое вы создаете, вы можете также использовать PipedInputStream/PipedOutputStream или используйте IP-протокол с помощью локальных веб-сокетов (что не так чисто, но возможно).

Смежные вопросы