dynamic link library dll注册和捕获热键

chensjmail 2008-03-21 09:43:09
我要过java jni 调用动态链接库来注册和释放热键,并在捕获热键后处理一些操作,
下边
前两个方法是java定调用dll库的方法,
WndProc方法是我在网上找的一些资料所看到的用来处理回热键回调消息的方法,
不知道对不对
网上没有找到完整的动态链接库处理热键的代码,我也不太会用VC++,所以希望大家能帮忙!谢谢

文件:HotKey.cpp

//注册方法
JNIEXPORT void JNICALL Java_org_csj_hotkey_Hotkey_registerHotKey(JNIEnv *, jobject){
//RegisterHotKey(NULL,keyId,MOD_CONTROL|MOD_ALT,'w');
}
//释放方法
JNIEXPORT void JNICALL Java_org_csj_hotkey_Hotkey_unregisterHotKey(JNIEnv *, jobject){ //UnregisterHotKey(g_wndMsg,keyId);
}
//热键捕获消息处理方法
LRESULT CALLBACK WndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam){
// 判断是否是本服务程序设置的系统热键
if (wParam == keyId){
//MessageBox(NULL,"热键","测试",MB_OK);
}
return 0;
}

...全文
87 9 打赏 收藏 举报
写回复
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
chensjmail 2008-03-30
  • 打赏
  • 举报
回复
谢谢,
其实你说的前两个部分我都还熟,第三个部份因为是其它语言我不在行,但三个部分我都完成了,
但创建窗口后才无发接收到按热键的消息,
所以到现在还是没解决.
chensjmail 2008-03-24
  • 打赏
  • 举报
回复
谢谢您一直的关注!
三个方法,



第一个方法注册热键.
第二个方法取消热键.
第三个方法当热键被按下时被执行.



第三个方法,
是当热键按下时被调用,我就会在这个方法内通过jni执行java对象的行为.
其它两个方法,
则是java通过jni来调用的.

其实功能就这么简单.
chensjmail 2008-03-24
  • 打赏
  • 举报
回复
谢谢您一直的关注!
三个方法,


第一个就是注册热键.
第二个就是取消热键.
第三个当热键被按下时执行.


第三个方法,是当热键被按下后我就会通过这个方法来回调我java对角的行为,其实功能就这么简单.
crushor 2008-03-24
  • 打赏
  • 举报
回复
是我不懂你的目的才对。

假设现在你就不需要这个所谓的什么动态库,你希望你的应用程序是怎么处理热键的?
或者说,你的目的就是做个dll给别人用,那么别人调你的dll和直接调API会有什么不同?就是你希望dll都提供点什么东西出来?
chensjmail 2008-03-24
  • 打赏
  • 举报
回复
jni是java以动态库连接的工具,这个您可以不用管它,只要动态链接库实现了就可以了
crushor 2008-03-24
  • 打赏
  • 举报
回复
你这问题要是发到Java专区,就不用等这么久了;
今天找了个懂Java的兄弟问了一下,才大概明白了。

其实你的这个要求可以分两部分。
第一部分,Java调windowsAPI,就是你说的什么JNI方式,
大致过程就是写个类,用Javah生成头文件,建立个VC的动态库工程,把头文件导进去,
实现头文件声明的方法,编译好dll就可以了。网上很多这种例子。

第二部分,注册热键,其实本身调几个API还是挺简单的,就是需要一个HWND类型的参数,
我想可以在dll里面创建一个隐藏的窗口,用这个隐藏的窗口来接收热键事件。
网上也可以搜到很多例子。
chensjmail 2008-03-23
  • 打赏
  • 举报
回复
大哥,因为我不懂,所以能不能写清楚点你说的这种方法怎么用呀,
crushor 2008-03-21
  • 打赏
  • 举报
回复
没弄明白你的意思,不过这样有意义吗?和直接调API有什么区别?
如果说dll处理热键消息的话,反正代码也是你写的,而且DLL还没办法接窗口消息,反而更麻烦。
#include "stdafx.h"

BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}

extern "C"
{
BOOL _declspec(dllexport) sethotkey(HWND hwnd,int id,UINT fsModifiers,UINT vk)
{
return RegisterHotKey(hwnd,id,fsModifiers,vk);
}
int _declspec(dllexport) unsethotkey(HWND hwnd,int id)
{
return UnregisterHotKey(hwnd,id);
}
}
crushor 2008-03-21
  • 打赏
  • 举报
回复
问题是,我不懂Java,Java调api时,要传入一个指针之类的东西都是怎么传的?
相关推荐
发帖
C++ 语言

6.3w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2008-03-21 09:43
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下