*****************************************************************
***                 Scripts AkelPad plugin v18.6              ***
*****************************************************************

2007-2016   aka Instructor (Shengalts@mail.ru)


***  ***

Scripts     Windows Scripting Host (WSH),
 ,     Windows Component
Object Model (COM) . ,   
   ,  RegExp , 
 ,  FileSystemObject ,  ,
   Windows,  WshShell , 
   ,  WshNetwork .  
    ,   
 ,  Automation ( 
Word  Excel).     "COM in C"  Jeff Glatt.


***   ***

SearchReplace.js      -/    .
SpellCheck.js         - ,  Microsoft Word.
LinesFilter.js        - .
Calculator.js         - .
EvalCmd.js            - ,    .
InsertDate.js         -      .
InsertFile.js         -   .
RenameFile.js         -  .
Keyboard.js           -     .
ColumnCounter.js      -  ()  .
Test.js               -   JScript.
Test.vbs              -   VBScript.


***  ***

Scripts::Main
 .


***   ***

Call("Scripts::Main", 1, "SCRIPT", "ARGUMENTS")
  :
    1
       .
    "SCRIPT"
        .  "",     .
    "ARGUMENTS"
       (  "").
  :
    Call("Scripts::Main", 1, "InsertDate.js")
    Call("Scripts::Main", 1, "InsertDate.js", `"dd MMMM yyyy"`)

Call("Scripts::Main", 2, "SCRIPT", "ARGUMENTS")
   ,   1,    .

Call("Scripts::Main", 3, "SCRIPT")
  :
    3
         .
    "SCRIPT"
        .  "",     .

Call("Scripts::Main", 4, "SCRIPT", "ARGUMENTS")
   ,   2,      ,    .
        AkelPad.WindowGetMessage().

Call("Scripts::Main", 5, "SCRIPT", OPERATION, *RESULT)
  :
    5
         .
    "SCRIPT"
        .  "",     .
    OPERATION
      .   nOperation   AkelPad.ScriptHandle.   SH_FINDSCRIPT.
    *RESULT
        .

   (  ):
    WScript.Echo(ScriptGetHandle("SearchReplace.js"));

    function ScriptGetHandle(pScript)
    {
      var oSys=AkelPad.SystemFunction();
      var nHandle=0;

      if (lpResult=AkelPad.MemAlloc(_X64?8:4 /*sizeof(INT_PTR)*/))
      {
        AkelPad.Call("Scripts::Main", 5, pScript, 2 /*SH_THISSCRIPT*/, lpResult);
        nHandle=AkelPad.MemRead(lpResult, 2 /*DT_QWORD*/);
        AkelPad.MemFree(lpResult);
      }
      return nHandle;
    }

   (  ):
    WScript.Echo(ScriptGetFile("SearchReplace.js"));

    function ScriptGetFile(pScript)
    {
      var oSys=AkelPad.SystemFunction();
      var lpFile;
      var pFile="";

      if (lpResult=AkelPad.MemAlloc(_X64?8:4 /*sizeof(INT_PTR)*/))
      {
        AkelPad.Call("Scripts::Main", 5, pScript, 22 /*SH_GETFILE*/, lpResult);
        lpFile=AkelPad.MemRead(lpResult, 2 /*DT_QWORD*/);
        pFile=AkelPad.MemRead(lpFile, 1 /*DT_UNICODE*/);
        oSys.Call("oleaut32::SysFreeString", lpFile);
        AkelPad.MemFree(lpResult);
      }
      return pFile;
    }

Call("Scripts::Main", 6, SCRIPTHANDLE, OPERATION, *RESULT)
   ,   5,       .

Call("Scripts::Main", 7, "METHOD", *RESULT)
  :
    7
        Scripts  .   ContextMenu, Hotkeys, Toolbar .
    "METHOD"
       Scripts   .
    *RESULT
       .
  :
    "  " Call("Scripts::Main", 7, `AkelPad.TextFind(0, "(?<=\n\n)(?!\n)", 0x80001 /*FRF_DOWN|FRF_REGEXP*/)`)


***     ***

        , 
    (    
    ),    AkelUpdater'  .

:
// http://akelpad.sourceforge.net/...

:
// Version: ...

:
// Author: ...

 ( 1):
//// Search and replace using regular expressions.

 ( 2):
// *** Search and replace using regular expressions. ***

    ( 3):
// Description(1033): Search and replace using regular expressions.
// Description(1049): /    .

   (Locale IDs Assigned by Microsoft):
http://msdn.microsoft.com/en-us/goglobal/bb964664.aspx


***   (,     AkelPad',   +ActiveX) ***

AkelPad.GetMainWnd
AkelPad.GetAkelDir
AkelPad.GetInstanceExe
AkelPad.GetInstanceDll                       +ActiveX
AkelPad.GetLangId
AkelPad.IsOldWindows                         +ActiveX
AkelPad.IsAkelEdit
AkelPad.IsMDI
AkelPad.GetEditWnd
AkelPad.SetEditWnd
AkelPad.GetEditDoc
AkelPad.GetEditFile
AkelPad.GetFilePath                          +ActiveX
AkelPad.GetEditCodePage
AkelPad.GetEditBOM
AkelPad.GetEditNewLine
AkelPad.GetEditModified
AkelPad.GetEditReadOnly
AkelPad.SetFrameInfo
AkelPad.SendMessage                          +ActiveX
AkelPad.MessageBox                           +ActiveX
AkelPad.InputBox                             +ActiveX
AkelPad.GetSelStart
AkelPad.GetSelEnd
AkelPad.SetSel
AkelPad.GetSelText
AkelPad.GetTextRange
AkelPad.ReplaceSel
AkelPad.TextFind
AkelPad.TextReplace
AkelPad.GetClipboardText                     +ActiveX
AkelPad.SetClipboardText                     +ActiveX
AkelPad.IsPluginRunning
AkelPad.Call
AkelPad.CallA
AkelPad.CallW
AkelPad.CallEx
AkelPad.CallExA
AkelPad.CallExW
AkelPad.Exec                                 +ActiveX
AkelPad.Command
AkelPad.Font
AkelPad.Recode
AkelPad.Include
AkelPad.IsInclude
AkelPad.OpenFile
AkelPad.ReadFile
AkelPad.WriteFile
AkelPad.SaveFile
AkelPad.SystemFunction                       +ActiveX
AkelPad.SystemFunction().AddParameter        +ActiveX
AkelPad.SystemFunction().Call                +ActiveX
AkelPad.SystemFunction().GetLastError        +ActiveX
AkelPad.SystemFunction().RegisterCallback    +ActiveX
AkelPad.SystemFunction().UnregisterCallback  +ActiveX
AkelPad.MemAlloc                             +ActiveX
AkelPad.MemCopy                              +ActiveX
AkelPad.MemRead                              +ActiveX
AkelPad.MemStrPtr                            +ActiveX
AkelPad.MemPtrStr                            +ActiveX
AkelPad.MemFree                              +ActiveX
AkelPad.DebugJIT                             +ActiveX
AkelPad.Debug                                +ActiveX
AkelPad.VarType                              +ActiveX
AkelPad.VarDispatch                          +ActiveX
AkelPad.GetArgLine
AkelPad.GetArgValue
AkelPad.ScriptSettings
AkelPad.ScriptSettings().Begin
AkelPad.ScriptSettings().Read
AkelPad.ScriptSettings().Write
AkelPad.ScriptSettings().Delete
AkelPad.ScriptSettings().End
AkelPad.WindowRegisterClass                  +ActiveX
AkelPad.WindowUnregisterClass                +ActiveX
AkelPad.WindowRegisterDialog                 +ActiveX
AkelPad.WindowUnregisterDialog               +ActiveX
AkelPad.CreateDialog                         +ActiveX
AkelPad.WindowGetMessage                     +ActiveX
AkelPad.WindowSubClass                       +ActiveX
AkelPad.WindowNextProc                       +ActiveX
AkelPad.WindowNoNextProc                     +ActiveX
AkelPad.WindowUnsubClass                     +ActiveX
AkelPad.ThreadHook                           +ActiveX
AkelPad.ThreadUnhook                         +ActiveX
AkelPad.ScriptNoMutex
AkelPad.ScriptExitCode
AkelPad.ScriptHandle                         +ActiveX
AkelPad.ConnectObject                        +ActiveX
AkelPad.DisconnectObject                     +ActiveX
AkelPad.ActiveXThis                          +ActiveX
WScript.ScriptBaseName
_TCHAR                                       +ActiveX   AkelPad.Constants._TCHAR
vbTCHAR                                      +ActiveX   AkelPad.Constants.vbTCHAR
_TSTR                                        +ActiveX   AkelPad.Constants._TSTR
vbTSTR                                       +ActiveX   AkelPad.Constants.vbTSTR
_TSIZE                                       +ActiveX   AkelPad.Constants._TSIZE
vbTSIZE                                      +ActiveX   AkelPad.Constants.vbTSIZE
_X64                                         +ActiveX   AkelPad.Constants._X64
vbX64                                        +ActiveX   AkelPad.Constants.vbX64
_PtrAdd                                      +ActiveX   AkelPad.Global._PtrAdd
vbPtrAdd                                     +ActiveX   AkelPad.Global.vbPtrAdd
_PtrMath                                     +ActiveX   AkelPad.Global._PtrMath
vbPtrMath                                    +ActiveX   AkelPad.Global.vbPtrMath


***   ***

AkelPad.GetMainWnd
__________________

   .

  GetMainWnd();

 
  .   .

:
  var hMainWnd=AkelPad.GetMainWnd();


AkelPad.GetAkelDir
__________________

  AkelPad'   .

  GetAkelDir([nSubDir]);


  nSubDir
    0  //ADTYPE_ROOT            AkelPad' ( ).
    1  //ADTYPE_AKELFILES     "[AkelPad]\AkelFiles".
    2  //ADTYPE_DOCS          "[AkelPad]\AkelFiles\Docs".
    3  //ADTYPE_LANGS         "[AkelPad]\AkelFiles\Langs".
    4  //ADTYPE_PLUGS         "[AkelPad]\AkelFiles\Plugs".
    5  //ADTYPE_SCRIPTS       "[AkelPad]\AkelFiles\Plugs\Scripts".
    6  //ADTYPE_INCLUDE       "[AkelPad]\AkelFiles\Plugs\Scripts\Include".

 
  .  AkelPad'   .

:
  var pAkelDir=AkelPad.GetAkelDir();


AkelPad.GetInstanceExe
______________________

   (EXE).

  GetInstanceExe();

 
  .   (EXE).

:
  var hInstance=AkelPad.GetInstanceExe();


AkelPad.GetInstanceDll (+ActiveX)
_________________________________

   (DLL).

  GetInstanceDll();

 
  .   (DLL).

:
  var hInstance=AkelPad.GetInstanceDll();


AkelPad.GetLangId
_________________

   .

  GetLangId([nType]);


  nType
    0  //LANGID_FULL       .          ( ).
    1  //LANGID_PRIMARY    .
    2  //LANGID_SUB        .

 
  .   .

:
  var nLangID=AkelPad.GetLangId(1 /*LANGID_PRIMARY*/);

  if (nLangID == 0x19) //LANG_RUSSIAN
    WScript.Echo("");
  else
    WScript.Echo("");


AkelPad.IsOldWindows (+ActiveX)
_______________________________

    Windows.

  IsOldWindows();

 
  true      (Windows 95/98/Me).
  false    (Windows NT/2000/XP).

:
  var bOldWindows=AkelPad.IsOldWindows();


AkelPad.IsAkelEdit
__________________

  AkelEdit'  ,    .

  IsAkelEdit([hWnd]);


  hWnd
      .     ,    AkelEdit'  .

 
  0  //ISAEW_NONE       RichEdit (AkelPad v3.x.x).
  1  //ISAEW_PROGRAM    AkelEdit (AkelPad v4.x.x  )
     //               ,   ,     AkelEdit  .
  2  //ISAEW_PLUGIN     ,     AkelEdit  .

:
  var nAkelEdit=AkelPad.IsAkelEdit();


AkelPad.IsMDI
_____________

    (MDI).

  IsMDI();

 
  0  //WMD_SDI     (SDI).
  1  //WMD_MDI     (MDI).
  2  //WMD_PMDI  -  (PMDI).

:
  var nMDI=AkelPad.IsMDI();


AkelPad.GetEditWnd
__________________

    .

  GetEditWnd();

 
  .    .

:
  var hWndEdit=AkelPad.GetEditWnd();


AkelPad.SetEditWnd
__________________

     .    GetEditWnd, GetEditDoc,
GetSelStart, GetSelEnd, SetSel, GetSelText, GetTextRange, ReplaceSel    .

  SetEditWnd(hHandle);


  hHandle
         :
      1   //SEW_FOCUS    ,   .
     ,  hHandle     AkelEdit/RichEdit20,
           .

 
  .    .

:
  var hWndOutput;

  if (hWndOutput=GetOutputWindow())
  {
    if (AkelPad.SetEditWnd(hWndOutput))
      AkelPad.SetSel(0, -1);
  }

  function GetOutputWindow()
  {
    var lpWnd;
    var hWnd=0;

    if (lpWnd=AkelPad.MemAlloc(_X64?8:4 /*sizeof(HWND)*/))
    {
      AkelPad.Call("Log::Output", 2, lpWnd);
      hWnd=AkelPad.MemRead(lpWnd, 2 /*DT_QWORD*/);
      AkelPad.MemFree(lpWnd);
    }
    return hWnd;
  }


AkelPad.GetEditDoc
__________________

   .

  GetEditDoc();

 
  .   .

:
  var hDocEdit=AkelPad.GetEditDoc();


AkelPad.GetEditFile
___________________

  .

  GetEditFile(hHandle);


  hHandle
      .  ,      .

 
  .  .

:
  var pEditFile=AkelPad.GetEditFile(0);


AkelPad.GetFilePath (+ActiveX)
______________________________

   .

  GetFilePath(pFile, nPart);


  pFile
     .
  nPart
    1  //CPF_DIR           .
    2  //CPF_FILENAME       .
    3  //CPF_FILEBASENAME     .
    4  //CPF_FILEEXT        .

 
  .   .

:
  var pFileName=AkelPad.GetFilePath("c:\\WINDOWS\\notepad.exe", 2 /*CPF_FILENAME*/);


AkelPad.GetEditCodePage
_______________________

  .

  GetEditCodePage(hHandle);


  hHandle
      .  ,      .

 
  . .

:
  var nCodePage=AkelPad.GetEditCodePage(0);


AkelPad.GetEditBOM
__________________

   BOM  .

  GetEditBOM(hHandle);


  hHandle
      .  ,      .

 
  true      BOM.
  false      BOM.

:
  var bBOM=AkelPad.GetEditBOM(0);


AkelPad.GetEditNewLine
______________________

    .

  GetEditNewLine(hHandle);


  hHandle
      .  ,      .

 
  1  DOS/Windows (0Dh, 0Ah)
  2  Unix (0Ah)
  3  Mac (0Dh)

:
  var nNewLine=AkelPad.GetEditNewLine(0);


AkelPad.GetEditModified
_______________________

   .

  GetEditModified(hHandle);


  hHandle
      .  ,      .

 
  true       .
  false       .

:
  var bModified=AkelPad.GetEditModified(0);


AkelPad.GetEditReadOnly
_______________________

    .

  GetEditReadOnly(hHandle);


  hHandle
      .  ,      .

 
  true      .
  false      .

:
  var bReadOnly=AkelPad.GetEditReadOnly(0);


AkelPad.SetFrameInfo
____________________

  .

  SetFrameInfo(lpFrame, nType, dwData);


  lpFrame
      .  ,      .
  nType
       . .   FIS_*  AkelDLL.h.
  dwData
      .

 
  true     .
  false    .


        SDI/MDI/PMDI.

:
  AkelPad.SetFrameInfo(0, 1 /*FIS_TABSTOPSIZE*/, 4);


AkelPad.SendMessage (+ActiveX)
______________________________

 .

  SendMessage(hHandle, nMessage, wParam, lParam);


  hHandle
     ,    .
  nMessage
    ,  .
  wParam
     .
  lParam
     .

 
  .    .

:
  var hMainWnd=AkelPad.GetMainWnd();
  AkelPad.SendMessage(hMainWnd, 273 /*WM_COMMAND*/, 4101 /*IDM_FILE_NEW*/, 0);


AkelPad.MessageBox (+ActiveX)
_____________________________

 .

  MessageBox(hHandle, pText, pCaption, nType[, hIcon][, ...]);


  hHandle
      .  ,     .
  pText
     .
  pCaption
     .
  nType
     . . MSDN.
  hIcon
     .  ,      nType.
  ...
      .       - nButtonID, pButtonStr, nFlags.
      nButtonID
         .
      pButtonStr
         .
      nFlags
        0x1  //BMB_DEFAULT     .
        0x2  //BMB_DISABLED   .


      4 ,     .
     ,      AkelPad'.
     ,  nType     MB_ICON*.

 
  .   .

 ( ):
  var hMainWnd=AkelPad.GetMainWnd();
  AkelPad.MessageBox(hMainWnd, "MyText", "MyCaption", 64 /*MB_ICONINFORMATION*/);

 ( ):
  var hMainWnd=AkelPad.GetMainWnd();
  var nChoice=AkelPad.MessageBox(hMainWnd, "MyText", "MyCaption", 32 /*MB_ICONQUESTION*/, 0,
              1 /*IDOK*/,     "&OK",     0x1 /*BMB_DEFAULT*/,
              2 /*IDCANCEL*/, "&Cancel", 0);
  WScript.Echo("Button ID=" + nChoice);


AkelPad.InputBox (+ActiveX)
___________________________

  .

  InputBox(hHandle, pCaption, pLabel, pEdit);


  hHandle
      .
  pCaption
     .
  pLabel
      .    \n    .
  pEdit
       .

 
  .   .    undefined.

:
  var hMainWnd=AkelPad.GetMainWnd();
  var pText=AkelPad.InputBox(hMainWnd, "MyCaption", "MyLabel", "MyText");


AkelPad.GetSelStart
___________________

  .

  GetSelStart();

 
  .   .

:
  var nSelStart=AkelPad.GetSelStart();


AkelPad.GetSelEnd
_________________

  .

  GetSelEnd();

 
  .   .

:
  var nSelEnd=AkelPad.GetSelEnd();


AkelPad.SetSel
______________

 .

  SetSel(nSelStart, nSelEnd[, nFlags]);


  nSelStart
      .
  nSelEnd
      .  -1,    .
  nFlags
    0x001  //AESELT_COLUMNON                .
    0x002  //AESELT_COLUMNASIS                .
    0x004  //AESELT_LOCKNOTIFY               AEN_SELCHANGING  AEN_SELCHANGED.
    0x008  //AESELT_LOCKSCROLL               .
    0x010  //AESELT_LOCKUPDATE               .
    0x020  //AESELT_LOCKCARET               .
    0x080  //AESELT_NOCARETHORZINDENT         .
    0x100  //AESELT_NOVERTSCROLLCORRECT            .

 
  .

:
  AkelPad.SetSel(0, 10);


AkelPad.GetSelText
__________________

  .

  GetSelText([nNewLine]);


  nNewLine (  AkelPad 4.x.x)
    0    //    .
    1    //"\r"    ( ).
    2    //"\n"   .
    3    //"\r\n"   .

 
  .  .

:
  var pSelText=AkelPad.GetSelText();


AkelPad.GetTextRange
____________________

    .

  GetTextRange(nRangeStart, nRangeEnd[, nNewLine]);


  nRangeStart
      .
  nRangeEnd
      .  -1,    .
  nNewLine (  AkelPad 4.x.x)
    0    //    .
    1    //"\r"    ( ).
    2    //"\n"   .
    3    //"\r\n"   .

 
  .   .

:
  var pTextRange=AkelPad.GetTextRange(0, 10);


AkelPad.ReplaceSel
__________________

 .

  ReplaceSel(pText[, nSelect]);


  pText
    ,   .
  nSelect
     0  //RST_NONE                     ( ).
    -1  //RST_SELECT                 .
    -2  //RST_SELECTRESTORESCROLL        .

 
  .

:
  AkelPad.ReplaceSel("MyText");


AkelPad.TextFind
________________

 .

  TextFind(hHandle, pFindIt, nFlags);


  hHandle
      .  ,      .
  pFindIt
      .
  nFlags
    0x00000001  //FRF_DOWN                 .
    0x00000002  //FRF_WHOLEWORD             .
    0x00000004  //FRF_MATCHCASE              .
    0x00040000  //FRF_REGEXPNONEWLINEDOT   .      ,    (: FRF_REGEXP|FRF_REGEXPNONEWLINEDOT).
    0x00080000  //FRF_REGEXP                 .
    0x00100000  //FRF_UP                   .
    0x00200000  //FRF_BEGINNING              (: FRF_DOWN|FRF_BEGINNING).
    0x00400000  //FRF_SELECTION              (: FRF_DOWN|FRF_SELECTION).
    0x00800000  //FRF_ESCAPESEQ             esc-.
    0x01000000  //FRF_ALLFILES                 (: FRF_DOWN|FRF_ALLFILES  FRF_DOWN|FRF_BEGINNING|FRF_ALLFILES).
    0x08000000  //FRF_CYCLESEARCH           .
    0x10000000  //FRF_CYCLESEARCHPROMPT       .
    0x80000000  //FRF_TEST                 .   .

 
  .   .
     ,   -1.
        (  FRF_REGEXP),   (-100 - ).
  , pFindIt  "ab[c",     ,   -102.

:
  AkelPad.TextFind(0, "", 0x00200001 /*FRF_DOWN|FRF_BEGINNING*/);


AkelPad.TextReplace
___________________

   .

  TextReplace(hHandle, pFindIt, pReplaceWith, nFindFlags, nReplaceFlags);


  hHandle
      .  ,      .
  pFindIt
      .
  pReplaceWith
      .
  nFindFlags
    0x00000001  //FRF_DOWN                 .
    0x00000002  //FRF_WHOLEWORD             .
    0x00000004  //FRF_MATCHCASE              .
    0x00040000  //FRF_REGEXPNONEWLINEDOT   .      ,    (: FRF_REGEXP|FRF_REGEXPNONEWLINEDOT).
    0x00080000  //FRF_REGEXP                 .
    0x00100000  //FRF_UP                   .
    0x00200000  //FRF_BEGINNING              (: FRF_DOWN|FRF_BEGINNING).
    0x00400000  //FRF_SELECTION              (: FRF_DOWN|FRF_SELECTION).
    0x00800000  //FRF_ESCAPESEQ             esc-.
    0x01000000  //FRF_ALLFILES                 (: FRF_DOWN|FRF_ALLFILES  FRF_DOWN|FRF_BEGINNING|FRF_ALLFILES).
    0x08000000  //FRF_CYCLESEARCH            (   RRF_ALL).
    0x10000000  //FRF_CYCLESEARCHPROMPT       .
    0x80000000  //FRF_TEST                 .     .
  nReplaceFlags
    0x1         //RRF_ALL                  .    .

 
  .   .
     ,   -1.
     RRF_ALL,   .
        (  FRF_REGEXP),   (-100 - ).
  , pFindIt  "ab[c",     ,   -102.

:
  AkelPad.TextReplace(0, "", "", 0x00200001 /*FRF_DOWN|FRF_BEGINNING*/, 0x1 /*RRF_ALL*/);


AkelPad.GetClipboardText (+ActiveX)
___________________________________

    .

  GetClipboardText([bAnsi]);


  bAnsi
    true      - ansi.
    false     - unicode ( ).

 
  .    .

:
  var pClipboardText=AkelPad.GetClipboardText();


AkelPad.SetClipboardText (+ActiveX)
___________________________________

    .

  SetClipboardText(pText);


  pText
      .

 
  .

:
  AkelPad.SetClipboardText("MyText");


AkelPad.IsPluginRunning
_______________________

   AkelPad'  .

  IsPluginRunning(pFunction);


  pFunction
      .

 
  true    .
  false    .

:
  var bRunning=AkelPad.IsPluginRunning("Coder::HighLight");


AkelPad.Call
____________

  AkelPad'.

  Call(pFunction[, ...]);


  pFunction
      .
  ...
     .


        .

 
     ,   AkelPad.ScriptExitCode.
   -1  //UD_FAILED               .
    0  //UD_UNLOAD                .
  0x1  //UD_NONUNLOAD_ACTIVE         .
  0x2  //UD_NONUNLOAD_NONACTIVE    ,   .
  0x4  //UD_NONUNLOAD_UNCHANGE     .
  0x8  //UD_HOTKEY_DODEFAULT         .

:
  var nResult=AkelPad.Call("Coder::HighLight", 2, "#000000", "#9BFF9B");


AkelPad.CallA
_____________

,   AkelPad.Call,    Ansi    .


AkelPad.CallW
_____________

,   AkelPad.Call,    Unicode    .


AkelPad.CallEx
______________

  AkelPad'  .

  CallEx(nFlags, pFunction[, ...]);


  nFlags
    0x04  //DLLCF_SWITCHAUTOLOAD      ,    ,  ,    .
    0x08  //DLLCF_SAVENOW            DLLCF_SWITCHAUTOLOAD.  AKD_DLLSAVE  DLLSF_NOW    .
    0x10  //DLLCF_SAVEONEXIT         DLLCF_SWITCHAUTOLOAD.  AKD_DLLSAVE  DLLSF_ONEXIT    .
  pFunction
      .
  ...
     .


        .

 
     ,   AkelPad.ScriptExitCode.
   -1  //UD_FAILED               .
    0  //UD_UNLOAD                .
  0x1  //UD_NONUNLOAD_ACTIVE         .
  0x2  //UD_NONUNLOAD_NONACTIVE    ,   .
  0x4  //UD_NONUNLOAD_UNCHANGE     .
  0x8  //UD_HOTKEY_DODEFAULT         .

:
  var nResult=AkelPad.CallEx(0x14 /*DLLCF_SWITCHAUTOLOAD|DLLCF_SAVEONEXIT*/, "Coder::HighLight");


AkelPad.CallExA
_______________

,   AkelPad.CallEx,    Ansi    .


AkelPad.CallExW
_______________

,   AkelPad.CallEx,    Unicode    .


AkelPad.Exec (+ActiveX)
_______________________

 .

  Exec(pCommandLine[, pWorkDirectory][, nWait][, nWindowStyle]);


  pCommandLine
     .   %a -  AkelPad',    , , %WinDir% -  Windows.
  pWorkDirectory
     .   "".   %a -  AkelPad',    , , %WinDir% -  Windows.
  nWait
    0     ,      ( ).
    1        ,  .
    2     ,        ,      .
  nWindowStyle
   -1   ( ).
    0  .
    1   .
    2  .
    3  .
    6 ,   .
    9   .
    :     .

 
  .  .

:
  AkelPad.Exec("notepad.exe");


AkelPad.Command
_______________

   AkelPad'.

  Command(nCmd[, nParam]);


  nCmd
      .
  nParam
       .      , , 4113 /*IDM_FILE_SILENTPRINT*/. .    AkelDLL.h.


 
  .    .

:
  AkelPad.Command(4101 /*IDM_FILE_NEW*/);


AkelPad.Font
____________

 .

  Font(pFont, nStyle, nSize);


  pFont
     , , "Courier".  ,  "".
  nStyle
    0 .
    1  .
    2  .
    3  .
    4   .
  nSize
     .  ,  0.

 
  .

:
  AkelPad.Font("Courier", 4, 10)


AkelPad.Recode
______________

 .

  Recode(nCodePageFrom, nCodePageTo);


  nCodePageFrom
     .  -1,    .
  nCodePageTo
     .  -1,    .

 
  .

:
  AkelPad.Recode(1251, 866);


AkelPad.Include
_______________

   .

  Include(pFileName[, nFlags][, nCodePage][, bBOM]);


  pFileName
     ,     "[AkelPad]\AkelFiles\Plugs\Scripts\Include".
  nFlags
    .  nFlags  AkelPad.ReadFile.
  nCodePage
    .  nCodePage  AkelPad.ReadFile.
  bBOM
    .  bBOM  AkelPad.ReadFile.


   Include   eval(AkelPad.ReadFile("...")),        ,   .

 
  true   .
  false   .

:
   var lpItems;
   var nItem;

   if (!AkelPad.Include("ShowMenu.js")) WScript.Quit();

   lpItems=[["ItemA", MF_NORMAL, 101],
            ["ItemB", MF_SUBMENU],
              ["ItemB-1", MF_NORMAL, 102],
              ["ItemB-2", MF_NORMAL, 103],
              ["ItemB-3", MF_NORMAL|MF_LAST, 104],
            ["ItemC", MF_NORMAL, 105]];
   nItem=ShowMenu(lpItems, POS_CARET, POS_CARET);
   WScript.Echo("" + nItem);


AkelPad.IsInclude
_________________

       AkelPad.Include().

  IsInclude();

 
  .   ,       AkelPad.Include()  ""   .

:
  WScript.Echo("" + AkelPad.IsInclude());


AkelPad.OpenFile
________________

 .

  OpenFile(pFile[, nFlags][, nCodePage][, bBOM]);


  pFile
      .
  nFlags
    0x001  //OD_ADT_BINARYERROR         .
    0x002  //OD_ADT_REGCODEPAGE           ,    
           //                          OD_ADT_DETECTBOM,  ,     
           //                        OD_ADT_DETECTCODEPAGE|OD_ADT_DETECTBOM.
    0x004  //OD_ADT_DETECTCODEPAGE   .
    0x008  //OD_ADT_DETECTBOM          BOM.
    0x010  //OD_ADT_NOMESSAGES           .
    0x020  //OD_ADT_ONLYBOM          ,     BOM,      .
    0x100  //OD_REOPEN                 ,  .
    0x200  //OD_NOSCROLL               .
    0x400  //OD_MULTIFILE              .  MB_YESNOCANCEL  MB_OKCANCEL.
    0x800  //OD_NOUPDATE                  .
           //  0xD       (OD_ADT_BINARYERROR|OD_ADT_DETECTCODEPAGE|OD_ADT_DETECTBOM).
  nCodePage
     ,   (nFlags & OD_ADT_DETECTCODEPAGE)
  bBOM
     BOM,   (nFlags & OD_ADT_DETECTBOM)

 
   0  //EOD_SUCCESS          .
  -1  //EOD_ADT_OPEN          ,   .
  -2  //EOD_ADT_ALLOC         ,   .
  -3  //EOD_ADT_READ          ,   .
 -11  //EOD_OPEN               .
 -13  //EOD_WINDOWEXIST        .
 -14  //EOD_CODEPAGEERROR      .
 -15  //EOD_STOP               AKDN_OPENDOCUMENT_START.
 -16  //EOD_STREAMIN           EM_STREAMIN.
 -17  //EOD_DOCUMENTSLIMIT        MDI.
 -21  //EOD_MSGCANCELCREATE       "  ?".
 -22  //EOD_MSGCANCELBINARY       " . ?"
 -23  //EOD_MSGNOCREATE           "  ?".
 -24  //EOD_MSGNOBINARY           " . ?"

:
  var bResult=AkelPad.OpenFile("C:\\MyFile.txt");


AkelPad.ReadFile
________________

  .

  ReadFile(pFile[, nFlags][, nCodePage][, bBOM][, nBytesMax]);


  pFile
      .
  nFlags
    0x01  //ADT_BINARYERROR         .
    0x02  //ADT_REGCODEPAGE           ,    
          //                       ADT_DETECTBOM,  ,     
          //                     ADT_DETECTCODEPAGE|ADT_DETECTBOM.
    0x04  //ADT_DETECTCODEPAGE   .
    0x08  //ADT_DETECTBOM          BOM.
    0x10  //ADT_NOMESSAGES           .
    0x20  //ADT_ONLYBOM          ,     BOM,      .
          //  0xD    (ADT_BINARYERROR|ADT_DETECTCODEPAGE|ADT_DETECTBOM).
  nCodePage
     ,   (nFlags & ADT_DETECTCODEPAGE).
  bBOM
     BOM,   (nFlags & ADT_DETECTBOM).
  nBytesMax
         .  -1,     ( ).

 
  .  .

:
  var pText=AkelPad.ReadFile("C:\\MyFile.txt");


AkelPad.WriteFile
_________________

  .

  WriteFile(vFile, pContent, nContentLen, nCodePage, bBOM[, nFlags]);


  vFile
            .
  pContent
      .
  nContentLen
     .  -1,   .
  nCodePage
     .
  bBOM
     BOM.
  nFlags
    0x1  //WFF_WRITEREADONLY     . ,  vFile   .
    0x2  //WFF_APPENDFILE         . ,  vFile   .
         //  0x0.

 
   0  //ESD_SUCCESS         .
  -1  //ESD_OPEN                .
  -2  //ESD_WRITE              .
  -3  //ESD_READONLY           -.

:
  AkelPad.WriteFile("C:\\MyFile.txt", "Text", -1, 65001, true);


AkelPad.SaveFile
________________

 .

  SaveFile(hHandle, pFile[, nCodePage][, bBOM][, nFlags][, hDoc]);


  hHandle
      .  ,      .
  pFile
       .
  nCodePage
     .  -1   ,    .
  bBOM
     BOM . 1 - , 0 - , -1    -   BOM.
  nFlags
    0x1  //SD_UPDATE              .
    0x2  //SD_SELECTION        .
         //  0x1  (SD_UPDATE).
  hDoc
     .   ( ),   .

 
   0  //ESD_SUCCESS        .
  -1  //ESD_OPEN             .
  -2  //ESD_WRITE            .
  -3  //ESD_READONLY          -.
  -4  //ESD_CODEPAGEERROR    .
  -5  //ESD_STOP             AKDN_SAVEDOCUMENT_START.
  -6  //ESD_STREAMOUT        EM_STREAMOUT.

:
  var hWndEdit=AkelPad.GetEditWnd();
  var nResult=AkelPad.SaveFile(hWndEdit, "C:\\MyFile.txt");


AkelPad.SystemFunction (+ActiveX)
_________________________________

   .

  SystemFunction();

 
  .   .

:
  var oSys=AkelPad.SystemFunction();


AkelPad.SystemFunction().AddParameter (+ActiveX)
________________________________________________

   .

  AddParameter(vParameter);


  vParameter
    .

 
  .

:
  . AkelPad.SystemFunction().Call    .


AkelPad.SystemFunction().Call (+ActiveX)
________________________________________

  .

  Call(vDllFunction[, ...]);


  vDllFunction
         "::"      .
  ...
     ,   ,   .
     :  Windows 95/98/Me -  ,
                         Windows NT/2000/XP -  .

 
  .  .

 ( ):
  var hMainWnd=AkelPad.GetMainWnd();
  var oSys=AkelPad.SystemFunction();
  oSys.Call("user32::ShowWindow", hMainWnd, 6 /*SW_MINIMIZE*/);

 ( ):
  var hMainWnd=AkelPad.GetMainWnd();
  var oSys=AkelPad.SystemFunction();
  oSys.AddParameter(hMainWnd);
  oSys.AddParameter(6 /*SW_MINIMIZE*/);
  oSys.Call("user32::ShowWindow");


AkelPad.SystemFunction().GetLastError (+ActiveX)
________________________________________________

     .

  GetLastError();

 
  .     .

:
  var hMainWnd=AkelPad.GetMainWnd();
  var oSys=AkelPad.SystemFunction();
  var nError;
  oSys.Call("user32::ShowWindow", hMainWnd, 6 /*SW_MINIMIZE*/);
  nError=oSys.GetLastError();


AkelPad.SystemFunction().RegisterCallback (+ActiveX)
____________________________________________________

   .

  RegisterCallback(lpCallback[, nArgCount]);


  lpCallback
      .
  nArgCount
         .     JScript,    VBScript.


           30-.

 
  .   .

 (   JScript):
  var oSys=AkelPad.SystemFunction();
  var lpEnumWindowsCallback;
  var nStopAfter=3;

  if (lpEnumWindowsCallback=oSys.RegisterCallback(EnumWindowsProc))
  {
    oSys.Call("user32::EnumWindows", lpEnumWindowsCallback, 0);
    oSys.UnregisterCallback(lpEnumWindowsCallback);
  }

  function EnumWindowsProc(hWnd, lParam)
  {
    //Convert hWnd to hex
    if (hWnd < 0) hWnd=(0xFFFFFFFF + 1) + hWnd;
    hWnd="0x" + hWnd.toString(16).toUpperCase();

    //Show parameters
    WScript.Echo("hWnd=" + hWnd + "; lParam=" + lParam);

    if (--nStopAfter <= 0)
      return false;
    else
      return true;
  }

 (   VBScript):
  set oSys=AkelPad.SystemFunction()
  nStopAfter=3

  set lpEnumWindowsCallback = oSys.RegisterCallback (GetRef("EnumWindowsProc"), 2)
  oSys.Call "user32::EnumWindows", lpEnumWindowsCallback, 0
  oSys.UnregisterCallback lpEnumWindowsCallback

  Function EnumWindowsProc(hWnd, lParam)
    'Convert hWnd to hex
    hWnd="0x" & Hex(hWnd)

    'Show parameters
    WScript.Echo "hWnd=" & hWnd & "; lParam=" & lParam

    nStopAfter = nStopAfter - 1
    if nStopAfter <= 0 Then
      EnumWindowsProc = 0
    else
      EnumWindowsProc = 1
    end if
  End Function


AkelPad.SystemFunction().UnregisterCallback (+ActiveX)
______________________________________________________

    .

  UnregisterCallback(oFunction);


  oFunction
      .

 
  .

:
  .  RegisterCallback.


AkelPad.MemAlloc (+ActiveX)
___________________________

 .

  MemAlloc(nSize);


  nSize
      .

 
  .    .

:
  var hMainWnd=AkelPad.GetMainWnd();
  var oSys=AkelPad.SystemFunction();
  var pMessage="MyMessage";
  var pCaption="MyCaption";
  var lpMessageBuffer;
  var lpCaptionBuffer;

  if (lpMessageBuffer=AkelPad.MemAlloc(256))
  {
    AkelPad.MemCopy(lpMessageBuffer, pMessage.substr(0, 255), 0 /*DT_ANSI*/);

    if (lpCaptionBuffer=AkelPad.MemAlloc(256))
    {
      AkelPad.MemCopy(lpCaptionBuffer, pCaption.substr(0, 255), 0 /*DT_ANSI*/);

      oSys.Call("user32::MessageBoxA", hMainWnd, lpMessageBuffer, lpCaptionBuffer, 64 /*MB_ICONINFORMATION*/);

      AkelPad.MemFree(lpCaptionBuffer);
    }
    AkelPad.MemFree(lpMessageBuffer);
  }


AkelPad.MemCopy (+ActiveX)
__________________________

 .

  MemCopy(lpPointer, vData, nType[, nLength]);


  lpPointer
      .
  vData
      .
  nType
      vData:
    0  //DT_ANSI             (Ansi).
    1  //DT_UNICODE          (Unicode).
    2  //DT_QWORD             x64 (QWORD)     x86 (DWORD).
    3  //DT_DWORD            (DWORD).
    4  //DT_WORD             (WORD).
    5  //DT_BYTE             (BYTE).
  nLength
     .  -1,    (  -1).  DT_ANSI  DT_UNICODE.

 
  .   .

:
  .  MemAlloc.


AkelPad.MemRead (+ActiveX)
__________________________

 .

  MemRead(lpPointer, nType[, nLength]);


  lpPointer
      .
  nType
    0  //DT_ANSI             (Ansi).
    1  //DT_UNICODE          (Unicode).
    2  //DT_QWORD             x64 (QWORD)     x86 (DWORD).
    3  //DT_DWORD            (DWORD).
    4  //DT_WORD             (WORD).
    5  //DT_BYTE             (BYTE).
  nLength
     .  -1,    NULL  (  -1).  DT_ANSI  DT_UNICODE.

 
  ,  .

:
  var oSys=AkelPad.SystemFunction();
  var lpDirBuffer;
  var pWinDir;

  if (lpDirBuffer=AkelPad.MemAlloc(256))
  {
    oSys.Call("kernel32::GetWindowsDirectoryA", lpDirBuffer, 256);
    pWinDir=AkelPad.MemRead(lpDirBuffer, 0 /*DT_ANSI*/);

    AkelPad.MemFree(lpDirBuffer);
  }


AkelPad.MemStrPtr (+ActiveX)
____________________________

      .

  MemStrPtr(pString[, bConvert]);


  pString
       .
  bConvert
    true     pString, .   pString  .
    false    pString ( ).

 
  . .

:
  var hMainWnd=AkelPad.GetMainWnd();
  AkelPad.SendMessage(hMainWnd, 1206 /*AKD_GOTOW*/, 0x1 /*GT_LINE*/, AkelPad.MemStrPtr("10:3"));


AkelPad.MemPtrStr (+ActiveX)
____________________________

   .

  MemPtrStr(lpPointer);


  lpPointer
     .

 
  .   .

:
  var hMainWnd=AkelPad.GetMainWnd();
  WScript.Echo(AkelPad.MemPtrStr(hMainWnd));


AkelPad.MemFree (+ActiveX)
__________________________

 .

  MemFree(lpPointer);


  lpPointer
      .

 
  .

:
  .  MemAlloc.


AkelPad.DebugJIT (+ActiveX)
___________________________

 .   .

  DebugJIT();

 
  .


AkelPad.Debug (+ActiveX)
________________________

  .

  Debug([dwType]);


  dwType
    0x01  //DBG_MEMREAD      .
    0x02  //DBG_MEMWRITE     .
    0x04  //DBG_MEMFREE      .
    0x08  //DBG_MEMLEAK      .
    0x10  //DBG_SYSCALL       .
          //  0x1f  (DBG_MEMREAD|DBG_MEMWRITE|DBG_MEMFREE|DBG_MEMLEAK|DBG_SYSCALL).

 
    dwType.

:
  var lpBuffer;

  AkelPad.Debug();

  if (lpBuffer=AkelPad.MemAlloc(2))
  {
    AkelPad.MemCopy(lpBuffer, 123, 3 /*DT_DWORD*/);

    AkelPad.MemFree(lpBuffer);
  }


AkelPad.VarType (+ActiveX)
__________________________

  .

  VarType(vData);


  vData
    .

 
  .  (VARTYPE)  (VARIANT).
       0 //VT_EMPTY
       1 //VT_NULL
       2 //VT_I2
       3 //VT_I4
       4 //VT_R4
       5 //VT_R8
       6 //VT_CY
       7 //VT_DATE
       8 //VT_BSTR
       9 //VT_DISPATCH
      10 //VT_ERROR
      11 //VT_BOOL
      12 //VT_VARIANT
      13 //VT_UNKNOWN
      14 //VT_DECIMAL
      16 //VT_I1
      17 //VT_UI1
      18 //VT_UI2
      19 //VT_UI4
      20 //VT_I8
      21 //VT_UI8
      22 //VT_INT
      23 //VT_UINT
      24 //VT_VOID
      25 //VT_HRESULT
      26 //VT_PTR
      27 //VT_SAFEARRAY
      28 //VT_CARRAY
      29 //VT_USERDEFINED
      30 //VT_LPSTR
      31 //VT_LPWSTR
      36 //VT_RECORD
      37 //VT_INT_PTR
      38 //VT_UINT_PTR
      64 //VT_FILETIME
      65 //VT_BLOB
      66 //VT_STREAM
      67 //VT_STORAGE
      68 //VT_STREAMED_OBJECT
      69 //VT_STORED_OBJECT
      70 //VT_BLOB_OBJECT
      71 //VT_CF
      72 //VT_CLSID
      73 //VT_VERSIONED_STREAM
  0x0fff //VT_BSTR_BLOB
  0x1000 //VT_VECTOR
  0x2000 //VT_ARRAY
  0x4000 //VT_BYREF
  0x8000 //VT_RESERVED
  0xffff //VT_ILLEGAL
  0x0fff //VT_ILLEGALMASKED
  0x0fff //VT_TYPEMASK

:
  var pString="123";
  WScript.Echo("" + AkelPad.VarType(pString));


AkelPad.GetArgLine
__________________

  .

  GetArgLine([bNoEncloseQuotes]);


  bNoEncloseQuotes
    true      ( ).
    false    .

 
  .  .

:
  var pArgLine;

  if (pArgLine=AkelPad.GetArgLine(0))
    WScript.Echo(pArgLine);


AkelPad.VarDispatch (+ActiveX)
______________________________

 IDispatch   .

  VarDispatch(lpPointer);


  lpPointer
      IDispatch .

 
  . IDispatch .

:
  var oIE=new ActiveXObject("InternetExplorer.Application");
  //IDispatch -> 
  var nIE=_PtrAdd(oIE, 0);
  // -> IDispatch
  var oReturnIE=AkelPad.VarDispatch(nIE);


AkelPad.GetArgValue
___________________

    .

  GetArgValue(pArgName, vDefault);


  pArgName
     .
  vDefault
      .   ,      .

 
   .      .

:
  //    :
  //Call("Scripts::Main", 1, "MyScript.js", `-ArgName1=0.01 -ArgName2="Value2" /ArgName3=0x10`)

  //  0.01, Value2, 0x10   ArgName1, ArgName2, ArgName3.
  var nArg1=AkelPad.GetArgValue("ArgName1", 0);
  var pArg2=AkelPad.GetArgValue("ArgName2", "");
  var nArg3=AkelPad.GetArgValue("ArgName3", 0);

  WScript.Echo("VarType=" + AkelPad.VarType(nArg1) + "; ArgValue=" + nArg1 + "\r" +
               "VarType=" + AkelPad.VarType(pArg2) + "; ArgValue=" + pArg2 + "\r" +
               "VarType=" + AkelPad.VarType(nArg3) + "; ArgValue=" + nArg3 + "\r");


AkelPad.ScriptSettings
______________________

   .

  ScriptSettings();

 
  .   .

:
  var oSet=AkelPad.ScriptSettings();


AkelPad.ScriptSettings().Begin
______________________________

 .

  Begin(pScriptBaseName, nFlags);


  pScriptBaseName
       .  "",    .
  nFlags
    0x01 //POB_READ       .
    0x02 //POB_SAVE       .
    0x04 //POB_CLEAR         (POB_SAVE|POB_CLEAR).
    0x20 //POB_PLUGS     , pScriptBaseName -    .
    0x40 //POB_PROGRAM   , pScriptBaseName - .

 
  .  .

:
  .  Read, Write  Delete.


AkelPad.ScriptSettings().Read
_____________________________

 .

  Read(vOptionName, nType[, vDefault]);


  vOptionName
           .
  nType
    1   //PO_DWORD            (DWORD).
    2   //PO_BINARY          .     ,      AkelPad.MemFree.
    3   //PO_STRING         .
    11  //PO_ENUM              .    vOptionName.
    20  //PO_BINARYSTRING    ( ),      .
    21  //PO_BINARYSIZE         .
  vDefault
      .

 
  ,  .

 (  ):
  var oSet=AkelPad.ScriptSettings();

  if (oSet.Begin("", 0x1 /*POB_READ*/))
  {
    pString=oSet.Read("String", 3 /*PO_STRING*/);
    bMultiline=oSet.Read("Multiline", 1 /*PO_DWORD*/);
    oSet.End();
  }

 (  ):
  var oSet=AkelPad.ScriptSettings();
  var pText="";

  if (oSet.Begin("Toolbar", 0x21 /*POB_READ|POB_PLUGS*/))
  {
    pText=oSet.Read("ToolBarText", 10 /*PO_BINARYSTRING*/);
    oSet.End();
  }
  WScript.Echo(pText.substr(0,500));

 (   ):
  var hMainWnd=AkelPad.GetMainWnd();
  var oSet=AkelPad.ScriptSettings();
  var pOption;
  var nIndex;

  if (oSet.Begin("Scripts", 0x21 /*POB_READ|POB_PLUGS*/))
  {
    for (nIndex=0; ; ++nIndex)
    {
      if ((pOption=oSet.Read(nIndex, 11 /*PO_ENUM*/)) == undefined)
        break;
      if (AkelPad.MessageBox(hMainWnd, pOption + "\n\nFind next?", WScript.ScriptName, 4 /*MB_YESNO*/) == 7 /*IDNO*/)
        break;
    }
    oSet.End();
  }


AkelPad.ScriptSettings().Write
______________________________

 .

  Write(pOptionName, nType, vData[, nDataSize]);


  pOptionName
     .
  nType
    1   //PO_DWORD      (DWORD).
    2   //PO_BINARY    .
    3   //PO_STRING   .
  vData
      .
  nDataSize
          (  -1).

 
  .     .

:
  var oSet=AkelPad.ScriptSettings();

  if (oSet.Begin("", 0x2 /*POB_SAVE*/))
  {
    oSet.Write("String", 3 /*PO_STRING*/, "Str1");
    oSet.Write("Sensitive", 1 /*PO_DWORD*/, true);
    oSet.End();
  }


AkelPad.ScriptSettings().Delete
_______________________________

 .

  Delete(pOptionName);


  pOptionName
     .

 
  true   .
  false   .

:
  var oSet=AkelPad.ScriptSettings();

  if (oSet.Begin("", 0x2 /*POB_SAVE*/))
  {
    oSet.Delete("String");
    oSet.Delete("Sensitive");
    oSet.End();
  }


AkelPad.ScriptSettings().End
____________________________

 .

  End();

 
  true   .
  false   .

:
  .  Read, Write  Delete.


AkelPad.WindowRegisterClass (+ActiveX)
______________________________________

  .

  WindowRegisterClass(pClassName[, ...]);


  pClassName
       .
  ...
     .     .   ,    .

 
  .  .

 (JScript):
  var hMainWnd=AkelPad.GetMainWnd();
  var oSys=AkelPad.SystemFunction();
  var hInstanceDLL=AkelPad.GetInstanceDll();
  var hWndDialog;

  if (hMainWnd)
  {
    if (AkelPad.WindowRegisterClass("NewClass"))
    {
      //Create dialog
      hWndDialog=oSys.Call("user32::CreateWindowEx" + _TCHAR,
                           0,                //dwExStyle
                           "NewClass",       //lpClassName
                           0,                //lpWindowName
                           0x90CA0000,       //WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX
                           0,                //x
                           0,                //y
                           351,              //nWidth
                           179,              //nHeight
                           hMainWnd,         //hWndParent
                           0,                //ID
                           hInstanceDLL,     //hInstance
                           DialogCallback);  //Script function callback. To use it class must be registered by WindowRegisterClass.

      if (hWndDialog)
      {
        //Disable main window, to make dialog modal
        oSys.Call("user32::EnableWindow", hMainWnd, false);

        //Message loop
        AkelPad.WindowGetMessage();
      }
      AkelPad.WindowUnregisterClass("NewClass");
    }
  }

  function DialogCallback(hWnd, uMsg, wParam, lParam)
  {
    if (uMsg == 1 /*WM_CREATE*/)
    {
    }
    else if (uMsg == 256 /*WM_KEYDOWN*/)
    {
      if (wParam == 27 /*VK_ESCAPE*/)
      {
        //Escape key pushes Cancel button
        oSys.Call("user32::PostMessage" + _TCHAR, hWndDialog, 273 /*WM_COMMAND*/, 2 /*IDCANCEL*/, 0);
      }
    }
    else if (uMsg == 273 /*WM_COMMAND*/)
    {
      if ((wParam & 0xffff) == 2 /*IDCANCEL*/)
      {
        oSys.Call("user32::PostMessage" + _TCHAR, hWndDialog, 16 /*WM_CLOSE*/, 0, 0);
      }
    }
    else if (uMsg == 16 /*WM_CLOSE*/)
    {
      //Enable main window
      oSys.Call("user32::EnableWindow", hMainWnd, true);

      //Destroy dialog
      oSys.Call("user32::DestroyWindow", hWnd);
    }
    else if (uMsg == 2 /*WM_DESTROY*/)
    {
      //Exit message loop
      oSys.Call("user32::PostQuitMessage", 0);
    }
    return 0;
  }


 (VBScript):
  'Variables
  hMainWnd=AkelPad.GetMainWnd()
  hInstanceDLL=AkelPad.GetInstanceDll()
  set oSys=AkelPad.SystemFunction()
  set lpCallbackPtr=GetRef("DialogCallback")
  hWndDialog=0

  'Constants
  Const WM_CREATE=1
  Const WM_KEYDOWN=256
  Const WM_COMMAND=273
  Const WM_CLOSE=16
  Const WM_DESTROY=2
  Const VK_ESCAPE=27
  Const IDCANCEL=2

  if vbPtrMath(hMainWnd, "!=", 0) then
    if AkelPad.WindowRegisterClass("NewClass") then

      'Create dialog WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX
      hWndDialog=oSys.Call("user32::CreateWindowEx" & vbTCHAR, 0, "NewClass", 0, &H90CA0000, 0, 0, 351, 179, hMainWnd, 0, hInstanceDLL, lpCallbackPtr)

      if vbPtrMath(hWndDialog, "!=", 0) then
        'Disable main window, to make dialog modal
        oSys.Call "user32::EnableWindow", hMainWnd, false

        'Message loop
        AkelPad.WindowGetMessage()
      end if

      AkelPad.WindowUnregisterClass "NewClass"
    end if
  end if

  Function DialogCallback(hWnd, uMsg, wParam, lParam)
    if uMsg = WM_CREATE then
    elseif uMsg = WM_KEYDOWN then
      if wParam = VK_ESCAPE then
        'Escape key pushes Cancel button
        oSys.Call "user32::PostMessage" & vbTCHAR, hWndDialog, WM_COMMAND, IDCANCEL, 0
      end if
    elseif uMsg = WM_COMMAND then
      if (wParam And &Hffff) = IDCANCEL then
        oSys.Call "user32::PostMessage" & vbTCHAR, hWndDialog, WM_CLOSE, 0, 0
      end if
    elseif uMsg = WM_CLOSE then
      'Enable main window
      oSys.Call "user32::EnableWindow", hMainWnd, true

      'Destroy dialog
      oSys.Call "user32::DestroyWindow", hWnd
    elseif uMsg = WM_DESTROY then
      'Exit message loop
      oSys.Call "user32::PostQuitMessage", 0
    end if
    DialogCallback=0
  End Function


AkelPad.WindowUnregisterClass (+ActiveX)
________________________________________

   .

  WindowUnregisterClass(pClassName);


  pClassName
        .

 
  true   .
  false   .

:
  .  WindowRegisterClass.


AkelPad.WindowRegisterDialog (+ActiveX)
_______________________________________

      .   ,     WindowRegisterClass.

  WindowRegisterDialog(hWnd);


  hWnd
     .

 
  true   .
  false    .

:
  var hMainWnd=AkelPad.GetMainWnd();
  var oSys=AkelPad.SystemFunction();
  var hInstanceDLL=AkelPad.GetInstanceDll();
  var hGuiFont=oSys.Call("gdi32::GetStockObject", 17 /*DEFAULT_GUI_FONT*/);
  var hWndModeless;
  var hWndTestButton;
  var IDC_TEST_BUTTON=10001;

  //Open "Find" dialog
  if (hWndModeless=AkelPad.SendMessage(hMainWnd, 1275 /*AKD_GETMODELESS*/, 0, 0))
    AkelPad.SendMessage(hWndModeless, 273 /*WM_COMMAND*/, 2 /*IDCANCEL*/, 0);
  AkelPad.Command(4158 /*IDM_EDIT_FIND*/);
  hWndModeless=AkelPad.SendMessage(hMainWnd, 1275 /*AKD_GETMODELESS*/, 0, 0);

  //Create test button
  hWndTestButton=oSys.Call("user32::CreateWindowEx" + _TCHAR,
                         0,               //dwExStyle
                         "BUTTON",        //lpClassName
                         0,               //lpWindowName
                         0x50010000,      //WS_VISIBLE|WS_CHILD|WS_TABSTOP
                         294,             //x
                         80,              //y
                         81,              //nWidth
                         23,              //nHeight
                         hWndModeless,    //hWndParent
                         IDC_TEST_BUTTON, //ID
                         hInstanceDLL,    //hInstance
                         0);              //lpParam
  //Set font and text
  SetWindowFontAndText(hWndTestButton, hGuiFont, "Test");

  //Subclass dialog
  if (AkelPad.WindowSubClass(hWndModeless, DialogCallback, 273 /*WM_COMMAND*/, 2 /*WM_DESTROY*/))
  {
    //Register dialog for message loop
    AkelPad.WindowRegisterDialog(hWndModeless);

    //Message loop
    AkelPad.WindowGetMessage();

    //Unregister and unsubclass
    AkelPad.WindowUnregisterDialog(hWndModeless);
    AkelPad.WindowUnsubClass(hWndModeless);
  }

  function DialogCallback(hWnd, uMsg, wParam, lParam)
  {
    if (uMsg == 273) //WM_COMMAND
    {
      if (LOWORD(wParam) == IDC_TEST_BUTTON)
      {
        oSys.Call("user32::SetWindowText" + _TCHAR, hWnd, "Test " + oSys.Call("kernel32::GetTickCount"));
      }
    }
    else if (uMsg == 2) //WM_DESTROY
    {
      //Exit message loop
      oSys.Call("user32::PostQuitMessage", 0);
    }
    return 0;
  }

  function SetWindowFontAndText(hWnd, hFont, pText)
  {
    AkelPad.SendMessage(hWnd, 48 /*WM_SETFONT*/, hFont, 1);
    oSys.Call("user32::SetWindowText" + _TCHAR, hWnd, pText);
  }

  function LOWORD(dwNumber)
  {
    return (dwNumber & 0xffff);
  }


AkelPad.WindowUnregisterDialog (+ActiveX)
_________________________________________

  .

  WindowUnregisterDialog(hWnd);


  hWnd
     .

 
  true   .
  false    .

:
  .  WindowRegisterDialog.


AkelPad.CreateDialog (+ActiveX)
_______________________________

 .

  CreateDialog(nExStyle, pClassName, pTitle, nStyle, x, y, nWidth, nHeight, hWndParent, lParam[, nFlags][, hMenu][, hInstance][, pFaceName][, nFontStyle][, nPointSize], "|",
               nExStyle1, pClassName1, pTitle1, nStyle1, x1, y1, nWidth1, nHeight1, nId1[, lParam1], "|",
               nExStyle2, pClassName2, pTitle2, nStyle2, x2, y2, nWidth2, nHeight2, nId2[, lParam2], "|",
               [...]);


  nExStyle
      . .  CreateWindowEx  MSDN.
  pClassName
         AkelPad.WindowRegisterClass.
  pTitle
      .
  nStyle
     . .  CreateWindowEx  MSDN.
  x
         .
  y
         .
  nWidth
     .
  nHeight
     .
  hWndParent
       .
  lParam
       .
  nFlags
    0x1  //CDF_MODAL     .   ,   ,    AkelPad.WindowGetMessage.
    0x2  //CDF_PIXELS       96 DPI.   , 
         //                ,      .
         //  0x0.
  hMenu
             ,        .  ,   ( ).
  hInstance
     ,     .  ,    AkelPad.GetInstanceDll ( ).
  pFaceName
     , , "Courier".  "",      ( ).
     ,  nStyle   0x40 /*DS_SETFONT*/.
  nFontStyle
    0  ( ).
    1  .
    2  .
    3  .
    4   .
     ,  nStyle   0x40 /*DS_SETFONT*/.
  nPointSize
     .  ,  0 ( ).
     ,  nStyle   0x40 /*DS_SETFONT*/.
  "|"
               .
  nExStyle1
      . .  CreateWindowEx  MSDN.
  pClassName1
     , , "BUTTON". .  CreateWindowEx  MSDN.
  pTitle1
      .
  nStyle1
     . .  CreateWindowEx  MSDN.
  x1
          (  ).
  y1
          (  ).
  nWidth1
     .
  nHeight1
     .
  nId1
      .
  lParam1
       .  WORD   ,  ,   ( WORD ).
           lParam  WM_CREATE.  ,   ( ).
  "|"
          .
  ...
       .

 
   nFlags    CDF_MODAL,    .
   nFlags   CDF_MODAL,      "user32::EndDialog".

:
  var hMainWnd=AkelPad.GetMainWnd();
  var oSys=AkelPad.SystemFunction();
  var hWndDialog=0;
  var wCommand;
  var dwFlags=0x2 /*CDF_PIXELS*/;

  //Control IDs
  var IDC_BUTTON1=1001;
  var IDC_BUTTON2=1002;
  var IDC_EDIT=1003;

  if (AkelPad.WindowRegisterClass("My Class"))
  {
    AkelPad.CreateDialog(0, "My Class", "My Title",  0x90ca0040 /*DS_SETFONT|WS_VISIBLE|WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX*/, 10, 10, 300, 200, hMainWnd, DialogCallback, dwFlags, "|",
                         0, "BUTTON", "Button text 1", 0x50010001 /*WS_VISIBLE|WS_CHILD|WS_TABSTOP|BS_DEFPUSHBUTTON*/, 10, 10, 200, 20, IDC_BUTTON1, "|",
                         0, "BUTTON", "Button text 2", 0x50010000 /*WS_VISIBLE|WS_CHILD|WS_TABSTOP*/, 10, 50, 200, 20, IDC_BUTTON2, "|",
                         0, "EDIT", "Edit text 3", 0x50010000 /*WS_VISIBLE|WS_CHILD|WS_TABSTOP*/, 10, 90, 200, 20, IDC_EDIT);

    if (hWndDialog && !(dwFlags & 0x1 /*CDF_MODAL*/))
    {
      AkelPad.ScriptNoMutex();
      AkelPad.WindowGetMessage(0x4 /*WGM_KEYDOWNUP*/);
    }
    AkelPad.WindowUnregisterClass("My Class");
  }

  function DialogCallback(hWnd, uMsg, wParam, lParam)
  {
    if (uMsg == 0x110 /*WM_INITDIALOG*/)
    {
      hWndDialog=hWnd;
    }
    else if (uMsg == 273 /*WM_COMMAND*/)
    {
      wCommand=LOWORD(wParam);

      if (wCommand == IDC_BUTTON1 ||
          wCommand == IDC_BUTTON2)
      {
        AkelPad.MessageBox(hWnd, "Button=" + wCommand, WScript.ScriptName, 0 /*MB_OK*/);
      }
      else if (wCommand == 2 /*IDCANCEL*/)
      {
        //Destroy dialog
        if (!(dwFlags & 0x1 /*CDF_MODAL*/))
        {
          //Exit message loop
          oSys.Call("user32::PostQuitMessage", 0);

          oSys.Call("user32::DestroyWindow", hWnd);
        }
        else oSys.Call("user32::EndDialog", hWnd, 0);
      }
    }
    return 0;
  }

  function LOWORD(dwNumber)
  {
    return (dwNumber & 0xffff);
  }


AkelPad.WindowGetMessage (+ActiveX)
___________________________________

   ( ).

  WindowGetMessage([nFlags]);


  nFlags
    0x1  //WGM_ENABLE       .
    0x2  //WGM_NOKEYSEND        
         //              (WM_KEYDOWN, WM_KEYUP, WM_CHAR, WM_DEADCHAR, WM_SYSKEYDOWN, WM_SYSKEYUP, WM_SYSCHAR, WM_SYSDEADCHAR, WM_UNICHAR).
    0x4  //WGM_KEYDOWNUP    WM_KEYDOWN, WM_KEYUP    .
         //  0x0.

 
  .

:
  .  WindowRegisterClass.


AkelPad.WindowSubClass (+ActiveX)
_________________________________

   .

  WindowSubClass(hHandle, lpFunction[, ...]);


  hHandle
          :
      1   //WSC_MAINPROC        .
      2   //WSC_EDITPROC         .
      3   //WSC_FRAMEPROC         MDI.
  lpFunction
      4 ,    .
  ...
     .     .   ,    .

 
  .  .

:
  var oSys=AkelPad.SystemFunction();
  var hSubClass;
  var nSelStart;

  if (hSubClass=AkelPad.WindowSubClass(2 /*WSC_EDITPROC*/, EditCallback, 258 /*WM_CHAR*/))
  {
    //Message loop
    AkelPad.WindowGetMessage();

    AkelPad.WindowUnsubClass(2 /*WSC_EDITPROC*/);
  }

  function EditCallback(hWnd, uMsg, wParam, lParam)
  {
    if (uMsg == 258 /*WM_CHAR*/)
    {
      if (String.fromCharCode(wParam) == "q")
      {
        AkelPad.MessageBox(0, "Key \"" + String.fromCharCode(wParam) + "\" is pressed. Exiting script...", "", 0);

        //Exit message loop
        oSys.Call("user32::PostQuitMessage", 0);
      }
      else
      {
        //First do default processing
        AkelPad.WindowNextProc(hSubClass, hWnd, uMsg, wParam, lParam);

        //After default processing we can select inserted character
        nSelStart=AkelPad.GetSelStart();
        AkelPad.SetSel(nSelStart - 1, nSelStart);

        //We already do default processing, so skip it
        AkelPad.WindowNoNextProc(hSubClass);
        return 0;
      }
    }
  }


AkelPad.WindowNextProc (+ActiveX)
_________________________________

     .

  WindowNextProc(hSubClass, hWnd, nMessage, wParam, lParam);


  hSubClass
     .
  hWnd
     .
  nMessage
    .
  wParam
     .
  lParam
     .

 
  .    .

:
  .  WindowSubClass.


AkelPad.WindowNoNextProc (+ActiveX)
___________________________________

       .

  WindowNoNextProc(hSubClass);


  hSubClass
     .

 
  .

:
  .  WindowSubClass.


AkelPad.WindowUnsubClass (+ActiveX)
___________________________________

   .

  WindowUnsubClass(hHandle);


  hHandle
          :
      1   //WSC_MAINPROC       .
      2   //WSC_EDITPROC       .
      3   //WSC_FRAMEPROC       MDI.

 
  .

:
  .  WindowSubClass.


AkelPad.ThreadHook (+ActiveX)
_____________________________

   .

  ThreadHook(nId, lpFunction, nThreadId[, ...]);


  nId
    .   SetWindowsHookEx  MSDN.
  lpFunction
      3 ,    .
  nThreadId
     .     .
  ...
     .     .   ,    .
    nId      : WH_CALLWNDPROC, WH_CALLWNDPROCRET, WH_GETMESSAGE, WH_MSGFILTER, WH_SYSMSGFILTER.

 
  .  .


         30-.

:
  var hMainWnd=AkelPad.GetMainWnd();
  var oSys=AkelPad.SystemFunction();
  var dwMainThreadID=oSys.Call("user32::GetWindowThreadProcessId", hMainWnd, 0);
  var hHook;

  if (hHook=AkelPad.ThreadHook(3 /*WH_GETMESSAGE*/, HookCallback, dwMainThreadID, 0x100 /*WM_KEYDOWN*/))
  {
    //Message loop
    AkelPad.WindowGetMessage();

    AkelPad.ThreadUnhook(hHook);
  }

  function HookCallback(nCode, wParam, lParam)
  {
    var uMsg=AkelPad.MemRead(_PtrAdd(lParam, _X64?8:4) /*offsetof(MSG, message)*/, 3 /*DT_DWORD*/);

    if (uMsg == 0x100 /*WM_KEYDOWN*/)
    {
      wParam=AkelPad.MemRead(_PtrAdd(lParam, _X64?16:8) /*offsetof(MSG, wParam)*/, 2 /*DT_QWORD*/);

      AkelPad.MessageBox(0, "Key \"" + String.fromCharCode(wParam) + "\" with code \"" + wParam + "\" is pressed.", "", 0);

      //Exit message loop
      oSys.Call("user32::PostQuitMessage", 0);
    }
  }


AkelPad.ThreadUnhook (+ActiveX)
_______________________________

   .

  ThreadUnhook(hHandle);


  hHandle
     .

 
  .

:
  .  ThreadHook.


AkelPad.ScriptNoMutex
_____________________

  .

  ScriptNoMutex([nUnlockType]);


  nUnlockType
    0x01  //ULT_UNLOCKSCRIPTSQUEUE             ( ).
    0x02  //ULT_UNLOCKPROGRAMTHREAD        .        2.
    0x04  //ULT_LOCKMULTICOPY            .      .
    0x08  //ULT_UNLOCKMULTICOPY            .
    0x10  //ULT_LOCKSENDMESSAGE       AkelPad.SendMessage, AkelPad.Command    ( ).
    0x20  //ULT_UNLOCKSENDMESSAGE     AkelPad.SendMessage, AkelPad.Command     ().

 
  .   , . nUnlockType.

:
  AkelPad.ScriptNoMutex();


AkelPad.ScriptExitCode
______________________

    .        2  4.

  ScriptExitCode([nExitCode]);


  nExitCode
       .

 
  true   .
  false        .

:
  AkelPad.ScriptExitCode(1);


AkelPad.ScriptHandle (+ActiveX)
_______________________________

     .

  ScriptHandle(vData, nOperation);


  vData
     .
  nOperation
    1   //SH_FIRSTSCRIPT      .
        //  vData: .
        //   :     .
    2   //SH_THISSCRIPT       .
        //  vData: .
        //   :     .
    3   //SH_FINDSCRIPT       .
        //  vData:  .
        //   :      .
    10  //SH_GETEXECTYPE      .
        //  vData:  .  ,     .
        //   :    .
    11  //SH_GETTHREADHANDLE     .
        //  vData:  .  ,     .
        //   :   .
    12  //SH_GETTHREADID     .
        //  vData:  .  ,     .
        //   :   .
    13  //SH_GETMESSAGELOOP        .
        //  vData:  .  ,     .
        //   : true - , false - .
    14  //SH_GETLOCKMULTICOPY      .
        //  vData:  .  ,     .
        //   : true - , false - .
    15  //SH_GETLOCKSCRIPTSQUEUE           .
        //  vData:  .  ,     .
        //   : true - , false - .
    16  //SH_GETLOCKPROGRAMTHREAD    ,    (      2).
        //  vData:  .  ,     .
        //   : true - , false - .
    17  //SH_GETSERVICEWINDOW       .      WindowSubClass, ThreadHook  RegisterCallback.
        //  vData:  .  ,     .
        //   :     .
    18  //SH_GETLOCKSENDMESSAGE      AkelPad.SendMessage, AkelPad.Command.
        //  vData:  .  ,     .
        //   : true - , false - .
    20  //SH_GETBASENAME      .
        //  vData:  .  ,     .
        //   :    .
    21  //SH_GETNAME    .
        //  vData:  .  ,     .
        //   :  .
    22  //SH_GETFILE    .
        //  vData:  .  ,     .
        //   :  .
    23  //SH_GETNCLUDE     .
        //  vData:  .  ,     .
        //   :   .
    24  //SH_GETARGUMENTS     .
        //  vData:  .  ,     .
        //   :   .
    31  //SH_NEXTSCRIPT           .
        //  vData:  .  ,     .
        //   :        .
    32  //SH_NEXTSAMESCRIPT           .
        //  vData:  .  ,     .
        //   :         .
    33  //SH_CLOSESCRIPT       .
        //  vData:  .  ,     .
        //   : .

 
    .

 (         Ctrl):
  var hMainWnd=AkelPad.GetMainWnd();
  var oSys=AkelPad.SystemFunction();
  var hSubClass;
  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 (hSubClass=AkelPad.WindowSubClass(2 /*WSC_EDITPROC*/, EditCallback, 0x020A /*WM_MOUSEWHEEL*/))
  {
    //Allow other scripts running.
    AkelPad.ScriptNoMutex();

    //Message loop.
    AkelPad.WindowGetMessage();

    AkelPad.WindowUnsubClass(2 /*WSC_EDITPROC*/);
  }

  function EditCallback(hWnd, uMsg, wParam, lParam)
  {
    if (uMsg == 0x020A /*WM_MOUSEWHEEL*/)
    {
      if ((wParam & 0xffff) == 0x8 /*MK_CONTROL*/)
      {
        AkelPad.WindowNoNextProc(hSubClass);
        return 0;
      }
    }
  }


AkelPad.ConnectObject (+ActiveX)
________________________________

   .

  ConnectObject(oEventSource, pPrefix[, vIID]);


  oEventSource
    ,    .
  pPrefix
      ,    .
  vIID
    IID  .
    - vIID      "{00000000-0000-0000-0000-000000000000}".
    - vIID   . :
        var lpDIID_DWebBrowserEvents2=AkelPad.MemAlloc(16 /*sizeof(IID)*/);
        oSys.Call("ole32::IIDFromString", "{34A715A0-6587-11D0-924A-0020AFC7AC4D}", lpDIID_DWebBrowserEvents2);
    -  vIID  ,      .

 
  .  ,     .

:
  var oIE=new ActiveXObject("InternetExplorer.Application");
  var oSys=AkelPad.SystemFunction();

  if (AkelPad.ConnectObject(oIE, "IE_", "{34A715A0-6587-11D0-924A-0020AFC7AC4D}" /*DIID_DWebBrowserEvents2*/))
  {
    oIE.Visible=true;
    oIE.Navigate("http://akelpad.sourceforge.net/");
    AkelPad.WindowGetMessage();
    AkelPad.DisconnectObject(oIE);
  }
  oIE.Quit();

  function IE_DocumentComplete(pDisp, URL)
  {
    AkelPad.MessageBox(oIE.HWND, URL, WScript.ScriptName, 0 /*MB_OK*/);
    oSys.Call("user32::PostQuitMessage", 0);
  }


AkelPad.DisconnectObject (+ActiveX)
___________________________________

   .

  DisconnectObject(oEventSource);


  oEventSource
    ,    .

 
  .

:
  .  ConnectObject.


AkelPad.ActiveXThis (+ActiveX)
______________________________

  IDispatch .        ActiveX (ConnectObject, ScriptHandle).

  ActiveXThis(this);


  this
     IDispatch .

 
  .

:
  .  ActiveX.


WScript.ScriptBaseName
______________________

   .

  WScript.ScriptBaseName

 
  .   .

:
  WScript.Echo(WScript.ScriptBaseName);


_TCHAR (+ActiveX)
_________________

,    .    AkelPad.SystemFunction().Call.

  _TCHAR

 
  . "A" -      "A" (Windows 95/98/Me).
          "W" -      "W" (Windows NT/2000/XP).

:
  //         Win9x:
  var oSys=AkelPad.SystemFunction();
  var lpBuffer;
  var pWinDir;

  if (lpBuffer=AkelPad.MemAlloc(256 * _TSIZE))
  {
    oSys.Call("kernel32::GetWindowsDirectory" + _TCHAR, lpBuffer, 256);
    pWinDir=AkelPad.MemRead(lpBuffer, _TSTR);

    AkelPad.MemFree(lpBuffer);
  }


vbTCHAR (+ActiveX)
__________________

,   _TCHAR.   VBScript.


_TSTR (+ActiveX)
________________

,   .    MemCopy  MemRead.

  _TSTR

 
  . 0 - DT_ANSI -   (Windows 95/98/Me).
         1 - DT_UNICODE -   (Windows NT/2000/XP).

:
  .  _TCHAR.


vbTSTR (+ActiveX)
_________________

,   _TSTR.   VBScript.


_TSIZE (+ActiveX)
_________________

,     .    MemAlloc.

  _TSIZE

 
  . 1 - sizeof(char) -   (Windows 95/98/Me).
         2 - sizeof(wchar_t) -   (Windows NT/2000/XP).

:
  .  _TCHAR.


vbTSIZE (+ActiveX)
__________________

,   _TSIZE.   VBScript.


_X64 (+ActiveX)
_______________

,    - x86  x64.

  _X64

 
  . 0 -  x86.
         1 -  x64.

:
  if (_X64)
    WScript.Echo("x64 ");
  else
    WScript.Echo("x86 ");


vbX64 (+ActiveX)
________________

,   _X64.   VBScript.


_PtrAdd (+ActiveX)
__________________

   .

  _PtrAdd(lpPointer, nValue)


  lpPointer
     .
  nValue
      .   .

 
  . .

:
  .  ThreadHook.


vbPtrAdd (+ActiveX)
___________________

,   _PtrAdd.   VBScript.


_PtrMath (+ActiveX)
___________________

    .

  _PtrMath(lpPointer1, pSign, lpPointer2)


  lpPointer1
     .
  pSign
      :
      "+", "-", "*", "/", "%", "&", "|", "^", ">", "<", "^", "==", "!=", ">=", "<=", "<<", ">>"
  lpPointer2
     .

 
  . .

:
  .  WindowRegisterClass (VBScript).


vbPtrMath (+ActiveX)
____________________

,   _PtrMath.   VBScript.


*** ActiveX ***

Scripts.dll           .
-   x86: regsvr32.exe Scripts.dll
-   x64: "%SystemRoot%\System32\regsvr32.exe" Scripts.dll

 :
  if (typeof AkelPad == "undefined")
  {
    AkelPad=new ActiveXObject("AkelPad.Document");
    AkelPad.ActiveXThis(this);
    _TCHAR=AkelPad.Constants._TCHAR;
    _TSTR=AkelPad.Constants._TSTR;
    _TSIZE=AkelPad.Constants._TSIZE;
    _X64=AkelPad.Constants._X64;
    _PtrAdd=function(n1, n2) {return AkelPad.Global._PtrAdd(n1, n2);};
  }
  var oSys=AkelPad.SystemFunction();
  var lpBuffer;
  var pWinDir="";

  if (lpBuffer=AkelPad.MemAlloc(256 * _TSIZE))
  {
    oSys.Call("kernel32::GetWindowsDirectory" + _TCHAR, lpBuffer, 256);
    pWinDir=AkelPad.MemRead(lpBuffer, _TSTR);

    AkelPad.MemFree(lpBuffer);
  }
  WScript.Echo(pWinDir);
