- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要填充结构的成员:
typedef struct SPEVENT
{
SPEVENTENUM eEventId : 16;
SPEVENTLPARAMTYPE elParamType : 16;
ULONG ulStreamNum;
ULONGLONG ullAudioStreamOffset;
WPARAM wParam;
LPARAM lParam;
} SPEVENT;
有关如何使用它的信息很少。填充它的唯一示例来自其他用户,但不是官方的。
接收此事件的应用程序应获取该字符串。用我的方法,它不起作用:字符串是“”。
如果他在我的尝试中发现任何明显的错误,谁能告诉我?
wstring wsBookmark = L"MyBookmark";
CSpEvent nBookmarkEvent;
nBookmarkEvent.eEventId = SPEI_TTS_BOOKMARK;
nBookmarkEvent.elParamType = SPET_LPARAM_IS_STRING;
nBookmarkEvent.ullAudioStreamOffset = 0;
nBookmarkEvent.lParam = _wtol(wsBookmark.c_str());
nBookmarkEvent.wParam = (LPARAM)wsBookmark.c_str();
正如我所解释的,似乎没有关于如何填充这些成员的任何官方指南。
到目前为止我发现的是这些用户代码:
https://github.com/m-toman/SALB/blob/master/sapi/htstts.cpp在这个链接中我看到了这个:
CHECKASSERTId(( !wcscmp( (WCHAR*)Event.lParam, szwBMarkStr ) ), tpr, IDS_STRING9);
但我不知道这是否对我有帮助。
感谢您的任何输入或帮助!
最佳答案
SPEVENT
结构是 documented on MSDN .
在您的情况下,SPET_LPARAM_IS_STRING
的文档旗帜说:
SPET_LPARAM_IS_STRING
TheSPEVENT.lParam
value represents a pointer to a string. For example, the TTS bookmark event (i.e.,SPEI_TTS_BOOKMARK
) includes a pointer the bookmark name, so thelParam
type isSPET_LPARAM_IS_STRING
. The user must callCoTaskMemFree
on thelParam
member (as pointer) to release the associated memory.
这意味着 lParam
指向的内存必须通过 CoTaskMemAlloc()
(或相关函数)分配,其中 std::wstring
不是,所以你不能只传递 lParam
中的 std::wstring::c_str()
指针,你必须复制到 CoTask 分配的内存块.
另外,SPEI_TTS_BOOKMARK
说:
SPEI_TTS_BOOKMARK
The bookmark element is used to insert a bookmark into the output stream. If an application specifies interest in bookmark events, it will receive the bookmark events during synthesis.wParam
is the current bookmark name (in base 10) converted to a long integer. If name of current bookmark is not an integer,wParam
will be zero.lParam
is the bookmark string.elParamType
has to beSPET_LPARAM_IS_STRING
.
所以,话虽如此,试试这个:
wstring wsBookmark = L"MyBookmark";
UINT size = (wsBookmark.size() + 1) * sizeof(wchar_t);
wchar_t *ptr = (wchar_t*) CoTaskMemAlloc(size);
CopyMemory(ptr, wsBookmark.c_str(), size);
CSpEvent nBookmarkEvent;
nBookmarkEvent.eEventId = SPEI_TTS_BOOKMARK;
nBookmarkEvent.elParamType = SPET_LPARAM_IS_STRING;
nBookmarkEvent.ullAudioStreamOffset = 0;
nBookmarkEvent.wParam = 0;
nBookmarkEvent.lParam = (LPARAM) ptr;
关于c++ - wstring 到 LPARAM 和 WPARAM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55564863/
在 Delphi 6 中 WPARAM 被声明为已签名: WPARAM = Longint; 在 Delphi 2010 中,WPARAM 被声明为已签名: WPARAM = INT_PTR; 但在
我正在寻找一种将对象(在我的例子中为 vector)作为 WPARAM 传递的方法采用 C++11 风格。 我发现的教程使用了 C 风格的转换或 reinterpret_cast传递一个指向对象的指针
我正在尝试获取由消息的 wParam 属性中返回的整数表示的实际系统消息。有没有办法做到这一点或可以实现这一目标的功能? 最佳答案 这是关于 WndProc 的问题吗?你说的是哪条消息? LRESUL
下面是整体代码: LRESULT WmPointerAPI::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { HRES
如果我使用计算机鼠标滚动窗口,我会得到以下 Spy++ 结果: fwKeys: 0, zDelta: -120 我需要通过代码模拟鼠标滚轮事件,所以我像这样使用 PostMessage: Public
出于不相关的原因,我在 C# 应用程序的 WinForm 中捕获 WM_SYSCOMMAND 消息。有时,我的处理程序会收到带有 wParam 0xF063 的 WM_SYSCOMMAND 消息。 文
我目前正在尝试实现 http://www.codeproject.com/KB/threads/winspy.aspx 中的一些代码(子类化部分)到我的项目中,但遇到一些问题,我调试了 dll,似乎当
我有一个来自 WM_KEYDOWN 消息的 pMsg->wParam,我想将它转换成一个 CString。我该怎么做? 我试过下面的代码: TCHAR ch[2]; ch[0] = pMsg->wPa
在处理 What's wrong with this unmanaged code in C#? 中描述的问题时我偶然发现了参数 wParam 及其类型 IntPtr for SendMessage
在查看 RAWINPUT 结构的 MSDN 文档时,它有以下声明: typedef struct tagRAWINPUT { RAWINPUTHEADER header; union {
尝试这样做: 代码: WPARAM wParam = MAKEWPARAM(MK_LBUTTON, MK_RBUTTON, MK_SHIFT, MK_CONTROL, MK_MBUTTON); Pos
我知道 wParam 和 lParam 是(我相信是 32 位)特定于当时正在传递的消息的信息位,但是有什么方法可以分辨每条消息放入这两个消息中的内容吗? 我在某处读到 wParam 是 16 位而
一个标准的窗口过程函数采用这个原型(prototype): LRESULT CALLBACK WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM l
将值传递给同时接受 WPARAM 和 LPARAM 参数的函数时,我传递其中的哪一个参数是否重要?有人告诉我,如果我使用 Windows x64,我应该使用 WPARAM;这是真的? 最佳答案 发送消
我知道我在这里很懒,我应该自己搜索头文件,但是 LPARAM 和 WPARAM 参数的实际类型是什么?它们是指针,还是四字节整数?我正在编写一些 C# 互操作代码,并希望确保它能够在 x64 系统上运
我需要填充结构的成员: typedef struct SPEVENT { SPEVENTENUM eEventId : 16; SPEVENTLPARAMTYPE el
我有点困惑。当一个文件被拖到一个带有 WS_EX_ACCEPTFILES 标记的窗口上时,它会将一个 PostMessage 放入 WndProc 函数中,该函数将 UINT 消息设置为 WM_DRO
我正在尝试调用 win32api.SendMessage()通过我的 Python 应用程序(即发送应用程序)。 接收应用程序的 API 声明消息的格式为:::SendMessage(, , (WPA
我在 C# 中导入 WinApi 函数、编写回调等 ( example ) 并且总是想知道: 它们是什么意思? LRESULT 作为最后的结果? W参数? L-参数 ? 如何安全地“包裹”它们 WPA
这个问题在这里已经有了答案: How should I pass negative values to SendMessage and Perform when they expect a Nativ
我是一名优秀的程序员,十分优秀!