dll注册热键,求救...............

chenshijie001 2008-03-18 03:46:24
我是做java的,但现在想要通过动态库注册热键,找了好久没找到相关的代码,特到些处求救,希望能帮帮我这个菜鸟!。。。。。。。。。。。。。
以下是我写的注册的代码,但是热键响应的方法我不知道怎么注册,WndProc方法,是用来响应按键消息的方法,不知道怎么样才能让它被回调。

#include <stdlib.h>

#include "stdafx.h"
#include "org_csj_hotkey_Hotkey.h"
LRESULT CALLBACK WndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved){
return TRUE;
}
JNIEXPORT void JNICALL Java_org_csj_hotkey_Hotkey_registerHotKey(JNIEnv *, jobject){
printf("进入\n");
RegisterHotKey(NULL,GlobalAddAtom("Ctrl+Alt+w"),MOD_CONTROL|MOD_ALT,'w');
}
JNIEXPORT void JNICALL Java_org_csj_hotkey_Hotkey_unregisterHotKey(JNIEnv *, jobject){
printf("退出\n");
UnregisterHotKey(NULL,GlobalAddAtom("Ctrl+Alt+w"));
}
LRESULT CALLBACK WndProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message
parameter
LPARAM lParam) // second message parameter
{
printf("调用\n");
switch (uMsg){
case WM_CREATE:
// Initialize the window.
printf("dll输出:WM_CREATE\n");
return 0;

case WM_PAINT:
printf("dll输出:WM_PAINT\n");
// Paint the window's client area.
return 0;
case WM_SIZE:
// Set the size and position of the window.
printf("dll输出:WM_SIZE\n");
return 0;
case WM_HOTKEY: //处理WM_HOTKEY消息
printf("dll输出:d按了?\n");
return 0;
case WM_DESTROY:
printf("dll输出:WM_DESTROY\n");
// Clean up window-specific data objects.
return 0;
default:
// Process other messages.
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return 0;
}
...全文
182 7 打赏 收藏 转发到动态 举报
写回复
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
chensjmail 2008-03-18
  • 打赏
  • 举报
回复
help me...help me...help me...help me...help me...help me...help me...help me...help me...
chensjmail 2008-03-18
  • 打赏
  • 举报
回复
像你这样的代码我在网上也有找到,但不知道怎么用,
你能不能帮帮忙改一下我在上面发和那个动态库源文件的代码实现呀,谢谢
小猪瑞比 2008-03-18
  • 打赏
  • 举报
回复

//在OnInitDialog中注册热键
//热键Ctrl + Shift + A
RegisterHotKey(m_hWnd, 1001, MOD_CONTROL | MOD_SHIFT, 'A');

//热键Alt + B
RegisterHotKey(m_hWnd, 1002, MOD_ALT, 'B');



//在这里注销热键
void CHotKeyDlg::OnDestroy()
{
CDialog::OnDestroy();

// TODO: 在此处添加消息处理程序代码

//注销热键
UnregisterHotKey(m_hWnd, 1001);
UnregisterHotKey(m_hWnd, 1002);
}



1.//添加WM_HOTKEY响应原型
afx_msg LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);
2.//添加映射
ON_MESSAGE(WM_HOTKEY, OnHotKey)
3.//编写该消息响应函数
LRESULT CHotKeyDlg::OnHotKey(WPARAM wParam,LPARAM lParam)
{
if (wParam == 1001)
{
MessageBox("A Clicked!");
}
else if (wParam == 1002)
{
MessageBox("B Clicked!");
}

return 0;
}
chensjmail 2008-03-18
  • 打赏
  • 举报
回复
我是在dll中使用的热键,有OnInitDialog这个函数吗?
chensjmail 2008-03-18
  • 打赏
  • 举报
回复
因为我是做java的所对C++不懂,大蝦能不能写点代码呀,谢谢
小猪瑞比 2008-03-18
  • 打赏
  • 举报
回复
首先,在初始化函数OnInitDialog中添加以下设置程序热键的代码:
RegisterHotKey(m_hWnd,1001,MOD_CONTROL | MOD_SHIFT,'A'); //设置程序热键 (Ctrl + Shift + A)
相应的,我们添加对话框的WM_DESTROY消息的处理函数OnDestroy,并且在其中添加以下注销热键的代码:
UnregisterHotKey(m_hWnd,1001); //注销程序热键

其次,在对话框的声明文件中的添加WM_HOTKEY的消息处理函数,共三处:
1.响应函数原型
2.映射
3.响应函数实现

最后,消息实现函数OnHotKey
LRESULT CHotKeyDlg::OnHotKey(WPARAM wParam,LPARAM lParam)
{
if(wParam==1001)
{
//Code


return 0;
}
stoneyrh 2008-03-18
  • 打赏
  • 举报
回复
在你注册你的窗口类的时候,指定WndProc为你窗口类的窗口窗口函数
这样所有关于你窗口的消息到达时,就会调用你的窗口函数
相关推荐

63,596

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下