WinKill () исходный код

Может кто-нибудь поделиться исходным кодом WinKill() от AutoIt?

Я хочу знать, как это работает с сообщениями (да / нет / отмена), чтобы убедиться, что он обрабатывается правильно. Я хочу использовать его для очистки рабочего стола от неожиданных всплывающих окон.

0

Решение

Как мы видим ниже в исходном коде, взятом из последней версии 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()
2

Другие решения

Это не функция с открытым исходным кодом. Вы не можете знать источник. Однако это не сложно понять. Это простая функция с большим количеством вызовов If … then … для проверки стандартов и простого удаления окна. Очень похоже на то, что вы делаете с командой cmd.

AutoIt имеет родные и стандартные функции. Нативные с открытым исходным кодом, и вы можете найти их в установленном вами каталоге AutoIt в папке «Включить».
Стандартные, наоборот, не являются открытыми. Они написаны на C ++.

2