本文共 2074 字,大约阅读时间需要 6 分钟。
import com.sun.jna.Native;import com.sun.jna.win32.StdCallLibrary;public class Test{ public interface User32 extends StdCallLibrary { User32 INSTANCE = (User32)Native.loadLibrary("User32",User32.class);
//加载系统User32 DLL文件,也可以是C++写的DLL文件 int SendMessageA(int hwnd,int msg,int wparam,int lparam); int FindWindowA(String arg0,String arg1); void BlockInput(boolean isBlock); int MessageBoxA(int hWnd,String lpText,int lpCaption,int uType); }
public static void main(String[] args) throws Exception { int hwnd = User32.INSTANCE.FindWindowA(null, null); System.setProperty("jna.encoding","GBK");//设置编码,防止乱码 User32.INSTANCE.MessageBoxA(hwnd, "看我闪瞎你的狗眼", 0, 0);//调用消息对话框 int i = 0; while(true){ User32.INSTANCE.BlockInput(true);//阻塞鼠标键盘的输入 User32.INSTANCE.SendMessageA(hwnd, 0x0112, 0xF170, 2);//关闭显示器 Thread.sleep(2000);//间隔2秒 User32.INSTANCE.SendMessageA(hwnd, 0x0112, 0xF170, -1);//打开显示器 Thread.sleep(2000);//间隔2秒 i++; if(i>10){ break; } } User32.INSTANCE.BlockInput(false);//释放鼠标键盘 }}如果把键盘鼠标阻塞加入到死循环,那么,呵呵。。。。强制重启吧。。。。 有了以上知识,即可以任意调用系统API了,这里只是一个简单的介绍与一个很简单的列子,如需深入研究的话,你会发现里面还涉及到一些数据的转换,结构体的映射等等,有兴趣的就研究研究吧。。。。