2013-07-24 95 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

相關問題