WinKill() 源代码
WinKill() source code
有人可以分享 WinKill()
from AutoIt 的源代码吗?
我想知道它如何处理消息 (yes/no/cancel) 以确保它得到正确处理。我想用它来清除意外弹出窗口中的桌面 windows。
不是开源函数。你不能知道来源。不过理解起来并不复杂。这是一个简单的函数,有很多 If...then... 调用来检查标准,然后简单地杀死 window。与您使用 cmd 命令执行的操作非常相似。
AutoIt 具有原生和标准功能。本机是开源的,您可以在 AutoIt 安装目录的 Include 文件夹中找到它们。
另一方面,标准的不是开源的。它们是用 C++ 编写的。
正如我们在下面的源代码中看到的那样,该源代码取自最新的 AutoIt 开源版本(当它曾经是开源的)并且可用 here,该函数发送 WM_CLOSE 消息到 window。如果 window 没有在 500 毫秒内关闭,那么它会终止创建 window.
的进程
///////////////////////////////////////////////////////////////////////////////
// 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()
有人可以分享 WinKill()
from AutoIt 的源代码吗?
我想知道它如何处理消息 (yes/no/cancel) 以确保它得到正确处理。我想用它来清除意外弹出窗口中的桌面 windows。
不是开源函数。你不能知道来源。不过理解起来并不复杂。这是一个简单的函数,有很多 If...then... 调用来检查标准,然后简单地杀死 window。与您使用 cmd 命令执行的操作非常相似。
AutoIt 具有原生和标准功能。本机是开源的,您可以在 AutoIt 安装目录的 Include 文件夹中找到它们。 另一方面,标准的不是开源的。它们是用 C++ 编写的。
正如我们在下面的源代码中看到的那样,该源代码取自最新的 AutoIt 开源版本(当它曾经是开源的)并且可用 here,该函数发送 WM_CLOSE 消息到 window。如果 window 没有在 500 毫秒内关闭,那么它会终止创建 window.
的进程///////////////////////////////////////////////////////////////////////////////
// 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()