【问题标题】:PostMessage not working for WM_PASTE , mfcPostMessage 不适用于 WM_PASTE , mfc
【发布时间】:2013-12-06 13:52:36
【问题描述】:

我有一个应用程序,它在单击按钮时有一个按钮,我正在尝试将已经可用的文本粘贴到记事本中。我的应用程序首先收集文本并将其放在剪贴板上(这工作得很好),我面临粘贴部分的问题。这是代码,请告诉我我哪里出错了。

CWnd *pCwnd = FindWindow(NULL, _T("Untitled - Notepad"));
    HWND handle = pCwnd->GetSafeHwnd();
    pCwnd->PostMessageA(WM_PASTE,0,0);

我正在使用记事本对其进行测试,因此名称为(“无标题 - 记事本”)。 请帮我。提前致谢。

【问题讨论】:

    标签: c++ mfc postmessage


    【解决方案1】:

    我不使用 MFC,但您可能可以翻译成您需要的内容。问题是您需要将消息发送到编辑控件,而不是主窗口。

    #include <Windows.h>
    #include <string>
    #include <cstdlib>
    
    int main()
    {
        const std::string data("This is some text from the clipboard.");
        HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, data.size() + 1);
        std::memcpy(GlobalLock(hMem), data.c_str(), data.size() + 1);
        GlobalUnlock(hMem);
        OpenClipboard(NULL);
        EmptyClipboard();
        SetClipboardData(CF_TEXT, hMem);
        CloseClipboard();
    
        HWND mainWindow = FindWindow(NULL, "Untitled - Notepad");
        HWND editWindow = FindWindowEx(mainWindow, NULL, "edit", NULL);
        PostMessage(editWindow, WM_PASTE, 0, 0);
        return 0;
    }
    

    【讨论】:

    • 非常感谢代码。我从早上开始一直在努力让它工作。还有一个问题是,如果我想在浏览器中做同样的事情,那么我该怎么做。例如:我打开了一个网页,我专注于第一个编辑框并转到我的应用程序并单击按钮,它应该将文本粘贴到焦点文本框中。我还创建了一个将 [TAB] 放在字符串之间的函数,因此在遇到 [TAB] 的情况下,它应该转到下一个编辑并粘贴字符串。
    • 这真的取决于特定的应用程序以及它们如何设置。您可以使用 Spy++ 之类的工具来尝试找出目标窗口,但这通常需要反复试验。
    猜你喜欢
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2012-05-29
    相关资源
    最近更新 更多