| View previous topic :: View next topic |
| Author |
Message |
VladSh
Joined: 29 Nov 2006 Posts: 2510 Location: Киев, Русь
|
Posted: Thu Aug 23, 2012 11:25 am Post subject: |
|
|
KeepGoing
Можно взять CaretSelect.js, положить его в \Scripts\Include, а в \Scripts\ создать файл, к примеру LinkCaretOpen.js
| Code: | if (! AkelPad.Include("CaretSelect.js")) WScript.Quit();
var URL = getLinkCaret();
if (URL) {
if (URL.charAt(0) != "\\") { //не сетевой путь в файловой системе
if (URL.indexOf(":\\") == -1 && URL.indexOf(":/") == -1)
URL = "http://" + URL;
}
var WshShell = new ActiveXObject("WScript.Shell");
WshShell.Exec('rundll32.exe shell32, ShellExec_RunDLL "' + URL + '"');
} |
Открывает почти как Вы хотите. Почти - если в браузере была текущая вкладка, то при открытии ссылка откроется в фоне, а фокус останется на текущей вкладке (у меня в Опере так).
Можно было бы использовать функцию getLinkCaret() + скрипт openFileIn.js Infocatcher'а, но он к сожалению поддерживает только передачу параметров в виде аргументов.
Instructor
Очень не хватает в AEGI_ поиска начала и конца ссылки, находящейся под курсором. |
|
| Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 2510 Location: Киев, Русь
|
Posted: Thu Aug 23, 2012 11:40 am Post subject: |
|
|
| Infocatcher wrote: | | А меню вызывать с клавиатуры. | А как его вызвать с клавиатуры? Перепробовал все комбинации ContextMenu::Show, либо вылетает главное меню, либо требует обязательного указания подменю, находящегося ContextMenu::Show, меню же целиком (в данном случае меню ссылок) не выводит. |
|
| Back to top |
|
 |
Infocatcher
Joined: 06 Aug 2007 Posts: 1432
|
Posted: Thu Aug 23, 2012 12:06 pm Post subject: |
|
|
VladSh
Да стандартно, или кнопкой специальной, или Shift+F10. |
|
| Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 2510 Location: Киев, Русь
|
Posted: Thu Aug 23, 2012 12:58 pm Post subject: |
|
|
Infocatcher
"стандартно, или кнопкой специальной" на подходит по условиям задачи, надо работать чисто с клавиатуры.
Жму по Shift+F10, меню вылетает, чтобы выбрать нужный пункт по комбинации клавиш надо жать Alt+0, но уже при нажатии Alt меню сбрасывается (старая баго-фича, о которой давно писали и просили, чтобы меню не сбрасывалось). |
|
| Back to top |
|
 |
Infocatcher
Joined: 06 Aug 2007 Posts: 1432
|
Posted: Thu Aug 23, 2012 1:07 pm Post subject: |
|
|
VladSh
Так это у всех меню так.
Alt+Ф => Файл
О => Открыть
При открытом меню нажимать Alt уже не надо. |
|
| Back to top |
|
 |
Fr0sT
Joined: 24 Jul 2007 Posts: 850
|
Posted: Thu Aug 23, 2012 1:17 pm Post subject: |
|
|
Магическая кнопка между правой клавишей Win и правым Ctrl  |
|
| Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 2510 Location: Киев, Русь
|
Posted: Thu Aug 23, 2012 1:41 pm Post subject: |
|
|
Infocatcher, Fr0sT
Работает. Прикольно  |
|
| Back to top |
|
 |
Instructor Site Admin
Joined: 06 Jul 2006 Posts: 4646
|
Posted: Thu Aug 23, 2012 2:19 pm Post subject: |
|
|
KeepGoing
OpenLinkUnderCaret.js | Code: | if (SelectLinkUnderCaret(AkelPad.GetEditWnd()))
AkelPad.Exec('rundll32.exe shell32,ShellExec_RunDLL "' + AkelPad.GetSelText() + '"');
function SelectLinkUnderCaret(hWndEdit)
{
var lpSel;
var lpCaret;
var bSelected=false;
if (lpCaret=AkelPad.MemAlloc(_X64?24:12 /*sizeof(AECHARINDEX)*/))
{
AkelPad.SendMessage(hWndEdit, 3130 /*AEM_GETINDEX*/, 5 /*AEGI_CARETCHAR*/, lpCaret);
if (lpSel=AkelPad.MemAlloc(_X64?56:28 /*sizeof(AESELECTION)*/))
{
if (AkelPad.SendMessage(hWndEdit, 3149 /*AEM_INDEXINURL*/, lpCaret, lpSel))
{
AkelPad.SendMessage(hWndEdit, 3126 /*AEM_SETSEL*/, lpCaret, lpSel);
bSelected=true;
}
AkelPad.MemFree(lpSel);
}
AkelPad.MemFree(lpCaret);
}
return bSelected;
}
|
|
|
| Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 2510 Location: Киев, Русь
|
Posted: Thu Aug 23, 2012 3:51 pm Post subject: |
|
|
Instructor
Здорово!
А можно ли ещё как-то не выделяя ссылку? Т.е. получить границы, текст ссылки, а затем открыть? |
|
| Back to top |
|
 |
KeepGoing
Joined: 15 Sep 2011 Posts: 37
|
Posted: Thu Aug 23, 2012 5:43 pm Post subject: |
|
|
Instructor,
у меня OpenLinkUnderCaret.js, повешенный на хоткей, только выделяет ссылку, но в браузере ссылка не открывается |
|
| Back to top |
|
 |
KDJ
Joined: 06 Mar 2010 Posts: 1068 Location: Poland
|
Posted: Thu Aug 23, 2012 6:09 pm Post subject: |
|
|
VladSh
OpenLinkUnderCaretWithoutSelection.js | Code: | var sLink=GetLinkUnderCaret(AkelPad.GetEditWnd());
if (sLink)
AkelPad.Exec('rundll32.exe shell32,ShellExec_RunDLL "' + sLink + '"');
function GetLinkUnderCaret(hWndEdit)
{
var lpSel;
var lpCaret;
var nLinkStart;
var nLinkEnd;
var sLink;
if (lpCaret=AkelPad.MemAlloc(_X64?24:12 /*sizeof(AECHARINDEX)*/))
{
AkelPad.SendMessage(hWndEdit, 3130 /*AEM_GETINDEX*/, 5 /*AEGI_CARETCHAR*/, lpCaret);
if (lpSel=AkelPad.MemAlloc(_X64?48:24 /*sizeof(AESELECTION)*/))
{
if (AkelPad.SendMessage(hWndEdit, 3149 /*AEM_INDEXINURL*/, lpCaret, lpSel))
{
nLinkStart=AkelPad.SendMessage(hWndEdit, 3136 /*AEM_INDEXTORICHOFFSET*/, 0, lpSel);
nLinkEnd=AkelPad.SendMessage(hWndEdit, 3136 /*AEM_INDEXTORICHOFFSET*/, 0, lpSel + (_X64?24:12));
sLink=AkelPad.GetTextRange(nLinkStart, nLinkEnd);
}
AkelPad.MemFree(lpSel);
}
AkelPad.MemFree(lpCaret);
}
return sLink;
}
|
|
|
| Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 2510 Location: Киев, Русь
|
Posted: Thu Aug 23, 2012 7:47 pm Post subject: |
|
|
KDJ
Thank you! Now there is both variants.
Edited:
Here's what obtained: CaretSelect.js. |
|
| Back to top |
|
 |
Instructor Site Admin
Joined: 06 Jul 2006 Posts: 4646
|
Posted: Fri Aug 24, 2012 4:22 am Post subject: |
|
|
| KeepGoing wrote: | Instructor,
у меня OpenLinkUnderCaret.js, повешенный на хоткей, только выделяет ссылку, но в браузере ссылка не открывается | А так?
OpenLinkUnderCaret.js | Code: | var oSys=AkelPad.SystemFunction();
var hWndEdit=AkelPad.GetEditWnd();
var crUrl;
if (crUrl=GetLinkUnderCaret(hWndEdit))
oSys.Call("shell32::ShellExecute" + _TCHAR, hWndEdit, "open", AkelPad.GetTextRange(crUrl.cpMin, crUrl.cpMax), 0, 0, 1 /*SW_SHOWNORMAL*/);
function GetLinkUnderCaret(hWndEdit)
{
var lpRange;
var lpCaret;
var crUrl=[];
var bResult=false;
if (lpCaret=AkelPad.MemAlloc(_X64?24:12 /*sizeof(AECHARINDEX)*/))
{
AkelPad.SendMessage(hWndEdit, 3130 /*AEM_GETINDEX*/, 5 /*AEGI_CARETCHAR*/, lpCaret);
if (lpRange=AkelPad.MemAlloc(_X64?48:24 /*sizeof(AECHARRANGE)*/))
{
if (AkelPad.SendMessage(hWndEdit, 3149 /*AEM_INDEXINURL*/, lpCaret, lpRange))
{
crUrl.cpMin=AkelPad.SendMessage(hWndEdit, 3136 /*AEM_INDEXTORICHOFFSET*/, 0, lpRange);
crUrl.cpMax=AkelPad.SendMessage(hWndEdit, 3136 /*AEM_INDEXTORICHOFFSET*/, 0, lpRange + (_X64?24:12) /*offsetof(AECHARRANGE, ciMax)*/);
bResult=true;
}
AkelPad.MemFree(lpRange);
}
AkelPad.MemFree(lpCaret);
}
if (bResult)
return crUrl;
return 0;
}
|
|
|
| Back to top |
|
 |
VladSh
Joined: 29 Nov 2006 Posts: 2510 Location: Киев, Русь
|
Posted: Fri Aug 24, 2012 9:01 am Post subject: |
|
|
Instructor
Спасибо за ещё одну реализацию GetLinkUnderCaret, это как раз точно в ёлочку!  |
|
| Back to top |
|
 |
KeepGoing
Joined: 15 Sep 2011 Posts: 37
|
Posted: Fri Aug 24, 2012 4:08 pm Post subject: |
|
|
вот теперь - аккурат то, что надо!  |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|