我试图记下在Windows操作系统中工作的每个员工的工作站/系统屏幕locking和解锁。 我需要使用JAVA将这些logging存储在数据库中。 我已经search了所有,并得到了如何使用JAVA做到这一点。 在哪里我search我只得到VB的代码。
增强库…预先构build的变种?
套接字连接失败,telnet确定
连接VS 2008到我的远程IIS 7网站
Documents and Settings USER Local Settings Temp文件夹何时清除?
是否有可能获得当前活动应用程序的名称
使用JNI(Java Native Interface)从Windows系统DLL调用函数。
以下是使用检查工作站锁定状态的函数的示例代码: http : //brutaldev.com/post/2008/05/23/Checking-if-the-workstation-is-locked.aspx
这里是关于通过JNI从Java调用dll函数的文章: http : //edn.embarcadero.com/article/20679
您可以使用JNA在纯Java中执行此操作。 将jna.jar和jna -platform.jar添加到您的项目中。 在这个文件com.sun.jna.platform.win32.Win32WindowDemo中有一个锁和解锁监听器的完整例子,等等。 这是从Win32WindowDemo必要的代码:
public class WorkstationLocklistning implements WindowProc { /** * Instantiates a new win32 window test. */ public WorkstationLocklistning() { // define new window class final WString windowClass = new WString("MyWindowClass"); final HMODULE hInst = coreel32.INSTANCE.GetmoduleeHandle(""); WNDCLASSEX wClass = new WNDCLASSEX(); wClass.hInstance = hInst; wClass.lpfnWndProc = WorkstationLocklistning.this; wClass.lpszClassName = windowClass; // register window class User32.INSTANCE.RegisterClassEx(wClass); getLastError(); // create new window final HWND hWnd = User32.INSTANCE.CreateWindowEx(User32.WS_EX_TOPMOST,windowClass,"'TimeTracker hidden helper window to catch Windows events",null,// WM_DEVICECHANGE conTradicts parent=WinUser.HWND_MESSAGE null,hInst,null); getLastError(); System.out.println("window sucessfully created! window hwnd: " + hWnd.getPointer().toString()); Wtsapi32.INSTANCE.WTSRegisterSessionNotification(hWnd,Wtsapi32.NOTIFY_FOR_THIS_SESSION); MSG msg = new MSG(); while (User32.INSTANCE.GetMessage(msg,hWnd,0) != 0) { User32.INSTANCE.TranslateMessage(msg); User32.INSTANCE.dispatchMessage(msg); } /// This code is to clean at the end. You can attach it to your custom application shutdown listener Wtsapi32.INSTANCE.WTSUnRegisterSessionNotification(hWnd); User32.INSTANCE.UnregisterClass(windowClass,hInst); User32.INSTANCE.DestroyWindow(hWnd); System.out.println("program exit!"); } /* * (non-Javadoc) * * @see com.sun.jna.platform.win32.User32.WindowProc#callback(com.sun.jna.platform .win32.WinDef.HWND,int,com.sun.jna.platform.win32.WinDef.WParaM,com.sun.jna.platform.win32.WinDef.LParaM) */ public LRESULT callback(HWND hwnd,int uMsg,WParaM wParam,LParaM lParam) { switch (uMsg) { case WinUser.WM_DESTROY: { User32.INSTANCE.PostQuitMessage(0); return new LRESULT(0); } case WinUser.WM_SESSION_CHANGE: { this.onSessionChange(wParam,lParam); return new LRESULT(0); } default: return User32.INSTANCE.DefWindowProc(hwnd,uMsg,wParam,lParam); } } /** * Gets the last error. * * @return the last error */ public int getLastError() { int rc = coreel32.INSTANCE.GetLastError(); if (rc != 0) System.out.println("error: " + rc); return rc; } /** * On session change. * * @param wParam * the w param * @param lParam * the l param */ protected void onSessionChange(WParaM wParam,LParaM lParam) { switch (wParam.intValue()) { case Wtsapi32.WTS_SESSION_LOCK: { this.onMachineLocked(lParam.intValue()); break; } case Wtsapi32.WTS_SESSION_UNLOCK: { this.onMachineUnlocked(lParam.intValue()); break; } } } /** * On machine locked. * * @param sessionId * the session id */ protected void onMachineLocked(int sessionId) { System.out.println("Machine locked right Now!"); } /** * On machine unlocked. * * @param sessionId * the session id */ protected void onMachineUnlocked(int sessionId) { System.out.println("Machine unlocked right Now!"); } }
我们已经在Google Group Workstation锁定/解锁侦听器中解决了这个问题。 你可以在那里找到我自己的实现,但是这里的代码好多了! 请享用 :)
还有一种方法,没有任何Windows系统库,等等。
主要思想 – 锁定PC的屏幕截图将是全黑的,所以你可以拿一个,只是检查一些关键点是黑色的
-16777216 – 幻数,表示FFFFFFFFFF000000xH,最后00 00 00表示RGB颜色代码(实际上是黑色)
BufferedImage image = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize())); boolean isBlack; isBlack = (image.getRGB(1,1)==-16777216) &(image.getRGB(1,image.getHeight()-1)==-16777216) &(image.getRGB(image.getWidth()-1,1)==-16777216) &(image.getRGB(image.getWidth()-1,image.getHeight()-1)==-16777216) &(image.getRGB(image.getWidth()/2,image.getHeight()/2)==-16777216); return isBlack;
事实上,只有一个不正确的锁识别的情况下 – 当你有完全黑色的壁纸,隐藏的任务栏和隐藏的图标。
看看解锁管理员
该程序的目的是允许管理员分配谁可以解锁计算机,但它也有记录功能。 它还允许您在计算机锁定或解锁时运行脚本。 这可能对你有帮助。
使用jdiC库,
检查系统是否锁定
SystemInfo.isSessionLocked()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。