LPARAM转为std::wstring
时间: 2023-11-16 15:06:03 浏览: 38
要将LPARAM转换为std::wstring,可以使用以下代码:
```cpp
LPARAM lParam = ...; // 假设已经有一个LPARAM变量
std::wstring result;
result.resize(LOWORD(lParam) + 1); // 获取字符串长度并调整wstring的大小
GetWindowText((HWND)HIWORD(lParam), &result[0], LOWORD(lParam) + 1); // 将窗口文本复制到std::wstring中
// 以下代码可选,用于移除末尾的空字符
result.resize(wcslen(result.c_str()));
// 确保 std::wstring 已经包含了 LPARAM 中的文本数据
```
请注意,这里假设LPARAM的高字包含了窗口句柄,低字包含了字符串长度。你需要将其替换为实际的LPARAM值。
相关问题
std::wstring转为LPARAM
要将std::wstring转换为LPARAM,您可以使用以下代码:
```cpp
std::wstring str = L"Hello, World!";
LPARAM lParam = reinterpret_cast<LPARAM>(str.c_str());
```
`reinterpret_cast`用于将`const wchar_t*`转换为`LPARAM`类型。请注意,此转换假设`std::wstring`中的数据在内存中是连续存储的。
void Form::on_pushButton_clicked() { std::vector<HWND> windows; EnumWindows([](HWND hwnd, LPARAM lParam) -> BOOL { auto& windows = *reinterpret_cast<std::vector<HWND>*>(lParam); if (IsWindowVisible(hwnd)) { windows.push_back(hwnd); } return TRUE; }, reinterpret_cast<LPARAM>(&windows)); for (auto hwnd : windows) { const int max_title_size = 1024; TCHAR title[max_title_size]; GetWindowText(hwnd, title, max_title_size); std::wcout << title << std::endl; } }精简代码
这段代码已经很精简了,但是我们可以进一步简化它。
由于我们只需要获取窗口标题,因此我们可以使用 Qt 提供的 `QWindow::windowTitle()` 函数,而不是调用 Windows API 的 `GetWindowText` 函数。这样可以使代码更加简洁且可移植。
下面是修改后的代码:
```cpp
void Form::on_pushButton_clicked()
{
auto windows = qApp->allWindows();
for (auto window : windows)
{
auto qwindow = dynamic_cast<QWindow*>(window);
if (qwindow && qwindow->winId())
{
qDebug() << "Window Title: " << qwindow->windowTitle();
}
}
}
```
在这个示例中,我们使用 `qApp->allWindows()` 函数获取所有窗口,并将它们存储在 `windows` 变量中。然后遍历所有的窗口,并将它们转换为 `QWindow` 类型。如果转换成功并且 `winId()` 属性值不为零,则输出窗口的标题。注意,这个代码依赖于 Qt 框架,因此可以在不同的操作系统上运行。