|
23 | 23 | import static com.esotericsoftware.clippy.Win.User32.*; |
24 | 24 | import static com.esotericsoftware.minlog.Log.*; |
25 | 25 |
|
26 | | -import java.awt.GraphicsEnvironment; |
27 | | -import java.awt.Point; |
28 | | -import java.awt.Robot; |
| 26 | +import com.esotericsoftware.clippy.Config.ColorTime; |
| 27 | +import com.esotericsoftware.clippy.Config.ColorTimesReference; |
| 28 | +import com.esotericsoftware.clippy.Win.POINT; |
| 29 | +import com.esotericsoftware.clippy.Win.WTS_PROCESS_INFO; |
| 30 | +import com.esotericsoftware.clippy.Win.Wtsapi32; |
| 31 | +import com.esotericsoftware.jsonbeans.Json; |
| 32 | +import com.esotericsoftware.jsonbeans.JsonException; |
| 33 | +import com.esotericsoftware.jsonbeans.JsonSerializer; |
| 34 | +import com.esotericsoftware.jsonbeans.JsonValue; |
| 35 | +import com.esotericsoftware.jsonbeans.JsonValue.PrettyPrintSettings; |
| 36 | +import com.esotericsoftware.jsonbeans.OutputType; |
| 37 | + |
29 | 38 | import java.io.Closeable; |
30 | 39 | import java.io.File; |
31 | 40 | import java.io.FileInputStream; |
|
48 | 57 | import java.util.concurrent.Executors; |
49 | 58 | import java.util.concurrent.ThreadFactory; |
50 | 59 |
|
51 | | -import com.esotericsoftware.clippy.Config.ColorTime; |
52 | | -import com.esotericsoftware.clippy.Config.ColorTimesReference; |
53 | | -import com.esotericsoftware.clippy.Win.POINT; |
54 | | -import com.esotericsoftware.jsonbeans.Json; |
55 | | -import com.esotericsoftware.jsonbeans.JsonException; |
56 | | -import com.esotericsoftware.jsonbeans.JsonSerializer; |
57 | | -import com.esotericsoftware.jsonbeans.JsonValue; |
58 | | -import com.esotericsoftware.jsonbeans.JsonValue.PrettyPrintSettings; |
59 | | -import com.esotericsoftware.jsonbeans.OutputType; |
| 60 | +import com.sun.jna.Pointer; |
| 61 | +import com.sun.jna.ptr.IntByReference; |
| 62 | +import com.sun.jna.ptr.PointerByReference; |
| 63 | + |
| 64 | +import java.awt.GraphicsEnvironment; |
| 65 | +import java.awt.Point; |
| 66 | +import java.awt.Robot; |
60 | 67 |
|
61 | 68 | /** @author Nathan Sweet */ |
62 | 69 | public class Util { |
@@ -331,4 +338,27 @@ static public void writeJson (Object object, File file) throws IOException { |
331 | 338 | writer.write(json.prettyPrint(object, pretty)); |
332 | 339 | writer.close(); |
333 | 340 | } |
| 341 | + |
| 342 | + /** @param names May be null. |
| 343 | + * @return May be null. */ |
| 344 | + static public String getRunningProcess (String... names) { |
| 345 | + if (names == null) return null; |
| 346 | + |
| 347 | + PointerByReference infosOut = new PointerByReference(); |
| 348 | + IntByReference countOut = new IntByReference(); |
| 349 | + if (!Wtsapi32.WTSEnumerateProcesses(Wtsapi32.WTS_CURRENT_SERVER_HANDLE, null, 1, infosOut, countOut)) return null; |
| 350 | + |
| 351 | + Pointer infos = infosOut.getValue(); |
| 352 | + try { |
| 353 | + int size = WTS_PROCESS_INFO.size, offset = 0; |
| 354 | + for (int i = 0, n = countOut.getValue(); i < n; i++, offset += size) { |
| 355 | + String name = new WTS_PROCESS_INFO(infos.share(offset)).readField("pProcessName").toString(); |
| 356 | + for (int ii = 0, nn = names.length; ii < nn; ii++) |
| 357 | + if (name.equalsIgnoreCase(names[ii])) return name; |
| 358 | + } |
| 359 | + return null; |
| 360 | + } finally { |
| 361 | + Wtsapi32.WTSFreeMemory(infos); |
| 362 | + } |
| 363 | + } |
334 | 364 | } |
0 commit comments