2015-09-01 133 views

回答

2

正如我們在下面的源代碼中所看到的那樣,AutoIt的最新開源版本(當它是開源的)和可用的here的源代碼中,該函數將WM_CLOSE消息發送到窗口。如果窗口在500毫秒內沒有關閉,則它會殺死創建該窗口的進程。

/////////////////////////////////////////////////////////////////////////////// 
// WinKill() 
// Closes a window - uses more force than WinClose 
/////////////////////////////////////////////////////////////////////////////// 

AUT_RESULT AutoIt_Script::F_WinKill(VectorVariant &vParams, Variant &vResult) 
{ 
    Win_WindowSearchInit(vParams); 

    if (Win_WindowSearch() == false) 
     return AUT_OK;       // Required window not found 

    Util_WinKill(m_WindowSearchHWND); 
    Util_Sleep(m_nWinWaitDelay);    // Briefly pause before continuing 

    return AUT_OK; 

} // WinKill() 

/////////////////////////////////////////////////////////////////////////////// 
// Util_WinKill() 
// 
// Closes a window with extreme predjudice 
// 
/////////////////////////////////////////////////////////////////////////////// 

void Util_WinKill(HWND hWnd) 
{ 
    DWORD  dwResult; 

    LRESULT lResult = SendMessageTimeout(hWnd, WM_CLOSE, 0, 0, SMTO_ABORTIFHUNG, 500, &dwResult); // wait 500ms 

    if(!lResult) 
    { 
     // Use more force - Mwuahaha 

     // Get the ProcessId for this window. 
     DWORD pid; 
     GetWindowThreadProcessId(hWnd, &pid); 

     // Open the process with all access. 
     HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid); 

     // Terminate the process. 
     TerminateProcess(hProcess, 0); 

     CloseHandle(hProcess); 
    } 

} // Util_WinKill() 
2

它不是一個開源函數。你無法知道來源。然而,這並不難理解。這是一個簡單的函數,其中有很多If ... then ...調用來檢查標準,然後簡單地終止窗口。與使用cmd命令完成的操作非常相似。

AutoIt具有本地和標準功能。原生的是開源的,您可以在包含文件夾的AutoIt安裝目錄中找到它們。 另一方面的標準不是開源的。它們是用C++編寫的。