2

我正在开发一个小程序,以便在使用 Microsoft 远程协助 (msra.exe) 时让我的生活更轻松。使用 c++,我可以打开 msra.exe,然后找到窗口句柄。然后我想找到子窗口(按钮),并与它们进行交互。问题似乎是,我找不到我想要的按钮。Spy++ 显示按钮具有以下文本:

窗口 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++ 显示的图像。 间谍++图像

4

2 回答 2

4

顶级窗口的标题为“Windows 远程协助”。这是由 . 返回的窗口FindWindow

这包含一个嵌入式对话框,该对话框还具有标题“Windows 远程协助”并包含您感兴趣的按钮。

该按钮不是顶级窗口的直接子级,因此FindWindowEx找不到它。

用于EnumChildWindows递归枚举顶层窗口的所有子窗口并自己检查标题。

于 2012-06-15T16:21:46.847 回答
-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
}
于 2012-06-15T21:05:04.710 回答