我正在尝试找到一个名为“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?是否有其他方法可以找到此窗口?
答案 0 :(得分:1)
您必须找到要查找的窗口的窗口类名称。您目前只知道创建窗口的过程是SoftKeyboard.exe。首先,您必须确定此过程的进程ID。在任务管理器中,进程ID通常位于可执行文件名旁边的第二列中。使用Spy ++或以下临时代码片段来发现属于此过程的所有窗口类名称:
BOOL CALLBACK WriteWindowClass(HWND hWnd, LPARAM lParam)
{
DWORD nThreadID, nProcessID;
nThreadID = GetWindowThreadProcessId(hWnd, &nProcessID);
if (nProcessID == XXX) // Write SoftKeyboard's Process ID instead of XXX
{
WCHAR szClassName[256];
GetClassName(hWnd, szClassName, 256);
std::wcout << szClassName << std::endl;
}
return TRUE;
}
int wmain(int argc, wchar_t* argv[])
{
EnumWindows(WriteWindowClass, 0);
return 0;
}
您可能只会在控制台中看到一行。此行中的文本是类名,此文本应作为第三个参数提供给FindWindowEx
,而不是现有的“SoftKeyboard.exe * 32”。
对于“未使用的CXX0030”问题只需google it:未使用的CXX0030。你会发现这很正常。
答案 1 :(得分:0)
窗口类名称不是出现在窗口顶部的名称。确定窗口类名称的唯一方法是使用Visual Studio附带的Spy ++工具。