【发布时间】:2013-11-06 09:42:51
【问题描述】:
我试图找到一个名为“VirtualKeyboard”的打开窗口。 目前这是使用以下代码实现的:-
LPCWSTR WindowName =L"SoftKeyboard.exe*32";
HWND Find = ::FindWindowEx(0, 0,WindowName, 0);
cout<<Find<<endl;
WindowName 是从任务管理器中获取的,我已经将它初始化为名为 SoftKeyboard.exe*32 的进程名称。我还使用名为 Virtual_Keyboard 的任务名称对其进行了测试,但两者都产生 NULL 结果。窗口在运行前打开这个程序。
我在包含“HWND Find = ::FindWindowEx(0, 0,WindowName, 0);”的行处放置了一个断点。在 Autos 窗口中出现以下内容:-
- Find 0xcccccccccccccccc {unused=??? } HWND__ *
unused CXX0030: Error: expression cannot be evaluated
如何纠正?为什么会出现这种情况?是否从任务管理器中提取 WindowName?是否有其他方法可以找到此窗口?
【问题讨论】:
-
Variable Find 将仅在其初始化的行之后被初始化。
-
没错,但 cout 显示的输出
-
阅读代码最后两行产生的错误信息。
-
您将两个问题混为一谈。第一个问题是 Find 变量未在
FindWindowEx行上初始化。将断点移动到下一行,您将看到 Find 变量已正确初始化。第二个问题是为什么FindWindowEx返回 0。它返回 0 因为没有名为“SoftKeyboard.exe*32”的窗口类的窗口。此字符串不是窗口类的命名方式。只是进程在任务管理器中的命名方式,与窗口类名不同。 -
窗口类名是出现在窗口顶部的标题名称,如果我错了,请纠正我。这将是Virtual_Keyboard。我确实将它移到了下面:-- Find 0x0000000000000000 {unused=? ?? } HWND__ * 和未使用的 CXX0030:错误:无法评估表达式出现在自动窗口中。
标签: visual-studio-2010 visual-c++ msdn