Code: Select all
//// Force turning on AECO_ENTIRENEWLINEDRAW setting for every edit window.
var hScript;
if ((hScript=AkelPad.ScriptHandle(WScript.ScriptName, 3 /*SH_FINDSCRIPT*/)) && AkelPad.ScriptHandle(hScript, 13 /*SH_GETMESSAGELOOP*/))
{
//Script is running, second call close it.
AkelPad.ScriptHandle(hScript, 33 /*SH_CLOSESCRIPT*/);
}
else
{
//Script initialized after empty tab is already created.
OnEditStart(AkelPad.GetEditWnd());
if (AkelPad.WindowSubClass(1 /*WSC_MAINPROC*/, MainCallback, 0x40B /*AKDN_EDIT_ONSTART*/))
{
//Allow other scripts running and unlock main thread from waiting this script.
AkelPad.ScriptNoMutex(0x3 /*ULT_UNLOCKSCRIPTSQUEUE|ULT_UNLOCKPROGRAMTHREAD*/);
//Message loop
AkelPad.WindowGetMessage();
AkelPad.WindowUnsubClass(1 /*WSC_MAINPROC*/);
}
}
function MainCallback(hWnd, uMsg, wParam, lParam)
{
if (uMsg == 0x40B /*AKDN_EDIT_ONSTART*/)
{
OnEditStart(wParam);
}
}
function OnEditStart(hWnd)
{
AkelPad.SendMessage(hWnd, 3228 /*AEM_SETOPTIONS*/, 2 /*AECOOP_OR*/, 0x8000 /*AECO_ENTIRENEWLINEDRAW*/);
}
Code: Select all
//// Turn on word wrap for .c, .cpp, .h files and turn off for others.
var hMainWnd=AkelPad.GetMainWnd();
var hScript;
if ((hScript=AkelPad.ScriptHandle(WScript.ScriptName, 3 /*SH_FINDSCRIPT*/)) && AkelPad.ScriptHandle(hScript, 13 /*SH_GETMESSAGELOOP*/))
{
//Script is running, second call close it.
AkelPad.ScriptHandle(hScript, 33 /*SH_CLOSESCRIPT*/);
}
else
{
//Script initialized after empty tab is already created.
OnEditStart(AkelPad.GetEditWnd());
if (AkelPad.WindowSubClass(1 /*WSC_MAINPROC*/, MainCallback, 0x40B /*AKDN_EDIT_ONSTART*/, 0x436 /*AKDN_OPENDOCUMENT_FINISH*/, 0x438 /*AKDN_SAVEDOCUMENT_FINISH*/))
{
//Allow other scripts running and unlock main thread from waiting this script.
AkelPad.ScriptNoMutex(0x3 /*ULT_UNLOCKSCRIPTSQUEUE|ULT_UNLOCKPROGRAMTHREAD*/);
//Message loop
AkelPad.WindowGetMessage();
AkelPad.WindowUnsubClass(1 /*WSC_MAINPROC*/);
}
}
function MainCallback(hWnd, uMsg, wParam, lParam)
{
if (uMsg == 0x40B /*AKDN_EDIT_ONSTART*/)
{
OnEditStart(wParam);
}
else if (uMsg == 0x436 /*AKDN_OPENDOCUMENT_FINISH*/ ||
uMsg == 0x438 /*AKDN_SAVEDOCUMENT_FINISH*/)
{
//Get current file extension
var pFile=AkelPad.GetEditFile(0);
var nExtPos=pFile.lastIndexOf(".");
var pExt="";
if (nExtPos != -1)
pExt=pFile.substr(nExtPos).toLowerCase();
if (pExt == ".c" || pExt == ".cpp" || pExt == ".h")
{
//Turn on word wrap for matched files
if (!AkelPad.SendMessage(hMainWnd, 1223 /*AKD_GETFRAMEINFO*/, 17 /*FI_WORDWRAP*/, 0))
AkelPad.Command(4209 /*IDM_VIEW_WORDWRAP*/);
}
}
}
function OnEditStart(hWnd)
{
//Turn off word wrap for any new window
if (AkelPad.SendMessage(hMainWnd, 1223 /*AKD_GETFRAMEINFO*/, 17 /*FI_WORDWRAP*/, 0))
AkelPad.Command(4209 /*IDM_VIEW_WORDWRAP*/);
}
Code: Select all
//// Open binary file in associated program, if user cancel opening in AkelPad.
var hMainWnd=AkelPad.GetMainWnd();
var oSys=AkelPad.SystemFunction();
var hScript;
var pOpenFile;
var lpOpenFilePtr;
if ((hScript=AkelPad.ScriptHandle(WScript.ScriptName, 3 /*SH_FINDSCRIPT*/)) && AkelPad.ScriptHandle(hScript, 13 /*SH_GETMESSAGELOOP*/))
{
//Script is running, second call close it.
AkelPad.ScriptHandle(hScript, 33 /*SH_CLOSESCRIPT*/);
}
else if (AkelPad.WindowSubClass(1 /*WSC_MAINPROC*/, MainCallback, 0x435 /*AKDN_OPENDOCUMENT_START*/, 0x436 /*AKDN_OPENDOCUMENT_FINISH*/))
{
//Allow other scripts running and unlock main thread from waiting this script.
AkelPad.ScriptNoMutex(0x3 /*ULT_UNLOCKSCRIPTSQUEUE|ULT_UNLOCKPROGRAMTHREAD*/);
AkelPad.WindowGetMessage();
AkelPad.WindowUnsubClass(1 /*WSC_MAINPROC*/);
}
function MainCallback(hWnd, uMsg, wParam, lParam)
{
if (uMsg == 0x435 /*AKDN_OPENDOCUMENT_START*/)
{
lpOpenFilePtr=AkelPad.MemRead(lParam + 0 /*offsetof(NOPENDOCUMENT, pFile)*/, 2 /*DT_QWORD*/);
pOpenFile=AkelPad.MemRead(lpOpenFilePtr, _TSTR);
}
else if (uMsg == 0x436 /*AKDN_OPENDOCUMENT_FINISH*/)
{
if (lParam == -22 /*EOD_MSGCANCELBINARY*/)
{
oSys.Call("shell32::ShellExecute" + _TCHAR, hMainWnd, "open", pOpenFile, 0, 0, 1 /*SW_SHOWNORMAL*/);
//Exit program, if file opened on program start
if (AkelPad.SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 90 /*MI_ONSTART*/, 0))
AkelPad.Command(4109 /*IDM_FILE_EXIT*/);
}
}
}
Code: Select all
//// Allows undo file reopen. Require flag 1 of manual parameter "EditStyle".
var hMainWnd=AkelPad.GetMainWnd();
var hWndEdit;
var oSys=AkelPad.SystemFunction();
var hScript;
var hUndoStack=0;
var lpdwFlags;
var dwFlags;
if ((hScript=AkelPad.ScriptHandle(WScript.ScriptName, 3 /*SH_FINDSCRIPT*/)) && AkelPad.ScriptHandle(hScript, 13 /*SH_GETMESSAGELOOP*/))
{
//Script is running, second call close it.
AkelPad.ScriptHandle(hScript, 33 /*SH_CLOSESCRIPT*/);
}
else
{
if (AkelPad.WindowSubClass(1 /*WSC_MAINPROC*/, MainCallback, 0x435 /*AKDN_OPENDOCUMENT_START*/, 0x436 /*AKDN_OPENDOCUMENT_FINISH*/))
{
//Allow other scripts running and unlock main thread from waiting this script.
AkelPad.ScriptNoMutex(0x3 /*ULT_UNLOCKSCRIPTSQUEUE|ULT_UNLOCKPROGRAMTHREAD*/);
//Message loop
AkelPad.WindowGetMessage();
AkelPad.WindowUnsubClass(1 /*WSC_MAINPROC*/);
}
}
function MainCallback(hWnd, uMsg, wParam, lParam)
{
if (uMsg == 0x435 /*AKDN_OPENDOCUMENT_START*/)
{
hWndEdit=AkelPad.SendMessage(hMainWnd, 1223 /*AKD_GETFRAMEINFO*/, 2 /*FI_WNDEDIT*/, wParam);
lpdwFlags=AkelPad.MemRead(lParam + (_X64?40:20) /*offsetof(NOPENDOCUMENT, dwFlags)*/, 3 /*DT_DWORD*/);
dwFlags=AkelPad.MemRead(lpdwFlags, 3 /*DT_DWORD*/);
if (dwFlags & 0x100 /*OD_REOPEN*/)
hUndoStack=AkelPad.SendMessage(hWndEdit, 3090 /*AEM_DETACHUNDO*/, 0, 0);
}
else if (uMsg == 0x436 /*AKDN_OPENDOCUMENT_FINISH*/)
{
if (hUndoStack)
{
hWndEdit=AkelPad.SendMessage(hMainWnd, 1223 /*AKD_GETFRAMEINFO*/, 2 /*FI_WNDEDIT*/, wParam);
if (lParam == 0 /*EOD_SUCCESS*/)
AkelPad.SendMessage(hWndEdit, 3091 /*AEM_ATTACHUNDO*/, 0, hUndoStack);
else
AkelPad.SendMessage(hWndEdit, 3079 /*AEM_EMPTYUNDOBUFFER*/, 0, hUndoStack);
hUndoStack=0;
}
}
}
Code: Select all
//// Add every opened file (with associated extension) to system recent documents.
var hMainWnd=AkelPad.GetMainWnd();
var oSys=AkelPad.SystemFunction();
var hScript;
if ((hScript=AkelPad.ScriptHandle(WScript.ScriptName, 3 /*SH_FINDSCRIPT*/)) && AkelPad.ScriptHandle(hScript, 13 /*SH_GETMESSAGELOOP*/))
{
//Script is running, second call close it.
AkelPad.ScriptHandle(hScript, 33 /*SH_CLOSESCRIPT*/);
}
else
{
if (AkelPad.WindowSubClass(1 /*WSC_MAINPROC*/, MainCallback, 0x436 /*AKDN_OPENDOCUMENT_FINISH*/))
{
//Allow other scripts running and unlock main thread from waiting this script.
AkelPad.ScriptNoMutex(0x3 /*ULT_UNLOCKSCRIPTSQUEUE|ULT_UNLOCKPROGRAMTHREAD*/);
//Message loop
AkelPad.WindowGetMessage();
AkelPad.WindowUnsubClass(1 /*WSC_MAINPROC*/);
}
}
function MainCallback(hWnd, uMsg, wParam, lParam)
{
if (uMsg == 0x436 /*AKDN_OPENDOCUMENT_FINISH*/)
{
oSys.Call("shell32::SHAddToRecentDocs", _TSTR?0x3 /*SHARD_PATHW*/:0x2 /*SHARD_PATHA*/, AkelPad.GetEditFile(0));
}
}
2. В командной строке запуска AkelPad'а или в ручном параметре "CmdLineBegin" добавляем следующую команду:
Code: Select all
/Call("Scripts::Main", 2, "AutoScript-Sample1.js")