From cf9b3d9319356079ed657eb9044ff97d4fb81381 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Wed, 17 Nov 2010 22:45:44 -0800 Subject: [PATCH] Added binding for ShellExecuteEx --- .../main/java/hudson/util/jna/Kernel32.java | 7 ++ .../hudson/util/jna/SHELLEXECUTEINFO.java | 76 +++++++++++++++++++ .../main/java/hudson/util/jna/Shell32.java | 39 ++++++++++ 3 files changed, 122 insertions(+) create mode 100644 core/src/main/java/hudson/util/jna/SHELLEXECUTEINFO.java create mode 100644 core/src/main/java/hudson/util/jna/Shell32.java diff --git a/core/src/main/java/hudson/util/jna/Kernel32.java b/core/src/main/java/hudson/util/jna/Kernel32.java index 7583b0e7fc..77e83687b7 100644 --- a/core/src/main/java/hudson/util/jna/Kernel32.java +++ b/core/src/main/java/hudson/util/jna/Kernel32.java @@ -23,6 +23,8 @@ */ package hudson.util.jna; +import com.sun.jna.Pointer; +import com.sun.jna.ptr.IntByReference; import com.sun.jna.win32.StdCallLibrary; import com.sun.jna.Native; @@ -45,4 +47,9 @@ public interface Kernel32 extends StdCallLibrary { static final int MOVEFILE_FAIL_IF_NOT_TRACKABLE = 32; static final int MOVEFILE_REPLACE_EXISTING = 1; static final int MOVEFILE_WRITE_THROUGH = 8; + + int WaitForSingleObject(Pointer handle, int milliseconds); + boolean GetExitCodeProcess(Pointer handle, IntByReference r); + + static final int STILL_ACTIVE = 259; } diff --git a/core/src/main/java/hudson/util/jna/SHELLEXECUTEINFO.java b/core/src/main/java/hudson/util/jna/SHELLEXECUTEINFO.java new file mode 100644 index 0000000000..6e6c40f46f --- /dev/null +++ b/core/src/main/java/hudson/util/jna/SHELLEXECUTEINFO.java @@ -0,0 +1,76 @@ +/* + * The MIT License + * + * Copyright (c) 2010, CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package hudson.util.jna; + +import com.sun.jna.Pointer; +import com.sun.jna.Structure; + +/** + * + *
+typedef struct _SHELLEXECUTEINFO {
+  DWORD     cbSize;
+  ULONG     fMask;
+  HWND      hwnd;
+  LPCTSTR   lpVerb;
+  LPCTSTR   lpFile;
+  LPCTSTR   lpParameters;
+  LPCTSTR   lpDirectory;
+  int       nShow;
+  HINSTANCE hInstApp;
+  LPVOID    lpIDList;
+  LPCTSTR   lpClass;
+  HKEY      hkeyClass;
+  DWORD     dwHotKey;
+  union {
+    HANDLE hIcon;
+    HANDLE hMonitor;
+  } DUMMYUNIONNAME;
+  HANDLE    hProcess;
+} SHELLEXECUTEINFO, *LPSHELLEXECUTEINFO;
+ * 
+ * @author Kohsuke Kawaguchi + * @see MSDN: http://msdn.microsoft.com/en-us/library/bb759784(v=VS.85).aspx + */ +public class SHELLEXECUTEINFO extends Structure { + public int cbSize = size(); + public int fMask; + public Pointer hwnd; + public String lpVerb; + public String lpFile; + public String lpParameters; + public String lpDirectory; + public int nShow = 1; + public Pointer hInstApp; + public Pointer lpIDList; + public String lpClass; + public Pointer hkeyClass; + public int dwHotKey; + public Pointer hIcon; + public Pointer hProcess; + + public static final int SEE_MASK_NOCLOSEPROCESS = 0x40; + public static final int SW_HIDE = 0; + public static final int SW_SHOW = 0; +} diff --git a/core/src/main/java/hudson/util/jna/Shell32.java b/core/src/main/java/hudson/util/jna/Shell32.java new file mode 100644 index 0000000000..028e94b4bb --- /dev/null +++ b/core/src/main/java/hudson/util/jna/Shell32.java @@ -0,0 +1,39 @@ +/* + * The MIT License + * + * Copyright (c) 2010, CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package hudson.util.jna; + +import com.sun.jna.Native; +import com.sun.jna.win32.StdCallLibrary; + +/** + * @author Kohsuke Kawaguchi + */ +public interface Shell32 extends StdCallLibrary { + public static final Shell32 INSTANCE = (Shell32) Native.loadLibrary("shell32", Shell32.class); + + /** + * @return true if successful. Otherwise false. + */ + boolean ShellExecuteEx(SHELLEXECUTEINFO lpExecInfo); +} -- GitLab