< prev index next >

src/java.desktop/windows/native/libawt/windows/awt_Desktop.cpp

Print this page

        

@@ -26,17 +26,46 @@
 #include "jni_util.h"
 #include "awt.h"
 #include <jni.h>
 #include <shellapi.h>
 #include <float.h>
+#include "awt_Toolkit.h"
+
+#define NOTIFY_FOR_ALL_SESSIONS 1
+#define NOTIFY_FOR_THIS_SESSION 0
+
+typedef BOOL (WINAPI *WTSRegisterSessionNotification)(HWND,DWORD);
+static WTSRegisterSessionNotification fn_WTSRegisterSessionNotification;
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
 /*
  * Class:     sun_awt_windows_WDesktopPeer
+ * Method:    init
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_sun_awt_windows_WDesktopPeer_init
+  (JNIEnv *, jclass) {
+    static HMODULE libWtsapi32 = NULL;
+    if (libWtsapi32 == NULL) {
+        libWtsapi32 = JDK_LoadSystemLibrary("Wtsapi32.dll");
+        if (libWtsapi32) {
+            fn_WTSRegisterSessionNotification = (WTSRegisterSessionNotification)
+                    GetProcAddress(libWtsapi32, "WTSRegisterSessionNotification");
+            if (fn_WTSRegisterSessionNotification) {
+                HWND hwnd = AwtToolkit::GetInstance().GetHWnd();
+                //used for UserSessionListener
+                fn_WTSRegisterSessionNotification(hwnd, NOTIFY_FOR_THIS_SESSION);
+            }
+        }
+    }
+}
+    
+/*
+ * Class:     sun_awt_windows_WDesktopPeer
  * Method:    ShellExecute
  * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
  */
 JNIEXPORT jstring JNICALL Java_sun_awt_windows_WDesktopPeer_ShellExecute
   (JNIEnv *env, jclass cls, jstring fileOrUri_j, jstring verb_j)
< prev index next >