1 (изменено: DD, 2011-01-07 06:11:22)

Тема: AHK: Быстрый захват заметок (UPD)

Предназначен для быстрого занесения выделенных/скопированных фраз, цитат, адресов и т.п., вместе с заголовком и адресом окна-источника, в файл «QNotes.html».
    Сочетание CapsLock + W — добавить текст, двойное нажатие — открыть файл заметок.

    Кстати вопрос: как получить адресную строку из Оперы?


#SingleInstance force

CapsLock & SC011::     ;CapsLock+W
   ++counter
   SetTimer, Choice, -400
   return

Choice:
if A_ThisHotkey = CapsLock & SC011    ;CapsLock+W
   {
   IfEqual, counter, 1, Gosub, QNotesAdd
   IfEqual, counter, 2, Gosub, QNotesRun
   }

   counter =
Return


QNotesAdd:
  FormatTime DT,,dd.MM.yy, h:mm:ss

  CoordMode, ToolTip, Screen
  ToolTip, `n    :-(    `n,300,300
  SoundPlay, %A_WinDir%\Media\ding.wav
  f_ClipSaved := ClipboardAll
  Send, {Ctrl Down}{SC02E}{Ctrl UP}    ;c     выделенное
  Sleep, 200                ;     в буфер

  Gosub, Get_ExePath_FilePath_CurrentWin

  IfNotExist, %A_ScriptDir%\QNotes.html
  {
    FileAppend,
    (LTrim
    <html>`n<head>
    <title>[QNotes]</title>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"/>
    <style type="text/css">`n<!--
    html, body {MARGIN:0 0 1.1em 6`%; PADDING:0; BORDER:none; BACKGROUND-COLOR:#FFFFF1;}`n
    a:link,a:focus,a:hover,a:visited {TEXT-DECORATION:none;}
    a:link {COLOR:#990000;}`na:hover {COLOR:blue;}`na:visited {COLOR:#990099;}`n
    div.curvy {POSITION:relative; WIDTH:100`%; COLOR:#000; BACKGROUND:#BBCCBB;
    MARGIN:2`% 0 2`% 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;}
    #ctr, #cbr {WIDTH:0px;}`n
    #ctl {TOP:0; LEFT:0;}
    #cbl {BOTTOM:0; LEFT:0;}
    #ctr {TOP:0; RIGHT:0;}
    #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;}
    #ctl b {LEFT:-8px;}
    #ctr b {LEFT:-25px;}
    #cbl b {LEFT:-8px; TOP:-17px;}
    #cbr b {LEFT:-25px; TOP:-17px;}`n
    div.numb {FONT-SIZE:30`%; COLOR:#808080;}
    td.quot1, .quot2 {COLOR:#00384a; FONT-FAMILY:serif; FONT-SIZE:190`%; FONT-WEIGHT:bold;}
    td.quot1 {PADDING:0 0 0 4`%;}
    td.note {PADDING:1.4em 0 0 4`%; FONT-SIZE:14px; COLOR:#00384a;}
    span.dt {COLOR:#728776;}`n
    div.t {FONT-WEIGHT:bold; COLOR:#990000; FONT-FAMILY:Tahoma, Helvetica, Geneva;
    MARGIN-LEFT:20`%; TEXT-ALIGN:left; FONT-SIZE:7.5pt; BORDER-BOTTOM:1px solid #728776;}
    -->`n</style>`n`n
    <SCRIPT language="JavaScript">`n<!--
    function I(){
    document.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>');`n}
    function II(){
    document.write('<td width="4`%" align="right" class="quot1">«</td>');
    document.write('<td width="60`%" class="note">');`n}
    function III(){
    document.write('</td>');
    document.write('<td width="24`%" valign="bottom" class="quot2">»</td>');
    document.write('</tr></table>');
    document.write('</div>');
    }`n//-->`n</SCRIPT>`n
    </head>`n<body bgcolor=#F5F5EA>`n`n
  ), %A_ScriptDir%\QNotes.html
  }


  IfWinActive, ahk_class HH Parent          ;если был открыт через hh.exe
  {
    FileRead, get_htm_ttl, %File_Path%
    StringLeft, get_htm_ttl, get_htm_ttl,500
    StringReplace, get_htm_ttl, get_htm_ttl, `r`n,,All

    if get_htm_ttl contains <title>
    {
      get_htm_ttl := RegExReplace(get_htm_ttl, "(?i)(.*)<title>(.*)</title>(.*)", "$2")

      if get_htm_ttl contains Рµ,Р°,Рѕ   ;е,а,о
      {
        get_htm_ttl := Utf8ToAnsi(get_htm_ttl)  ; Преобразуем в ANSI
      }

      CurrentWin = %get_htm_ttl%
    }
    else IfInString, File_Path, .htm
    {
      SplitPath, File_Path,,,, FileNameNoExt
      CurrentWin = %FileNameNoExt%
    }
  }


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


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


  If File_Path =         ; если переменная File_Path ПУСТА, то...
  {
    If WinEdit             ; если Edit НАЙДЕН, то...
    {
      FileAppend,
      (LTrim
      <script>I()</script>
      <div class="t"><a href="%WinEdit%">+%CurrentWin%</a> <span class="dt">- %DT%</span></div>`n
      ), %A_ScriptDir%\QNotes.html
    }
    Else             ; если Edit НЕ найден, то...
    {
      FileAppend,
      (LTrim
      <script>I()</script>
      <div class="t"><a href="%GetExePath%">++%CurrentWin%</a> <span class="dt">- %DT%</span></div>`n
      ), %A_ScriptDir%\QNotes.html
    }
  }
  Else                 ; если переменная File_Path НЕ пуста, то...
  {
    If WinEdit =         ; если Edit НЕ найден, то...
    {
      FileAppend,
      (LTrim
      <script>I()</script>
      <div class="t"><a href="%File_Path%">*%CurrentWin%</a> <span class="dt">- %DT%</span></div>`n
      ), %A_ScriptDir%\QNotes.html
    }
    Else             ; если Edit НАЙДЕН, то...
    {
      IfInString,File_Path,/  ; на случай если командные штучки при нем
      {
        FileAppend,
        (LTrim
        <script>I()</script>
        <div class="t"><a href="%WinEdit%">**%CurrentWin%</a> <span class="dt">- %DT%</span></div>`n
        ), %A_ScriptDir%\QNotes.html
      }
      Else
      {
        FileAppend,
        (LTrim
        <script>I()</script>
        <div class="t"><a href="%File_Path%">***%CurrentWin%</a> <span class="dt">- %DT%</span></div>`n
        ), %A_ScriptDir%\QNotes.html
      }
    }
  }

  FileAppend,
  (LTrim
  <script>II()</script>
  %Clipboard%
  <script>III()</script>`n`n
  ), %A_ScriptDir%\QNotes.html

  Clipboard := f_ClipSaved
  f_ClipSaved =
  ToolTip, `n    :-|    `n,300,300
  Sleep, 80
  ToolTip, `n    `;-)    `n,300,300
  Sleep, 200
  ToolTip
Return

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



Get_ExePath_FilePath_CurrentWin:
  ;------------------------------------------------------
  WinGetActiveTitle, CurrentWin

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

  WinGetClass, CurrentWinClass, ahk_id %CurrentWinID%

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

  ID_Wnd := WinExist( "A" ) ; получаем ID ОКНА
  If Not ID_Wnd ; если ОКНО не найдено...
  {
    MsgBox, Окно не найдено!
    Return ; конец скрипта
  }
  WinGet, PID_Target, PID, ahk_id %ID_Wnd% ; получаем 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 -800,, All ; вслучаееслиоткрытчерезhh.exe


  If CurrentWin contains Mozilla Firefox
  {
    StringReplace, File_Path, File_Path, -requestPending -osint -url, file:///, All
    StringReplace, File_Path, File_Path, file:///%A_Space%, file:///, All
  }

  If CurrentWin contains - Microsoft Internet Explorer
  {
    WinGetText, WinText, %CurrentWin%
    StringSplit, WinTextSplit, WinText,`n
    WinTextSplit= %WinTextSplit1%
    StringTrimRight, WinTextSplit, WinTextSplit, 1
    File_Path = %WinTextSplit%
  }

  File_Path = %File_Path% ; избавляемся от возможных пробелов в начале строки
  ;------------------------------------------------------
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'а процесса
} ; конец функции


Utf8ToAnsi(ByRef Utf8String, CodePage = 1251) ;by YMP
{
    If (NumGet(Utf8String) & 0xFFFFFF) = 0xBFBBEF
        BOM = 3
    Else
        BOM = 0

    UniSize := DllCall("MultiByteToWideChar", "UInt", 65001, "UInt", 0
                                            , "UInt", &Utf8String + BOM, "Int", -1
                                            , "Int", 0, "Int", 0)
    VarSetCapacity(UniBuf, UniSize * 2)
    DllCall("MultiByteToWideChar", "UInt", 65001, "UInt", 0
                                 , "UInt", &Utf8String + BOM, "Int", -1
                                 , "UInt", &UniBuf, "Int", UniSize)

    AnsiSize := DllCall("WideCharToMultiByte", "UInt", CodePage, "UInt", 0
                                             , "UInt", &UniBuf, "Int", -1
                                             , "Int", 0, "Int", 0
                                             , "Int", 0, "Int", 0)
    VarSetCapacity(AnsiString, AnsiSize)
    DllCall("WideCharToMultiByte", "UInt", CodePage, "UInt", 0
                                 , "UInt", &UniBuf, "Int", -1
                                 , "Str", AnsiString, "Int", AnsiSize
                                 , "Int", 0, "Int", 0)
    Return AnsiString
}

2

Re: AHK: Быстрый захват заметок (UPD)

А ты можешь объяснить, что происходит в подпрограмме Get_ExePath_FilePath_CurrentWin?

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

3

Re: AHK: Быстрый захват заметок (UPD)

Да легко могу, — получение пути процесса, открытого в нём файла, заголовка окна.
Взято было отсюда.

4

Re: AHK: Быстрый захват заметок (UPD)

DD пишет:

Да легко могу, — получение пути процесса, открытого в нём файла

Путь есть как раз у файла, а у процесса — имя. Ну хорошо, а зачем всё это нужно? Как потом эти данные используются?

DD пишет:

заголовка окна

Странный способ получения заголовка окна:

  MouseGetPos, MousePosX, MousePosY, CurrentWinID
  CoordMode, Mouse, Screen
  MouseGetPos, MousePosScreenX, MousePosScreenY, CurrentWinID, ControlName

Зачем два раза подряд? Зачем столько лишних переменных, которые нигде не используются? А если курсор в этот момент находится совсем над другим окном?

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

5

Re: AHK: Быстрый захват заметок (UPD)

teadrinker пишет:

Как потом эти данные используются?

CurrentWin заносится в заголовок заметки, File_Path/Edit (если не найдены — имя процесса) — в гиперссылку.

teadrinker пишет:

Странный способ получения заголовка окна

Исправил, в меру понимания.

6 (изменено: ypppu, 2011-01-05 15:51:30)

Re: AHK: Быстрый захват заметок (UPD)

Интересная штука!
А почему смайлик сначала грустный, а потом весёлый?
Один раз у меня почему-то сохранилось в виде

Send, {Ctrl Down}{SC02E}{Ctrl UP}    ;c     ??????????
  Sleep, 200                ;     ? ?????

7

Re: AHK: Быстрый захват заметок (UPD)

DD пишет:

File_Path/Edit (если не найдены — имя процесса) — в гиперссылку.

Гиперссылка не работает.

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

8

Re: AHK: Быстрый захват заметок (UPD)

ypppu пишет:

... сохранилось в виде ...

Вероятно, этот текст уже находился в буфере. Копируется выделенное или содержимое буфера.

teadrinker пишет:

Гиперссылка не работает.

Может быть, окно специфическое — без контролов, либо Get_ExePath_FilePath_CurrentWin затрудняется получить пути-имена. Он не идеален .

9

Re: AHK: Быстрый захват заметок (UPD)

DD пишет:

Может быть, окно специфическое — без контролов, либо Get_ExePath_FilePath_CurrentWin затрудняется получить пути-имена.

Окна обычные — firefox или окно справки. Какие-то имена подпрограмма получает, но записываются они в неверном формате, и ссылка не открывается. Сам-то проверял?

DD пишет:

Он не идеален

Ну тогда, может, и публиковать рановато? Доведи до идеала! (Или хотя бы, чтоб работало)
Кроме того, в коде ещё куча бесполезных и ошибочных строк. К примеру:

SplitPath, File_Path,,,,

Что делает вот эта?

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

10

Re: AHK: Быстрый захват заметок (UPD)

С Firefox'ом, кажется, сладил; ну а справка, — положа руку на сердце, — всегда работала без проблем.

teadrinker пишет:

куча бесполезных и ошибочных строк

Ты требуешь безупречного кода от дилетанта.

teadrinker пишет:

Что делает вот эта?

Действительно. Удалил без сожаления.

11

Re: AHK: Быстрый захват заметок (UPD)

DD пишет:

С Firefox'ом, кажется, сладил

Нет, не сладил. Попробуй скопировать текст с этой страницы, открыть файл QNotes.html и перейти по соответствующей ссылке. Какая страница откроется? Короче, проверь свой код от начала до конца построчно. Если используешь команду или функцию, проверяй, что возвращают. К примеру:

FileRead,fext,%File_Path%

Что содержится в переменной со странным названием fext?

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

12 (изменено: DD, 2011-01-06 00:59:25)

Re: AHK: Быстрый захват заметок (UPD)

Firefox OK.

teadrinker пишет:

Что содержится в переменной со странным названием fext?

Содержит первые 500 символов открытого через hh.exe файла (для извлечения содержимого <title></title>).
Изменил название на более-менее приемлимое.

13

Re: AHK: Быстрый захват заметок (UPD)

DD пишет:

Содержит первые 500 символов открытого через hh.exe файла

Да неужели? Попробуй выполнить такой код, подставив в качестве Filename путь к файлу справки (ведь именно он здесь имеется ввиду), например:

FileRead, Text, %ProgramFiles%\AutoHotkey\AutoHotkey.chm
MsgBox, % Text
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

14

Re: AHK: Быстрый захват заметок (UPD)

Я про другое говорил. Выполни не глядя.

#SingleInstance Force

  File = %A_WinDir%\pchealth\helpctr\System\blurbs\searchtips.htm
  Run, hh.exe -800 %File%
  WinWait, ahk_class HH Parent,, 2
  {
    WinWaitActive, ahk_class HH Parent,,
    ControlSend, ahk_parent, {Tab}
    WinMaximize, A
  }
  If ErrorLevel
    Return

  FileRead, get_htm_ttl, %File%
  StringLeft, get_htm_ttl, get_htm_ttl,700
  StringReplace, get_htm_ttl, get_htm_ttl, `r`n,,All

  if get_htm_ttl contains <title>
  {
    get_htm_ttl := RegExReplace(get_htm_ttl, "(?i)(.*)<title>(.*)</title>(.*)", "$2")
  }
  MsgBox, <TITLE>%get_htm_ttl%</TITLE>
Return

15

Re: AHK: Быстрый захват заметок (UPD)

Ты про другое, и я про другое. Все файлы справки, которыми я в основном пользуюсь, в формате chm, а не htm.

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

16

Re: AHK: Быстрый захват заметок (UPD)

Кстати те html, которыми я пользуюсь, тоже в chm не перерождаются.

17

Re: AHK: Быстрый захват заметок (UPD)

Это как-то помогает работать с chm?

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

18

Re: AHK: Быстрый захват заметок (UPD)

Снова и снова, на все лады, пытаюсь постичь смысл твоей последней фразы, и всякий раз, столкнувшись с мощным интеллектом, породившим её, обескураженный, вынужден бываю отступить.
Могу ли я просить тебя перефразировать её, упростить, — специально для меня?

19

Re: AHK: Быстрый захват заметок (UPD)

Смысл в том, что твой код не работает со справкой в chm-формате, открытой с помощью hh.exe. Считаю это недостатком, т. к. данный формат достаточно популярен. Получается, что вся свистопляска вокруг GetModuleFileNameEx() и GetRemoteCommandLine() (а это добрая половина кода) бесполезна.
Если нужно ещё проще, попробуй скопировать текст из chm-справки, открытой с помощью hh.exe, затем в QNotes.html-файле перейти по соответствующей ссылке.

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

20

Re: AHK: Быстрый захват заметок (UPD)

Со всей ответственностью заявляю, — если открыть QNotes.html через IE, по двойному нажатию CapsLock+W, и перейти по chm-содержащей ссылке, появится окно «Загрузка файла - предупреждение системы безопасности» с кнопкой «Открыть», — право слово.
Я так понимаю, ты CHM-Справку в Firefox'е желаешь открыть? Похоже, Firefox против этого, — в чём ты убедишься, набросив chm-файл на окно Огнелиса.

21

Re: AHK: Быстрый захват заметок (UPD)

Так я и пытаюсь тебе втолковать, что твоя "гиперссылка" не работает, а соответственно, бесполезна половина кода. Кстати, даже если и копировать текст из htm-файла, то потом он открывается, но только на заглавной странице, а не на той, с которой был скопирован текст. Если копировать текст из firefox'а или IE, нужная страница не открывается.

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

22

Re: AHK: Быстрый захват заметок (UPD)

teadrinker пишет:

"гиперссылка" не работает

В Firefox'е — да, потому что он, судя по всему, не работает с chm-форматом. Но «добрая половина кода» себя оправдывает, если открывать QNotes по горячей клавише, через IE.

teadrinker пишет:

открывается ... не на той, с которой был скопирован текст

Замечал за ним это, да как-то руки не доходили. C IE разобрался, — с Mozill'ой затрудняюсь (также как с Оперой).

23

Re: AHK: Быстрый захват заметок (UPD)

DD пишет:

В Firefox'е — да, потому что он, судя по всему, не работает с chm-форматом. Но «добрая половина кода» себя оправдывает, если открывать QNotes по горячей клавише, через IE.

А разве IE с chm-форматом работает?

DD пишет:

C IE разобрался, — с Mozill'ой затрудняюсь (также как с Оперой).

Что ж, будем ждать и надеяться!

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

24 (изменено: DD, 2011-01-07 20:14:26)

Re: AHK: Быстрый захват заметок (UPD)

teadrinker пишет:

А разве IE с chm-форматом работает?

Не задаёт же он вопроса «Firefox не может определить как открыть данный адрес» или «Вы собираетесь открыть файл ... Вы хотите сохранить этот файл?», а открывает, худо-бедно.

teadrinker пишет:

будем ждать и надеяться

Да, надеяться, — форум не без добрых людей.

25

Re: AHK: Быстрый захват заметок (UPD)

DD пишет:

Не задаёт же он вопроса «Firefox не может определить как открыть данный адрес», а открывает, худо-бедно.

У меня не открывает, а выдаёт предупреждение системы безопасности.

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

26 (изменено: DD, 2011-01-07 20:22:00)

Re: AHK: Быстрый захват заметок (UPD)

teadrinker пишет:

выдаёт предупреждение системы безопасности

Заметь, — без кнопки «Открыть».

27

Re: AHK: Быстрый захват заметок (UPD)

Не пойму, о чём ты. Копирую текст из chm-файла, открываю QNotes.html с помощью CapsLock + W, кликаю по "гиперссылке", получаю предупреждение системы безопасности.

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

28

Re: AHK: Быстрый захват заметок (UPD)

О teadrinker, в окне предупреждения системы безопасности наличествует кнопка «Открыть»? Если да, — это ли не счастье?..

29

Re: AHK: Быстрый захват заметок (UPD)

http://s011.radikal.ru/i315/1101/c3/8caa7502e322.jpg
Windows XP, IE6

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

30

Re: AHK: Быстрый захват заметок (UPD)

http://i069.radikal.ru/1101/76/2f4848aff329.jpg
Windows XP, IE6
Мистика.

31

Re: AHK: Быстрый захват заметок (UPD)

Тогда не понятно, почему было решено, что это IE открывает *.chm, а не «hh.exe»?!

32

Re: AHK: Быстрый захват заметок (UPD)

DD, ну не знаю, может у нас установки безопасности разные, я просто IE никогда не пользуюсь. Ну даже если допустить, что IE может открыть этот файл, скопируй текст из chm-файла, но не с заглавной страницы, а с какой-нибудь другой, открой QNotes.html с помощью CapsLock + W, затем наведи курсор на гиперссылку. Что ты увидишь в строке состояния? Ссылку на chm-файл. Разве этого достаточно, чтобы открыть его на нужной странице? Кликни гиперссылку. Какая страница откроется?

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

33 (изменено: DD, 2011-01-07 23:30:01)

Re: AHK: Быстрый захват заметок (UPD)

alexii, если я правильно понимаю, ссылку вида:

mk:@MSITStore:C:\Program%20Files\AutoHotkey\AutoHotkey.chm::/docs/commands/WinMaximize.htm

можно открыть в IE.

teadrinker пишет:

Что ты увидишь в строке состояния? Ссылку на chm-файл.

Разумеется. Для получения адреса, ведущего на не заглавную страницу chm-файла, пришлось бы доставать его из Свойств активной страницы.
Не представляю себе «красивого» решения (хотя и не «красивое» вряд ли далось бы мне).

34

Re: AHK: Быстрый захват заметок (UPD)

DD пишет:

Не представляю себе «красивого» решения (хотя и не «красивое» вряд ли далось бы мне).

Ну вот и мне показалось, что ты взялся за непосильную для себя задачу! Тогда совет: начни с чего-нибудь попроще. И, надеюсь, интерес к скриптовому программированию у тебя не пропадёт!

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

35

Re: AHK: Быстрый захват заметок (UPD)

DD пишет:

alexii, если я правильно понимаю, ссылку вида…можно открыть в IE.

Теперь становится яснее.

36

Re: AHK: Быстрый захват заметок (UPD)

Что ты, — я не целил так высоко, — нигде и намёка нет. Кто-нибудь да улучшит. А начинать с мелочи, — это не по мне.

37 (изменено: BgoN, 2011-04-02 00:33:33)

Re: AHK: Быстрый захват заметок (UPD)

Хорошый скрипт, очень удобный. Один вопрос - можно как-то сделать чтобы ссылки в файле QNotes.html оставались кликабельными?