2013-07-24 72 views
0

在我的主要功能中,我使用以下行EnumWindows(EnumWindowsProc, NULL)。我将程序设置为按计划任务运行。当手动运行时,它会正常工作,但是,如果将后续时间作为计划任务运行,则此功能失败。如果它被正确调用,它永远不会执行里面的代码。我一直在这个问题上摸不着头脑,我无法弄清楚为什么。有人建议hwnd可能会导致它,但不知道足够肯定地说。我觉得它的功能参数错误,但不知道该怎么做才能使它工作。为什么此功能在后续运行中失败?EnumWindowsProc()仅在第一次运行程序时运行

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(); 
    } 

} 

回答

1

根据计划任务是如何配置的,你的程序可能会比当前登录的用户的交互桌面以外的桌面上运行;实际上,它可能在没有用户登录时运行。在这种情况下,桌面上几乎没有窗口的机会很高,因此没有任何东西可以列举。

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

+0

非常感谢!我最初将它设置为通过命令行在系统下运行,并且系统没有桌面。我改变它在用户帐户下运行,它的工作原理!我将不得不重写一些代码,但至少该错误消失了。 – sommerjj

相关问题