设为首页 加入收藏

TOP

Java运用JNI调用dll(含源码)实现屏蔽系统热键和任务栏(三)
2014-11-23 22:10:12 来源: 作者: 【 】 浏览:46
Tags:Java 运用 JNI 调用 dll 源码 实现 屏蔽 系统 热键 任务
LLKHF_ALTDOWN) != 0))
{
OutputDebugString("ALT+TAB is disabled");
return 1;
}
//屏蔽ALT+ESC
else if ((p->vkCode == VK_ESCAPE) && ((p->flags & LLKHF_ALTDOWN) != 0))
{
OutputDebugString("ALT+ESC is disabled");
return 1;
}
//屏蔽CTRL+ESC
else if ((p->vkCode == VK_ESCAPE) && ((GetKeyState(VK_CONTROL) & 0x8000) != 0))
{
OutputDebugString("CTRL+ESC is disabled");
return 1;
}
//屏蔽CTRL+SHIFT+ESC,(SAS window中也已屏蔽)
else if ((p->vkCode == VK_ESCAPE) &&
((GetKeyState(VK_CONTROL) & 0x8000) != 0) &&
((GetKeyState(VK_SHIFT) & 0x8000) != 0))
{
OutputDebugString("CTRL+SHIFT+ESC is disabled");
return 1;
}
//屏蔽ALT+F4
else if ((p->vkCode == VK_F4) && ((p->flags & LLKHF_ALTDOWN) != 0))
{
OutputDebugString("ALT+F4 is disabled");
return 1;
}
//屏蔽左右windows键
else if (p->vkCode == VK_LWIN || p->vkCode == VK_RWIN)
{
OutputDebugString("windows key is disabled");
return 1;
}
//此处无法屏蔽CTRL+ALT+DEL,已在SAS window中屏蔽
else if ((p->vkCode == VK_DELETE) &&
((GetKeyState(VK_CONTROL) & 0x8000) != 0) &&
((GetKeyState(VK_MENU) & 0x8000) != 0 ))
return 1;
break;
}
}
return CallNextHookEx(hHook,nCode,wParam,lParam);
}


JNIEXPORT void JNICALL Java_shieldHK_ShieldHotKey_Attach
(JNIEnv *env, jclass obj){
Attach();
}


JNIEXPORT void JNICALL Java_shieldHK_ShieldHotKey_Detach
(JNIEnv *env, jclass obj){
Detach();
}
5-3、编译生成 shieldHK.dll 文件
最后 shieldHK.dll 就可以在 ShieldHotKey 类里调用了。比如Attach()跟Detach();


至于去掉任务栏与上面的步骤是一样的
在这里附上C++代码:
/* Replace "dll.h" with the name of your header */
#include "registerHK.h"
#include
#include
#include


using namespace std;


void HideTaskBar(BOOL bHide);


void HideTaskBar(BOOL bHide)
{
int nCmdShow;
HWND hWnd;
LPARAM lParam;


hWnd = FindWindow("Shell_TrayWnd",NULL);
if(bHide == TRUE)
{
nCmdShow = SW_HIDE;
lParam = ABS_AUTOHIDE | ABS_ALWAYSONTOP;
}
else
{
nCmdShow = SW_SHOW;
lParam = ABS_ALWAYSONTOP;
}


ShowWindow(hWnd,nCmdShow);//隐藏任务栏


#ifndef ABM_SETSTATE
#define ABM_SETSTATE 0x0000000a
#endif



APPBARDATA apBar;
memset(&apBar, 0, sizeof(apBar));
apBar.cbSize = sizeof(apBar);
apBar.hWnd = hWnd;
if(apBar.hWnd != NULL)
{
apBar.lParam = lParam;
SHAppBarMessage(ABM_SETSTATE, &apBar); //设置任务栏自动隐藏
}
}


JNIEXPORT void JNICALL Java_shieldHK_RegisterHotKey_HideTaskBar
(JNIEnv *env, jclass obj, jboolean b){
HideTaskBar(b);
}


OK,全部搞定。


首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Java如何调用C++编写的dll(动态连.. 下一篇Linux高性能服务器编程——I/O复用

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: