; 以下函数来自AHK-Rare,测试都失效了。留个备份
; 如果在编辑控件中选择了文本,则返回布尔值
Edit_TextIsSelected(Control="", WinTitle="") {
Edit_Standard_Params(Control, WinTitle)
return Edit_GetSelection(start, end, Control, WinTitle) and (start!=end)
}
; 在编辑控件中获取选定的文本
Edit_GetSelection(ByRef start, ByRef end, Control="", WinTitle="") {
Edit_Standard_Params(Control, WinTitle)
VarSetCapacity(start, 4), VarSetCapacity(end, 4)
SendMessage, 0xB0, &start, &end, %Control%, %WinTitle% ; EM_GETSEL
if (ErrorLevel="FAIL")
return false
start := NumGet(start), end := NumGet(end)
return true
}
; 在编辑控件中选择文本
Edit_Select(start=0, end=-1, Control="", WinTitle="") {
; Selects text in a text box, given absolute character positions (starting at 0.)
; start: Starting character offset, or -1 to deselect.
; end: Ending character offset, or -1 for "end of text."
Edit_Standard_Params(Control, WinTitle)
SendMessage, 0xB1, start, end, %Control%, %WinTitle% ; EM_SETSEL
return (ErrorLevel != "FAIL")
}
; 在编辑控件中选择一行
Edit_SelectLine(line=0, include_newline=false, Control="", WinTitle="") {
; Selects a line of text.
; line: One-based line number, or 0 to select the current line.
; include_newline: Whether to also select the line terminator (`r`n).
Edit_Standard_Params(Control, WinTitle)
ControlGet, hwnd, Hwnd,, %Control%, %WinTitle%
if (!WinExist("ahk_id " hwnd))
return false
if (line<1)
ControlGet, line, CurrentLine
SendMessage, 0xBB, line-1, 0 ; EM_LINEINDEX
offset := ErrorLevel
SendMessage, 0xC1, offset, 0 ; EM_LINELENGTH
lineLen := ErrorLevel
if (include_newline) {
WinGetClass, class
lineLen += (class="Edit") ? 2 : 1 ; `r`n : `n
}
; Select the line.
SendMessage, 0xB1, offset, offset+lineLen ; EM_SETSEL
return (ErrorLevel != "FAIL")
}
; 在编辑控件中删除一行
Edit_DeleteLine(line=0, Control="", WinTitle="") {
; Deletes a line of text.
; line: One-based line number, or 0 to delete current line.
Edit_Standard_Params(Control, WinTitle)
; Select the line.
if (Edit_SelectLine(line, true, Control, WinTitle))
{ ; Delete it.
ControlSend, %Control%, {Delete}, %WinTitle%
return true
}
return false
}
; 这些是用于编辑控件的辅助函数
Edit_Standard_Params(ByRef Control, ByRef WinTitle) {
if (Control = "A" && WinTitle="") { ; Control is "A", use focused control.
ControlGetFocus, Control, A
WinTitle = A
} else if (Control+0!="" && WinTitle="") { ; Control is numeric, assume its a ahk_id.
WinTitle := "ahk_id " . Control
Control := ""
}
}
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。

评论(0)