2009-06-05 9 views

cevap

3

Uygulamanızın Stdin, örneğin bir mesaj göndermek için Process.getOutputStream kullanabilirsiniz: Tabii bu Windows uygulamasında stdin dinlemek contrive gerektiği anlamına gelir

PrintStream ps = new PrintStream(currentProcess.getOutputStream()); 
ps.println("please_shutdown"); 
ps.close(); 

.

+0

teşekkür, tüm çözümlerin, bu iyi görünüyor! –

3

User32.dll ithal ve

+0

+1 JNI belki? Windows – ATorras

1

CloseWindow en az bir kirli çözüm MyWindowsApp yere dosyası gibi onun tanımlayıcı kayıt yapma olmalı ve (WM_CLOSE gönderir başka pencereler app yaratacak tanımlayan bir arayüz tanımlarken, JNA ile deneyebilirsiniz başka bir uygulamaya MyWindowsAppCloser olarak adlandıralım. Bu el ile

, yerel kod başvurmadan aşağıdaki kullanarak Java'nın 1,6

 

currentProcess = Runtime.getRuntime().exec("MyWindowsApp.exe"); 
... 

// get idMyWindowsApp where MyWindowsApp stored its identifier 
killerProcess = new ProcessBuilder("MyWindowsAppCloser.exe", idMyWindowsApp).start(); 
killerProcess.waitFor(); 

int status = currentProcess.waitFor(); 

2

Değil kod olacaktır. Process.destroy(), zorla sonlandırmaya neden olur. Windows'da bu, TerminateProcess() numaralı telefonu aramakla eşdeğerdir. Unix'te, SIGQUIT'a eşdeğerdir ve uygulamanın çekirdek dökümüne neden olur.

+1

SIGKILL'de 'kill -SIGTERM' gibi bir yardımcı program var mı? SIGQUIT değil (varsayılan olarak döküm çekirdeği yok). –

+0

Düzeltilmeye devam ediyorum. Sanırım Java'nın Unix sürümleri bir SIGQUIT göndermelidir (çekirdek döküntüleri kesinlikle oluşur). Bu cevabı güncelleyeceğim. Teşekkür ederim. –

3

aşağıdaki gibi bir WM_CLOSE mesaj göndermek (http://jna.java.net/ itibaren) JNA 'nın jna.jar ve process.jar kullanarak:

int WM_CLOSE = 0x10; 

HWND hwnd = User32.INSTANCE.FindWindow(null, windowTitle); 
User32.INSTANCE.PostMessage(hwnd, WM_CLOSE, new WinDef.WPARAM(), new WinDef.LPARAM()); 
İlgili konular