DI_PSWEDIT

Здесь обсуждается всё, что касается макросов.
Post Reply
User avatar
John Doe
Бюрократ
Posts: 12538
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 240 times

DI_PSWEDIT

Post by John Doe » Sat 04 Jul, 2015 11:39

Макросы для работы с паролями, скрытыми под звёздочками.

CtrlIns — копировать пароль в буфер обмена
F3 — показать пароль
F4 — редактировать пароль

Альтернативно можно использовать пункт в меню плагинов.
Его можно настроить на одно из трёх перечисленных действий, для этого необходимо в начале скрипта изменить значение переменной F11Mode.
  1. --http://forum.farmanager.com/viewtopic.php?f=15&t=9684
  2. local F11Mode = "copy"--"copy"--"show"--"edit"
  3.  
  4. local F,C = far.Flags,far.Colors
  5. local strCopy,strShow,strEdit,strInputTitle,strInputPrompt = "Copy pwd: ","Show pwd","Edit pwd","Edit password",""
  6. local copykey = "R?CtrlIns"
  7.  
  8. local pwd,hDlg,CurPos
  9.  
  10. local function getDI_PSWEDIT()
  11.   hDlg = far.AdvControl(F.ACTL_GETWINDOWINFO).Id
  12.   CurPos = hDlg:send(F.DM_GETFOCUS)
  13.   local item = hDlg:send(F.DM_GETDLGITEM,CurPos)
  14.   if item and item[1]==F.DI_PSWEDIT then
  15.     pwd = hDlg:send(F.DM_GETTEXT,CurPos); return true
  16.   end
  17. end
  18. local InputId = win.Uuid"589D1EEA-1C8D-4B85-80A8-A2377993A154"
  19. local delay = 300
  20. local actions = {
  21.   copy=function() --------------------------------
  22.     far.CopyToClipboard(pwd)
  23.   end;
  24.   show=function() --------------------------------
  25.     local item = hDlg:send(F.DM_GETDLGITEM,CurPos)
  26.     local X,Y = item[2],item[3]
  27.     local r = hDlg:send(F.DM_GETDLGRECT)
  28.     far.Text(r.Left+X,r.Top+Y,far.AdvControl(F.ACTL_GETCOLOR,C.COL_DIALOGEDIT),pwd)
  29.     far.Text()
  30.     local res = far.MacroExecute("return mf.waitkey()")
  31.     if res then
  32.       local key = res[1]
  33.       if key:match(copykey) then
  34.         far.CopyToClipboard(pwd)
  35.         far.Text(r.Left+X,r.Top+Y,far.AdvControl(F.ACTL_GETCOLOR,C.COL_DIALOGEDITSELECTED),pwd)
  36.         far.Text()
  37.         win.Sleep(delay)
  38.       else
  39.         far.MacroPost(("if mf.eval('%s',2)==-1 then Keys'%s' end"):format(key,key))
  40.       end
  41.     end
  42.     far.AdvControl(F.ACTL_REDRAWALL)
  43.   end;
  44.   edit=function() --------------------------------
  45.     pwd = far.InputBox(InputId,strInputTitle,strInputPrompt,nil,pwd)
  46.     if pwd then hDlg:send(F.DM_SETTEXT,CurPos,pwd) end
  47.   end;
  48. }
  49.  
  50. MenuItem { description="password: show/edit/copy";
  51.   menu="Plugins"; area="Dialog";
  52.   guid="61279036-42E9-4063-8C5A-714022F9BE3F";
  53.   text=function()
  54.     return getDI_PSWEDIT() and (F11Mode=="copy" and strCopy..pwd or F11Mode=="show" and strShow or strEdit)
  55.   end;
  56.   action=function()
  57.     actions[F11Mode]()
  58.   end;
  59. }
  60.  
  61. Macro { description="password: copy";
  62.   area="Dialog"; key="CtrlIns";
  63.   uid="AF590D4C-C513-41A4-A8C9-0DC3F272CAB9";
  64.   condition=getDI_PSWEDIT;
  65.   action=actions.copy;
  66. }
  67.  
  68. Macro { description="password: show";
  69.   area="Dialog"; key="F3";
  70.   uid="70501E5E-C0EE-41FD-8F96-9BC942F06586";
  71.   condition=getDI_PSWEDIT;
  72.   action=actions.show;
  73. }
  74.  
  75. Macro { description="password: edit";
  76.   area="Dialog"; key="F4";
  77.   uid="B01D3DBD-E79E-40D8-93EA-3BDF25E089CF";
  78.   condition=getDI_PSWEDIT;
  79.   action=actions.edit;
  80. }

Post Reply

Return to “Обсуждение макросов”