Code: Select all
var aWnd = EnumTopLevelWindows(1 /*nTitle*/, 1 /*nVisible*/, 2 /*nMinimized*/, 2 /*nMaximized*/, 1 /*nSize*/, 2 /*nTopMost*/, 2 /*nToolWin*/);
var sTxt = "";
var i;
for (i = 0; i < aWnd.length; ++i)
sTxt += aWnd[i].BaseName + " " + aWnd[i].Title + "\n";
AkelPad.Command(4101 /*IDM_FILE_NEW*/);
AkelPad.ReplaceSel(sTxt);
AkelPad.SendMessage(AkelPad.GetEditWnd(), 3087 /*AEM_SETMODIFY*/, false, 0);
AkelPad.SendMessage(AkelPad.GetEditWnd(), 3079 /*AEM_EMPTYUNDOBUFFER*/, 0, 0);
function EnumTopLevelWindows(nTitle, nVisible, nMinimized, nMaximized, nSize, nTopMost, nToolWin)
{
var oSys = AkelPad.SystemFunction();
var lpCallback = oSys.RegisterCallback(EnumWindowsProc);
var lpInfo = AkelPad.MemAlloc(260 * _TSIZE);
var aWnd = [];
var hWnd;
var hMenu;
var sTitle;
var bVisible;
var bMinimized;
var bMaximized;
var nX;
var nY;
var nW;
var nH;
var bTopMost;
var sClass;
var nPID;
var nTID;
var hProcess;
var sFileName;
var sBaseName;
var i;
var nReturn;
WScript.Echo("RegisterCallback: " + lpCallback);
nReturn = oSys.Call("User32::EnumWindows", lpCallback, 0);
WScript.Echo("User32::EnumWindows: " + nReturn + ", " + oSys.GetLastError());
oSys.UnregisterCallback(lpCallback);
for (i = 0; i < aWnd.length; ++i)
{
hWnd = aWnd[i];
hMenu = oSys.Call("User32::GetMenu", hWnd);
AkelPad.SendMessage(hWnd, 0x000D /*WM_GETTEXT*/, 260, lpInfo);
sTitle = AkelPad.MemRead(lpInfo, _TSTR);
bVisible = oSys.Call("User32::IsWindowVisible", hWnd);
bMinimized = oSys.Call("User32::IsIconic", hWnd);
bMaximized = oSys.Call("User32::IsZoomed", hWnd);
oSys.Call("User32::GetWindowRect", hWnd, lpInfo);
nX = AkelPad.MemRead(lpInfo, 3 /*DT_DWORD*/);
nY = AkelPad.MemRead(lpInfo + 4, 3 /*DT_DWORD*/);
nW = AkelPad.MemRead(lpInfo + 8, 3 /*DT_DWORD*/) - nX;
nH = AkelPad.MemRead(lpInfo + 12, 3 /*DT_DWORD*/) - nY;
bTopMost = oSys.Call("User32::GetWindowLong" + _TCHAR, hWnd, -20 /*GWL_EXSTYLE*/) & 0x00000008 /*WS_EX_TOPMOST*/;
bToolWin = oSys.Call("User32::GetWindowLong" + _TCHAR, hWnd, -20 /*GWL_EXSTYLE*/) & 0x00000080 /*WS_EX_TOOLWINDOW*/;
if (((nTitle == 0) && sTitle) || ((nTitle == 1) && (! sTitle)) ||
((nVisible == 0) && bVisible) || ((nVisible == 1) && (! bVisible)) ||
((nMinimized == 0) && bMinimized) || ((nMinimized == 1) && (! bMinimized)) ||
((nMaximized == 0) && bMaximized) || ((nMaximized == 1) && (! bMaximized)) ||
((nSize == 0) && (nW + nH)) || ((nSize == 1) && (! (nW + nH))) ||
((nTopMost == 0) && bTopMost) || ((nTopMost == 1) && (! bTopMost)) ||
((nToolWin == 0) && bToolWin) || ((nToolWin == 1) && (! bToolWin)))
aWnd.splice(i--, 1);
else
{
nReturn = oSys.Call("User32::GetClassName" + _TCHAR, hWnd, lpInfo, 260);
WScript.Echo((i + 1) + "\nUser32::GetClassName: " + nReturn + ", " + oSys.GetLastError());
sClass = AkelPad.MemRead(lpInfo, _TSTR);
nTID = oSys.Call("User32::GetWindowThreadProcessId", hWnd, lpInfo);
WScript.Echo((i + 1) + "\nUser32::GetWindowThreadProcessId: " + nTID + ", " + oSys.GetLastError());
nPID = AkelPad.MemRead(lpInfo, 3 /*DT_DWORD*/);
hProcess = oSys.Call("Kernel32::OpenProcess", 0x0410 /*PROCESS_QUERY_INFORMATION|PROCESS_VM_READ*/, 0, nPID);
WScript.Echo((i + 1) + "\nKernel32::OpenProcess: " + hProcess + ", " + oSys.GetLastError());
nReturn = oSys.Call("Psapi::GetModuleFileNameEx" + _TCHAR, hProcess, 0, lpInfo, 260);
WScript.Echo((i + 1) + "\nPsapi::GetModuleFileNameEx: " + nReturn + ", " + oSys.GetLastError());
if (nReturn)
sFileName = AkelPad.MemRead(lpInfo, _TSTR);
else
sFileName = "unknown";
nReturn = oSys.Call("Psapi::GetModuleBaseName" + _TCHAR, hProcess, 0, lpInfo, 260);
WScript.Echo((i + 1) + "\nPsapi::GetModuleBaseName: " + nReturn + ", " + oSys.GetLastError());
if (nReturn)
sBaseName = AkelPad.MemRead(lpInfo, _TSTR);
else
sBaseName = "unknown";
nReturn = oSys.Call("Kernel32::CloseHandle", hProcess);
WScript.Echo((i + 1) + "\nKernel32::CloseHandle: " + nReturn + ", " + oSys.GetLastError());
aWnd[i] = {Handle : hWnd,
Menu : hMenu,
Title : sTitle,
Visible : bVisible,
Minimized : bMinimized,
Maximized : bMaximized,
X : nX,
Y : nY,
W : nW,
H : nH,
TopMost : bTopMost,
ToolWin : bToolWin,
Class : sClass,
PID : nPID,
TID : nTID,
FileName : sFileName,
BaseName : sBaseName};
}
}
AkelPad.MemFree(lpInfo);
return aWnd;
function EnumWindowsProc(hWnd, lParam)
{
aWnd.push(hWnd);
return true;
}
}