[AHK]编写Dialog类代替内置的InputBox命令

news2024/9/21 19:06:31

更灵活的自定义的Dialog类,可以用来平替内置的InputBox命令

AHK v1代码

#requires  Autohotkey v1.0
answer := Dialog("输出结果:", "good")
MsgBox, % "you answered: " answer
ExitApp

Dialog(Question, DefaultValue := "") {
    return new Dialog(Question, DefaultValue).Wait()
}
class Dialog
{
    __New(Question, DefaultValue) {
        Gui, New, +hwndhGui +LabelDialog.On_, Dialog
        this.hwnd := hGui
        Gui, Add, Text,, % Question
        Gui, Add, Edit, w200 h100 hwndhEdit, %DefaultValue%
        this.hEdit := hEdit
        Gui, Add, Button, gDialog.On_ButtonSendAnswer, 确定
        this.SaveStatus := False
        Gui, Show
        Dialog.Instances[hGui] := this
    }
    
    On_Close() {
        MsgBox, 4, % " ", Do you want to close the window?
        IfMsgBox, No
            Return 1
        Dialog.RemoveInstance(A_Gui)
    }

    On_ButtonSendAnswer() {
        this := Dialog.Instances[A_Gui]
        this.SaveStatus := True
        Dialog.RemoveInstance(this.hwnd)
        Gui, Cancel
    }
 
    RemoveInstance(hwnd) {
        Dialog.Instances.Delete(hwnd)
    }
 
    Wait() {
        dhw := A_DetectHiddenWindows
        DetectHiddenWindows, Off
        WinWaitClose, % "ahk_id " this.hwnd
        DetectHiddenWindows, % dhw

        If !this.SaveStatus
          Return "not saved"
        GuiControlGet, value,, % this.hEdit
        return value
    }

    __Delete() {
        Gui, % this.hwnd ":Destroy"
    }
}

AHK v2代码

#Requires AutoHotkey v2.0

answer := myDialog("输出结果:", "good")
MsgBox("you answered: " . answer)
ExitApp

myDialog(Question, DefaultValue := "") {
    return Dialog.Create(Question, DefaultValue).Wait()
}

class Dialog {
    static Instances := Map()

    static Create(Question, DefaultValue) {
        return Dialog(Question, DefaultValue)
    }

    __New(Question, DefaultValue) {
        this.gui := Gui()
        this.gui.Add("Text", , Question)
        this.edit := this.gui.Add("Edit", "w200 h100", DefaultValue)
        this.MyBtn :=this.gui.Add("Button", "", "确定")
        this.MyBtn.OnEvent("Click", this.On_ButtonSendAnswer) 
        this.SaveStatus := false
        this.gui.OnEvent("Close", this.On_Close)
        this.gui.Show()
        Dialog.Instances[this.gui.Hwnd] := this
    }

    On_Close(*) {
        if (MsgBox("Do you want to close the window?", " ", 4) = "No")
            return true
        Dialog.RemoveInstance(this)
    }

    On_ButtonSendAnswer(*) {
        this := Dialog.Instances[this.gui.Hwnd]
        this.SaveStatus := true
        Dialog.RemoveInstance(this.gui)
        this.gui.Hide()
    }
    static RemoveInstance(gui) {
        Dialog.Instances.Delete(gui.Hwnd)
    }

    Wait() {
        dhw := A_DetectHiddenWindows
        DetectHiddenWindows(false)
        WinWaitClose("ahk_id " . this.gui.Hwnd)
        DetectHiddenWindows(dhw)

        if (!this.SaveStatus)
            return "not saved"
        return this.edit.Value
    }

    __Delete() {
        this.gui.Destroy()
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2120673.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java面试篇基础部分-垃圾回收算法

大厂面试垃圾回收算法详解内容。 JVM内存垃圾对象的确定? Java开发过程中,使用引用计数和可达性分析。来确定一个对象是否是需要被回收的对象,如果是需要被回收的对象则,对其进行垃圾回收,如果不是则说明是存在引用的对象,则不能清理 首先来分析一下引用算法,如果这个时…

web防火墙技术措施有哪些?防火墙主要类型有哪些

网络安全已经成为了一个不可忽视的重要议题。web防火墙是入侵检测系统,入侵防御系统的一种。web防火墙技术措施有哪些?Web应用防火墙,正是守护网络安全的一道坚实屏障。今天就跟着小编一起了解下关于web防火墙。 web防火墙技术措施有哪些&…

[C高手编程] const, volatile, register, inline: 修饰符与关键字全面解析

💖💖⚡️⚡️专栏:C高手编程-面试宝典/技术手册/高手进阶⚡️⚡️💖💖 「C高手编程」专栏融合了作者十多年的C语言开发经验,汇集了从基础到进阶的关键知识点,是不可多得的知识宝典。如果你是即将…

内存管控:内存池篇

目录 1.内存池的工作原理 2.内存池的优势 3.长时间运行的应用和内存碎片 4.代码实践 4.1核心结构(内存池结构) 4.2核心函数 4.2.1创建内存池 4.2.2销毁内存池 4.2.3分配内存块 4.2.4归还内存块入池 内存池(Memory Pool&#xff09…

CMake导入OpenCV检测人脸

基于级联分类器的人脸检测示例"face_detection.cpp"&#xff1a; #include <opencv2/opencv.hpp>int main(int argc,char *argv[]) {// load face classifiercv::CascadeClassifier faceCascade;faceCascade.load(argv[3]);cv::Mat image cv::imread(argv[1]…

Effective Java 学习笔记--42-44 函数接口及其应用(Lambda与方法引用)

目录 函数接口 标准函数接口 自定义函数接口 函数接口的应用 Lambda表达式 Lambda表达式相比于匿名类的优点 方法引用 函数式接口是只包含了一个抽象方法的接口&#xff0c;这种接口的设计目的是为了支持Lambda表达式为代表的函数输入&#xff0c;在Java中有43个标准的默…

基于SpringBoot的旅游网站系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于JavaSpringBootVueMySQL的旅游网站系统【附源码文档】、…

远程连接Hiveserver2服务

目录 1.修改 core-site.xml 和 hive-site.xml 的配置文件 2.启动HiveServer2服务 3.启动Beeline工具连接Hiveserver2服务 4.利用IDEA工具连接Hiveserver2服务 完成Hive本地模式安装后&#xff0c;可以启动hiveserver2服务进行远程连接和操作Hive。 1.修改 core-site.xml …

ctf Mark loves cat (超详细记录)

分析&#xff1a;首先根据问题名称看不出明显的考点方向&#xff0c;先看了一下源代码&#xff0c;没有flag相关内容 我后面就去尝试sql注入方向&#xff0c;但是试了几个参数发现得到的回显都是一致的&#xff0c;全是主页&#xff0c;显然是做了错误重定向&#xff0c;那我就…

基于SpringBoot+Vue+MySQL的垃圾分类回收管理系统

系统展示 用户界面 管理员界面 系统背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人们思想上不可跨域的鸿沟&#xff0c;信息的传播速度…

PhpStudy下载安装使用学习

一、官网下载 官网地址&#xff1a;Windows版phpstudy下载 - 小皮面板(phpstudy)https://old.xp.cn/download.html 【首页】选择Windows版&#xff0c;进行下载 下载完成是一个压缩包的形式&#xff0c;解压得到一个.exe的执行文件&#xff0c;点击执行安装程序&#xff08;注…

016.Python爬虫系列_关于登录和验证码

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数…

BMP280气压传感器详解(STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 3.传感器数据获取流程 三、程序设计 main.c文件 bmp280.h文件 bmp280.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 BMP280是一款基于博世公司APSM工艺的小封装低功耗数字复合传感器&#xff0c;它可以测…

circuitjs 继电器使用的注意事项及疑惑解答

本篇是关于继电器使用中的一些注意事项, 及疑惑解答. 我们会深入分析下继电器外在行为表现的内在原因, 并针对一些异常情况提出解决方案. 两个输出端点都显示为高电平 在你使用继电器的过程中, 你可能注意到一种令人困惑的现象, 两个输出端有一个明明没有连接到电源, 却也显示…

Docker方式部署ProxySQL和Keepalived组合实现MGR的高可用访问

ProxySQL 代理访问MGR&#xff0c;可以做到故障自动切换主节点&#xff0c;可以自定义访问规则实现读写分离 目录 网络架构一、环境准备二、软件安装1. MGR集群配置2. 创建必要用户2. ProxySQL部署测试3. Keepalived部署高可用4. 测试高可用 网络架构 一、环境准备 三台物理主…

Ubuntu22.04之禁止内核自动更新(二百六十八)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

2516. 每种字符至少取 K 个 滑动窗口 正难则反

给你一个由字符 a、b、c 组成的字符串 s 和一个非负整数 k 。每分钟&#xff0c;你可以选择取走 s 最左侧 还是 最右侧 的那个字符。 你必须取走每种字符 至少 k 个&#xff0c;返回需要的 最少 分钟数&#xff1b;如果无法取到&#xff0c;则返回 -1 。 示例 1&#xff1a; …

专注LabVIEW 做好一件事

在一次LabVIEW的系统改造项目中&#xff0c;遇到一个设备&#xff0c;操作手册居然还是基于DOS系统的。不难看出&#xff0c;这套设备虽然年代久远&#xff0c;但背后的技术积淀极为深厚。事实证明&#xff0c;这套系统在业内享有很高的认可度&#xff0c;由国外团队开发&#…

翻译神器大盘点:哪些软件让语言障碍不再是问题

如果你渴望提升外文阅读能力&#xff0c;却面临外语基础薄弱的挑战&#xff0c;不必过于担心。幸运的是&#xff0c;当前科技为我们提供了诸多便捷的解决方案——翻译工具。比如百度在线翻译这些工具功能强大&#xff0c;极大地拓宽了我们在日常生活与学习中的语言应用边界。 …

PHP轻松创建高效收集问卷调查小程序系统源码

轻松创建&#xff0c;高效收集 —— 问卷调查小程序&#xff0c;你的调研神器&#xff01; 一、告别繁琐&#xff0c;一键开启调研之旅 还在为设计问卷、收集数据而头疼不已吗&#xff1f;现在&#xff0c;有了“问卷调查小程序”&#xff0c;一切都变得轻松简单&#xff01;无…