欢迎您, 游客
您必须先注册才能在我们的站点发帖。

用户名
  

密码
  





论坛搜索

(高级搜索)

最近的主题
新人报到专用贴
最近发表: Eledon
2018-09-27 15 : 08
» 回复: 1219
» 人气: 548105
一填理想的AHK编辑工具
最近发表: tmplinshi
2018-09-14 18 : 30
» 回复: 2
» 人气: 328
为什么ini文件里没有读入u盘序列号?
最近发表: vip88
2018-08-25 14 : 05
» 回复: 4
» 人气: 1215
AHK源代码加密器 v2.6
最近发表: feiyue
2018-08-24 15 : 45
» 回复: 6
» 人气: 1046
ahk引入大漠插件dll的某些函数 V1.0.1
最近发表: feiyue
2018-08-17 00 : 42
» 回复: 23
» 人气: 15999
DllCall的使用简介
最近发表: feiyue
2018-08-16 13 : 12
» 回复: 5
» 人气: 2238
ahk.5d6d.net 老用户成功登录 ahk8...
最近发表: 江户川
2018-08-09 00 : 42
» 回复: 55
» 人气: 30762
[为何ADO]操作 Excel 文档 V1.0.1
最近发表: binghez
2018-08-08 15 : 46
» 回复: 13
» 人气: 6748
屏幕键盘()
最近发表: feiyue
2018-07-30 23 : 57
» 回复: 0
» 人气: 190
多个热键任意切换同时终止前面的线程
最近发表: feiyue
2018-07-06 21 : 57
» 回复: 0
» 人气: 207

 
Lightbulb 一填理想的AHK编辑工具
发布: fywlts - 2018-08-30 13 : 46 - 回复 (2)

一、设计初衷
我学习ahk,完全是看中了它的热键功能。特别的方便快捷。可因为个人英语能力有限。里面的参数又多还有各种限制。稍不留意就会出错。往往还找不到出错的地方和原因。学习​ahk的所有资料就是附带的帮助文件汉化版。所以想做一个适合新手ahk爱好者的编辑工具。把平时收集到的大神的写函数及作品,集中整理,把平时自学ahk存在的易注意的​。加入可自定义修改的参数面板中。
二、希望具备的功能
1、框架合理分类出几大功能模块。以树状列表可快速选择。在选择函数或命令后,下面的参数面板则会显示出详细的参数选项,
【用户可自由在配置文件中添加对参数的理解注释等。有能力的也可以修改参数面板。】
【所以参数面板为独立的ahk文件,由主窗口调用,用户或爱好者可自由增加或修改完善。】
【根据用户使用命令或函数的次数,将常用的命令或函数置顶加变色显示】
4、大神函数集合,可随时收集增添内容。
5、库函数的汉化介绍说明
6、汉化一些常用的大神作品,比如autogui
三、此工具的好处是所有参数面板不需要一个人完成。爱好者可以自己设计好了传上来。用户也可以自己设计自己的参数面板,去掉用的不多的参数。每隔一段时间。由工具管理者过​滤出比较好的参数面板加入下载包。方便新用户加入后下载使用。所以,各位大神有能力的,觉得这款工具有前途的,帮忙设计完善下主框架。有好作品的回贴可申请加入工具里的大​神作品集。另:函数借用了部分大神的函数。因为不懂英文,所以汉化了下,结果可能把原作者的信息给搞掉了。请谅解。在此致歉并感谢。其实到现在还没弄懂AutoXYWH这​个函数中第一个参数中数字的作用。改来改去,改好多种,感觉没啥变化。水平还是太低了。好多功能只能想想实现不了,希望有时间的大神指点下。
四、最好,希望广大ahk爱好者,特别是像我一样不懂英文的。一起来完善下参数面板吧。
因源码有不同的文件夹及附件,可能无法正常运行,上传几次zip包均失败,所以源码后另外百度的zip包下载地址
源码:

代码:
#NoEnv
#Warn,,OutputDebug
#SingleInstance Force
FileInstall,SciLexer.dll, %A_ScriptDir%\SciLexer.dll,1
SCI_edit:= DllCall("LoadLibrary", "Str", "SciLexer.dll", "Ptr")  ; 避免了在循环中每次都需要使用 DllCall() 装载库.
SetWorkingDir %A_ScriptDir%
#Include %A_ScriptDir%\Toolbar.ahk
global 屏幕宽,屏幕高,主窗口宽,主窗口高,主窗口句柄
global 当前参数面板,默认参数面板,面板坐标x,面板坐标y,面板宽,面板高
;获取当前显示器的可用分辨率,存于变量 屏幕信息
SysGet, 屏幕信息, MonitorWorkArea
屏幕宽=屏幕信息Right-屏幕信息left
屏幕高=屏幕信息down-屏幕信息top

;========免注册调用大漠============
;iPath := A_ahkpath . "\AHKdm\dm.dll"  
;WhichButton := DllCall("AHKdm\DmReg.dll\SetDllPathW",  "Str", iPath, "Int", 0)
;MsgBox % WhichButton
;dm :=  ComObjCreate("dm.dmsoft")
;ver := dm.Ver()
;=========================免注册失败?


Gui main:New, +hWndhmainGui +Labelmain +Resize
主窗口句柄:=hmainGui
;------------------创建窗口的状态栏--------------------
Gui Add, StatusBar, x0 y680 w屏幕宽 h22, Status Bar
;----------------------添加一个菜单栏--------------------------
Menu MenuHandler, Add, 打开(&O)`tCtrl+O, MenuHandler
Menu MenuHandler, Add, 保存(&S)`tCtrl+S, MenuHandler
Menu MenuHandler, Add, 另存为(&A)`tCtrl+Shift+S, MenuHandler
Menu MenuHandler, Add, 编码, MenuHandler
Menu MenuHandler,add
Menu MenuHandler,add
Menu MenuHandler,add,退出(&X)`t,MenuHandler
Menu MenuBar, Add, 文件(&F), :MenuHandler
;-----------------
Menu EditMenu, Add, 复制(&C)`tCtrl+C, MenuHandler
Menu EditMenu, Add, 剪切(&X)`tCtrl+X, MenuHandler
Menu EditMenu, Add, 粘贴(&V)`tCtrl+V, MenuHandler
Menu EditMenu, Add, 撤销(&U)`tCtrl+Z, MenuHandler
Menu EditMenu, Add, 重做(&R)`tCtrl+Y, MenuHandler
Menu MenuBar, Add, 编辑(&E), :EditMenu
;-----------------
Menu ViewMenu, Add, 复制(&C)`tCtrl+C, MenuHandler
Menu ViewMenu, Add, 剪切(&X)`tCtrl+X, MenuHandler
Menu ViewMenu, Add, 粘贴(&V)`tCtrl+V, MenuHandler
Menu ViewMenu, Add, 撤销(&U)`tCtrl+Z, MenuHandler
Menu ViewMenu, Add, 重做(&R)`tCtrl+Y, MenuHandler
Menu MenuBar, Add, 查看(&E), :ViewMenu
;-----------------
Menu CompileMenu, Add, 运行(&R)`tF5, MenuHandler
Menu CompileMenu, Add, 调试(&D)`tF7, MenuHandler
Menu CompileMenu, Add, 编译(&C)`tCtrl+F7, MenuHandler
Menu CompileMenu, Add, 备用(&U)`tCtrl+Z, MenuHandler
Menu CompileMenu, Add, 备用(&R)`tCtrl+Y, MenuHandler
Menu MenuBar, Add,编译(&O), :CompileMenu
;-----------------
Menu OptionMenu, Add, 配置SCI(&C)`tCtrl+C, MenuHandler
Menu OptionMenu, Add, 代码样式选择(&X)`tCtrl+X, MenuHandler
Menu OptionMenu, Add, 自定义快捷键(&V)`tCtrl+V, MenuHandler
Menu OptionMenu, Add, 撤销(&U)`tCtrl+Z, MenuHandler
Menu OptionMenu, Add, 重做(&R)`tCtrl+Y, MenuHandler
Menu MenuBar, Add, 选项(&O), :OptionMenu
;-----------------
Menu ToolMenu, Add, 窗口信息查看(&I)`t, MenuHandler
Menu ToolMenu, Add, 快速脚本界面(&W)`t, MenuHandler
Menu ToolMenu, Add, 代码格式化(&G)`t, MenuHandler
Menu ToolMenu, Add, 正则辅助测试(&Z)`t, MenuHandler
Menu ToolMenu, Add, 快速插入片段(&P)`t, MenuHandler
Menu ToolMenu, Add, 插件接口查看(&V)`t, MenuHandler
Menu ToolMenu, Add, SCI配置工具(&S)`t, MenuHandler
Menu ToolMenu, Add, 自定义工具栏(&T)`t, MenuHandler
Menu ToolMenu, Add, 库文件介绍(&L)`t, MenuHandler
Menu MenuBar, Add, 工具(&T), :ToolMenu
;-----------------
Menu HelpMenu, Add, 帮助(&H)`tF1, MenuHandler
Menu HelpMenu, Add, 赞助注册(&C)`t, MenuHandler
Menu MenuBar, Add, 帮助(&H), :HelpMenu
Gui Menu, MenuBar
;-----------------------代码编辑栏-----------------------------
;Gui Add, Edit, x270 y50 w760 h392, #NoEnv`n#Warn,, OutputDebug`n#SingleInstance Force`nSetWorkingDir `%A_ScriptDir`%
gui add,Custom,ClassScintilla x270 y50 w760 h392 hwndhSci_edit ;添加 Scintilla 控件. 注意必须加载 SciLexer.dll 库后才能添加此控件
;-----------------------代码块快捷命令区------------------------
Gui Add, GroupBox, x248 y45 Section w22 h620
Gui add,Picture, xp yp  AltSubmit,代码背景.bmp
Gui Add, Button, hwnd_left xp+2 yp+8 w18 h18 +BackgroundTrans +0x0080 +0x0040
BT1Options:= [ {BC: "代码背景.bmp", TC: "000000", 3D: 9, G: 1}] ;普通状态
BT1Options[2] := {BC: "代码背景.bmp", TC: "000000", 3D: 9, G: 1} ;鼠标悬停
BT1Options[3] := {BC: "代码背景.bmp", TC: "000000", 3D: 0, G: 0} ;3鼠标按下
CreateImageButton(_left,BT1Options)

Gui Add, Button, xp yp+20 w18 h18 BackgroundTrans
Gui Add, Button, xp yp+20 w18 h18 BackgroundTrans
Gui Add, Button, xp yp+20 w18 h18 BackgroundTrans
Gui Add, Button, xp yp+20 w18 h18 BackgroundTrans
;-------------------------左侧选择命令区-----------------------
Gui Add, Tab2, +hWndtiaoshi vtabts x8 y50 w240 h620 AltSubmit +0x280, 选择命令|项目管理|全局变量
    Gui Tab, 1
        Gui Add, TreeView, x32 y58 w210 h600 vtvcmd gcmts
    Gui Tab, 2
        Gui Add, ListView, x32 y58 w210 h600, ListView
    gui tab
        ;------------------------下侧命令参数区------------------------
        ;-----------下侧:调试:cmd插件---------------------------
        ;Gui Add, ActiveX, x267 y450 w750 h198, Shell.Explorer

;===============-显示窗口-===============
Gui main:Show, w1280 h780, 积木AHK

;------------创建工具栏-------------
GuiAddToolbar(主窗口句柄)
OnMessage(0x003,"更新参数面板位置") ;0x0003 WM_MOVE

#Include %A_ScriptDir%\lib\lib.ahk

        ;=====================程序主体部分===============
        ;---程序初始化
        ;生成配置文件()
载入配置文件()  ;此处是读取目录下的文件生成命令区TV控件的数据

;Run, Target [, WorkingDir, Max|Min|Hide|UseErrorLevel, OutputVarPID]
;AutoHotkey.exe [Switches] [Script Filename] [Script Parameters] ;%面板宽% %面板高%
窗口坐标更新()
Run,autohotkey.exe /force `"%A_ScriptDir%`"\命令\默认面板.ahk %面板坐标x% %面板坐标y% 900 240,%A_AhkPath%,, 默认参数面板
当前参数面板:=默认参数面板



    

        ;——————————————————————————————————
        ;=====================程序主体部分结束==================


        ;———————————————以下是函数、标签部分——————————————
return
MenuHandler:
return

mainSize:
AutoXYWH("w0.75 h0.75", hSci_edit)
AutoXYWH("h0.75", tiaoshi,"tvcmd")

更新参数面板位置()
return



;触发了命令选择中树形列表项的标签
cmts:
;SendMessage, Msg [, wParam, lParam, Control, WinTitle, WinText, ExcludeTitle, ExcludeText, Timeout]
    if (A_GuiEvent=="S") {
        TV_GetText(选中的项目文本,A_EventInfo )
        父项目id:=TV_GetParent(A_EventInfo )
        if (父项目id!=0){
            tV_GetText(父项目文本,父项目id)
            Process,Close,%当前参数面板%
            窗口坐标更新()
            Run,autohotkey.exe /force `"%A_ScriptDir%`"\命令\%父项目文本%\%选中的项目文本%.ahk %面板坐标x% %面板坐标y% 900 240,%A_AhkPath%,, 当前参数面板
            return
        }
    }
return

mainEscape:

return

mainClose:
    DetectHiddenWindows On ; 允许探测脚本中隐藏的主窗口。
    SetTitleMatchMode 2
    ;PostMessage, 0x111, 65307,,,内置变量.ahk - AutoHotkey ; 退出
    Process,Close,%当前参数面板%
    DllCall("FreeLibrary", "Ptr", hSci_edit)  ; 为了释放内存, 在使用 DLL 后需要进行卸载
    ExitApp
return



;===================下面是函数区==================
; 工具栏按钮生成函数

GuiAddToolbar(hWnd) {
    ImageList := IL_Create(7)
    IL_Add(ImageList, "shell32.dll", 16)
    IL_Add(ImageList, "shell32.dll", 96)
    IL_Add(ImageList, "shell32.dll", 28)
    IL_Add(ImageList, "shell32.dll", 24)
    IL_Add(ImageList, "shell32.dll", 174)
    IL_Add(ImageList, "shell32.dll", 138)
    IL_Add(ImageList, "shell32.dll", 142)
    hToolbar := Toolbar_Add(hWnd, "OnToolbar", "flat list ToolTips", ImageList)
    Buttons =
    (LTrim
        我的电脑
        计算器
        关闭电脑
        帮助关于
        整理代码
        运行
        调试
    )
    Toolbar_Insert(hToolbar, Buttons)
}

OnToolbar(hWnd, Event, Text, Pos, Id) {
    if (Event = "Hot") {
        return
    }
}


;根据目录及相关文件生成配置文件
生成配置文件(){
    ;第一步,遍历同目录的[命令]文件夹下的文件夹,得到配置文件cmd.ini的字段
    loop, Files, %A_WorkingDir%\命令\*, D
    {
        IniWrite,%A_Space%,cmd.ini,%A_LoopFileName%
    }
}

载入配置文件(){
    Gui,TreeView,tvcmd
    loop, Files, %A_WorkingDir%\命令\*, D
    {
        ;新建父项目,样式为字体加粗
        TV_Add(A_LoopFileName,,"Bold")
    }
    ;含子目录式循环读取所有文件
    loop, Files, %A_WorkingDir%\命令\*, R
    {
        StringTrimRight, 写入项, A_LoopFileName, 4
        ;SplitPath, A_LoopFileDir, OutFileName, OutDir, OutExtension, OutNameNoExt, OutDrive
        Loop, Parse, A_LoopFileDir , "\"
            目录名:=A_LoopField
        if (目录名!="命令"){
            ItemID = 0  ; 这样使得首次循环从树的顶部开始搜索.
            conut:=TV_GetCount()
            Loop,%conut%
                {
                ItemID := TV_GetNext(ItemID)  ; 把 "Full" 替换为 "Checked" 来找出所有含复选标记的项目.
                    if (ItemID){
                        TV_GetText(ItemText, ItemID)
                        if (ItemText==目录名)
                        TV_Add(写入项,ItemID)
                    }
                }  
    }
    }
}

窗口坐标更新(){
local 代码控件x坐标,代码控件y坐标,代码控件宽,代码控件高
WinGetPos, 面板坐标x, 面板坐标y,主窗口宽,主窗口高,ahk_id %主窗口句柄%
ControlGetPos , 代码控件x坐标, 代码控件y坐标, 代码控件宽, 代码控件高, ,ahk_id %hSci_edit%
面板坐标x:=面板坐标x+代码控件x坐标
面板坐标y:=面板坐标y+代码控件y坐标+代码控件高+2
面板宽:=代码控件宽
面板高:=主窗口高-代码控件高-46
}

更新参数面板位置(){
窗口坐标更新()
WinMove,ahk_pid %当前参数面板%,,%面板坐标x%,%面板坐标y%
}

转短路径(原路径){
local 短路径
Loop, Parse, 原路径, "\" ;转换为短路径
    {
        if (StrLen(A_LoopField)>8){
            路径:=Substr(A_LoopField,1,6) "~1\"
        }else{
            路径:=A_LoopField "\"
    }
        短路径:=短路径 路径
}
return 短路径
}

客户转屏幕坐标(r,客户坐标x="275",客户坐标y="470"){
local x,y
WinGetPos, x, y,,,ahk_id %主窗口句柄%
x:=x+客户坐标x
y:=y+客户坐标y
if (r=="x")
return x
if (r=="y")
return y
}

[Image: 1zvz6ah.jpg]
[Image: 28mogom.jpg]
[Image: 2mww0au.jpg]
[Image: wk0474.jpg]


百度zip包:https://pan.baidu.com/s/1ZhaDHpTOX75LwAPXMqTo2w

打印这项 推荐给朋友

Rainbow 屏幕键盘()
发布: feiyue - 2018-07-30 23 : 57 - 无回复


这是一个类似 WinXP 屏幕键盘的小工具,随便玩玩。Shy


代码:
/*
--------------------------------
  屏幕键盘() v1.5  By FeiYue

  这是一个类似 WinXP 屏幕键盘的小工具,

  写成函数形式,便于在其他脚本中调用。
--------------------------------
*/

#NoEnv
#SingleInstance force
Menu, Tray, Add
Menu, Tray, Add, 屏幕键盘
Menu, Tray, Default, 屏幕键盘
Menu, Tray, Click, 1
屏幕键盘:
屏幕键盘()
return

*F1::屏幕键盘()


屏幕键盘() {

  static NewName:={ "":"Space", Lock:"CapsLock", Bksp:"BS"
     , App:"AppsKey", Psc:"PrintScreen", Slk:"ScrollLock"
     , Brk:"Pause", Hm:"Home", Pup:"PgUp", Pdn:"PgDn"
     , "↑":"Up", "↓":"Down", "←":"Left", "→":"Right" }

  ; 键盘布局:[ 键名,宽度,右移间隔 ]

  s1:=[ ["Esc"],["F1",,23],["F2"],["F3"],["F4"],["F5",,15]
     ,["F6"],["F7"],["F8"],["F9",,15],["F10"],["F11"],["F12"]
     ,["Psc",,10],["Slk"],["Brk"] ]

  s2:=[ ["~ ``"],["! 1"],["@ 2"],["# 3"],["$ 4"],["% 5"],["^ 6"]
     ,["&& 7"],["* 8"],["( 9"],[") 0"],["_ -"],["+ ="],["Bksp",45]
     ,["Ins",,10],["Hm"],["Pup"] ]

  s3:=[ ["Tab",45],["q"],["w"],["e"],["r"],["t"],["y"]
     ,["u"],["i"],["o"],["p"],["{ ["],["} ]"],["| \"]
     ,["Del",,10],["End"],["Pdn"] ]

  s4:=[ ["Lock",60],["a"],["s"],["d"],["f"],["g"],["h"]
     ,["j"],["k"],["l"],[": `;"],[""" '"],["Enter",47] ]

  s5:=[ ["Shift",75],["z"],["x"],["c"],["v"],["b"]
     ,["n"],["m"],["< ,"],["> ."],["? /"],["Shift",64]
     ,["↑",,10+30+2] ]

  s6:=[ ["Ctrl",40],["Win",40],["Alt",40],["",167]
     ,["Alt",40],["Win",40],["App",40],["Ctrl",40]
     ,["←",,10],["↓"],["→"] ]

  Gui, OSK: Destroy
  Gui, OSK: +AlwaysOnTop +Owner +E0x08000000
  Gui, OSK: Font, s10, Verdana
  Gui, OSK: Margin, 10, 10
  Gui, OSK: Color, DDEEFF
  Loop, 6 {
    if (A_Index<=2)
      j=
    For i,v in s%A_Index%
    {
      w:=v.2 ? v.2 : 30, d:=v.3 ? v.3 : 2
      j:=j="" ? "xm" : i=1 ? "xm y+2" : "x+" d
      Gui, OSK: Add, Button, %j% w%w% h25 -Wrap gRunOSK, % v.1
    }
  }
  Gui, OSK: Show, NA, 屏幕键盘
  return

  OSKGuiClose:
  Gui, OSK: Destroy
  return

  RunOSK:
  k:=A_GuiControl
  if k in Shift,Ctrl,Win,Alt
  {
    v:=k="Win" ? "LWin" : k
    GuiControlGet, isEnabled, OSK: Enabled, %k%
    GuiControl, OSK: Disable%isEnabled%, %k%
    if (!isEnabled)
      SendInput, {Blind}{%v%}
    return
  }
  s:=InStr(k," ") ? SubStr(k,0) : k
  s:=(v:=NewName[s]) ? v : s, s:="{" s "}"
  For i,k in StrSplit("Shift,Ctrl,Win,Alt", ",")
  {
    GuiControlGet, isEnabled, OSK: Enabled, %k%
    if (!isEnabled)
    {
      GuiControl, OSK: Enable, %k%
      v:=k="Win" ? "LWin" : k
      s={%v% Down}%s%{%v% Up}
    }
  }
  SendInput, {Blind}%s%
  return
}

;

打印这项 推荐给朋友

Heart 多个热键任意切换同时终止前面的线程
发布: feiyue - 2018-07-06 21 : 57 - 无回复

以前对于这个问题讨论已不少了,我想到一个新思路,采用双进程,一个接受热键,一个专门执行。Smile

代码:
/*

多个热键任意切换同时终止前面的线程  By FeiYue

*/


#NoEnv
#NoTrayIcon
#SingleInstance off
if 0 = 0
  ok:="Main"
else
  ok:="Sub"
;-----------------------
DetectHiddenWindows, On
Gui, ok:Show, Hide, [%ok%]
Gui, ok:+Hwndmyid
WinGet, list, List, [%ok%] ahk_class AutoHotkeyGUI
Loop, % list {
  IfEqual, myid, % id:=list%A_Index%, Continue
  WinGet, pid, PID, ahk_id %id%
  WinClose, ahk_class AutoHotkey ahk_pid %pid%,, 3
  IfWinExist, ahk_id %id%
    Process, Close, %pid%
}
DetectHiddenWindows, Off
;-----------------------
if 0 = 0
{
  Menu, Tray, Icon
  For k,v in ["F1","F2","F3"]
    Hotkey, %v%, %v%
  return
}
if IsLabel(k:=%True%)
  Goto, %k%
return

ok() {
  static arg:=%True%
  if (arg="")
  {
    Run, %A_AhkPath% "%A_ScriptFullPath%" %A_ThisLabel%
    KeyWait, % RegExReplace(A_ThisHotkey,"\W+")
    Exit
  }
}


;========== 下面是自己的代码 ==========


F1:
ok()
Loop {
  Sleep, 100
  ToolTip, F1-%A_Index%
}
return

F2:
ok()
Loop {
  Sleep, 100
  ToolTip, F2-%A_Index%
}
return

F3:
ok()
ExitApp


;========== 脚本结束 ==========

;

打印这项 推荐给朋友

  使用 Ctrl+Alt+F12 锁定和解锁电脑
发布: feiyue - 2018-05-16 13 : 04 - 无回复

看到群里有人提问,简单写了一个实现代码,玩玩而已。Smile

代码:
;----------------------------------
;  使用 Ctrl+Alt+F12 锁定和解锁电脑
;----------------------------------

^!F12::hk()

hk(f=1) {
  static allkeys, usedkeys:="F12"
  if !allkeys
  {
    ; 过滤前三个重复的键,补充后面与小键盘冲突的键
    s:="|Alt|Control|Shift|*|Home|End|PgUp|PgDn|"
      . "Left|Right|Up|Down|Del|Ins|NumpadEnter|"
    Loop, 254 {
      k:=GetKeyName(Format("vk{:x}", A_Index))
      s.=k="" or InStr(s,"|" k "|") ? "" : k "|"
    }
    ; 替换一些按键为缩写形式
    For k,v in {Control:"Ctrl", Backspace:"BS"}
      s:=StrReplace(s,k,v)
    allkeys:=Trim(SubStr(s,InStr(s,"*")+1),"|")
  }
  f:=f ? "On":"Off"
  For i,k in StrSplit(allkeys,"|")
    if k not in %usedkeys%
      Hotkey, *%k%, DoLock, %f% UseErrorLevel
  Hotkey, *F12, UnLock, %f% UseErrorLevel
  BlockInput, MouseMove
  BlockInput, MouseMove%f%
  return

  DoLock:
  return

  UnLock:
  if GetKeyState("Alt","P")
  && GetKeyState("Ctrl","P")
    hk(0)
  return
}

打印这项 推荐给朋友

  如何将iframe嵌入GUI?
发布: mmmzq - 2018-01-10 14 : 18 - 无回复

创造Shell.Explorer ActiveX控件之后,我希望在浏览到指定网页的时候将网页中的某个iframe单独显示出来

代码:
iframeurl := ie.document.parentwindow.frames[0].document.url
ie.navigate(iframeurl)
都是一样的操作,ActiveX控件显示出来就会丢失某些style和script,导致按钮失效还有排版出问题,但是ComObjCreate("InternetExplorer.Application")就能正常显示内容

怎么破?

打印这项 推荐给朋友

  send发送的按键总是不按组合好的按键来
发布: tjuweige - 2017-12-13 22 : 34 - 回复 (1)

代码:
f7::Pause
lshift & WheelDown::
Loop,1
send,#^{right}
return
lshift & WheelUp::
loop,1
send,#^{Left}
return
脚本如上
一般情况下按下shift键在win10中左右切换桌面没有问题,但是偶尔0.1~0.2的几率吧,会出现发送win+left/right的情况,然后就会把窗口激活成左贴边或者右贴边(win10中本身有win+right/left的快捷键调整窗口打小),不知道是怎么回事,怎么解决,有人可以帮忙看一下吗?

打印这项 推荐给朋友

Rainbow AHK源代码加密器 v2.6
发布: feiyue - 2017-12-09 13 : 43 - 回复 (6)

这是AHK源代码加密工具,作为第一层加密,之后可以用Ahk2Exe编译为程序。
由于AHK官方支持开源,结果Ahk2Exe编译的程序(不使用mpress压缩),
在程序末尾明文保存了源代码,不利于发布私有成果。即使压缩、加壳也很容易
转存出来。这个工具可以使Ahk2Exe生成的程序被破解的源代码已加密。Shy

本来界面和说明是用中文的,只是最新版本在官网发布成英文的了,懒得改了,反正使用很容易,拖动一下就生成加密脚本了。

代码:
/*
;-------------------------------
  AHK source code Encryptor v2.6  By FeiYue

  1. This tool can encrypt the AHK script into a self decode script.

  2. Then you can use ahk2exe to compile the script into a program,
     combined with mpress.exe or upx.exe packers.
     Note: To compile the script, you must have a AutoHotkey.exe
     in the script directory.

  3. When you want to use the directory relative to the script(eg 001.jpg),
     Don't use A_ScriptDir, but use A_WorkingDir. It is recommended to backup
     the working directory to a variable at the beginning of the script,
     Then change the path to absolute path based on the variable (eg %dir%\001.jpg).

  4. When you want to Reload your own script, the built-in Reload command will fail,
     You can use Reload() function instead (it's added when encrypted).

;-------------------------------
*/

#NoEnv
#SingleInstance force
ListLines, Off
SetBatchLines, -1
Version = 2.6

fs=
(` %

Exec(str, Ahk="", arg="") {
  static MyFunc, base, ScriptName:=%True%
  s:=RegExReplace(str,"\s"), StrReplace(s,"u","",size)
  VarSetCapacity(str,(size+1)*4,0), s:=SubStr(s,InStr(s,"u")+1)
  Loop, Parse, s, u
    if (A_Index<=size)
      NumPut(A_LoopField, str, (A_Index-1)*4, "uint")
  ;-----------------------------
  Ahk:=Ahk ? Ahk : A_IsCompiled
    ? A_ScriptDir "\AutoHotkey.exe" : A_AhkPath
  IfNotExist, %Ahk%
  {
    MsgBox, 4096, Error!, `n`nCan't Find: %Ahk% !`n`n
    return, 0
  }
  if !MyFunc
  {
    x32:="5557565381EC3C0100008B9C24580100008BBC245C01000"
    . "08B433C01D88038500F85EE040000807801450F85E40400008"
    . "B4864BA8800000085C90F85C30400008B2C1001DD8B4D188B5"
    . "52085C90F849E04000031C08D3413EB118DB60000000083C00"
    . "139C10F84860400008B1486813C134765745075E9817C13047"
    . "26F634175DF8D04430345240FB7008D048303451C8B3085F60"
    . "F8457040000BD6500000001DEC74424505772697466896C245"
    . "88D6C2450C74424546546696C891C24896C2404FFD683EC088"
    . "944243CC744241000000000896C240CC744240800000000897"
    . "C2404C7042400000000FFD083EC14807C2450000F855804000"
    . "08D44247DBA73410000891C246689942489000000C744247D4"
    . "3726561C784248100000074655072C78424850000006F63657"
    . "3C684248B0000000089442404FFD683EC08894424448D44246"
    . "5891C24C7442465476C6F62C7442469616C416CC744246D6C6"
    . "F630089442404FFD683EC0889C5B9656500008D44245A66894"
    . "C2462891C24C744245A476C6F62C744245E616C4672C644246"
    . "40089442404FFD683EC08894424488D8424AE000000891C24C"
    . "78424AE00000043726561C78424B200000074654E61C78424B"
    . "60000006D656450C78424BA00000069706541C68424BE00000"
    . "00089442404FFD683EC08894424408D8424BF000000891C24C"
    . "78424BF000000436F6E6EC78424C30000006563744EC78424C"
    . "7000000616D6564C78424CB00000050697065C68424CF00000"
    . "00089442404FFD683EC088944244C8D442471891C24C744247"
    . "1436C6F73C74424756548616EC7442479646C650089442404F"
    . "FD683EC08894424388B842460010000C70424000000008D048"
    . "5040000008944243489442404FFD583EC0885C089C30F84DB0"
    . "20000C784248C0000000B000000C78424900000000D000000B"
    . "A0B000000C784249400000011000000C784249800000013000"
    . "00031C0EB0C89C283E2038B94948C00000069D28300000089C"
    . "183E10301C283C00183F86489948C8C00000075D88B8424600"
    . "1000085C00F84610200008B8C246001000031D289D683E6036"
    . "984B48C0000008300000001D08984B48C000000330497C1C80"
    . "883C00189049383C20139D175D48B44243483E804C70403000"
    . "000008B842454010000C744241C00000000C74424180000000"
    . "0C744241400000000C744241000000000C744240CFF000000C"
    . "744240800000000C7442404020000008904248B7C2440FFD78"
    . "3EC2083F8FF89C50F84CF0100008B842454010000C744241C0"
    . "0000000C744241800000000C744241400000000C7442410000"
    . "00000C744240CFF000000C744240800000000C744240402000"
    . "000890424FFD783EC2083F8FF89C60F848B0100008DBC24D00"
    . "0000031C0B918000000F3AB8D84249C000000C78424D000000"
    . "044000000C78424D400000000000000C744241C00000000C74"
    . "4241800000000894424248D8424D0000000C74424140000000"
    . "0C744241000000000C744240C00000000894424208B8424500"
    . "10000C744240800000000C704240000000089442404FF54244"
    . "483EC2885C00F85B70000008B7C244C892C24C744240400000"
    . "00089F8FFD083EC08892C248B6C243889E8FFD083EC0489F88"
    . "93424C744240400000000FFD083EC088D84248C000000895C2"
    . "404893424C7442410000000008944240C8B44243489442408F"
    . "F54243C83EC1489E8893424FFD083EC04891C24FF54244883E"
    . "C0431C081C43C0100005B5E5F5DC21400B8FEFFFFFF81C43C0"
    . "100005B5E5F5DC214008378600119D283E21083C278E92CFBF"
    . "FFF81C43C010000B8FFFFFFFF5B5E5F5DC214008B84249C000"
    . "0008B7C243889042489F8FFD083EC048B8424A000000089042"
    . "489F8FFD083EC04E91EFFFFFFB8FDFFFFFFEB9E31C0E9D4FDF"
    . "FFFB8FBFFFFFFEB90B8FCFFFFFFEB89892C24FF542438B8FAF"
    . "FFFFF83EC04E975FFFFFF9090"
    x64:="4157415641554154555756534881EC98010000B8FFFFFFF"
    . "F8BAC24000200004889D6418B503C48898C24E00100004D89C"
    . "44D89CE4C01C2803A500F852A040000807A01450F852004000"
    . "0448B4264B8880000004585C00F8529040000448B0C02B8FEF"
    . "FFFFF4D01E1418B4918418B512085C90F84F203000031C04D8"
    . "D0414EB0C4883C00139C10F86F2030000418B148041813C144"
    . "765745075E641817C1404726F634175DB418B5124498D04440"
    . "FB71410418B411C498D14948B1C0285DB0F84BA030000488D7"
    . "C247048B8577269746546696CB9650000004C01E366894C247"
    . "848894424704889FA4C89E1FFD34531C031C94989C548C7442"
    . "420000000004989F94C89F241FFD5807C247000B8FDFFFFFF0"
    . "F855303000048B843726561746550724C89E1488D9424B0000"
    . "00048898424B0000000B873410000C78424B80000006F63657"
    . "366898424BC000000C68424BE00000000FFD3488944245848B"
    . "8476C6F62616C416C4C89E1488D94249000000048898424900"
    . "00000C78424980000006C6F6300FFD3BA65650000488944245"
    . "048B8476C6F62616C46724C89E166899424880000004889842"
    . "480000000488D942480000000C684248A00000000FFD348894"
    . "4246048B84372656174654E614C89E148898424D000000048B"
    . "86D65645069706541488D9424D000000048898424D8000000C"
    . "68424E000000000FFD34889C748B8436F6E6E6563744E4C89E"
    . "148898424F000000048B8616D656450697065488D9424F0000"
    . "00048898424F8000000C684240001000000FFD34989C748B84"
    . "36C6F736548616E4C89E1488D9424A000000048898424A0000"
    . "000C78424A8000000646C6500FFD34989C48D04AD040000003"
    . "1C94C8B4424508944246C89C241FFD04885C04889C30F84360"
    . "20000C78424C00000000B000000C78424C40000000D000000B"
    . "A0B000000C78424C800000011000000C78424CC00000013000"
    . "00031C0EB0C89C283E2038B9494C000000069D28300000089C"
    . "183E10301C283C00183F86489948CC000000075D885ED0F84C"
    . "301000031D24889D183E10369848CC00000008300000001D08"
    . "9848CC000000041330496C1C80883C0018904934883C20139D"
    . "577D189E848C1E002C70403000000004531C048C7442438000"
    . "00000C744243000000000C74424280000000041B9FF000000C"
    . "744242000000000BA020000004889F1FFD74883F8FF4889C50"
    . "F844B0100004531C04889F148C744243800000000C74424300"
    . "0000000C74424280000000041B9FF000000C74424200000000"
    . "0BA02000000FFD74883F8FF4889C60F8418010000488DBC243"
    . "001000031C0B90C0000004531C94531C0488B9424E0010000F"
    . "348AB488D84241001000048C78424300100004400000048C74"
    . "424380000000048C744243000000000C744242800000000488"
    . "9442448488D842430010000C74424200000000048894424404"
    . "88B442458FFD085C0757531D24889E941FFD74889E941FFD43"
    . "1D24889F141FFD74C8D8C24C0000000448B44246C4889DA488"
    . "9F148C74424200000000041FFD54889F141FFD44889D9488B4"
    . "42460FFD031C04881C4980100005B5E5F5D415C415D415E415"
    . "FC3B8FEFFFFFFEBE5837A60014819C083E0104883C078E9C4F"
    . "BFFFF488B8C241001000041FFD4488B8C241801000041FFD4E"
    . "970FFFFFF31C0E96DFEFFFFB8FBFFFFFFEBA9B8FCFFFFFFEBA"
    . "24889E941FFD4B8FAFFFFFFEB959090"
    hex:=A_PtrSize=8 ? x64:x32
    VarSetCapacity(MyFunc, len:=StrLen(hex)//2)
    Loop, % len
      NumPut("0x" SubStr(hex,2*A_Index-1,2),MyFunc,A_Index-1,"uchar")
    DllCall("VirtualProtect","ptr",&MyFunc,"ptr",len,"uint",0x40,"ptr*",0)
    base:=DllCall("GetModuleHandle", "Str","Kernel32", "ptr")
    ScriptName:=ScriptName ? ScriptName : A_ScriptFullPath
  }
  Random, n, 1, 1000000
  name:="\\.\pipe\AHK" . A_TickCount . n
  cmd="%Ahk%" "%name%" "%ScriptName%" %arg%
  DllCall(&MyFunc, "AStr",cmd, "AStr",name
  , "ptr",base, "ptr",&str, "uint",size)
  return, 1
}

)

if 0>0
{
  file:=%True%
  IfExist, %file%
    Gosub, Encrypt
  ExitApp
}
Gui, +AlwaysOnTop +ToolWindow
Gui, Color, DDEEFF
Gui, Font, cRed s28
Gui, Add, Text,, Drag the AHK script here to Encrypt`n`n
Gui, Show,, AHK source code Encryptor v%Version%  -  By FeiYue
OnMessage(0x201, "LButton_Down")
LButton_Down() {
  SendMessage, 0xA1, 2
}
return

GuiClose:
ExitApp

GuiDropFiles:
Gui, +OwnDialogs
Loop, parse, A_GuiEvent, `n
{
  file:=A_LoopField
  MsgBox, 4100, Tip, Do you want to encrypt this file ?`n`n%file%
  IfMsgBox, Yes
    Gosub, Encrypt
  MsgBox, 4096, Tip, Encryption is completed !
}
return

Encrypt:
FileRead, s, %file%
s:= "`n;You can compile and set icons by using Ahk2Exe.exe`n"
  . "`n;If AutoHotkey.exe wants to change its name to abc.exe,"
  . " Please modify Ahk=%A_ScriptDir%\abc.exe`n"
  . "`n #NoEnv"
  . "`n #NoTrayIcon"
  . "`n #SingleInstance off"
  . "`n SetBatchLines, -1"
  . "`n if A_IsCompiled"
  . "`n {"
  . "`n   Ahk=%A_ScriptDir%\AutoHotkey.exe"
  . "`n   FileInstall, AutoHotkey.exe, %Ahk%"
  . "`n }"
  . "`n else Ahk="
  . "`n`ns=`n"
  . RegExReplace(Encode(s),".{1,60}","s.=""$0""`n")
  . "`n Exec(s, Ahk)"
  . "`n ExitApp`n"
  . fs
f:=RegExReplace(file,"\.[^.]+$") . "-encoded.ahk"
FileDelete, %f%
FileAppend, %s%, %f%
return

Encode(s) {
  static MyFunc
  if !MyFunc
  {
    x32:="5653BA0B00000031C083EC108B5C241C8B742420C704240"
    . "B000000C74424040D000000C744240811000000C744240C130"
    . "00000EB0889C283E2038B149469D28300000089C183E10301C"
    . "283C00183F86489148C75E031C085F6742B908D74260089C18"
    . "3E10369148C8300000001C289148C8B0C8383E901C1C10831C"
    . "A89148383C00139C675DA83C41031C05B5EC20800"
    x64:="4883EC1841B80B00000031C0C704240B000000C74424040"
    . "D000000C744240811000000C744240C13000000EB0E0F1F004"
    . "189C04183E003468B04844569C0830000004189C14183E1034"
    . "101C083C00183F8644689048C75D831C085D2743366904989C"
    . "1448B14814183E1034669048C830000004101C04689048C458"
    . "D4AFF41C1C1084531C8448904814883C00139C277CF31C0488"
    . "3C418C39090909090909090"
    hex:=A_PtrSize=8 ? x64:x32
    VarSetCapacity(MyFunc, len:=StrLen(hex)//2)
    Loop, % len
      NumPut("0x" SubStr(hex,2*A_Index-1,2),MyFunc,A_Index-1,"uchar")
    DllCall("VirtualProtect","ptr",&MyFunc,"ptr",len,"uint",0x40,"ptr*",0)
  }
  add=
  (%
;-----------------------
ListLines, Off
My_ScriptName:=%True%
Try Menu, Tray, Icon, %My_ScriptName%
Gui, SingleInstance_force:Show, Hide, [%My_ScriptName%]
Gui, SingleInstance_force:+HwndMy_guiid
DetectHiddenWindows, On
WinGet, My_list, List, [%My_ScriptName%] ahk_class AutoHotkeyGUI
Loop, % My_list {
  IfEqual, My_guiid, % My_id:=My_list%A_Index%, Continue
  WinGet, My_pid, PID, ahk_id %My_id%
  WinClose, ahk_class AutoHotkey ahk_pid %My_pid%
  WinWaitClose, ahk_id %My_id%
}
DetectHiddenWindows, Off
SetWorkingDir, % RegExReplace(My_ScriptName,"\\[^\\]*$")
;-----------------------
Reload() {
  static My_ScriptName:=%True%
  Try {
    if My_ScriptName=
      return
    else if InStr(My_ScriptName,".exe")
      Run, "%My_ScriptName%"
    else
      Run, "%A_AhkPath%" "%My_ScriptName%"
    ExitApp
  }
}
ListLines, On
;-----------------------
  )
  s:=add "`n" s "`nExitApp`n#SingleInstance off`n"
  s:=(A_IsUnicode ? chr(0xfeff) : chr(0xEF) chr(0xBB) chr(0xBF))
    . RegExReplace(s,"\R","`r`n") . "`t`t`t"
  size:=VarSetCapacity(s,-1)//4
  VarSetCapacity(str, size*11*(!!A_IsUnicode+1))
  DllCall(&MyFunc, "ptr",&s, "int",size)
  Loop, % size
    str.="u" . NumGet(s,(A_Index-1)*4,"uint")
  return, str
}

;======== The End ========

;

打印这项 推荐给朋友

  AHK多个脚本共享全局变量 v1.0
发布: feiyue - 2017-12-09 13 : 26 - 无回复

写了个简单的多脚本共享变量脚本,有需求的可以试试。

代码:
;---------------------------
;  AHK多个脚本共享全局变量 v1.0
;
;  作者:FeiYue
;
;  说明:这是简单的方法实现多脚本共享内存。
;        采用独立的全局变量管理进程,从而
;        使某个脚本重启或退出后不影响效果。
;---------------------------

#NoEnv


; 模仿第一个脚本,使用F1热键读取全局变量 a1
F1::
{
  ; 读取全局变量 a1 的值
  a1:=Global_getvar("a1")

  ; 修改全局变量 a1 的值,使其值加1
  a1++
  Global_setvar("a1", a1)

  ; 在鼠标的右上边显示提示
  MouseGetPos, x1, y1  
  ToolTip, 第一个脚本显示全局变量 a1=%a1%, x1+20, y1-20, 1
}
; 用定时器代替无限循环,从而两个热键可以同时运行
SetTimer,, 100
return


; 模仿第二个脚本,使用F2热键读取全局变量 a1
F2::
{
  ; 读取全局变量 a1 的值
  a2:=Global_getvar("a1")

  ; 在鼠标的右下边显示提示
  MouseGetPos, x2, y2
  ToolTip, 第二个脚本显示全局变量 a1=%a2%, x2+20, y2+20, 2
}
; 用定时器代替无限循环,从而两个热键可以同时运行
SetTimer,, 100
return


; 按Esc热键退出程序
Esc::ExitApp


;========== 下面是函数 ==========


; 获取全局变量的值
Global_getvar(var) {
  if !(var~="^\S{1,253}$")
    return
  if Global_createvar(var)
    ControlGetText, value
  return, value
}

; 修改全局变量的值
Global_setvar(var, value="") {
  if !(var~="^\S{1,253}$")
    return
  if Global_createvar(var)
    ControlSetText,, %value%
}

; 根据变量名称生成全局变量
Global_createvar(var) {
  DetectHiddenWindows, On
  IfWinExist, [Global][%var%]
    return, 1
  global DebugTip:="正在生成全局变量:" var " ——"
  ; 先启动全局变量管理进程
  IfWinNotExist, <<Global>>
  {
    s=
    (%
    #NoEnv
    #NoTrayIcon
    #SingleInstance force
    Menu, Tray, Icon, Shell32.dll, 19
    Menu, Tray, Tip, 全局变量管理进程
    DetectHiddenWindows, On
    IfWinExist, <<Global>>
      ExitApp
    Gui, Add, Edit, vMyEdit
    Gui, Show, Hide, <<Global>>
    index:=0
    return

    GuiClose:
    GuiControlGet, var,, MyEdit
    if (var!="")
    {
      GuiControl,, MyEdit
      index++
      Gui, var%index%:Add, Text, w100 h100
      Gui, var%index%:Show, Hide, [Global][%var%]
    }
    return
    )
    Exec(s)
  }
  WinWait, <<Global>>,, 10
  if !ErrorLevel
  {
    ControlSetText,, %var%
    WinClose
    WinWait, [Global][%var%],, 10
  }
  return, !ErrorLevel
}

; 动态运行AHK代码
Exec(s, Ahk="", arg="") {
  s:=RegExReplace(s, "\R", "`r`n")
  Ahk:=Ahk ? Ahk : A_AhkPath
  IfNotExist, %Ahk%
  {
    MsgBox, 4096, 错误, 找不到AHK主程序:%AHK% !
    return
  }
  Try {
    exec:=ComObjCreate("WScript.Shell").Exec(Ahk . " /r * " . arg)
    exec.StdIn.Write(s)
    exec.StdIn.Close()
  }
  Catch {
    s:="`r`nFileDelete, %A_ScriptFullPath%`r`n" . s
    f:=A_Temp "\~test1.tmp"
    FileDelete, %f%
    FileAppend, %s%, %f%
    Run, %Ahk% /r "%f%" %arg%
  }
}


;========== 脚本结束 ==========

;

打印这项 推荐给朋友

  那位大神可以写个剑三的按键,剑三现在遮屏了AHK。
发布: wsdsjlgg - 2017-09-27 12 : 10 - 无回复

那位大神可以写个剑三的按键,剑三现在遮屏了AHK。
但是按键精灵还可以用,这不公平啊,我们AHK怎么能输给按键精灵。

打印这项 推荐给朋友

Rainbow 解决AHK的一个小bug:热字符串不定时失效的问题
发布: moonhuahua - 2017-09-26 10 : 16 - 回复 (1)

AHK的热字符串不定时失效的问题,困扰许久(有大神说是AHK的问题)
曲线解决如下:
建议单独建立个ahk脚本放热字符串
以下代码以;右边的 ' 为例(就是回车左边的那个键)

代码:
Process, Priority,,high            ;脚本高优先级
#NoTrayIcon                         ;隐藏托盘图标
#Persistent                        ;让脚本持久运行(关闭或ExitApp)
#SingleInstance Force                ;跳过对话框并自动替换旧实例
#WinActivateForce                    ;强制激活窗口
SetBatchLines -1                    ;脚本全速执行
CoordMode Menu Window                ;坐标相对活动窗口
SendMode Input                        ;更速度和可靠方式发送键盘点击
SetTitleMatchMode RegEx            ;窗口标题正则匹配    ;SetTitleMatchMode 2;窗口标题模糊匹配

global xzhhh := 1
Sleep 5000
global xzhhh := 0
return

~'::
Reload
return

#if xzhhh=1
/*
我的快捷替换短语>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*/
;【*】 的作用是不用输入终止符即自动替换
;=======================================================
;【ad*----地址类】
:*:adthl::
    sendinput   {BackSpace}{raw}厦门市思明
return
;=======================================================
;【em*----邮箱类】
:*:emqq::        ;QQ邮箱
    sendinput   {BackSpace}{raw}28578
return
;=======================================================
;【tel*----电话类】
:*:telhwz::    
    sendinput   {BackSpace}{raw}韩,181
return
;=======================================================
;【-*----日期类】
:*:-=::       ;今天,20160602
    sendinput  {BackSpace}%A_YYYY%%A_MM%%A_DD%
return
:*:--::       ;今天,2016-06-22
    sendinput  {BackSpace}%A_YYYY%-%A_MM%-%A_DD%
return
:*:-0::       ;今天,2016.06.22
    sendinput  {BackSpace}%A_YYYY%.%A_MM%.%A_DD%
return
;=======================================================
;【**----名称类】
:*:lf::       ;联发集团有限公司
    sendinput  {BackSpace}联发集团有限公司
return

#if
自己使用没问题,欢迎大家测试
自己扩展时注意要加 {BackSpace},否则会多个'符号

打印这项 推荐给朋友


联系我们 | Autohotkey 中文站 | 回到顶部 | 回到正文区 | 精简(归档)模式 | RSS 聚合