【问题标题】:C++ FindWindow doesn't workC++ FindWindow 不起作用
【发布时间】:2015-01-30 18:11:41
【问题描述】:

我有 Windows 8 和 Visual Studio 2013。

#include <iostream>
#include <windows.h>
using namespace std;




int main()

{

HWND hWnd = FindWindow(0,(LPCTSTR)"Skype");
if (hWnd == 0)

{

    cerr << "Cannot find window" << endl;
}
return 0;
}

该窗口在 Spy++ 中称为“Skype”TLoginForm,所以我使用了正确的名称,但我收到了错误消息。(找不到窗口)我知道有很多类似的问题,但我没有得到答案。

【问题讨论】:

  • hwnd = FindWindowA(NULL, "Skype"); 呢?
  • 演员表的意思是“我知道我在做什么,现在闭嘴”。但是,如果您确实知道自己在做什么,那么您通常一开始就不需要那个演员表。讽刺。
  • 有点题外话:你正在为Skype开发一种“插件”吗?如果是这样,请记住有一个 skype API:msdn.microsoft.com/en-us/library/office/dn745878(我没有使用 C++,而是使用 C#.NET,但我认为 C# 只是 C++ 的包装器)

标签: c++ findwindow


【解决方案1】:

这个问题可能是你只是将一个 C 字符串转换为一个 T 字符串,这可能是一个宽字符串,所以它不起作用。试试这个:

HWND hWnd = FindWindow(0,_T("Skype"));

这可确保使用 Windows API 函数所期望的适当默认字符宽度声明字符串常量。

【讨论】:

  • 实际上,_T 不会转换任何内容。转换是当你施放某些东西时发生的事情。这只是一个在字符串上粘贴 L 前缀的宏。
  • 你说得对,我脑子里放了个屁,用了错误的措辞。我修好了。
  • @MSalters:那为什么要使用它呢?我的意思是,在字符串上使用L 前缀而不是这个宏不容易吗?
  • @Jack 宏的作用取决于应用程序的编译器设置。如果编译器设置指定了 Unicode 字符集,那么它将在 L 前添加。如果设置指定 MBCS,那么它不会在 L 前添加。使用 _T 可以保证在任何一种情况下都是正确的。
  • 它有条件地执行 L。如果定义了 UNICODE。这是windows API的标准调用方式
猜你喜欢
  • 1970-01-01
  • 2018-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多