Может кто-нибудь поделиться исходным кодом WinKill()
от AutoIt?
Я хочу знать, как это работает с сообщениями (да / нет / отмена), чтобы убедиться, что он обрабатывается правильно. Я хочу использовать его для очистки рабочего стола от неожиданных всплывающих окон.
Как мы видим ниже в исходном коде, взятом из последней версии AutoIt с открытым исходным кодом (когда-то это был открытый исходный код) и доступной Вот, функция отправляет сообщение 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()
Это не функция с открытым исходным кодом. Вы не можете знать источник. Однако это не сложно понять. Это простая функция с большим количеством вызовов If … then … для проверки стандартов и простого удаления окна. Очень похоже на то, что вы делаете с командой cmd.
AutoIt имеет родные и стандартные функции. Нативные с открытым исходным кодом, и вы можете найти их в установленном вами каталоге AutoIt в папке «Включить».
Стандартные, наоборот, не являются открытыми. Они написаны на C ++.