Помогите написать скрипт

Russian main discussion
  • Author
  • Message
Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

sasa236
Пример записи в файл:

Code: Select all

var fso=new ActiveXObject("Scripting.FileSystemObject");
var oFile;

oFile=fso.OpenTextFile("c:\\testfile.txt", 2 /*ForWriting*/, true)
oFile.Write("Hello world!");
oFile.Close();

Offline
Posts: 6
Joined: Fri Oct 26, 2012 5:58 am

Post by sasa236 »

Вставьте Ваши строки в нижеприведенный скрипт, пожалуйста.

Code: Select all

//// Print all MDI documents.

var hMainWnd=AkelPad.GetMainWnd();
var lpFrameInit;
var lpFrameCur;

if (hMainWnd)
{
   //Initial MDI fram
   lpFrameInit=AkelPad.SendMessage(hMainWnd, 1288 /*AKD_FRAMEFIND*/, 1 /*FWF_CURRENT*/, 0);
   lpFrameCur=lpFrameInit;

   for (;;)
   {
     if (lpFrameCur == lpFrameInit)
     {
       if (!AkelPad.Command(4108 /*IDM_FILE_PRINT*/))
         break;
     }
     else
     {
       if (!AkelPad.Command(4113 /*IDM_FILE_SILENTPRINT*/))
         break;
     }

     //Next MDI frame
     lpFrameCur=AkelPad.Command(4316 /*IDM_WINDOW_FRAMENEXT*/);
     if (!lpFrameCur || lpFrameCur == lpFrameInit)
       break;
   }
}

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

sasa236

Code: Select all

// http://akelpad.sourceforge.net/forum/viewtopic.php?p=5163#p5163
// Version v1.2
//
//
//// Print all MDI documents.

var hMainWnd=AkelPad.GetMainWnd();
var lpFrameInit;
var lpFrameCur;
var fso=new ActiveXObject("Scripting.FileSystemObject");
var oFile;

if (hMainWnd)
{
  oFile=fso.OpenTextFile("c:\\testfile.txt", 2 /*ForWriting*/, true)

  //Initial MDI frame
  lpFrameInit=AkelPad.SendMessage(hMainWnd, 1288 /*AKD_FRAMEFIND*/, 1 /*FWF_CURRENT*/, 0);
  lpFrameCur=lpFrameInit;

  for (;;)
  {
    oFile.Write(AkelPad.GetEditFile(0) + "\r\n");

    if (lpFrameCur == lpFrameInit)
    {
      if (!AkelPad.Command(4108 /*IDM_FILE_PRINT*/))
        break;
    }
    else
    {
      if (!AkelPad.Command(4113 /*IDM_FILE_SILENTPRINT*/))
        break;
    }

    //Next MDI frame
    lpFrameCur=AkelPad.Command(4316 /*IDM_WINDOW_FRAMENEXT*/);
    if (!lpFrameCur || lpFrameCur == lpFrameInit)
      break;
  }
  oFile.Close(); 
}

Offline
Posts: 6
Joined: Fri Oct 26, 2012 5:58 am

Post by sasa236 »

Огромное спасибо! Добавил время в имя файла и в текст (из готовых скриптов). Не знаю, насколько корректно, но работает.

Code: Select all

//// Print all MDI documents.

//Options
var pFormat="dd.MM.yyyy H:mm";
var pForm="dd_MM_yyyy";
if (WScript.Arguments.length)
  pFormat=WScript.Arguments(0);

//Variables
var oSys=AkelPad.SystemFunction();
var pTime;
 var hMainWnd=AkelPad.GetMainWnd(); 
 var lpFrameInit; 
 var lpFrameCur; 
 var fso=new ActiveXObject("Scripting.FileSystemObject"); 
 var oFile; 

 if (hMainWnd) 
 { 
  pTime="Print_"+TimeFormat(pForm)+".txt";
   oFile=fso.OpenTextFile("y:\\PROGR\\Base\\"+pTime, 8 /*ForWriting*/, true) 
  pTime=TimeFormat(pFormat);
   //Initial MDI frame 
   lpFrameInit=AkelPad.SendMessage(hMainWnd, 1288 /*AKD_FRAMEFIND*/, 1 /*FWF_CURRENT*/, 0); 
   lpFrameCur=lpFrameInit; 

   for (;;) 
   { 
     oFile.Write(pTime + "  "+AkelPad.GetEditFile(0) + "\r\n"); 
     if (lpFrameCur == lpFrameInit) 
     { 
       if (!AkelPad.Command(4108 /*IDM_FILE_PRINT*/)) 
         break; 
     } 
     else 
     { 
       if (!AkelPad.Command(4113 /*IDM_FILE_SILENTPRINT*/)) 
         break; 
     } 

     //Next MDI frame 
     lpFrameCur=AkelPad.Command(4316 /*IDM_WINDOW_FRAMENEXT*/); 
     if (!lpFrameCur || lpFrameCur == lpFrameInit) 
       break; 
   } 
   oFile.Close(); 
 }
//Functions
function TimeFormat(pFormat)
{
  var lpFormatBuffer;
  var lpTimeBuffer;
  var pTime="";

  if (lpFormatBuffer=AkelPad.MemAlloc(256 * _TSIZE))
  {
    AkelPad.MemCopy(lpFormatBuffer, pFormat.substr(0, 255), _TSTR);

    if (lpTimeBuffer=AkelPad.MemAlloc(256 * _TSIZE))
    {
      oSys.Call("kernel32::GetTimeFormat" + _TCHAR, 1024 /*LOCALE_USER_DEFAULT*/, 0, 0, lpFormatBuffer, lpTimeBuffer);
      oSys.Call("kernel32::GetDateFormat" + _TCHAR, 1024 /*LOCALE_USER_DEFAULT*/, 0, 0, lpTimeBuffer, lpFormatBuffer, 256);
      pTime=AkelPad.MemRead(lpFormatBuffer, _TSTR);

      AkelPad.MemFree(lpTimeBuffer);
    }
    AkelPad.MemFree(lpFormatBuffer);
  }
  return pTime;
}
Last edited by sasa236 on Wed Nov 07, 2012 10:50 am, edited 1 time in total.

Offline
Posts: 6
Joined: Fri Oct 26, 2012 5:58 am

Post by sasa236 »

Если бы еще добавлялась инфа об именах принтера, было бы идеально.

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Правильно, мёд надо сразу половником.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

sasa236

Code: Select all

WScript.Echo(GetPrinterName());

function GetPrinterName()
{
  var hMainWnd=AkelPad.GetMainWnd();
  var oSys=AkelPad.SystemFunction();
  var lpPrintInfo;
  var lpDevNames;
  var hDevNames;
  var nDeviceOffset;
  var pDeviceName="";

  if (lpPrintInfo=AkelPad.MemAlloc(_X64?56:40 /*sizeof(PRINTINFO)*/))
  {
    AkelPad.SendMessage(hMainWnd, 1215 /*AKD_GETPRINTINFO*/, lpPrintInfo, 0);
    hDevNames=AkelPad.MemRead(lpPrintInfo + (_X64?8:4) /*offsetof(PRINTINFO, hDevNames)*/, 2 /*DT_QWORD*/);

    if (hDevNames && (lpDevNames=oSys.Call("kernel32::GlobalLock", hDevNames)))
    {
      nDeviceOffset=AkelPad.MemRead(lpDevNames + 2 /*offsetof(DEVNAMES, wDeviceOffset)*/, 4 /*DT_WORD*/);
      pDeviceName=AkelPad.MemRead(lpDevNames + nDeviceOffset * _TSIZE, _TSTR);
      oSys.Call("kernel32::GlobalUnlock", hDevNames);
    }
    AkelPad.MemFree(lpPrintInfo);
  }
  return pDeviceName;
}

Offline
Posts: 6
Joined: Fri Oct 26, 2012 5:58 am

Post by sasa236 »

Все заработало! Большое Вам Спасибо!!!

Offline
Posts: 20
Joined: Wed Mar 07, 2012 10:27 am

Post by booleg »

И опять я о компиляции паскалевских программ. Как добавить кнопку для запуска откомпилированного приложения прямо из Акелпада? Добавить кнопку с командой на выполнение .exe файла не проблема, но нужно, чтобы запускался не фиксированный .exe файл. Запускать нужно файл с именем редактируемого в данный момент файла, но расширением .exe. Наверное можно какой-то скрипт написать, но я в скриптах не силен. Вообщем - "поможите люди добрые, кто чем может".

Offline
Posts: 20
Joined: Wed Mar 07, 2012 10:27 am

Post by booleg »

Кажется сам разобрался. Создал копию RunMe.js и в ней сделал небольшие корректировки:
1) создал функцию

Code: Select all

function run_Pasfile(filePathName) 
{ 
  var cmd = "rundll32.exe shell32,ShellExec_RunDLL \"" + filePathName + "\""; 
  runCommand(cmd, "", 0); // do not capture output 
} 
2) прописал в oCommands для расширения Pas

Code: Select all

  "pas PAS Pas" : 
    ":run_Pasfile(\"%d\\%n.exe\")" ,
Большая просьба к автору RunMe.js прокомментировать насколько корректно это будет работать.

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

booleg
Лучше бы задать этот вопрос, где анонсируются скрипты и ведётся их обсуждение, т.е. здесь. Но вы удивительным образом сумели отметиться с одним и тем же вопросом в 2-х темах, и даже создали одну отдельную. Такое ощущение, что темы выбираете рэндомайзом.
Надеюсь Instructor перенесёт ваше сообщение туда.

Offline
Posts: 20
Joined: Wed Mar 07, 2012 10:27 am

Post by booleg »

VladSh wrote:booleg
Лучше бы задать этот вопрос, где анонсируются скрипты и ведётся их обсуждение, т.е. здесь. Но вы удивительным образом сумели отметиться с одним и тем же вопросом в 2-х темах, и даже создали одну отдельную. Такое ощущение, что темы выбираете рэндомайзом.
Надеюсь Instructor перенесёт ваше сообщение туда.
Вы будете удивлены, но первое моё сообщение и было сюда перенесено (предположительно Instructor-ом ), а второе я запостил сюда как развитие темы.

Offline
Posts: 46
Joined: Fri Mar 22, 2013 5:05 am
Location: Белово, Кемеровская область, Россия

Post by Egorkaru »

ermakoov wrote:Помогите, плиз, написать скрипт вставки (ввода) тире "—"
Можно без скрипта, используя пункт меню в ContextMenu плагине, кнопку в ToolBar плагине и (или) горячую клавишу в Hotkeys плагине.

Для ContextMenu и ToolBar плагинов:

Code: Select all

"Вставить тире" Insert("\[2014]", 1)
Для Hotkeys плагина:
Имя: Вставить тире
Команда: Insert("\[2014]", 1)

Offline
Posts: 582
Joined: Mon Apr 08, 2013 9:50 pm
Location: Win7SP1x64, APx64

Post by Drugmix »

а можно ли написать скрипт для обновления кэша coder-плагина?

Offline
Posts: 366
Joined: Mon Jan 10, 2011 5:28 pm
Contact:

Post by Lenchik »

Code: Select all

  -"Обновить кэш" Call("Coder::Settings", 2) Icon("%a\AkelFiles\Plugs\Toolbar.dll", 3)
Post Reply