首页 > 解决方案 > 为什么我的 windows 消息框总是选择你的路径 c++?

问题描述

下面是我试图附加到窗口的程序,它可以工作,但我希望用户可以选择尝试附加窗口而不重新打开程序。我用switch语句尝试了这个,但是如果找不到进程并且用户打开它然后按下重试,为什么当进程没有打开时它会重复错误。
编码 -

class attach 
{
DWORD ProcID;
HWND hwnd = FindWindowA(NULL, "SONIC HEROES(TM)");
void attempt()
{
    if (hwnd == NULL)
    {
        const int Window = MessageBoxA(0, "Failed to attach Window!", "Attention", MB_RETRYCANCEL | MB_ICONERROR);
        switch (Window)
        {
        case IDRETRY:
            attempt();
            break;
        case IDCANCEL:
            exit(-1);
            break;
        }
    }
    else
    {
        MessageBoxA(0, "Window Found!", "Attention", MB_OK | MB_ICONHAND);
    }
}
};

标签: c++winapi

解决方案


您可以放入FindWindowA函数attempt()并创建一个数组来完成。

这是一个最小的代码示例:

#include <Windows.h>
#include <iostream>

using namespace std;

CHAR* name = (CHAR*)malloc(1024);

class attach
{
public:     
    void attempt();

private:
    DWORD ProcID;
    HWND hwnd;
};

void attach::attempt()
{      
    hwnd = FindWindowA(NULL, name);
    if (hwnd == NULL)
    {
        hwnd = FindWindowA(NULL, name);
        const int Window = MessageBoxA(0, "Failed to attach Window!", "Attention", MB_RETRYCANCEL | MB_ICONERROR);
        switch (Window)
        {
        case IDRETRY:
            attempt();
            break;
        case IDCANCEL:
            return;
        }
    }
    else
    {
        MessageBoxA(0, "Window Found!", "Attention", MB_OK | MB_ICONHAND);
        cout << "If you want to attach new process, please input new application name:" << endl;
        cin >> name;
        attempt();
    }
}

int main()
{
    cout << "Input your application name:" << endl;
    cin >> name;
    attach a;
    a.attempt();

    free(name);

    return 0;

}

推荐阅读