当按下一个键的时候,触发另一个键的功能。如按下回车,相当于按下Tab键
最好能写出主要的函数代码
最好能写出主要的函数代码
解决方案 »
- 联想薪资咨询
- 想找份兼职,没有头绪,高手支招.
- 从数据库中得到的长字符串如何再空间中换行
- 对于“<a id="mb" href="/cf/fr?in=o">查看</a>”,属性变量有id、href等等,那么“查看”的属性变量是什么?
- 请问有什么findfile方法可以找到这种方式表示的文件"C:\\a.txt;b.txt"
- 如何测试程序数据库设计的可行性
- 请问,现在的网络编程主要作那些事情?
- 急!我的文本框怎么不能识别换行符 '\n' ??
- 如何用VC从串口中读写数据,请给各位大虾给予帮助。
- 如何返回 SafeArray,在 VC 里问了,没人理我
- ALT 的值
- 哦,小问题,请各位高手帮助呀!
提供给你一个思路:hook 拦截 回车键的 消息,
然后用SendMessage()函数发一个tab 键的消息。。
只要在Hook函数中判断当前按键的虚拟键码,如果是VK_RETURN就发送三个消息
SendMessage(WM_KEYDOWN, VK_TAB);
SendMessage(WM_CHAR, VK_TAB);
SendMessage(WM_KEYUP, VK_TAB);
就行了
还想请教你,你给的函数
SendMessage(WM_KEYDOWN, VK_TAB);已经被封装过了
能不能用API函数SendMessage,就是带四个参数的
因为我没有在vc的环境下写的,只是用了它的编译器
HWND hwnd = GetSafeHwnd();
::SendMessage(hwnd, WM_KEYDOWN, VK_TAB, 0);
::SendMessage(hwnd, WM_CHAR, VK_TAB, 0);
::SendMessage(hwnd, WM_KEYUP, VK_TAB, 0);
GetSafeHwnd()好像也只能在vc中使用
用
hwnd = CreateWindow (...) ;的返回值,呵呵,老糊涂了
我使用FindWindow()得到一个窗口,但是不能生效
我有用了keybe_event()好像还是不能生效
老兄,我把dll文件放在这儿,有空帮我看看
#include <windows.h>
#include <stdio.h>
#include <assert.h>static HHOOK hkb=NULL;
HINSTANCE hins; BOOL APIENTRY DllMain( HANDLE hModule,DWORD ul_reason_for_call, LPVOID Reserved)
{
hins=(HINSTANCE)hModule;
return TRUE;
}
LRESULT KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if(((DWORD)lParam&0x40000000) && (HC_ACTION==nCode))
{
switch(wParam)
{
case VK_TAB:
MessageBox(NULL,"from tab","",0);
break; case '0':
HWND hwnd;
hwnd =FindWindow(NULL,"a.txt - 记事本");
assert(hwnd);
SendMessage(hwnd, WM_KEYDOWN, VK_TAB, 0);
SendMessage(hwnd, WM_CHAR, VK_TAB, 0);
SendMessage(hwnd, WM_KEYUP, VK_TAB, 0);
break;
}
}
LRESULT RetVal = CallNextHookEx( hkb, nCode, wParam, lParam );
return RetVal;
}
BOOL installhook()
{
hkb=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,hins,0);
if(!hkb)
MessageBox(NULL,"error","",NULL);
return TRUE;
}
BOOL UnHook()
{
BOOL unhooked = UnhookWindowsHookEx(hkb);
return unhooked;
}
HWND hwnd;
hwnd =FindWindow(NULL,"a.txt - 记事本");
assert(hwnd);
SendMessage(hwnd, WM_KEYDOWN, VK_TAB, 0);
SendMessage(hwnd, WM_CHAR, VK_TAB, 0);
SendMessage(hwnd, WM_KEYUP, VK_TAB, 0);
改成
HWND hwnd;
HWND hwnd = ::FindWindow(NULL, "Untitled - Notepad");
assert(hwnd);
::EnumChildWindows(hwnd, EnumChildProc,NULL);然后再加上一个全局函数
BOOL CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam)
{
::PostMessage(hwndChild, WM_KEYDOWN, VK_RETURN, 0);
return TRUE;
} 就可以了
msn:[email protected]