qt 与win32 API

Colabx 2011-11-23 01:06:59
HWND hwnd = FindWindow(NULL,_T("计算器"));

用这个函数获得指定窗口句柄,但是在Qt中遇到了麻烦。

1. FindWindowA 与 FindWindowW需要显式调用么?
2. _T宏在Qt中是没用的么?
3. 如何正确获得计算器窗口句柄?
我要用这个句柄SendMessage。

HWND hwnd = FindWindow(NULL, L"计算器");
这样不行。
拜托大家,Qt的书我只看了第一章,主要是看看qt是不是适合我用。
...全文
711 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
noodle123 2012-05-22
  • 打赏
  • 举报
回复
是啊,很是头痛编码问题。
dbzhang800 2011-11-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 sqxubin 的回复:]
HWND hwnd = FindWindow(NULL,_T("计算器"));

用这个函数获得指定窗口句柄,但是在Qt中遇到了麻烦。

1. FindWindowA 与 FindWindowW需要显式调用么?
2. _T宏在Qt中是没用的么?
3. 如何正确获得计算器窗口句柄?
我要用这个句柄SendMessage。

HWND hwnd = FindWindow(NULL, ……
[/Quote]
其实这个问题没有Qt什么事,你要没有Qt的你可以用,有了Qt你肯定还可以用。 _T /TEXT 的使用没有问题,使用QString进程中转也没有问题。

唯一需要的就是,编码概念的清楚。

一旦 C++ 源码中出现中文,就有各类问题存在。
* 比如,同样是utf8编码,同样是MSVC编译器,源码文件带不带BOM,结果不同
* 比如,同样是utf8编码,同样源码文件带BOM,用的是MSVC还是MinGW,结果不同
* 比如,同样是utf8编码,同样带BOM,同样是MSVC编译器,用的是简体还是正体的windows,结果不同
* ...
这些问题均独立于Qt存在。是C++本身问题,即使在C++11下,通过char16_t/char32_t及其他设施的引入,也只是解决了部分问题。
dext 2011-11-23
  • 打赏
  • 举报
回复
如果你使用的是 Qt Creator 的话,因为Qt Creator 使用的是 utf8 编码
所以你也可以

HWND h = FindWindow(NULL, QString::fromUtf8("计算器").toStdWString().c_str());
setWindowTitle(QString("%1").arg((int)h));


以上所有代码都在 英文版 Windows 7(没有语言包) 上测试成功
dext 2011-11-23
  • 打赏
  • 举报
回复
有一个方法可以避免 编码解码带来的麻烦 在你的 MainWindow 里 添加一个 QPushButton 和 QLineEdit
然后写一个这样的 槽

#include <windows.h>

void MainWindow::on_pushButton_clicked()
{
HWND h = FindWindow(NULL, ui->lineEdit->text().toStdWString().c_str());
ui->pushButton->setText(QString("%1").arg((int)h));
}


运行后,只要在编辑框中,输入 窗口的名字,点击按钮就可以了
dext 2011-11-23
  • 打赏
  • 举报
回复
八成是 编码的问题,你找一个 英文的标题先试试看啊~
Colabx 2011-11-23
  • 打赏
  • 举报
回复
wstring str(L"计算器");
HWND hwnd = FindWindowW(NULL,str.c_str());
为啥这样都不行? 没用到VS的宏啊。

16,203

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧