零基础逆向工程40_Win32_14_枚举窗口_模拟鼠标键盘

1 查找窗口

1.1 代码案例

//查找指定窗口
TCHAR szTitle[MAX_PATH] = {0};
HWND hwnd = ::FindWindow(TEXT("#32770"),TEXT("飞鸽传书  IP Messenger"));
if(hwnd != NULL)
{
    //修改窗口标题
    ::SetWindowText(hwnd,"新的窗口标题");
}
else
{
    ::MessageBox(NULL,TEXT("窗口没有找到"),TEXT("[ERROR]"),MB_OK);
}

//窗口控制
TCHAR szTitle[MAX_PATH] = {0};
HWND hwnd = ::FindWindow(TEXT("#32770"),TEXT("飞鸽传书  IP Messenger"));
if(hwnd != NULL)
{
    typedef void (WINAPI *PSWITCHTOTHISWINDOW) (HWND,BOOL);
    PSWITCHTOTHISWINDOW SwitchToThisWindow;
    HMODULE hUser32=LoadLibrary("user32.dll");
    SwitchToThisWindow=(PSWITCHTOTHISWINDOW)GetProcAddress(hUser32,"SwitchToThisWindow");       

    //切换窗口
    SwitchToThisWindow(hwnd,false); 

    Sleep(3000);
    //关闭窗口
    ::SendMessage(hwnd,WM_CLOSE,0,0);
}
else
{
    ::MessageBox(NULL,TEXT("窗口没有找到"),TEXT("[ERROR]"),MB_OK);
}

2 查找子窗口

2.1 使用FindWindowEx()函数查找

TCHAR szTitle[MAX_PATH] = {0};
HWND hwnd = ::FindWindow(TEXT("#32770"),TEXT("飞鸽传书  IP Messenger"));
if(hwnd != NULL)
{
    //查找子窗口
    HWND hEdit = FindWindowEx(hwnd,NULL,"Edit","");
    //设置标题
    ::SetWindowText(hEdit,"文本框新的标题");
    //修改内容
    ::SendMessage(hEdit,WM_SETTEXT,0,(LPARAM)"新的内容");
}
else
{
    ::MessageBox(NULL,TEXT("窗口没有找到"),TEXT("[ERROR]"),MB_OK);
}       

2.2 使用资源ID查找

TCHAR szTitle[MAX_PATH] = {0};
HWND hwnd = ::FindWindow(TEXT("#32770"),TEXT("飞鸽传书  IP Messenger"));
if(hwnd != NULL)
{
    //查找子窗口
    HWND hEdit =::GetDlgItem(hwnd,0x3E9);
    //获取内容
    ::SendMessage(hEdit,WM_GETTEXT,MAX_PATH,(LPARAM)szTitle);
    //修改内容
    ::SendMessage(hEdit,WM_SETTEXT,0,(LPARAM)"新的内容");
}
else
{
    ::MessageBox(NULL,TEXT("窗口没有找到"),TEXT("[ERROR]"),MB_OK);
}

3 枚举子窗口控件

BOOL CALLBACK EnumChildProc(HWND hWnd,LPARAM lParam)
{
    TCHAR szTitle[MAX_PATH] = {0};
    ::GetWindowText(hWnd,szTitle,MAX_PATH);
    MessageBox(NULL,szTitle,"[子窗口]",MB_OK);
    return true;
}           

VOID EnumChildWindow()
{
    TCHAR szTitle[MAX_PATH] = {0};
    HWND hWnd = ::FindWindow(TEXT("#32770"),TEXT("飞鸽传书  IP Messenger"));
    if(hWnd != NULL)
    {
        ::EnumChildWindows(hWnd,EnumChildProc,0);
    }
    else
    {
        ::MessageBox(NULL,TEXT("窗口没有找到"),TEXT("[ERROR]"),MB_OK);
    }
}

4 枚举所有打开窗口

BOOL CALLBACK EnumOpenWindowProc(HWND hWnd,LPARAM lParam)
{
    TCHAR szTitle[MAX_PATH] = {0};
    ::GetWindowText(hWnd,szTitle,MAX_PATH);
    MessageBox(NULL,szTitle,"[窗口]",MB_OK);
        if(strcmp(szTitle,"飞鸽传书  IP Messenger") == 0)
    {
        MessageBox(NULL,szTitle,"[窗口]",MB_OK);
        return FALSE;
    }
    return TRUE;
}
VOID EnumOpenWindows()
{
    EnumWindows(EnumOpenWindowProc,NULL);
}

5 模拟鼠标单击

TCHAR szTitle[MAX_PATH] = {0};
RECT r;
HWND hwnd = ::FindWindow(TEXT("#32770"),TEXT("飞鸽传书  IP Messenger"));
if(hwnd != NULL)
{
    HWND hButton = FindWindowEx(hwnd,NULL,"Button","刷新(&R)");

    //获取窗口坐标
    ::GetWindowRect(hButton,&r);

    printf("%d %d",r.left,r.top);

    //设置鼠标的位置
    ::SetCursorPos(r.left+10,r.top+10);
    Sleep(2000);
    //鼠标左键单击
    mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);//点下左键
    mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);//松开左键
}
else
{
    ::MessageBox(NULL,TEXT("窗口没有找到"),TEXT("[ERROR]"),MB_OK);
}

6 模拟键盘点击

TCHAR szTitle[MAX_PATH] = {0};
RECT r;
HWND hwnd = ::FindWindow(TEXT("#32770"),TEXT("飞鸽传书  IP Messenger"));
if(hwnd != NULL)
{
    //HWND hButton = FindWindowEx(hwnd,NULL,"Button","刷新(&R)");
    HWND hEdit =::GetDlgItem(hwnd,0x3E9);

    //获取窗口坐标
    ::GetWindowRect(hEdit,&r);

    //设置鼠标的位置
    ::SetCursorPos(r.left+1,r.top+1);
    Sleep(1000);

    //鼠标左键单击
    mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);//点下左键
    mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);//松开左键

    //模拟键盘
    keybd_event(97,0,0,0);
    keybd_event(97,0,KEYEVENTF_KEYUP,0);
    Sleep(1000);
    keybd_event(66,0,0,0);
    keybd_event(66,0,KEYEVENTF_KEYUP,0);
    Sleep(1000);
    keybd_event(16,0,0,0);
    keybd_event(67,0,0,0);
    keybd_event(67,0,KEYEVENTF_KEYUP,0);
    keybd_event(16,0,KEYEVENTF_KEYUP,0);

}
else
{
    ::MessageBox(NULL,TEXT("窗口没有找到"),TEXT("[ERROR]"),MB_OK);
}

键盘键与虚拟键码对照表

MSDN:https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx

Blog:https://www.cnblogs.com/del/archive/2007/12/07/987364.html

时间: 2024-12-18 10:59:27

零基础逆向工程40_Win32_14_枚举窗口_模拟鼠标键盘的相关文章

零基础逆向工程39_Win32_13_进程创建_句柄表_挂起方式创建进程

1 进程的创建过程 打开系统 --> 双击要运行的程序 --> EXE开始执行 步骤一: 当系统启动后,创建一个进程:Explorer.exe(也就是桌面进程) 步骤二: 当用户双击某一个EXE时,Explorer 进程使用CreateProcess函数创建被双击的EXE,也就是说,我们在桌面上双 击创建的进程都是Explorer进程的子进程. CreateProcess BOOL CreateProcess( LPCTSTR lpApplicationName, // name of exe

C#模拟鼠标键盘控制其他窗口(一)

编写程序模拟鼠标和键盘操作可以方便的实现你需要的功能,而不需要对方程序为你开放接口.比如,操作飞信定时发送短信等.我之前开发过飞信耗子,用的是对飞信协议进行抓包,然后分析协议,进而模拟协议的执行,开发出了客户端,与移动服务器进行通信,但是这有一些缺点.如果移动的服务器对接口进行变更,我所编写的客户端也要进行相应的升级.如果服务器的协议进行了更改,甚至个人编写的这种第三方客户端需要重写.而我个人也没有这个时间和精力,或者说没有足够的利益支撑我继续去重构飞信耗子.因此,这款还算优秀的软件,现在就束之

Delphi下利用WinIo模拟鼠标键盘详解

http://www.cnblogs.com/rogee/archive/2010/09/14/1827248.html 本文最早在编程论坛上发表,文章地址:http://programbbs.com/bbs/view12-17207-1.htm,相关文件可以在上述地址的页面中下载.转载时请注明出处. 前言 一日发现SendInput对某程序居然无效,无奈只好开始研究WinIo.上网查了很多资料,发现关于WinIo模拟鼠标键盘的资料很少,有的也只是支言片语讲的不是很详细,而且大部分都是关于模拟键

Linux 模拟 鼠标 键盘 事件

/************************************************************************ * Linux 模拟 鼠标 键盘 事件 * 说明: * 以前看到有些软件能够控制鼠标移动,键盘操作等功能,总想知道这些到底 * 是怎么做到的,好像是2年前也尝试去做这件事,但那时候对知识的匮乏直接导致 * 无法进行,早上突然想到这件事,于是又搜索了一下,鉴于目前经常接触Linux * 驱动,对这些东西的理解也就很容易. * * 2016-2-27 深

零基础Swift实战开发视频教程_从入门到精通

零基础Swift实战开发从入门到精通(4大项目实战.酷跑熊猫.百度音乐.足球游戏等)适合人群:初级课时数量:50课时更新程度:86%用到技术:Swift涉及项目:酷跑熊猫.百度音乐.足球游戏咨询qq:1840215592零基础Swift实战开发视频教程采用基础+项目的方式进行讲解,通过基础的学习,可以完全掌握Swift基本语法应用,并结合4个项目进行开发,学员能在最短的时间内掌握开发的各项技能. 零基础Swift实战开发从入门到精通详细查看:http://www.ibeifeng.com/goo

模拟鼠标键盘操作,含硬件模拟技术[转载]

键盘是我们使用计算机的一个很重要的输入设备了,即使在鼠标大行其道的今天,很多程序依然离不开键盘来操作.但是有时候,一些重复性的,很繁琐的键盘操作总会让人疲惫,于是就有了用程序来代替人们按键的方法,这样可以把很多重复性的键盘操作交给程序来模拟,省了很多精力,按键精灵就是这样的一个软件.那么我们怎样才能用VB来写一个程序,达到与按键精灵类似的功能呢?那就让我们来先了解一下windows中响应键盘事件的机制.    当用户按下键盘上的一个键时,键盘内的芯片会检测到这个动作,并把这个信号传送到计算机.如

selenium webdriver模拟鼠标键盘操作

在测试使用Selenium webdriver测试WEB系统的时候,用到了模拟鼠标.键盘的一些输入操作. 1.鼠标的左键点击.双击.拖拽.右键点击等: 2.键盘的回车.回退.空格.ctrl.alt.shift等: 在webdriver中,有专门的一个类,是用来进行鼠标.键盘的模拟操作的,那就是Actions类,该类使用时,又会涉及到Keyboard.Mouse.CompositeAction(复合动作),先对Mouse的方法做简单罗列,然后再用代码说明: 1.鼠标左键点击: Actions ac

pyautogui模拟鼠标键盘操作

安装pyautogui库 快捷键win+R调出"运行"命令窗口,输出cmd 在cmd命令窗口输出: pip install pyautogui 等待安装,直到完成 如何使用 打开python的IDLE 导入库: import pyautogui as pg 按需输入命令即可 命令 每条指令运行间隔(类似全局): pg.PAUSE=1 %每隔1s运行一条程序 鼠标类命令 获取当前鼠标位置: pg.position() 模拟鼠标左键: pg.click(x,y) 模拟鼠标双击左键: pg.

python模拟鼠标键盘操作 GhostMouse tinytask 调用外部脚本或程序 autopy右键另存为

1.参考 autopy (实践见最后一章节) 用Python制作游戏外挂(上) AutoPy Introduction and Tutorial autopy.mouse.smooth_move(1, 1) 可以实现平滑移动 autopy - API Reference pip install PyUserInput SavinaRoja/PyUserInput [python3.5][PyUserInput]模拟鼠标和键盘模拟 Python-模拟鼠标键盘动作 autoit selenium借助