VC指定窗口模拟按键或鼠标事件
来源:互联网 发布:windows pe镜像 编辑:程序博客网 时间:2024/04/30 09:31
方法有两种:
1.SendMessage or PostMessage
2.keybd_event,mouse_event
前者更强大,指定hwnd后可以后台发送,而后者只能够发送前台信息..也就是必须窗口最前
简单的举例:
方法2
SetCursorPos(x,y);
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
keybd_event(k,0,0,0);
keybd_event(k,0,KEYEVENTF_KEYUP,0);
方法1
以当前程序的某个输入框为例:
HWND tw2 = GetDlgItem(IDC_EDIT1)->m_hWnd;
::SendMessage(tw2,WM_CHAR,s[i],0);
是个按钮:
HWND tw3 = GetDlgItem(IDOK)->m_hWnd;
::SendMessage(tw3,WM_LBUTTONDOWN,0,0);
::SendMessage(tw3,WM_LBUTTONUP,0,0);
以记事本为例
wnd = ::FindWindow("notepad", NULL);
wnd = FindWindowEx(wnd,0,"Edit",NULL);
::SendMessage(tw2,WM_CHAR,s[i],0);
有人就说了,我不知道名字叫Edit啊,有下面的方法:
CWnd * pwnd = FindWindow("notepad", NULL);
CWnd * p2 = pwnd->GetTopWindow();
wnd = p2->m_hWnd;
::SendMessage(tw2,WM_CHAR,s[i],0);
又有人说了,如果连notepad也不知道呢...
我说,进程ID总知道了吧...遍历进程池得到想要的进程ID,然后找到指定ID的hwnd
struct EnumParam
{
HWND hMainWnd;
DWORD dwProcessID;
};
BOOL CALLBACK EnumWinProc(HWND hwnd, LPARAM lParam)
{
DWORD dwID;
EnumParam* pep = (EnumParam*)lParam;
GetWindowThreadProcessId(hwnd,&dwID);
if (dwID == pep->dwProcessID) {
pep->hMainWnd = hwnd;
return 0;
}
return TRUE;
}
EnumParam ep;
STARTUPINFO si;
PROCESS_INFORMATION pi;
ep.hMainWnd = NULL;
memset(&si, 0, sizeof(si));
si.cb = sizeof(STARTUPINFO);
if (CreateProcess(NULL,"notepad.exe c:.txt",
NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))
{
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
ep.dwProcessID = pi.dwProcessId;
while(!ep.hMainWnd) {
EnumWindows((WNDENUMPROC)EnumWinProc, (long)&ep);
//没有下面的一行,CPU的使用率会高居不下,同时其它的程序
//也会执行的很慢(包括程序启动的Notepad.exe)
if (ep.hMainWnd==NULL) Sleep(20);
}
//EnumWindows((WNDENUMPROC)EnumWinProc, (long)&ep);
}
//此时的 ep.hMainWnd 就是你要的NodePad.exe窗口的句柄
//接下来由hwnd得到CWND *
wnd = ep.hMainWnd;
if(wnd == NULL) AfxMessageBox("Fasle");
CWnd * tc = FromHandle(wnd);
//获取
wnd = tc->GetTopWindow()->m_hWnd;
::SendMessage(tw2,WM_CHAR,s[i],0);
//OK啦
遍历进程的代码下次再发了
- VC指定窗口模拟按键或鼠标事件
- VC模拟按键或鼠标事件
- VC模拟按键或鼠标事件
- VC++ 模拟"CLICK事件"关闭指定窗口
- Qt模拟鼠标按键事件
- android 模拟鼠标/按键事件
- VC API 模拟鼠标事件
- python模拟鼠标、捕获按键事件
- VC++ 鼠标事件、键盘事件模拟
- Android 事件处理(含模拟鼠标/按键事件)
- 符号常量 十六进制值 指定的鼠标或键盘按键
- 向指定窗口发送模拟键盘按键消息
- Android: 用Instrumentation类发送鼠标或按键事件
- 模拟鼠标,按键代码
- 模拟键盘鼠标按键
- 鼠标按键事件基础
- 监听鼠标按键事件
- VC 判读鼠标是否在指定窗口上
- 联想S820 MIUI刷机包 MIUI 4.4.30 流畅运行 在线主题破解
- Hibernate二级缓存相关和HQL
- IOS中几个常用的宏
- 电阻抗成像法是什么?
- 定时运行作业
- VC指定窗口模拟按键或鼠标事件
- 基围虾的家常做法
- 什么是电阻抗成像法?
- OCP 1Z0 053 223
- Android读取内存,T卡大小
- 导入项目后eclipse注释变成乱码解决
- structs2 的工作原理
- Best Time to Buy and Sell Stock III
- String、StringBuffer和StringBuilder的区别