打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
VC指定窗口模拟按键或鼠标事件

VC指定窗口模拟按键或鼠标事件  

2010-01-11 08:33:00|  分类: VC DLL编程|举报|字号 订阅

开始自己做外挂的第一部...模拟键盘鼠标事件:

两种方法:

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啦

遍历进程的代码下次再发了

http://huigezrx.blog.163.com/blog/static/3210165220100118330489/
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
windows下控制台托盘接口
子类化和超类化区别(转自--眼见为实(2):介绍Windows的窗口、消息、子类化和超类化...
Delphi开发的小程序
[转]MFC子线程更改图像数据后更新主窗口图像显示方法
vc++ 中 SendMessage()
一个不错的 trace.h 文件
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服