`

[C++]用Spy++获取Skype某个用户对话窗口,然后重复发送某一消息

 
阅读更多
1 利用Spy++获取窗口和某一控件的Class Name, Title Name;

2 利用Class Name, Title Name获取handle然后发送消息;
代码如下:
void CFindWindowTestDlg::OnBnClickedFindSkypeBtn()
{
    // TODO: Add your control notification handler code here
    HWND m_pHwnd = ::FindWindow(_T("TConversationForm"), _T("Jacky"));
    ASSERT(m_pHwnd != NULL);
    HWND m_pHwndTChatEntryControl = ::FindWindowEx(m_pHwnd, NULL, _T("TChatEntryControl"), NULL);
    ASSERT(m_pHwndTChatEntryControl != NULL);
    HWND m_pHwndTTChatRichEdit = ::FindWindowEx(m_pHwndTChatEntryControl, NULL, _T("TChatRichEdit"), NULL);
    ASSERT(m_pHwndTTChatRichEdit != NULL);

    if (m_pHwndTTChatRichEdit != NULL)
    {
        for (int i =0; i<20; i++)
        {
            ::PostMessage(m_pHwndTTChatRichEdit, WM_CHAR, 'T', NULL);
            ::PostMessage(m_pHwndTTChatRichEdit, WM_CHAR, 'e', NULL);
            ::PostMessage(m_pHwndTTChatRichEdit, WM_CHAR, 's', NULL);
            ::PostMessage(m_pHwndTTChatRichEdit, WM_CHAR, 't', NULL);
            ::PostMessage(m_pHwndTTChatRichEdit, WM_CHAR, ' ', NULL);
            ::PostMessage(m_pHwndTTChatRichEdit, WM_CHAR, 'M', NULL);
            ::PostMessage(m_pHwndTTChatRichEdit, WM_CHAR, 'e', NULL);
            ::PostMessage(m_pHwndTTChatRichEdit, WM_CHAR, 's', NULL);
            ::PostMessage(m_pHwndTTChatRichEdit, WM_CHAR, 's', NULL);
            ::PostMessage(m_pHwndTTChatRichEdit, WM_CHAR, 'a', NULL);
            ::PostMessage(m_pHwndTTChatRichEdit, WM_CHAR, 'g', NULL);
            ::PostMessage(m_pHwndTTChatRichEdit, WM_CHAR, 'e', NULL);
            ::PostMessage(m_pHwndTTChatRichEdit, WM_CHAR, ' ', NULL);
            ::PostMessage(m_pHwndTTChatRichEdit, WM_KEYDOWN, VK_RETURN, NULL);
            ::PostMessage(m_pHwndTTChatRichEdit, WM_KEYUP, VK_RETURN, NULL);
            Sleep(200);
        }
    }

    if(m_pHwnd)
    {
        //::PostMessage(m_pHwnd, WM_CLOSE, 0, 0);//Exit
    }
}



BOOL CLeakDiagAutoLogDlg::DoAutoLogging()
{
    CString strData;
    m_pMsgEdit->GetWindowText(strData);

    HWND m_pHwnd = ::FindWindow(NULL, _T("LeakDiag"));
    if (m_pHwnd != NULL)
    {
        HWND m_pHwnLogBtnCtrl = ::FindWindowEx(m_pHwnd, NULL, _T("Button"), _T("Log"));
        if (m_pHwnLogBtnCtrl != NULL)
        {
            long id = ::GetDlgCtrlID(m_pHwnLogBtnCtrl);
            ::PostMessage(m_pHwnd, WM_COMMAND, MAKELONG(id, BN_CLICKED), NULL);
        }
        else
        {
            strData += _T("m_pHwnLogBtnCtrl is NULL\r\n");
            m_pMsgEdit->SetWindowText(strData);

            return FALSE;
        }
    }
    else
    {
        strData += _T("m_pHwnd is NULL!\r\n");
        m_pMsgEdit->SetWindowText(strData);

        return FALSE;
    }

    return TRUE;

//     HWND m_pHwnStartControl = ::FindWindowEx(m_pHwnd, NULL, _T("Button"), _T("Start"));
//     ASSERT(m_pHwnStartControl != NULL);
//     long id = ::GetDlgCtrlID(m_pHwnStartControl);
//     ::PostMessage(m_pHwnd, WM_COMMAND, MAKELONG(id,BN_CLICKED), NULL);
}

void CLeakDiagAutoLogDlg::OnBnClickedRunBtn()
{
    // TODO: Add your control notification handler code here
    UpdateData(TRUE);
    if (0 == m_dwTimeSpan)
    {
        m_dwTimeSpan =1;
    }

    CEdit* pEdit = static_cast<CEdit*>(GetDlgItem(IDC_RUN_BTN));

    if (!m_bTimer)
    {
        SetTimer(1, UINT(m_dwTimeSpan*1000), NULL);
        m_bTimer = TRUE;
        pEdit->SetWindowText(_T("Stop"));
    }
    else
    {
        KillTimer(1);
        m_bTimer = FALSE;
        pEdit->SetWindowText(_T("Start"));
    }

    UpdateData(FALSE);
}

void CLeakDiagAutoLogDlg::OnTimer(UINT_PTR nIDEvent)
{
    // TODO: Add your message handler code here and/or call default
    CTime cTime =  CTime::GetCurrentTime(); 
    CString strTime = cTime.Format("[%Y-%m-%d %H:%M:%S] ");//display YYYY:MM:DD HH:MM:SS

    switch (nIDEvent)
    {
    case 1:
        {
            if (DoAutoLogging())
            {
                CString strData;
                CString strTemp;
                strTemp.Format("[RUN = %ld] DoAutoLogging",  ++m_dwTotalRun);

                m_pMsgEdit->GetWindowText(strData);
                strData += strTime;
                strData += strTemp;
                strData += "\r\n";
                m_pMsgEdit->SetWindowText(strData);
            }

            break;
        }
    case 2:
    default:
        {
            break;
        }
    }

    CDialog::OnTimer(nIDEvent);
}
分享到:
评论

相关推荐

    spy++工具,准确获取窗口句柄名称

    在Spy++中,用户不仅可以查看窗口句柄,还能获取窗口所属的类名,这对于理解窗口的行为和定位问题至关重要。 Spy++的主要特性包括: 1. **窗口视图**:此视图列出系统中所有活动窗口,显示它们的句柄、类名、标题...

    spy++查找窗口信息,包括句柄,尺寸,位置,监控窗口消息等等。

    在使用Spy++时,你可以启动或附加到一个运行中的进程,然后使用其内置的查找功能搜索特定的窗口。一旦找到目标窗口,Spy++会显示该窗口的详细信息,包括类名、父窗口句柄、控件ID等。此外,还可以启用消息视图,实时...

    VC++实现spy++源码获取窗口句柄的功能vs2015

    在本文中,我们将深入探讨如何使用VC++在Visual Studio 2015环境下实现类似Spy++的功能,即获取窗口句柄。Spy++是一款强大的Windows API调试工具,它可以帮助开发者查看和监视窗口、消息、线程以及进程。我们将关注...

    SPY++工具查看窗口、线程、进程或消息的属性

    SPY++是一款强大的Windows操作系统下的调试和分析工具,它由Microsoft Visual Studio提供,用于查看和分析系统级别的信息,包括窗口、线程、进程以及消息。这款工具对于开发者来说极其有用,因为它能帮助他们深入...

    Microsoft Spy++ 获取Windows窗口的位置

    Microsoft Spy++就是其中一款强大的工具,它专为Windows应用程序的开发者设计,用于监控系统中的窗口、消息、线程和进程。这个工具对于理解和调试Windows API调用非常有用。 Spy++的主要功能之一就是获取Windows...

    类似SPY++的窗口查看器

    4. **消息监视**:模仿SPY++的另一个重要特性是实时监控窗口的消息,这需要使用SetWindowsHookEx来设置消息钩子,然后在钩子回调函数中处理接收到的消息。 5. **UI设计**:利用MFC的CListCtrl或CTreeCtrl控件展示...

    spy++查找Windows下exe程序的窗口类和消息跟踪

    - `spyxx.chm` 和 `spyxx_amd64.chm` 是Spy++的帮助文档,包含关于如何使用Spy++的详细信息和教程,用户可以从中学习如何查找窗口类、查看消息流等。 - `spyxxhk_amd64.dll` 和 `spyxxhk.dll` 是Spy++的钩子库文件,...

    visual c++ vc制作仿spy++程序_WindowFromPoint根据鼠标坐标获得所在窗口的句柄.zip

    通过获取窗口句柄,我们可以对特定窗口执行各种操作,如发送消息、改变窗口属性或大小等。 要实现一个仿SpyXX的程序,你需要掌握以下几个关键知识点: 1. **Windows API的使用**:Visual C++使用Windows API来与...

    SPY++直接运行版(windows句柄获取工具)

    使用SPY++时,用户只需打开程序,然后通过“查找”功能搜索特定窗口或进程。一旦找到目标,SPY++会自动开始监控其消息流。此外,还可以设置跟踪选项,记录特定窗口或类的所有消息,这对于调试复杂的多线程应用程序...

    Spy++ 窗口名修改

    Spy++ 是一款强大的Windows系统调试工具,由Microsoft提供,主要用于观察和分析Windows应用程序的窗口、消息、线程和进程。这个工具对于软件开发者,尤其是Windows平台的程序员来说,是进行系统级调试和性能优化的...

    Spy++32位和64位版本.zip

    Spy++ 是一款强大的Windows系统调试工具,主要用于监测和分析Windows应用程序的窗口、消息以及线程等行为。这个压缩包包含了32位和64位版本的Spy++工具,确保无论在哪种操作系统环境下都能进行有效分析。 1. **窗口...

    Spy++ 源代码[C++]

    Spy++ 是一个强大的Windows系统调试工具,主要用于观察和分析Windows应用程序的窗口、消息、线程以及进程等。它由Microsoft提供,是Visual Studio的一部分,帮助开发者深入理解Windows系统的内部工作原理。源代码的...

    spy++获取窗口句柄

    例如,获取句柄后,我们可以发送消息到该窗口(如`PostMessage`或`SendMessage`),改变窗口属性,或者对窗口进行显示、隐藏、移动、大小调整等操作。 Spy++的使用方法包括启动应用程序,选择“视图”菜单下的...

    visual c++制作仿spy++的程序.zip

    【标题】"visual c++制作仿spy++的程序"是一个基于Microsoft Visual C++开发的项目,旨在创建一个类似于Spy++的工具。Spy++是微软提供的一款强大的系统级调试和监视工具,它允许开发者查看和分析Windows窗口、消息、...

    VB 实现Spy++工具

    5. **控件检测**:Spy++还能显示窗口内的控件信息,这需要用到`GetDlgItem` API来获取控件句柄,然后用`GetWindowText`获取控件的文本。 6. **线程和进程**:通过`OpenProcess`和`GetThreadContext`等API,可以获取...

    SPY++ 获取windows窗口句柄,绿色好用

    这个句柄是一个整数值,应用程序通过句柄来与特定的窗口交互,如发送消息、改变窗口属性或获取窗口状态。SPY++能够帮助开发者快速定位并获取到目标窗口的句柄,这对于调试和优化程序的窗口操作部分至关重要。 SPY++...

    spy++窗口查找

    `Spy++`是Microsoft Visual Studio开发环境提供的一款强大的调试辅助工具,它允许程序员深入观察Windows系统中的窗口、消息、线程和进程,对于理解和调试Windows应用程序非常有帮助。 **描述:“spy++窗口查找,拖...

    findWindowex查找窗口句柄模拟鼠标操作 spy++用法

    本文将深入探讨`findWindowex`函数的使用以及如何利用Spy++工具来辅助这一过程。 首先,`findWindowex`是一个Windows API函数,用于在窗口层次结构中查找特定类型的窗口。它接受四个参数:父窗口句柄、子窗口的前一...

    模仿SPY++瞄准镜获取窗口句柄

    代码没注释,需要的就下载来自己研究吧。 原理就是自己画两个图标和一个光标文件,子类化一个CStatic来响应鼠标左键按下和弹起的消息,在这两个消息内更改图标文件以达到...获取窗口句柄部分我是用了一个线程来操作的。

    Microsoft SPY++ 工具及使用教程

    Spy++ (SPYXX.EXE) 是一个基于 Win32 的实用工具,提供系统进程、线程、窗口和窗口消息的图形视图。 Spy++ 有两个版本。 第一个版本,名为 Spy++ (spyxx.exe),用于显示发送到在 32 位进程中运行的窗口的消息。 ...

Global site tag (gtag.js) - Google Analytics