如何使用C#捕获相机按键事件. Windows Mobile中的.NET [英] How to catch camera keypress event using C#. NET in Windows Mobile

查看:80
本文介绍了如何使用C#捕获相机按键事件. Windows Mobile中的.NET的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在执行快照后,我想执行我的代码.如何捕获相机按键事件?

请帮助我.

I want to execte my code after a snap is taken. How can I trap the camera keypress event?

Please help me.

推荐答案

免责声明:
1)我知道这适用于WinMo6(在我的手机上也可以).我不确定它是否可以在WinMo5上使用.
2)我的答案基于c/c ++.您的问题被标记为c#.但是我假设您只需要一个想法,而不是实际代码.

好的,开始.
您首先需要安装键盘挂钩.
执行此操作的方法是使用coredll.dll中提供的"SetWindowsHookExW"过程.

下面,我从我的代码中粘贴了一些代码片段.应该很容易弄清楚.

< pre>//定义钩子使用的功能类型
typedef LRESULT(CALLBACK * PFNHOOKPROC)(int code,WPARAM wParam,LPARAM lParam);
typedef HHOOK(WINAPI * PFNSETWINDOWSHOOKEXW)(int idHook,PFNHOOKPROC lpfn,HINSTANCE hMod,DWORD dwThreadId);
typedef LRESULT(WINAPI * PFNCALLNEXTHOOKEX)(HHOOK hhk,int nCode,WPARAM wParam,LPARAM lParam);
typedef LRESULT(WINAPI * PFNUNHOOKWINDOWSHOOKEX)(HHOOK hhk);

//对于低级键盘钩子,键盘过程将传递一个指向KBDLLHOOKSTRUCT实例的指针
typedef struct
{
DWORD vkCode;
DWORD scanCode;
DWORD标志;
DWORD时间;
ULONG_PTR dwExtraInfo;
} KBDLLHOOKSTRUCT,* PKBDLLHOOKSTRUCT;


//Win32 Hook APIs
静态PFNSETWINDOWSHOOKEXW fpSetWindowsHookEx = NULL;
静态PFNUNHOOKWINDOWSHOOKEX fpUnhookWindowsHookEx = NULL;
静态PFNCALLNEXTHOOKEX fpCallNextHookEx = NULL;</pre>


< pre>//BOOL InstallKBDHook(HINSTANCE hInstance)
{
hmCoreDll = LoadLibrary(_T("coredll.dll"));
if(hmCoreDll == NULL)
{
返回false;
}
其他
{
fpSetWindowsHookEx =(PFNSETWINDOWSHOOKEXW)GetProcAddress(hmCoreDll,_T("SetWindowsHookExW"));
if(fpSetWindowsHookEx == NULL)
{
UnLoadCoreDll();
返回false;
}
其他
{
hhkInstalledHook = fpSetWindowsHookEx(WH_KEYBOARD_LL,KBDHookCallBackFunction,hInstance,0);
if(hhkInstalledHook == NULL)
{
UnLoadCoreDll();
返回false;
}
}

fpCallNextHookEx =(PFNCALLNEXTHOOKEX)GetProcAddress(hmCoreDll,_T("CallNextHookEx"));
if(fpCallNextHookEx == NULL)
{
UnLoadCoreDll();
返回false;
}

fpUnhookWindowsHookEx =(PFNUNHOOKWINDOWSHOOKEX)GetProcAddress(hmCoreDll,_T("UnhookWindowsHookEx"));
if(fpUnhookWindowsHookEx == NULL)
{
UnLoadCoreDll();
返回false;
}
}
返回true;
}</pre>


上面的"KBDHookCallBackFunction"是用于捕获关键事件的编写函数.

< pre> __ declspec(dllexport)LRESULT CALLBACK KBDHookCallBackFunction(int nCode,WPARAM wParam,LPARAM lParam)
{
静态易失性PKBDLLHOOKSTRUCT pkbhData =(PKBDLLHOOKSTRUCT)lParam;
return fpCallNextHookEx(hhkInstalledHook,nCode,wParam,lParam);
}</pre>

pkbhData中的参数之一将是您的键码.您将需要找到相机按钮的实际键代码.

祝您好运!
Disclaimer:
1) I know this works for WinMo6 (it does on my phone). I''m not sure if it will work on WinMo5.
2) My answer is based on c/c++. Your question is tagged c#. But i''m assuming that you only need an idea on how and not the actual code.

Ok, here goes.
You first need to install a keyboard hook.
The way to do this is to use the "SetWindowsHookExW" procedure available in coredll.dll.

Below i''ve pasted some code snippet from my code. It should be easy to figure out.

<pre>// Define the function types used by hooks
typedef LRESULT (CALLBACK *PFNHOOKPROC)(int code, WPARAM wParam, LPARAM lParam);
typedef HHOOK (WINAPI *PFNSETWINDOWSHOOKEXW)(int idHook, PFNHOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId);
typedef LRESULT (WINAPI *PFNCALLNEXTHOOKEX)(HHOOK hhk, int nCode, WPARAM wParam, LPARAM lParam);
typedef LRESULT (WINAPI *PFNUNHOOKWINDOWSHOOKEX)(HHOOK hhk);

// For the low level keyboard hook, the keyboard procedures is passed a pointer to KBDLLHOOKSTRUCT instance
typedef struct
{
DWORD vkCode;
DWORD scanCode;
DWORD flags;
DWORD time;
ULONG_PTR dwExtraInfo;
} KBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT;


// Win32 Hook APIs
static PFNSETWINDOWSHOOKEXW fpSetWindowsHookEx = NULL;
static PFNUNHOOKWINDOWSHOOKEX fpUnhookWindowsHookEx = NULL;
static PFNCALLNEXTHOOKEX fpCallNextHookEx = NULL;</pre>


<pre>//BOOL InstallKBDHook(HINSTANCE hInstance)
{
hmCoreDll = LoadLibrary(_T("coredll.dll"));
if(hmCoreDll == NULL)
{
return false;
}
else
{
fpSetWindowsHookEx = (PFNSETWINDOWSHOOKEXW)GetProcAddress(hmCoreDll, _T("SetWindowsHookExW"));
if(fpSetWindowsHookEx == NULL)
{
UnLoadCoreDll();
return false;
}
else
{
hhkInstalledHook = fpSetWindowsHookEx(WH_KEYBOARD_LL, KBDHookCallBackFunction, hInstance, 0);
if(hhkInstalledHook == NULL)
{
UnLoadCoreDll();
return false;
}
}

fpCallNextHookEx = (PFNCALLNEXTHOOKEX)GetProcAddress(hmCoreDll, _T("CallNextHookEx"));
if(fpCallNextHookEx == NULL)
{
UnLoadCoreDll();
return false;
}

fpUnhookWindowsHookEx = (PFNUNHOOKWINDOWSHOOKEX)GetProcAddress(hmCoreDll, _T("UnhookWindowsHookEx"));
if(fpUnhookWindowsHookEx == NULL)
{
UnLoadCoreDll();
return false;
}
}
return true;
}</pre>


The "KBDHookCallBackFunction" above is the function you would write to capture the key events.

<pre>__declspec(dllexport) LRESULT CALLBACK KBDHookCallBackFunction( int nCode, WPARAM wParam, LPARAM lParam )
{
static volatile PKBDLLHOOKSTRUCT pkbhData = (PKBDLLHOOKSTRUCT)lParam;
return fpCallNextHookEx(hhkInstalledHook, nCode, wParam, lParam);
}</pre>

One of the parameters in pkbhData will be you keycode. You will need to find the actual key code for the camera button.

Good Luck!


Plz如果您可以发送给我,请发送C#.net代码给我



我不知道KBHook plz告诉我,


问候

Chetan
Plz Send me in C#.net Code if ur able to send me



i dont no about KBHook plz tell me that also


Regards

Chetan


对不起,我不能这样做.我的C#不好.
Sorry, i can''t do that. my c# isn''t that good.


这篇关于如何使用C#捕获相机按键事件. Windows Mobile中的.NET的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆