VC模拟按键或鼠标事件
2009-04-29 09:20
471 查看
开始自己做外挂的第一部...模拟键盘鼠标事件:
两种方法:
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啦
遍历进程的代码下次再发了
两种方法:
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指定窗口模拟按键或鼠标事件
- Android 事件处理(含模拟鼠标/按键事件)
- VC++ 鼠标事件、键盘事件模拟
- android 模拟鼠标/按键事件
- gdk模拟鼠标按键事件/焦点事件
- Qt模拟鼠标按键事件
- vc2012模拟鼠标键盘操作事件
- VC++MFC开发中的鼠标事件的信号传递
- adb 命令模拟按键事件
- [转载]C# 封装winio.dll 驱动级按键鼠标操作模拟
- android 模拟键盘按键事件
- jquery模拟实现鼠标指针停止运动事件
- 用java代码模拟鼠标双击事件
- vbs鼠标方法——模拟鼠标按键
- 黑马程序员--图形界面中的鼠标,键盘两个事件,做一个磁盘的文件列表,菜单,子菜单,模拟记事本。网络编程,TCP的通信协议的特点
- uinput模拟鼠标事件,用于跨屏操作
- 模拟键盘鼠标事件
- Android模拟键盘鼠标事件
- js鼠标按键事件和键盘按键事件用法实例汇总