首页 > 其他分享 >[AHK2] 菜单,用于便捷的获取文件的路径

[AHK2] 菜单,用于便捷的获取文件的路径

时间:2024-03-25 13:22:54浏览次数:14  
标签:菜单 AHK2 ahk imgList selected gitee lv 便捷 Include

开始

在使用文件管理器中,我们经常要用到的一个需求就是获取一个文件的全路径,那么需要右键,安全,滑动复制

太麻烦了!

如果可以用ahk便利的获取到路径就好了!

所以有了下面的脚本:中键显示菜单。

代码

#Include G:\AHK\gitee_ahk2\common\Tip.ahk
#Include G:\AHK\gitee_ahk2\common\Theme.ahk
#Include G:\AHK\gitee_ahk2\common\Extend.ahk
#Include G:\AHK\gitee_ahk2\common\util\Explorer.ahk
#Include G:\AHK\gitee_ahk2\common\util\Animation.ahk

CoordMode 'Mouse', 'Screen'

MButton:: ShowContextMenu()

imgList := IL_Create(10)
  , IL_Add(imgList, './resource/icon/vscode.ico')
  , IL_Add(imgList, './resource/icon/text.png')

ExplorerContextActions := [
  ['Icon' 0, '复制路径', _copyPath],
  ['Icon' 1, '以vscode打开', _openWithVsCode],
  ['Icon' 2, '以记事本打开', _openWithNotepad],
]

selected := []

ShowContextMenu() {
  try id := WinGetID('A')
  catch {
    Tip.ShowTip('Error on get id')
    return
  }
  if !Explorer.IsValidHwnd(id)
    return
  window := Explorer(WinGetID('A'))
  global selected := window.GetListViewSelected()
  if !selected.Length
    return
  ExplorerContext.Show(imgList, ExplorerContextActions)
}

_openWithVsCode() {
  if selected.Length
    Run('code ' selected[1])
}
_openWithNotepad() {
  if selected.Length
    Run('notepad ' selected.join(A_Space))
}
_copyPath() {
  if selected.Length
    A_Clipboard := '', A_Clipboard := selected[1], Tip.ShowTip('Copied!')
}


class ExplorerContext extends Gui {

  static Width := 150
  cbs := Map()

  __New(imageList := '', actions := []) {
    super.__New('+AlwaysOnTop +ToolWindow -Caption')
    this.SetFont('s14', 'consolas')
    lv := this.AddListView('w' ExplorerContext.Width ' Grid -Multi -Hdr Lv0x2000 LV0x8000', ['items']) ;
    lv.OnEvent('Click', (p*) => this.OnLvClick(p*))
    this.lv := lv, lv.SetImageList(imageList)
    for v in actions
      this.LvAdd(v[1], v[2], v[3])
    Theme.Light(this)
  }

  LvAdd(opts, col, callback) {
    this.lv.Add(opts, col), this.cbs.Set(col, callback)
  }

  Modify() {
    lv := this.lv, this.GetPos(&x, &y, &w, &h)
    lv.Move(3, 3, w - 6, h - 6), lv.ModifyCol(1, w - 10)
  }

  _Hide() {
    Animation.FadeOut(this, true)
      , HotKey('~LButton Up', 'Off')
  }

  static Show(imgList, actions) {
    static ins := ExplorerContext(imgList, actions)
    Animation.FadeIn(ins, (*) => ins.Modify(), 8)
    Hotkey '~LButton Up', (*) => ins._Hide(), 'On'
  }

  OnLvClick(lv, row, *) => this.cbs.Get(lv.GetText(row, 1), Noop)()

}

说明

脚本使用的几个依赖:

  • Animation.ahk 用于在ui的显示和隐藏时添加动画效果
  • Explorer.ahk 用于获取选中的文件路径

这些或许可以在其他文章中找到,或许在仓库中……我也不记得

另外,脚本使用到了imageList,需要在路径中有对应的资源,在仓库中已经上传了;但没有资源脚本也不会停止,只是无法显示图标.

  • 实际使用时,可能需要微调listView的大小,通过修改Modify()方法,这已经是我所能想到让listview完美覆盖gui的最好的方法了。

效果

image

我添加了我常用的几个操作,你可以添加自己的,需要修改:

  • ExplorerContextActions里的回调列表

如果需要图标,修改imgList

标签:菜单,AHK2,ahk,imgList,selected,gitee,lv,便捷,Include
From: https://www.cnblogs.com/refiz/p/18094155

相关文章

  • [AHK2 ui] 轻松设置主题
    开始在写ui工具的时候,常常会设置控件的背景或字体颜色;通常的做法是在options参数中使用backgroundRedcblack而如果想使用变量就会出现麻烦的字符串拼接,像这样:this.AddText('background'bgc'c'fc)在控件很多的时候便会像这样(我曾经写的ui):为了解决这种复杂性,有了下面的......
  • [AHK2] 不用结束符的热字串
    开始通常,我们使用热字串是这样的:::;btw::bytheway需要使用结束符(;''.等)来触发。但在官方文档中,找到一种方法可以不使用结束符,基于InputHook的方式。原始的例子就不展示了,我们直接入正题--封装后的代码。代码/***@example*;registeractionsbyconstructor......
  • Ftrans安全数据摆渡系统 构建便捷的内外网数据交换通道!
    安全数据摆渡系统是一种设计用于解决内外网环境下,数据传输、管理、共享问题的安全系统,通过加密、访问控制等策略,提供安全可靠的数据传输和共享服务,尤其适用于对网络安全建设要求高的行业,比如研发型企业、党政机构、金融等等。安全数据摆渡系统可以解决以下问题:1、数据安全性:通......
  • C# 组合模式构建树形结构,实现多级指令菜单模式
    使用场景图形界面库:在图形界面开发中,UI元素(按钮、文本框等)和容器元素(面板、窗口等)可以使用组合模式来构建复杂的用户界面。这样,可以统一处理单个元素和组合元素,使得客户端代码更简洁文件系统和目录结构:文件系统是一个经典的组合模式应用场景。文件夹可以包含文件和其他文件夹,形......
  • Android11.0 SystemUI 下拉通知栏去掉左右滑动通知菜单功能
    1.前言在11.0的系统rom产品定制化开发中,在systemui模块中关于下拉状态栏这块也是非常重要的部分,最近在关于systemui下拉通知栏的每条通知部分要求去掉通知栏通知的长按事件,不需要长按功能,所以就需要分析下关于长按事件是在哪里注册的,然后去掉就可以了,接下来分析实现相关功能......
  • Win11-鼠标右键菜单恢复为win10显示样式
    先看下win11默认的鼠标右键菜单显示情况看起来没有win10舒服解决方法:cmd命令行执行以下命令reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve 执行后重启Windows资源管理器 执行完以上操作后,效果如下......
  • vue 3+TS 封装自定义右键全局菜单(虚拟节点)
    有时我们需要点击(右键或左键)某个元素时弹出菜单,实现复制、粘贴、删除等功能。本文将介绍如何封装一个自定义的右键全局菜单(无三方依赖)。封装的菜单可自定义菜单项,图标,禁用,分割线,隐藏等。并且可以在全局任意地方使用。源码在文章末尾。效果使用<template><div>......
  • 禁用右键菜单、禁用鼠标选中、// 禁止键盘F12键
    禁用右键菜单、禁用鼠标选中、//禁止键盘F12键//禁用右键菜单document.oncontextmenu=newFunction("event.returnValue=false");//禁用鼠标选中document.onselectstart=newFunction("event.returnValue=false");//禁止键盘F12键......
  • el-menu 点击有子元素的菜单项字体变色
    效果图: el-menu组件只是在点击跟元素时,根元素变色,如图:.el-menu-item.is-active{background-color:rgb(56,96,226)!important;color:white;} 点击有子元素的菜单时不会变色,下面可以实现:(点击有子元素菜单时,会有一个class属性is-opened,所以给其编辑样式即......
  • odoo17开发教程(7):用户界面UI的交互-菜单
    声明菜单menuitem为了减少声明菜单(ir.ui.menu)并将其连接到相应操作的复杂性,我们可以使用<menuitem>快捷方式。 还是拿 test_model_action举例,一个最简单的菜单如下:<menuitemid="test_model_menu_action"action="test_model_action"/>菜单test_model_menu_action......