1 (изменено: DD, 2016-05-09 17:21:29)

Тема: AHK: Захват и структурирование заметок

Предназначен для быстрого занесения текстовок разного рода, вместе с заголовком и адресом окна-источника (IE, Opera, Firefox, Word, CHM-Справка и некоторые другие, кроме страниц, оформленных фреймами), в HTML-документ «QNotes», упорядочивающий их по вкладкам в зависимости от выбора.

Сочетание Ctrl + N
— одно нажатие, — вывести окно скрипта с существующими разделами (вкладками) файла «QNotes» и добавить выделенный/скопированный или набранный в контроле Edit текст в один из нужных;
— двойное нажатие, — добавить текст напрямую (без вывода окна GUI) в таб, выбиравшийся в последний раз;
— тройное, — открыть файл заметок (с помощью IE, — ибо Opera и FF затрудняются с открытием chm-содержащих ссылок).

Имеется возможность быстрого поиска по всем вкладкам, — двойной клик в поисковом input-окне (файла «QNotes») осуществит сброс поиска, двойной клик в пределах окна документа подготовит input-окно к вводу с клавиатуры.

Добавить/убавить количество разделов можно в местах, обозначенных в скрипте такими манерами:

/* ... */
<!-- ... -->
; ...

#NoEnv
#SingleInstance,Force
SendMode Input
SetBatchLines,-1

MyIco=%A_ScriptDir%\notes.ico
IfNotExist %MyIco%
{
  Gosub, CrtIco
  WriteFile("notes.ico",Ico)
  IconFile = %MyIco%
}
Else
  IconFile = %MyIco%

Menu, Tray, Icon, %IconFile%


^SC31::        ;Ctrl + N
   ++counter
   SetTimer, Choice, -400
   return

Choice:
if A_ThisHotkey = ^SC31        ;Ctrl + N
   {
   IfEqual, counter, 1, Gosub, QNotesGui
   IfEqual, counter, 2, Gosub, QNotesAddLast
   IfEqual, counter, 3, Gosub, QNotesRun
   }

   counter =
Return


QNotesInstall:
  IfNotExist, %A_ScriptDir%\QNotes.html
  {
    FileAppend,
    (LTrim
    <HTML>`n<HEAD>`n<TITLE>[QNotes]</TITLE>
    <META http-equiv="Content-Type" content="text/html; charset=windows-1251"/>
    <STYLE type="text/css">`n<!--
    *html {BACKGROUND:url(null.png) fixed; FONT: 13px/1.5 "Trebuchet MS", Tahoma, Arial;
    MARGIN:0 0 24px 0; PADDING-TOP:24px; BORDER:none;}
    div#tabs {HEIGHT:24px; LINE-HEIGHT:20px; WIDTH:100`%; BACKGROUND-COLOR:#FFFFF1;
    POSITION:fixed; TOP:0; LEFT:0; Z-INDEX:1; //POSITION:absolute;
    TOP:expression(document.getElementsByTagName( 'body' )[0].scrollTop + "px");}
    #elements {MARGIN:0 0 0 6`%;}`nul {FLOAT:right;}`n* html div#tabs {MARGIN:0;}
    div#tabs a {COLOR:#004b4b;}
    div#tabs dd {FLOAT:left; /*CLEAR:right;*/ MARGIN-RIGHT:1px; DISPLAY:inline;}
    div#tabs dd a {//WIDTH:70px; TEXT-ALIGN:center; DISPLAY:block;
    PADDING:0 13px 1px; MARGIN-BOTTOM:-1px; CURSOR:pointer; BACKGROUND:#D3E0CF; /*F5F5EA*/
    BORDER:1px solid #AAC1AF; BORDER-BOTTOM:1px solid #DDD; POSITION:relative;
    /*BORDER:solid 1px; BORDER-COLOR:#238 #238 #238 #238;*/}
    * html div#tabs dd a {FLOAT:left;}`n*+html div#tabs dd a {FLOAT:left;}
    div#tabs dd a:hover {COLOR:#F70; BACKGROUND:#FFFFDF; BORDER:1px solid #FFCA95;}
    div#tabs dd a.current:hover, div#tabs a.current {COLOR:#00384a; BACKGROUND:#BBCCBB;
    PADDING:0px 13px 2px; BORDER:1px solid #BBCCBB;}`n#elements .tab{DISPLAY:none;}
    #elements.t1 .t1,#elements.t2 .t2,#elements.t3 .t3,#elements.t4 .t4,#elements.t5 .t5,
    #elements.t6 .t6,#elements.t7 .t7,#elements.t8 .t8 /* ... */ {DISPLAY:block;}`n
    a:link,a:focus,a:hover,a:visited {TEXT-DECORATION:none;}`na:link  {COLOR:#990000;}
    a:hover  {COLOR:blue;}`na:visited {COLOR:#990099;}`n
    div.curvy {POSITION:relative; WIDTH:100`%; COLOR:#000; BACKGROUND:#BBCCBB; /* AAC1AF 9CAF9C */
    MARGIN:0 0 25px 0; PADDING:10px 0px 18px 0px; FONT-FAMILY:monospace;}`n
    #ctl, #cbl, #ctr, #cbr {POSITION:absolute; WIDTH:20px; HEIGHT:20px;
    COLOR:#BBCCBB; BACKGROUND:#FFFFF1; OVERFLOW:hidden; FONT-STYLE:normal; Z-INDEX:1;}
    * html #cbl, #cbr {MARGIN-BOTTOM:-1px; HEIGHT:21px;} /* only for IE */
    #ctr, #cbr {WIDTH:0px;}`n#ctl {TOP:0; LEFT:0;}`n#cbl {BOTTOM:0; LEFT:0;}
    #ctr {TOP:0; RIGHT:0;}`n#cbr {BOTTOM:0; RIGHT:0;}
    div.curvy em b {POSITION:absolute; FONT-SIZE:150px; FONT-FAMILY:Arial;
    COLOR:#BBCCBB; LINE-HEIGHT:40px; FONT-WEIGHT:normal;}`n#ctl b {LEFT:-8px;}
    #ctr b {LEFT:-25px;}`n#cbl b {LEFT:-8px; TOP:-17px;}`n#cbr b {LEFT:-25px; TOP:-17px;}`n
    div.numb {FONT-SIZE:30`%; COLOR:#808080;}
    td.quot1, .quot2 {COLOR:#004a4a; FONT-FAMILY:serif; FONT-SIZE:190`%; FONT-WEIGHT:bold;}
    td.quot1 {PADDING:0 0 0 4`%;}`n/*td.quot2 {PADDING:0 0 0 0;}*/
    td.note {LINE-HEIGHT:1.15em; PADDING:1.4em 0 0 4`%; FONT-SIZE:14px; COLOR:#00384a;}
    font#dt {COLOR:#728776;}`ndiv#url {/*TEXT-TRANSFORM:uppercase; LETTER-SPACING:1pt;*/
    FONT-WEIGHT:bold; COLOR:#990000; /* 55642E C5E2E2 */
    FONT-FAMILY:Tahoma; MARGIN-LEFT:20`%; TEXT-ALIGN:left;
    FONT-SIZE:7.5pt; BORDER-BOTTOM:1px solid #728776;}`n
    #searchbox {WIDTH:220px; HEIGHT:22px; LINE-HEIGHT:18px; BORDER:1px #728776 solid;
    BACKGROUND-COLOR:#FFFFF1;}`n.hidden {DISPLAY:none; POSITION:absolute;}
    -->`n</STYLE>`n
    <SCRIPT type="text/javascript">`n<!--
    var keyTimerId=0;
    function prevEle(e){do{e=e.previousSibling} while(e && e.nodeType != 1); return e};
    function nextEle(e){do{e=e.nextSibling} while(e && e.nodeType != 1); return e};
    function isVisible(e){var rows=e.rows; for(var i=0, r; r=rows[i];
    i++){if(!r.className || r.className == 'visible')return true}};
    function find(){var div, tb, h; var val=document.getElementById('searchbox').value.toLowerCase();
    var lnks=document.getElementsByTagName('span');
    for(var i=0, li; li=lnks[i]; i++){div=li.parentNode.parentNode;
    div.className=((li.textContent || li.innerText).toLowerCase().indexOf(val) != -1) ? 'visible' : 'hidden';
    if(!nextEle(div)){tb=div.parentNode.parentNode; h=prevEle(tb);
    if(isVisible(tb)){tb.className='visible'; h.className='visible';tb.parentNode.className='curvy';}
    else{tb.className='hidden'; h.className='hidden';tb.parentNode.className='hidden';};}}};
    function addInfo(text){var fieldRef;if(fieldRef=document.getElementById('searchbox'))
    {fieldRef.value = text;find()}return false;`n}
    function I(){`ndocument.write('<div class="curvy">');
    document.write('<em id="ctl"><b>&bull;</b></em><em id="cbl"><b>&bull;</b></em>');
    document.write('<em id="ctr"><b>&bull;</b></em><em id="cbr"><b>&bull;</b></em>');
    document.write('<table border="0" cellpadding="0" cellspacing="0" width="100`%"><tr valign=top>');
    document.write('<td width="12`%" align="right">');
    document.write('<noindex><div class="numb" align="right">#</div></noindex>');
    document.write('</td>');`ndocument.write('<span>');`n}`nfunction II(){
    document.write('<td width="4`%" align="right" class="quot1">«</td>');
    document.write('<td width="60`%" class="note">');`n}
    function III(){`ndocument.write('</td>');`ndocument.write('</span>');
    document.write('<td width="24`%" valign="bottom" class="quot2">»</td>');
    document.write('</tr></table>');`ndocument.write('</div>');`n}
    function CrtTabs(){`nvar a = document.getElementById('tabs').getElementsByTagName('a');
    for(i = 0; i < a.length; i++){ a[i].onclick = function(){ for(j = 0; j < a.length; j++){
    a[j].className = a[j].className.replace(" current", ""); } this.className += " current";
    document.getElementById('elements').className = this.rel; return false; } } }
    window.onload = CrtTabs`n//-->`n</SCRIPT>`n</HEAD>`n
    <BODY bgcolor=#FFFFF1 onDblClick="document.getElementById('searchbox').focus()">`n
    <DIV id="tabs">`n<UL>
    <DD class="t1"><a href="#" rel="t1" class=" current">Всякое</a></DD>
    <DD class="t2"><a href="#" rel="t2">Memori</a></DD>
    <DD class="t3"><a href="#" rel="t3">Цитаты</a></DD>
    <DD class="t4"><a href="#" rel="t4">Ссылки</a></DD>
    <DD class="t5"><a href="#" rel="t5">Инфо</a></DD>
    <DD class="t6"><a href="#" rel="t6">Отжиг</a></DD>
    <DD class="t7" title="Закладки"><a href="#" rel="t7">Ляссе</a></DD>
    <DD class="t8" title="Сегодня мыслей не было..."><a href="#" rel="t8">Мысли)</a></DD>
    <!-- ... -->`n    
    <DD><INPUT type="text" value="Быстрый поиск" id="searchbox"
     onfocus="if(this.value==this.defaultValue)this.value='';"
     onblur="if(!this.value)this.value=this.defaultValue;"
     onkeyup="clearTimeout(keyTimerId);keyTimerId=setTimeout('find()',500);"
     onDblClick="return addInfo('');"></DD>
    </UL>`n</DIV>`n<DIV id="elements" class="t1">`n`n`n
  ), %A_ScriptDir%\QNotes.html
  }
  Return


QNotesGui:
  f_ClipSaved := ClipboardAll
  Send, {Ctrl Down}{SC02E}{Ctrl UP}    ;c     выделенное
  Sleep, 200                ;      в буфер
  
  Gosub, Get_ExePath_FilePath_CurrentWin
  
  IfWinExist, ahk_id %ID1%
    Gosub, 1GuiClose
  Gui,1:+LastFound +AlwaysOnTop -Caption -Border +Owner +OwnDialogs
  Gui,1: Color,000000,323232
  Gui,1: font,cFFFFFF,
  WinGet, ID1
  Gui,1: Add, Text, gWinMove x0 y0 w220 h9 ;+0x5
  Gui,1: Add, Edit, x8 y10 w204 h64 vCurrText ,
  Gui,1: Add, ListView, -Hdr -E0x200 -Multi Background323232 cD0D0D0 x3 y78 w209 h130 vSelItem HScroll gQNotesChecks AltSubmit count4000,Name
  LV_Add( "", "Всякое" )  ;LV_Add( "", 1, "Всякое" )
  LV_Add( "", "Memori" )
  LV_Add( "", "Цитаты" )
  LV_Add( "", "Ссылки" )
  LV_Add( "", "Инфо" )
  LV_Add( "", "Отжиг" )
  LV_Add( "", "Ляссе" )
  LV_Add( "", "Мысли)" )
  ; ...
  
  CoordMode, Mouse, Screen
  MouseMove, (A_ScreenWidth/2), (A_ScreenHeight/2)
  
  Gui,1: Show, h210 w220, QNotesWin
  ControlFocus, Edit1, QNotesWin
  ControlGetText, CurrText, Edit1, QNotesWin
  Return

1GuiClose:
  Gui,1:Destroy
  Return

WinMove:
  PostMessage, WM_NCLBUTTONDOWN := 0xA1, HTCAPTION := 2
  Return

QNotesChecks:
  If A_GuiEvent = Normal
  {
    LV_GetText(RowText, A_EventInfo)  ;MsgBox, Строка: %A_EventInfo%. Текст: "%RowText%"
    Gui,1:Submit, Hide
    Gosub, QNotesInstall
    Gosub, QNotesAdd
    Gui,1:Destroy
  }
  Return

QNotesAdd:
  FormatTime DT,,dd.MM.yy, h:mm:ss
  
  CoordMode, ToolTip, Screen
  ToolTip, `n     %RowText%   :-|      `n,300,300
  Sleep, 230
  SoundPlay, %A_WinDir%\Media\ding.wav
  
  IfInString RowText, Всякое
    ttab = tab t1
  IfInString RowText, Memori
    ttab = tab t2
  IfInString RowText, Цитаты
    ttab = tab t3
  IfInString RowText, Ссылки
    ttab = tab t4
  IfInString RowText, Инфо
    ttab = tab t5
  IfInString RowText, Отжиг
    ttab = tab t6
  IfInString RowText, Ляссе
    ttab = tab t7
  IfInString RowText, Мысли)
    ttab = tab t8
  ; ...

  Gosub, my_Spec_ActiveWins

  If CurrentWin =         ; если заголовок окна пуст, то...
    CurrentWin = ?Title?

  If File_Path =         ; если переменная File_Path ПУСТА, то...
  {
    If WinEdit             ; если Edit НАЙДЕН, то...
    {
      Note_Path=%WinEdit%
      CurrentWin=+%CurrentWin%
    }
    Else             ; если Edit НЕ найден, то...
    {
      Note_Path=%Exe_Path%
      CurrentWin=++%CurrentWin%
    }
  }
  Else                 ; если переменная File_Path НЕ пуста, то...
  {
    If WinEdit =         ; если Edit НЕ найден, то...
      Note_Path=%File_Path%
    Else             ; если Edit НАЙДЕН, то...
    {
      ;;IfInString,File_Path,/  ; на случай если командные штучки при нем   sic!Space
      ;;{
      ;;  Note_Path=%WinEdit%
      ;;}
      ;;Else
      {
        Note_Path=%File_Path%
        CurrentWin=*%CurrentWin%
      }
    }
  }


  if CurrText =
    Str = %Clipboard%
  else
    Str = %CurrText%

  StringReplace, Str, Str, %A_Space%%A_Space%%A_Space%, &nbsp`;&nbsp`;&nbsp`;, All
  StringReplace, Str, Str, %A_Space%%A_Space%, &nbsp`;&nbsp`;, All
  StringReplace, Str, Str, `r`n%A_Space%, `r`n&nbsp`;, All
  StringReplace, Str, Str, <, &lt`;, All
  StringReplace, Str, Str, >, &gt`;, All
  StringReplace, Str, Str, `n, <br>, All


  if GetKeyState("Ctrl","p")
  {
    FileAppend,
    (LTrim
    <div class="%ttab%">`n<script>I()</script>`n<script>II()</script>
    %Str%`n<script>III()</script>`n</div>`n`n
    ), %A_ScriptDir%\QNotes.html
  }
  else if CurrText =
  {
    FileAppend,
    (LTrim
    <div class="%ttab%">`n<script>I()</script>
    <div id="url"><a target=_blank href="%Note_Path%">%CurrentWin%</a> <font id="dt">- %DT%</font></div>
    <script>II()</script>`n%Str%`n<script>III()</script>`n</div>`n`n
    ), %A_ScriptDir%\QNotes.html
  }
  else
  {
    FileAppend,
    (LTrim
    <div class="%ttab%">`n<script>I()</script>`n<script>II()</script>`n
    %Str%`n<script>III()</script>`n</div>`n`n
    ), %A_ScriptDir%\QNotes.html
  }

  Clipboard := f_ClipSaved
  f_ClipSaved =
  ToolTip, `n     %RowText%   :-)      `n,300,300
  Sleep, 110
  ToolTip, `n     %RowText%   `;-)      `n,300,300
  Sleep, 400
  ToolTip
  Return

QNotesAddLast:
  If Not RowText
    Return
  f_ClipSaved := ClipboardAll
  Send, {Ctrl Down}{SC02E}{Ctrl UP}    ;c     выделенное
  Sleep, 200                ;      в буфер
  Gosub, Get_ExePath_FilePath_CurrentWin
  Gosub, QNotesInstall
  Gosub, QNotesAdd
  Return

QNotesRun:
  Run, iexplore.exe %A_ScriptDir%\QNotes.html, , Max UseErrorLevel
  WinWait, [QNotes],, 2
  {
    WinWaitActive, [QNotes],,
    Sleep, 900
    Send, {End 5}
  }
  If ErrorLevel
    Return
  Return

#IfWinActive, QNotesWin
  WheelUp::
  Up::
    TotalRows:=LV_GetCount()
    PresentRow:=LV_GetNext()
    NewRow:=PresentRow - 1
    if (NewRow < 1)
      NewRow:=TotalRows + NewRow
    LV_Modify(NewRow,"+Focus +Select Vis")
    Return
  WheelDown::
  Down::
    TotalRows:=LV_GetCount()
    PresentRow:=LV_GetNext()
    NewRow:=PresentRow + 1
    if (NewRow > TotalRows)
      NewRow:=NewRow - TotalRows
    LV_Modify(NewRow,"+Focus +Select Vis")
    Return
#IfWinActive

my_Spec_ActiveWins:
  If WinActive("ahk_class HH Parent")
  {
    ControlGet, hWnd, hWnd, , Internet Explorer_Server1, ahk_class HH Parent
    Gosub, GetChmTitlePath
    CurrentWin = %CurrentWin% / %ttlName%
    File_Path = %pthValue%
  }

  If WinActive("ahk_class IEFrame")
  || WinActive("ahk_class Maxthon2_Frame")
  || WinActive("Paranoia Browser")
  {
    CurrentWin = %ttlName%
  }

  If WinActive("ahk_class MozillaUIWindowClass") || WinActive("ahk_class OpWindow")
  {
    StringSplit, FF_Op_Ttl, sData,`n
    FF_Op_Ttl = %FF_Op_Ttl2%             ; заголовок
    CurrentWin = %FF_Op_Ttl%
    StringReplace, CurrentWin, CurrentWin, `\`", `", All
  }

  If WinActive("ahk_class OpWindow")
  {
    StringReplace, CurrentWin, CurrentWin, Opera `- `[,, All
    StringTrimRight, CurrentWin, CurrentWin, 1
  }
Return




GetChmTitlePath:
  ;see COM.ahk Standard Library   by Sean   http://www.autohotkey.com/forum/topic22923.html
  ;from: Capture Text from Read Only List
  ;ControlGet, hwnd, hwnd, , , ...
  ;MouseGetPos,,,, hWnd, 3
  COM_AccInit()
  If   pacc :=   COM_AccessibleObjectFromWindow(hWnd)
  {
     Loop, %   COM_AccessibleChildren(pacc, COM_Invoke(pacc,"accChildCount"), varChildren)
     If   paccChild:=NumGet(varChildren,16*A_Index-8)
     ttlName :=COM_Invoke(paccChild,"accName",0)
     pthValue :=COM_Invoke(paccChild,"accValue",0)
        , COM_Release(paccChild)
     COM_Release(pacc)
  }
  COM_AccTerm()

  If WinActive("ahk_class OpusApp") ; Word
  {
    COM_Init()
    Word := COM_GetActiveObject("Word.Application")
    ActiveDocument := com_invoke(Word,"ActiveDocument")
    pthValue := COM_Invoke(ActiveDocument, "Path") . "\" . COM_Invoke(ActiveDocument, "Name")
  }
Return

;------------------------------------------------------------------------------
; COM.ahk Standard Library !FRAGMENT!
; by Sean
; http://www.autohotkey.com/forum/topic22923.html
;------------------------------------------------------------------------------
COM_Init()
{
    Return    DllCall("ole32\OleInitialize", "Uint", 0)
}
COM_AccInit()
{
    COM_Init()
    If Not    DllCall("GetModuleHandle", "str", "oleacc")
    Return    DllCall("LoadLibrary", "str", "oleacc")
}
COM_AccessibleObjectFromWindow(hWnd, idObject=-4, IID = "")
{
    If    DllCall("oleacc\AccessibleObjectFromWindow", "Uint", hWnd, "Uint", idObject, "Uint", COM_GUID4String(IID, IID ? IID : idObject&0xFFFFFFFF==0xFFFFFFF0 ? "{00020400-0000-0000-C000-000000000046}":"{618736E0-3C3D-11CF-810C-00AA00389B71}"), "UintP", pacc)=0
    Return    pacc
}
COM_GUID4String(ByRef CLSID, String)
{
    VarSetCapacity(CLSID, 16)
    DllCall("ole32\CLSIDFromString", "Uint", COM_SysString(String,String), "Uint", &CLSID)
    Return    &CLSID
}
COM_SysString(ByRef wString, sString)
{
    VarSetCapacity(wString,3+2*nLen:=1+StrLen(sString))
    Return    NumPut(DllCall("kernel32\MultiByteToWideChar","Uint",0,"Uint",0,"Uint",&sString,"int",nLen,"Uint",&wString+4,"int",nLen,"Uint")*2-2,wString)
}
COM_AccessibleChildren(pacc, cChildren, ByRef varChildren)
{
    VarSetCapacity(varChildren,cChildren*16,0)
    If    DllCall("oleacc\AccessibleChildren", "Uint", pacc, "Uint", 0, "Uint", cChildren+0, "Uint", &varChildren, "UintP", cChildren:=0)=0
    Return    cChildren
}
COM_AddRef(ppv)
{
    Return    DllCall(NumGet(NumGet(1*ppv)+4), "Uint", ppv)
}
COM_Invoke(pdsp,name="",prm0="vT_NoNe",prm1="vT_NoNe",prm2="vT_NoNe",prm3="vT_NoNe",prm4="vT_NoNe",prm5="vT_NoNe",prm6="vT_NoNe",prm7="vT_NoNe",prm8="vT_NoNe",prm9="vT_NoNe")
{
    If    name=
    Return    COM_Release(pdsp)
    If    name contains .
    {
        SubStr(name,1,1)!="." ? name.=".":name:=SubStr(name,2) . ".",COM_AddRef(pdsp)
    Loop,    Parse,    name, .
    {
    If    A_Index=1
    {
        name :=    A_LoopField
        Continue
    }
    Else If    name not contains [,(
        prmn :=    ""
    Else If    InStr("])",SubStr(name,0))
    Loop,    Parse,    name, [(,'")]
    If    A_Index=1
        name :=    A_LoopField
    Else    prmn :=    A_LoopField
    Else
    {
        name .=    "." . A_LoopField
        Continue
    }
    If    A_LoopField!=
        pdsp:=    COM_Invoke(pdsp,name,prmn!="" ? prmn:"vT_NoNe")+COM_Release(pdsp)*0,name:=A_LoopField
    Else    Return    prmn!="" ? COM_Invoke(pdsp,name,prmn,prm0,prm1,prm2,prm3,prm4,prm5,prm6,prm7,prm8):COM_Invoke(pdsp,name,prm0,prm1,prm2,prm3,prm4,prm5,prm6,prm7,prm8,prm9),COM_Release(pdsp)
    }
    }
    sParams    := "0123456789"
    Loop,    Parse,    sParams
        If    (prm%A_LoopField% == "vT_NoNe")
        {
            sParams    := SubStr(sParams,1,A_Index-1)
            Break
        }
    VarSetCapacity(varg,16*nParams:=StrLen(sParams),0), VarSetCapacity(DispParams,16,0), VarSetCapacity(varResult,32,0), VarSetCapacity(ExcepInfo,32,0)
    Loop,     Parse,    sParams
;        If    prm%A_LoopField%+0=="" || InStr(prm%A_LoopField%,".") || prm%A_LoopField%>=0x80000000 || prm%A_LoopField%<-0x80000000
        If    prm%A_LoopField% is not integer
            NumPut(COM_SysString(prm%A_LoopField%,prm%A_LoopField%),NumPut(8,varg,(nParams-A_Index)*16),4)
        Else    NumPut(SubStr(prm%A_LoopField%,1,1)="+" ? 9:prm%A_LoopField%=="-0" ? (prm%A_LoopField%:=0x80020004)*0+10:3,NumPut(prm%A_LoopField%,varg,(nParams-A_Index)*16+8),-12,"Ushort")
    If    nParams
        NumPut(nParams,NumPut(&varg,DispParams),4)
    If    (nvk :=    SubStr(name,0)="=" ? 12:3)=12
        name :=    SubStr(name,1,-1),NumPut(1,NumPut(NumPut(-3,varResult,4)-4,DispParams,4),4)
    Global    COM_HR, COM_LR:=""
    If    (COM_HR:=DllCall(NumGet(NumGet(1*pdsp)+20),"Uint",pdsp,"Uint",&varResult+16,"UintP",COM_SysString(wname,name),"Uint",1,"Uint",1024,"intP",dispID,"Uint"))=0&&(COM_HR:=DllCall(NumGet(NumGet(1*pdsp)+24),"Uint",pdsp,"int",dispID,"Uint",&varResult+16,"Uint",1024,"Ushort",nvk,"Uint",&DispParams,"Uint",&varResult,"Uint",&ExcepInfo,"Uint",0,"Uint"))!=0&&nParams&&nvk!=12&&(COM_LR:=DllCall(NumGet(NumGet(1*pdsp)+24),"Uint",pdsp,"int",dispID,"Uint",&varResult+16,"Uint",1024,"Ushort",12,"Uint",NumPut(1,NumPut(NumPut(-3,varResult,4)-4,DispParams,4),4)-16,"Uint",0,"Uint",0,"Uint",0,"Uint"))=0
        COM_HR:=0
    Global    COM_VT := NumGet(varResult,0,"Ushort")
    Return    COM_HR=0 ? COM_VT>1 ? COM_VT=9||COM_VT=13 ? NumGet(varResult,8):COM_VT=8||COM_VT<0x1000&&COM_VariantChangeType(&varResult,&varResult)=0 ? COM_Ansi4Unicode(NumGet(varResult,8)) . COM_VariantClear(&varResult):NumGet(varResult,8):"":COM_Error(COM_HR,COM_LR,&ExcepInfo,name)
}
COM_Error(hr = "", lr = "", pei = "", name = "")
{
    Static    bDebug:=1
    If Not    pei
    {
    bDebug:=hr
    Global    COM_HR, COM_LR
    Return    COM_HR&&COM_LR ? COM_LR<<32|COM_HR:COM_HR
    }
    Else If    !bDebug
    Return
    hr ? (VarSetCapacity(sError,1023),VarSetCapacity(nError,10),DllCall("kernel32\FormatMessageA","Uint",0x1000,"Uint",0,"Uint",hr<>0x80020009 ? hr : (bExcep:=1)*(hr:=NumGet(pei+28)) ? hr : hr:=NumGet(pei+0,0,"Ushort")+0x80040200,"Uint",0,"str",sError,"Uint",1024,"Uint",0),DllCall("user32\wsprintfA","str",nError,"str","0x%08X","Uint",hr,"Cdecl")) : sError:="The COM Object may not be a valid Dispatch Object!`n`tFirst ensure that COM Library has been initialized through COM_Init().`n", lr ? (VarSetCapacity(sError2,1023),VarSetCapacity(nError2,10),DllCall("kernel32\FormatMessageA","Uint",0x1000,"Uint",0,"Uint",lr,"Uint",0,"str",sError2,"Uint",1024,"Uint",0),DllCall("user32\wsprintfA","str",nError2,"str","0x%08X","Uint",lr,"Cdecl")) : ""
    MsgBox, 260, COM Error Notification, % "Function Name:`t""" . name . """`nERROR:`t" . sError . "`t(" . nError . ")" . (bExcep ? SubStr(NumGet(pei+24) ? DllCall(NumGet(pei+24),"Uint",pei) : "",1,0) . "`nPROG:`t" . COM_Ansi4Unicode(NumGet(pei+4)) . COM_SysFreeString(NumGet(pei+4)) . "`nDESC:`t" . COM_Ansi4Unicode(NumGet(pei+8)) . COM_SysFreeString(NumGet(pei+8)) . "`nHELP:`t" . COM_Ansi4Unicode(NumGet(pei+12)) . COM_SysFreeString(NumGet(pei+12)) . "," . NumGet(pei+16) : "") . (lr ? "`n`nERROR2:`t" . sError2 . "`t(" . nError2 . ")" : "") . "`n`nWill Continue?"
    IfMsgBox, No, Exit
}
COM_Ansi4Unicode(pString, nSize = "")
{
    If (nSize = "")
        nSize:=DllCall("kernel32\WideCharToMultiByte", "Uint", 0, "Uint", 0, "Uint", pString, "int", -1, "Uint", 0, "int",  0, "Uint", 0, "Uint", 0)
    VarSetCapacity(sString, nSize)
    DllCall("kernel32\WideCharToMultiByte", "Uint", 0, "Uint", 0, "Uint", pString, "int", -1, "str", sString, "int", nSize + 1, "Uint", 0, "Uint", 0)
    Return    sString
}
COM_SysFreeString(bstr)
{
        DllCall("oleaut32\SysFreeString", "Uint", bstr)
}
COM_VariantChangeType(pvarDst, pvarSrc, vt = 8)
{
    Return    DllCall("oleaut32\VariantChangeTypeEx", "Uint", pvarDst, "Uint", pvarSrc, "Uint", 1024, "Ushort", 0, "Ushort", vt)
}
COM_VariantClear(pvar)
{
        DllCall("oleaut32\VariantClear", "Uint", pvar)
}
COM_Release(ppv)
{
    Return    DllCall(NumGet(NumGet(1*ppv)+8), "Uint", ppv)
}
COM_AccTerm()
{
    COM_Term()
    If h:=    DllCall("GetModuleHandle", "str", "oleacc")
    Return    DllCall("FreeLibrary", "Uint", h)
}
COM_Term()
{
    Return    DllCall("ole32\OleUninitialize")
}
COM_GetDefaultInterface(pdisp)
{
    DllCall(NumGet(NumGet(1*pdisp) +12), "Uint", pdisp , "UintP", ctinf)
    If    ctinf
    {
    DllCall(NumGet(NumGet(1*pdisp)+16), "Uint", pdisp, "Uint" , 0, "Uint", 1024, "UintP", ptinf)
    DllCall(NumGet(NumGet(1*ptinf)+12), "Uint", ptinf, "UintP", pattr)
    DllCall(NumGet(NumGet(1*pdisp)+ 0), "Uint", pdisp, "Uint" , pattr, "UintP", ppv)
    DllCall(NumGet(NumGet(1*ptinf)+76), "Uint", ptinf, "Uint" , pattr)
    DllCall(NumGet(NumGet(1*ptinf)+ 8), "Uint", ptinf)
    If    ppv
    DllCall(NumGet(NumGet(1*pdisp)+ 8), "Uint", pdisp),    pdisp := ppv
    }
    Return    pdisp
}
COM_GetActiveObject(ProgID)
{
    DllCall("oleaut32\GetActiveObject", "Uint", SubStr(ProgID,1,1)="{" ? COM_GUID4String(ProgID,ProgID) : COM_CLSID4ProgID(ProgID,ProgID), "Uint", 0, "UintP", punk)
    DllCall(NumGet(NumGet(1*punk)+0), "Uint", punk, "Uint", COM_GUID4String(IID_IDispatch,"{00020400-0000-0000-C000-000000000046}"), "UintP", pdisp)
    DllCall(NumGet(NumGet(1*punk)+8), "Uint", punk)
    Return    COM_GetDefaultInterface(pdisp)
}
COM_CLSID4ProgID(ByRef CLSID, ProgID)
{
    VarSetCapacity(CLSID, 16)
    DllCall("ole32\CLSIDFromProgID", "Uint", COM_SysString(ProgID,ProgID), "Uint", &CLSID)
    Return    &CLSID
}
COM_SysStringLen(bstr)
{
    Return    DllCall("oleaut32\SysStringLen", "Uint", bstr)
}
;------------------------------------------------------------------------------
; END  COM.ahk Standard Library !FRAGMENT!
;------------------------------------------------------------------------------




Get_ExePath_FilePath_CurrentWin:
  ;mk:@MSITStore:D:\SCRIPTS\script-coding14.chm::/web/viewtopicf546.html
  ;------------------------------------------------------
  WinGetActiveTitle, CurrentWin

  WinGet, PID_Target, PID, % "ahk_id " WinExist("A")
  Exe_Path := GetModuleFileNameEx( PID_Target )

  ;;SetTitleMatchMode, Slow
  ;;WinGetTitle, CurrentWinSlow, ahk_id %CurrentWinID%
  ;;SetTitleMatchMode, Fast

  WinGetClass, CurrentWinClass, ahk_id %CurrentWinID%

  ControlGetText, WinEdit, Edit1, ahk_id %CurrentWinID%
  ;------------------------------------------------------

  PID_Target := WinExist( "A" ) ; получаем ID ОКНА
  If Not PID_Target ; если ОКНО не найдено...
  {
    MsgBox, Окно не найдено!
    Return ; конец скрипта
  }
  WinGet, PID_Target, PID, ahk_id %PID_Target% ; получаем PID найденного окна ОКНА
  Exe_Path := GetModuleFileNameEx( PID_Target ) ; вызываем функцию получения пути процесса ОКНА
  If Not Exe_Path ; если что-то не так...
  {
    MsgBox, Процесс не существует, или к нему нет доступа
    Return ; конец скрипта
  }
  Com_Line := GetRemoteCommandLine( PID_Target ) ; вызываем функцию получения ком. строки ОКНА
  If Not Com_Line ; если что-то не так...
  {
    MsgBox, Процесс не существует, или к нему нет доступа
    Return ; конец скрипта
  }
  StringReplace, File_Path, Com_Line, %Exe_Path% ; удаляем из строки путь к ОКНУ
  StringReplace, File_Path, File_Path, ",, All ; удаляем из строки все кавычки, если они есть
  StringReplace, File_Path, File_Path, hh.exe,, All ; вслучаееслиоткрытчерезhh.exe


  If WinActive("ahk_class CabinetWClass")
  {
    hWnd := WinExist("A") 
    WinGetClass wClass, ahk_id %hWnd% 
      Res := GetWindowsExplorerPath(hWnd)
    File_Path = %Res%
  }

  ;;IfWinActive, ahk_class IEFrame
  ;;  sServer := "iexplore"     ; firefox, opera, iexplore

  IfWinActive, ahk_class OpWindow
    sServer := "opera"         ; firefox, opera, iexplore

  IfWinActive, ahk_class MozillaUIWindowClass
    sServer := "firefox"     ; firefox, opera, iexplore

  If WinActive("ahk_class OpWindow")
  || WinActive("ahk_class MozillaUIWindowClass")
  ;;|| WinActive("ahk_class IEFrame")
  {
    Gosub, get_FF_Op_UrlTtl
    StringReplace, sData, sData, `"`,`", `r`n, All
    StringTrimRight, sData, sData, 1
    StringTrimLeft, sData, sData, 1
    StringSplit, File_Path, sData,`n
    File_Path = %File_Path1%
  }

  If WinActive("ahk_class IEFrame")
  || WinActive("ahk_class OpusApp")  ; Word
  || WinActive("ahk_class Maxthon2_Frame")
  || WinActive("Paranoia Browser")
  || WinActive("NetCaptor")
  {
    IfWinActive, ahk_class IEFrame
      ControlGet, hwnd, hwnd, , Internet Explorer_Server1, ahk_class IEFrame
    IfWinActive, ahk_class Maxthon2_Frame
      ControlGet, hwnd, hwnd, , Internet Explorer_Server1, ahk_class Maxthon2_Frame
    IfWinActive, Paranoia Browser
      ControlGet, hwnd, hwnd, , Internet Explorer_Server1, Paranoia Browser
    IfWinActive, NetCaptor
      ControlGet, hwnd, hwnd, , Internet Explorer_Server1, NetCaptor

    Gosub, GetChmTitlePath
    File_Path = %pthValue%
  }

  File_Path = %File_Path% ; избавляемся от возможных пробелов в начале строки
Return


;SEE:: Retrieve AddressBar of Firefox through DDE Message
get_FF_Op_UrlTtl:
  /*
  XCLASS_DATA  := 0x2000
  XCLASS_FLAGS := 0x4000
  XTYP_EXECUTE := 0x0050 | XCLASS_FLAGS
  XTYP_POKE    := 0x0090 | XCLASS_FLAGS
  XTYP_REQUEST := 0x00B0 | XCLASS_DATA
  */
  ;;sServer := "opera"         ; firefox, opera, iexplore
  
  sTopic  := "WWW_GetWindowInfo"
  sItem   := "0xFFFFFFFF"
  
  idInst  := DdeInitialize()
  
  hServer := DdeCreateStringHandle(idInst, sServer)
  hTopic  := DdeCreateStringHandle(idInst, sTopic )
  hItem   := DdeCreateStringHandle(idInst, sItem  )
  
  hConv := DdeConnect(idInst, hServer, hTopic)
  hData := DdeClientTransaction(0x20B0, hConv, hItem)   ; XTYP_REQUEST
  sData := DdeAccessData(hData)
  
  DdeFreeStringHandle(idInst, hServer)
  DdeFreeStringHandle(idInst, hTopic )
  DdeFreeStringHandle(idInst, hItem  )
  
  DdeUnaccessData(hData)
  DdeFreeDataHandle(hData)
  DdeDisconnect(hConv)
  DdeUninitialize(idInst)
  
  DdeInitialize(pCallback = 0, nFlags = 0) {
     DllCall("DdeInitialize", "UintP", idInst, "Uint", pCallback, "Uint", nFlags, "Uint", 0)
     Return idInst
  }
  DdeUninitialize(idInst) {
     Return DllCall("DdeUninitialize", "Uint", idInst)
  }
  DdeConnect(idInst, hServer, hTopic, pCC = 0) {
     Return DllCall("DdeConnect", "Uint", idInst, "Uint", hServer, "Uint", hTopic, "Uint", pCC)
  }
  DdeDisconnect(hConv) {
     Return DllCall("DdeDisconnect", "Uint", hConv)
  }
  DdeAccessData(hData) {
     Return DllCall("DdeAccessData", "Uint", hData, "Uint", 0, "str")
  }
  DdeUnaccessData(hData) {
     Return DllCall("DdeUnaccessData", "Uint", hData)
  }
  DdeFreeDataHandle(hData) {
     Return DllCall("DdeFreeDataHandle", "Uint", hData)
  }
  DdeCreateStringHandle(idInst, sString, nCodePage = 1004) {         ; CP_WINANSI = 1004
     Return DllCall("DdeCreateStringHandle", "Uint", idInst, "Uint", &sString, "int", nCodePage)
  }
  DdeFreeStringHandle(idInst, hString) {
     Return DllCall("DdeFreeStringHandle", "Uint", idInst, "Uint", hString)
  }
  DdeClientTransaction(nType, hConv, hItem, sData = "", nFormat = 1, nTimeOut = 10000) {   ; CF_TEXT = 1
     Return DllCall("DdeClientTransaction", "Uint", sData = "" ? 0 : &sData, "Uint", sData = "" ? 0 : StrLen(sData)+1, "Uint", hConv, "Uint", hItem, "Uint", nFormat, "Uint", nType, "Uint", nTimeOut, "UintP", nResult)
  }
  Return

GetModuleFileNameEx(PID) { ; shimanov - www.autohotkey.com/forum/viewtopic.php?p=54838#54838
  hpr := DllCall( "OpenProcess", UInt,1040, Int,0, UInt,PID )
  If ( ErrorLevel or !hpr )
      Return
  VarSetCapacity( Name,255 )
  DllCall( "psapi.dll\GetModuleFileNameExA", UInt,hPr, UInt,0, Str,Name, UInt,255 )
  DllCall( "CloseHandle", hPr )
  Return, Name
  }

GetRemoteCommandLine( p_pid_target ) ; функция получения командной строки для процесса (по его PID'у)
{
  hp_target := DllCall( "OpenProcess", "UInt", 0x10, "Int", false, "UInt", p_pid_target ) ; открываем хэндл для PID процесса...
  ; ...с правами для чтения 0x10 = PROCESS_VM_READ (нужны для ReadProcessMemory) и без наследования хэндла
  If ( ErrorLevel OR hp_target = 0 ) ; если почему-либо не удалось открыть хэндл (или он открыт для несуществующего PID'а)...
    Goto, Return_2 ; перейти к закрытию хэндла и выйти из функции

  hm_kernel32 := DllCall( "GetModuleHandle", "Str", "kernel32.dll" ) ; узнаем хэндл библиотеки kernel32.dll
  pGetCommandLineA := DllCall( "GetProcAddress", "UInt", hm_kernel32, "Str", "GetCommandLineA" ) ; получаем указатель...
  ; ...на адрес функции GetCommandLineA (ANSI), содержащейся в kernel32.dll

  buffer_size = 6 ; количество байт для переменной
  VarSetCapacity( buffer, buffer_size ) ; обеспечиваем достаточную вместимость переменной
  DllCall( "ReadProcessMemory", "UInt", hp_target, "UInt", pGetCommandLineA, "UInt", &buffer, "UInt", buffer_size, "UInt", 0 )
  ; для хэндла PID'а получаем перенаправление функцией GetCommandLineA на указатель на адрес командной строки...
  ; ...и кладем его по адресу "buffer" в памяти

  Loop, 4 ; преобразовываем указатель на адрес командной строки в целое число
    ppCommandLine += ( ( *( &buffer+A_Index ) ) << ( 8*( A_Index-1 ) ) ) ; создаем целое число, складывая его байты

  buffer_size = 4 ; количество байт для переменной
  VarSetCapacity( buffer, buffer_size, 0 ) ; обеспечиваем достаточную вместимость переменной, и очищаем её
  DllCall( "ReadProcessMemory", "UInt", hp_target, "UInt", ppCommandLine, "UInt", &buffer, "UInt", buffer_size, "UInt", 0 )
  ; для хэндла PID'а читаем адрес командной строки, и кладем его по адресу "buffer" в памяти

  Loop, 4 ; преобразовываем адрес в целое число
    pCommandLine += ( ( *( &buffer+A_Index-1 ) ) << ( 8*( A_Index-1 ) ) ) ; создаем целое число, складывая его байты

  ; Адрес командной строки получен, теперь извлекаем его содержимое
  buffer_size = 520 ; столько символов будем читать из командной строки (мне кажется, длиннее быть не может)
  VarSetCapacity( result, buffer_size, 1 ) ; обеспечиваем достаточную вместимость переменной, делаем её побайтной
  DllCall( "ReadProcessMemory", "UInt", hp_target, "UInt", pCommandLine, "UInt", &result, "UInt", buffer_size, "UInt", 0 )
  ; для хэндла PID'а читаем командную строку, и кладем её по адресу "result" в памяти (просто помещаем значение в переменную)

  Return_2: ; метка перехода к закрытию хэндла
  DllCall( "CloseHandle", "UInt", hp_target ) ; закрываем хэндл
  Return, result ; возвращаем полную командную строку для PID'а процесса
  } ; конец функции


; Определение текущего пути в окне Проводника
GetWindowsExplorerPath(_hWnd) 
{ 
  local pid, hMem, pv, pidl, pidl?, explorerPath 
  
  If (A_OSType = "WIN32_NT") 
  { 
    pid := DllCall("GetCurrentProcessId") 
    SendMessage 0x400 + 12   ; CWM_GETPATH = WM_USER + 12 
      , pid, 0, , ahk_id %_hWnd% 
    hMem := ErrorLevel 
    if (hMem != 0) 
    { 
      pv := DllCall("Shell32\SHLockShared" 
        , "UInt", hMem, "UInt", pid) 
      if (pv != 0) 
      { 
        pidl := DllCall("Shell32\ILClone", "UInt", pv) 
        DllCall("Shell32\SHUnlockShared", "UInt", pv) 
      } 
      DllCall("Shell32\SHFreeShared" 
        , "UInt", hMem, "UInt", pid) 
    } 
  } 
  VarSetCapacity(explorerPath, 512, 0) 
  DllCall("Shell32\SHGetPathFromIDList" 
    , "UInt", pidl, "Str", explorerPath) 
  Return explorerPath 
  }


WriteFile(file,data)
{
   Handle :=  DllCall("CreateFile","str",file,"Uint",0x40000000
                  ,"Uint",0,"UInt",0,"UInt",4,"Uint",0,"UInt",0)
   Loop
   {
     if strlen(data) = 0
        break
     StringLeft, Hex, data, 2         
     StringTrimLeft, data, data, 2 
     Hex = 0x%Hex%
     DllCall("WriteFile","UInt", Handle,"UChar *", Hex
     ,"UInt",1,"UInt *",UnusedVariable,"UInt",0)
    }
 
   DllCall("CloseHandle", "Uint", Handle)
   return
}

CrtIco:
Ico =
( join
00000100010010100000010020006804000016000000280000001000000020000000010020
00000000000004000000000000000000000000000000000000ffccc7ffffccc7ffffccc7ff
ffccc7ffffccc7ffffccc7ffffccc7ffffccc7ffffccc7ffffccc7ffffccc7ffffccc7ffff
ccc7ffffccc7ffffccc7ffffccc7ffffccc7fffffcf5fffffcf5fffffcf5fffffcf5fffffc
f5fffffcf5fffffcf5fffffcf6fffffcf6fffffcf6fffffcf5fffffcf5fffffcf5fffffcf5
ffffccc7ffffccc7fffffcf6fffdfbf5ffd5cfc9fff6f3eefffffcf7fffffcf7fff8f5efff
c6bdb8ffd9d3cefffffdf8fffffcf6fffffcf6fffffcf5fffffcf5ffffccc7ffffccc7ffff
fdf7fff1eee9ff170705ff726663fffffdfafffffdfaffd4cdcaff120401ff140502ff5d50
4cffebe7e2fffffdf7fffffcf6fffffcf5ffffccc7ffffccc7fffff9f7fffef9f8ff6f5f5c
ff23110effdad3d1fffffbfafff9f5f4ff41312eff170805ff675956ff443331ffe3dbd9ff
fff8f7fffff8f6ffffccc7ffffccc7fffff7f2fffff8f5ffd8cbc7ff4e342fff917d78ffff
fbf8fffffaf8ffa99c9aff140504ffa19491ffb2a6a3ff837572fffff7f2fffff6f0ffffcc
c7ffffccc7ffffedebfffff0eefff6ece9ff604b46ff49302cffd4c7c4fffff5f4fffaf1ef
ff67514dff5b4540fffdf2f1fff7e8e6ffffedeaffffebe8ffffccc7ffffccc7ffffe4e1ff
ffe8e6ffffedecff97827dff37211dff6d5955fff9eceafffff1efffbdaaa6ff3f2823ffb7
a19dffffeae8ffffe5e2ffffe2dfffffccc7ffffccc7fffcddd6fffde1dbfffde7e2ffd6c5
c0ff36221eff513d39ffa7928dfffeeeebfff4e4e1ff543f3aff4f3935fff2dedafffde2db
fffcddd6ffffccc7ffffccc7fff0ccc0fff0d0c6ffebd1c9fff7e5dfff4f3c38ff4d3936ff
5c4844ffd0bdb7fff8e5dfffa6918bff281410ffa78f89fff4d8cefff1d0c5ffffccc7ffff
ccc7ffffe9e7fffbe8e6ff7f6c6affd1c4c2ffa99896ff261412ff887673ff5a4744fff4e9
e8fff2e6e5ff3b2724ff45312efff6e6e4ffffebe9ffffccc7ffffccc7fffff1edfffff3ef
ffdacdcaff473733ff9d8d89ff1d0d09ff877774ff887874ff63534ffffff9f7ff73625fff
190805ffccbebbfffff2efffffccc7ffffccc7fffff2effffff3f1fffff5f3ffc8bcbaff2a
1a17ff0c0000ff62524ffffff9f7ff746562ff453431ff281714ff170704ffd3c7c5fffff4
f2ffffccc7ffffccc7fffff3effffff3f0fffff4f1fffff5f2ffe9dfdcff9a8d8affdbd0cc
fffff6f3fffff6f3ffc5b7b4ff8a7c79ffc4b8b4fffef5f2fffff5f1ffffccc7ffffccc7ff
fff4effffff4effffff4effffff5f0fffff5f0fffff5f0fffff5f0fffff5f0fffff5f0ffff
f5f0fffff5f1fffff5f0fffff5f0fffff4efffffccc7ffffccc7ffffccc7ffffccc7ffffcc
c7ffffccc7ffffccc7ffffccc7ffffccc7ffffccc7ffffccc7ffffccc7ffffccc7ffffccc7
ffffccc7ffffccc7ffffccc7ff000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000
000000
)
return

2

Re: AHK: Захват и структурирование заметок

Я помню, такая тема уже была. Её поместили в Коллекцию?

3

Re: AHK: Захват и структурирование заметок

http://i010.radikal.ru/1105/1a/3d347bc2a7c6.png

ypppu пишет:

Я помню, такая тема уже была. Её поместили в Коллекцию?

Нет, она работала плохо!

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

4

Re: AHK: Захват и структурирование заметок

teadrinker пишет:

http://i010.radikal.ru/1105/1a/3d347bc2a7c6.png

ypppu пишет:

Я помню, такая тема уже была. Её поместили в Коллекцию?

Нет, она работала плохо!


Заменил знак ? на единицу(просто так, наверно можно было любую цифру или букву написать) и все заработало.

5 (изменено: DD, 2017-02-08 04:35:17)

Re: AHK: Захват и структурирование заметок

Так все равно ссылки не будут работать, это была версия для ANSI.