【问题标题】:EnumWindowsProc() only works first time program is runEnumWindowsProc() 仅在程序第一次运行时有效
【发布时间】:2013-07-24 22:58:33
【问题描述】:

在我的 main 函数中,我使用以下行 EnumWindows(EnumWindowsProc, NULL)。我将程序设置为作为计划任务运行。当手动运行时,它可以正常工作,但是,当作为计划任务运行后续时间时,此功能会失败。如果它被正确调用,它永远不会执行里面的代码。我一直在为此挠头,但我不知道为什么。有人建议 hwnd 可能是导致它的原因,但没有足够的知识可以肯定地说。我觉得这是函数参数的错误,但不知道该怎么做才能使它起作用。为什么此功能在后续运行中失败?

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
    char title[80];
    const char* filepath = somedir; //I checked, this isn't the failure point
    ofstream myfile;
    myfile.open (filepath, ios::app);
    if (IsAltTabWindow(hwnd))
    {
        //myfile.open (filepath, ios::app);  //I was trying opening at different points
        if (myfile.is_open())
        {           
           DWORD pid;
           GetWindowThreadProcessId(hwnd, &pid);
           //GetClassName(hwnd,class_name, sizeof(class_name));
            GetWindowText(hwnd,title, sizeof(title));
           myfile << "Window title: " << title << "        ";
           myfile << "PID: " << pid << endl;
        }
        else 
           MessageBox(NULL, "ERROR", NULL, MB_OK);
        //myfile.close();
    }  

}

【问题讨论】:

    标签: c++ windows windows-xp mingw


    【解决方案1】:

    根据计划任务的配置方式,您的程序可能会在当前登录用户的交互式桌面以外的桌面上运行;事实上,它可能在根本没有用户登录时运行。在这种情况下,桌面上根本没有窗口的可能性很高,因此没有什么可列举的。

    您希望将任务设置为在您的用户帐户下运行,并选择“仅在用户登录时运行”选项。

    【讨论】:

    • 非常感谢!我最初将它设置为通过命令行在系统下运行,并且系统没有桌面。我将其更改为在用户帐户下运行,并且可以正常工作!我将不得不重写一些代码,但至少错误已经消失了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多