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

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


***  ***

ű Windows ű (WSH) 棬ʹøָ Windows ģ (COM) Ķ
磬ʹ RegExp ִʽ
ʹ FileSystemObject ļݷʽ
ʹ WshShell  Windows ע
ʹ WshNetwork 繦ܡ
⣬Դִһ֧ԶⲿӦó ( Word  Excel) ű
Դ Jeff Glatt  "COM in C"


*** ű ***

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
      ķ AkelPad.ScriptHandle еĲ nOperation 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 Ӧ ContextMenuHotkeysToolbar 
    "METHOD"
      Ľű
    *RESULT
      ý
  :
    "һ" Call("Scripts::Main", 7, `AkelPad.TextFind(0, "(?<=\n\n)(?!\n)", 0x80001 /*FRF_DOWN|FRF_REGEXP*/)`)


*** űеķϢ ***

ڽűͷעпýڽűб(ҼбӦ)гֵķϢͬӦ AkelUpdater е

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

汾:
// Version: ...

:
// Author: ...

˵ ( 1):
//// ʹʽ滻

˵ ( 2):
// *** ʹʽ滻 ***

ָ˵ ( 3):
// Description(1033): Search and replace using regular expressions.
// Description(2052): ʹʽ滻

Աʶб (Microsoft ı ID):
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
_________________

ȡ AkelPad  ID

  GetLangId([nType]);


  nType
    0  //LANGID_FULL     ԱʶֵһԱʶԱʶϣĬϣ
    1  //LANGID_PRIMARY  Աʶ
    2  //LANGID_SUB      Աʶ

ֵ
  ֵAkelPad  ID

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

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


AkelPad.IsOldWindows (+ActiveX)
_______________________________

-Unicode Windows

  IsOldWindows();

ֵ
  true   -Unicode (Windows 95/98/Me)
  false  Unicode (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  (AkelPad v4.x.x ߰汾)

:
  var nAkelEdit=AkelPad.IsAkelEdit();


AkelPad.IsMDI
_____________

AkelPad  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
__________________

ֶû༭ھ֮󣬷 GetEditWndGetEditDocGetSelStartGetSelEndSetSelGetSelTextGetTextRangeReplaceSel ʹøþ

  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
    ĵ͡ AkelDLL.h е FIS_* ˵
  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* ʱָ

ֵ
  ֵֵ°ť ID

 (׼Ի):
  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
    ༭ڵľΪ 0 ʹûı༭ڵľ
  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           ʹת
    0x01000000  //FRF_ALLFILES            д򿪵 MDI ĵ (÷FRF_DOWN|FRF_ALLFILES or FRF_DOWN|FRF_BEGINNING|FRF_ALLFILES)
    0x08000000  //FRF_CYCLESEARCH         ѭ
    0x10000000  //FRF_CYCLESEARCHPROMPT   ѭʾ
    0x80000000  //FRF_TEST                ԡδѡı

ֵ
  ֵһƥַλá
  ûƥ䣬ֵΪ -1
  ʽ﷨ ( FRF_REGEXP )ֵΪ (-100 - PatternOffset)
  ʾΪ "ab[c"е﷨󣬷ֵΪ -102

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


AkelPad.TextReplace
___________________

Һ滻ı

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


  hHandle
    ༭ڵľΪ 0 ʹõǰ༭ھ
  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           ʹת
    0x01000000  //FRF_ALLFILES            д򿪵 MDI ĵ (÷FRF_DOWN|FRF_ALLFILES or 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 - PatternOffset)
  ʾΪ "ab[c"е﷨󣬷ֵΪ -102

:
  AkelPad.TextReplace(0, "MySearchString", "MyReplaceText", 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  ֮أԶֵ 0 (Ĭֵ)
    1  ȴֱɲκγ򷵻صĴ롣
    2  ȴֱָĽڵȴû룬Զֵ 0
  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(1252, 437);


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() ִʱ Include ļ򷵻 ""

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


AkelPad.OpenFile
________________

ļ

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


  pFile
    Ҫ򿪵ļ
  nFlags
    0x001  //OD_ADT_BINARY_ERROR    ļǷǶļ
    0x002  //OD_ADT_REG_CODEPAGE    עҵ򿪵Ĵҳô OD_ADT_DETECT_BOM
           //                       ǵرʹãδҵôһǽʹ
           //                       OD_ADT_DETECT_CODEPAGE|OD_ADT_DETECT_BOM
    0x004  //OD_ADT_DETECT_CODEPAGE ҳ
    0x008  //OD_ADT_DETECT_BOM       BOM ־
    0x010  //OD_ADT_NOMESSAGES      ԶϢʾ
    0x020  //OD_ADT_ONLYBOM          BOM ־ʱҳʹĬϴҳ
    0x100  //OD_REOPEN              µ MDI ڣʹ˳һ
    0x200  //OD_NOSCROLL            ָλá
    0x400  //OD_MULTIFILE           иĵʹ MB_YESNOCANCEL  MB_OKCANCEL
    0x800  //OD_NOUPDATE            ļϢ
         //Ĭֵ 0xD            (OD_ADT_BINARY_ERROR|OD_ADT_DETECT_CODEPAGE|OD_ADT_DETECT_BOM)
  nCodePage
    ļҳ (nFlags & OD_ADT_DETECT_CODEPAGE) ʱ
  bBOM
    ļ BOM (nFlags & OD_ADT_DETECT_BOM) ʱ

ֵ
   0  //EOD_SUCCESS          ɹ
  -1  //EOD_ADT_OPEN         Զҳ޷ļ
  -2  //EOD_ADT_ALLOC        Զҳ޷仺档
  -3  //EOD_ADT_READ         Զҳȡļ
 -11  //EOD_OPEN             ޷ļ
 -13  //EOD_WINDOW_EXIST     ļѾ򿪡
 -14  //EOD_CODEPAGE_ERROR   ޷ʹָҳ
 -15  //EOD_STOP              AKDN_OPENDOCUMENT_START λֹͣ
 -16  //EOD_STREAMIN          EM_STREAMIN г
 -17  //EOD_DOCUMENTS_LIMIT   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_BINARY_ERROR     ļǷǶļ
    0x02  //ADT_REG_CODEPAGE     עҵ򿪵Ĵҳô ADT_DETECT_BOM
          //                     ǵرʹãδҵôһǽʹ
          //                     ADT_DETECT_CODEPAGE|ADT_DETECT_BOM
    0x04  //ADT_DETECT_CODEPAGE  ҳ
    0x08  //ADT_DETECT_BOM        BOM ־
    0x10  //ADT_NOMESSAGES       ԶִⷢҲʾ
    0x20  //ADT_ONLYBOM           BOM ־ʱҳʹĬϴҳ
          //Ĭֵ 0xD         (ADT_BINARY_ERROR|ADT_DETECT_CODEPAGE|ADT_DETECT_BOM).
  nCodePage
    ļҳ (nFlags & ADT_DETECT_CODEPAGE) ʱԡ
  bBOM
    ļ BOM (nFlags & ADT_DETECT_BOM) ʱԡ
  nBytesMax
    ȡļʼָֽΪ -1Ͷȡļ (Ĭֵ)

ֵ
  ַļݡ

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


AkelPad.WriteFile
_________________

дļݡ

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


  vFile
    ҪдļΪַΪļ
  pContent
    Ҫдݡ
  nContentLen
    ݳȡΪ -1Զ㳤ȡ
  nCodePage
    дҳ
  bBOM
    ļֽ˳ǡ
  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
    ļֽ˳ BOM1 - ڣ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_CODEPAGE_ERROR  ޷ʹָҳ
  -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
    Ƶַʽ "Dll::Function" ָʽĺַ
  ...
    ַָ
    ַ:  Windows 95/98/Me - Ansi ַ
                 Windows NT/2000/XP - Unicode ַ

ֵ
  ֵý

 (﷨):
  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        QWORD (x64)  DWORD (x86) ֵڴ档
    3  //DT_DWORD        DWORD ֵڴ档
    4  //DT_WORD         WORD ֵڴ档
    5  //DT_BYTE         BYTE ֵڴ档
  nLength
    ַȡֵΪ -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       ڴȡ QWORD (x64)  DWORD (x86) ֡
    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
    

ֵ
  ֵ  (VARIANT)  (VARTYPE)
       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.VarDispatch (+ActiveX)
______________________________

ȡһָ IDispatch 

  VarDispatch(lpPointer);


  lpPointer
    ָָ IDispatch 

ֵ
  IDispatch 

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


AkelPad.GetArgLine
__________________

С

  GetArgLine([bNoEncloseQuotes]);


  bNoEncloseQuotes
    true   ų(by default)
    false  š

ֵ
  ַС

:
  var pArgLine;

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


AkelPad.GetArgValue
___________________

Ƽֵ

  GetArgValue(pArgName, vDefault);


  pArgName
    ơ
  vDefault
    ĬֵҲָĲʹøֵ

ֵ
  ֵĬֵ̳͡

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

  //Get values 0.01, Value2, 0x10 by names 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 - ԡ

ֵ
  ֡þ

:
  Ķȡдɾʾ


AkelPad.ScriptSettings().Read
_____________________________

ȡѡ

  Read(vOptionName, nType[, vDefault]);


  vOptionName
    ַʱΪѡƣʱΪ
  nType
    1   //PO_DWORD         ȡ 32-bit  (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   ȡ 32-bit  (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  ʧܡ

:
  Ķȡдɾʾ


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;

  //򿪡ҡԻ
  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);

  //԰ť
  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
  //ı
  SetWindowFontAndText(hWndTestButton, hGuiFont, "Test");

  //Ի
  if (AkelPad.WindowSubClass(hWndModeless, DialogCallback, 273 /*WM_COMMAND*/, 2 /*WM_DESTROY*/))
  {
    //ϢѭעԻ
    AkelPad.WindowRegisterDialog(hWndModeless);

    //Ϣѭ
    AkelPad.WindowGetMessage();

    //עȡ
    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
    {
      //˳Ϣѭ
      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
    չĴʽ MSDN  CreateWindowEx ʹ˵
  pClassName
    ʹ AkelPad.WindowRegisterClass Ǽǵ
  pTitle
    Ի⡣
  nStyle
    ʽ MSDN  CreateWindowEx ʹ˵
  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
    չĴʽ MSDN  CreateWindowEx ʹ˵
  pClassName1
    磺"BUTTON" MSDN  CreateWindowEx ʹ˵
  pTitle1
    ؼı
  nStyle1
    ؼʽ MSDN  CreateWindowEx ʹ˵
  x1
    ؼڿͻϵˮƽλá
  y1
    ؼڿͻϵĴֱλá
  nWidth1
    ؼȡ
  nHeight1
    ؼ߶ȡ
  nId1
    ؼʶ
  lParam1
    ݡһֱʾǴֽΪλĴС(ֵĴС)
    ؼָ WM_CREATE Ϣ lParam ݵָ롣Ϊ 㣬Ͳʹ (Ĭֵ)
  "|"
    ʾؼĽ
  ...
    һؼĲ

ֵ
   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_KEYUP, WM_CHAR, WM_DEADCHAR, WM_SYSKEYDOWN, WM_SYSKEYUP, WM_SYSCHAR, WM_SYSDEADCHAR, WM_UNICHAR)
    0x4  //WGM_KEYDOWNUP Ӵڷ WM_KEYDOWNWM_KEYUP ϢԻ
         //Default is 0x0.
         //ĬֵΪ 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
    ο MSDN е SetWindowsHookEx ĵһ
  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(lParam + (_X64?8:4) /*offsetof(MSG, message)*/, 3 /*DT_DWORD*/);

    if (uMsg == 0x100 /*WM_KEYDOWN*/)
    {
      wParam=AkelPad.MemRead(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.SendMessageAkelPad.Command ʱű߳ (Ĭֵ)
    0x20  //ULT_UNLOCKSENDMESSAGE     AkelPad.SendMessageAkelPad.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.SendMessageAkelPad.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)

:
  //ṩ֧ Unicode ұֶ 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 - ansi ַ (Windows 95/98/Me)
        1 - DT_UNICODE - unicode ַ (Windows NT/2000/XP)

:
  ο _TCHAR ʾ


vbTSTR (+ActiveX)
_________________

 _TSTR ͬ VBScript


_TSIZE (+ActiveX)
_________________

ȷŴСֽĳ MemAlloc 

  _TSIZE

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

:
  ο _TCHAR ʾ


vbTSIZE (+ActiveX)
__________________

 _TSIZE ͬ VBScript


_X64 (+ActiveX)
_______________

ȷλ͵ĳ - x86  x64

  _X64

ֵ
  ֵ0 - x86 汾
        1 - x64 汾

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


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);
