首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SendMessage只发送字符串的*第一个*字符

SendMessage只发送字符串的*第一个*字符
EN

Stack Overflow用户
提问于 2021-09-05 00:07:28
回答 2查看 284关注 0票数 2

我使用以下python代码将字符串发送到RAD C++ Builder构建的应用程序:

代码语言:javascript
运行
复制
import win32con
import win32gui
import ctypes
import ctypes.wintypes  

FindWindow = win32gui.FindWindow
SendMessage = ctypes.windll.user32.SendMessageW

class COPYDATASTRUCT(ctypes.Structure):
    _fields_ = [
        ('dwData', ctypes.wintypes.LPARAM),
        ('cbData', ctypes.wintypes.DWORD),
        ('lpData', ctypes.c_wchar_p) 
    ]

hwnd = FindWindow(None, "SIGNAL")
cds = COPYDATASTRUCT()
cds.dwData = 0

mystr = "This is a message to signal..."

cds.cbData = ctypes.sizeof(ctypes.create_unicode_buffer(mystr))
cds.lpData = ctypes.c_wchar_p(mystr)

SendMessage(hwnd, win32con.WM_COPYDATA, 0, ctypes.byref(cds))

它很好地找到了对手的应用程序,并且SendMessage发送数据。

My problem:只发送字符串的第一个字符。因此,它只发送"T",而不是:"T"

我确信我忽略了一些琐碎的东西,但我找不到它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-05 10:24:11

为了支持所有可能遇到相同任务/问题的代码,工作的“接收”代码(RAD C++构建器)是:

代码语言:javascript
运行
复制
void __fastcall Tmain_form::WMCopyData(TMessage& Message)  // Receiving messages from Python script in C++ Builder
{
int DataSize;
wchar_t* Data;

COPYDATASTRUCT* CopyData = reinterpret_cast <COPYDATASTRUCT*> (Message.LParam);

    DataSize = CopyData->cbData;

    if (DataSize > 0)
    {
        Data = new wchar_t[DataSize];
        memcpy(Data, CopyData->lpData, DataSize);

        // Process your data....    
    
        delete [] Data;
    }
}

为了完成,这将转到头文件,下面是“受保护的”:

代码语言:javascript
运行
复制
BEGIN_MESSAGE_MAP
    MESSAGE_HANDLER(WM_COPYDATA, TMessage, WMCopyData)
END_MESSAGE_MAP(TForm)
票数 0
EN

Stack Overflow用户

发布于 2021-09-05 10:11:46

听起来,您的C++代码正在将cds.lpData解释为char*而不是wchar_t*,而且可能也没有注意cds.cbData指示的字节计数。

此外,Python代码应该将cds.lpData设置为(指向)从mystr创建的Unicode缓冲区,而不是(指向) mystr本身。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69059727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档