我正在开发一个小程序,以便在使用Microsoft远程协助(msra.exe)时让我的生活更轻松。使用c ++,我可以打开msra.exe,然后找到窗口句柄。然后我想找到子窗口(按钮),并与它们进行交互。问题似乎是,我找不到我想要的按钮。 Spy ++显示按钮有这个文本:
Window 004902F4“邀请您信任的人帮助您”按钮。
我的程序在搜索此字符串时返回该按钮,该按钮不存在。有人有主意吗?这是代码:
#include "stdafx.h"
#include <windows.h>
#include <string>
#include <sys/types.h>
#include <stdlib.h>
#include <Windows.h>
#include <process.h>
using std::string;
void openRA(void * dummy);
int _tmain(int argc, _TCHAR* argv[])
{
_beginthread(openRA, 0, NULL);
Sleep(1000);
HWND handle = NULL;
handle = FindWindow(NULL, TEXT("Windows Remote Assistance"));
if(handle == NULL){
printf("handle was null\n");
}
else{
printf("handle was not null\n");
}
HWND button1 = NULL;
Sleep(1000);
button1 = FindWindowEx(handle, 0, 0, TEXT("Invite someone you trust to help you"));
if(button1 == NULL){
printf("Button1 was null");
}
else{
printf("I found he button!");
}
fflush(stdout);
return 0;
}
void openRA( void * dummy){
printf("I'm inside this function\n");
system("msra.exe &");
}
编辑:
这是spy ++显示的图像。
答案 0 :(得分:4)
顶级窗口的标题为“Windows远程协助”。这是FindWindow
返回的窗口。
这包含一个嵌入式对话框,该对话框还有“Windows远程协助”标题,并包含您感兴趣的按钮。
该按钮不是顶级窗口的直接子项,因此FindWindowEx
找不到它。
使用EnumChildWindows
递归枚举顶级窗口的所有子项并自行检查字幕。
答案 1 :(得分:-1)
我在这里制作了这段代码,所以没试过(我现在正在运行我的linux)
EnumChildWindows(FindWindow(NULL, TEXT("Windows Remote Assistance), (WNDENUMPROC)&EnumProc, 0);
//------------------------------------------------------------------------
BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam);
{
LPTSTR szBuff;
if (GetWindowText(hwnd, szBuff, sizeof(szBuff)
{
if (!strcmp("Invite someone you trust to help you", szBuff)
{
//We found the button!
}
}
//No button was found
}