这段代码实现了在程序中的 Edit 控件(例如记事本或其他支持标准编辑框的应用程序)获取选中文本的功能。

 

/*
  获取程序Edit框选中光标位置字符串。自测!
  不保证全部有效,测试Notepad、EmEditor有效!
    此方法在Notepad++是以字节数来计算,所以失效
*/
string=
(
赵客缦胡缨,吴钩霜雪明。
银鞍照白马,飒沓如流星。
十步杀一人,千里不留行。
事了拂衣去,深藏身与名。
闲过信陵饮,脱剑膝前横。
将炙啖朱亥,持觞劝侯嬴。
三杯吐然诺,五岳倒为轻。
眼花耳热后,意气素霓生。
救赵挥金槌,邯郸先震惊。
)
Gui,Destroy
Gui,Font,s14
Gui,Add,Edit,HWNDEditBox,% string
Gui,Show
;;光标选取Edit框内字符按F1获取
F1::
MouseGetPos, , , id, control
ControlGet, HWND, Hwnd ,, %Control%, ahk_id %id%
; MsgBox % id "|" control "|" HWND
EditGetSelectedText(HWND, string)
MsgBox % string
Return

;获取Edit框选择的字符串
EditGetSelectedText(ctl, ByRef string){
  start :=0,end :=0
  SendMessage, EM_GETSEL:=0x00B0, &start, &end,, ahk_id %ctl%
  start := NumGet(start, 0, "UInt"), end := NumGet(end, 0, "UInt")
  ControlGetText, string , , ahk_id %ctl%
  string:=SubStr(string,start+1,Abs(end-start))
  Return string
}
; ====================== 另一个示例参考 ==========================
MouseGetPos, , , id, control
ControlGet, HWND, Hwnd ,, %Control%, ahk_id %id%
; MsgBox % id "|" control "|" HWND
EM_GETSEL(HWND, Start, End) 
MsgBox % Start "|" End
Return

EM_GETSEL(HWND, ByRef Start, ByRef End) {	;--取得光标位置; Start  -  receives the start of the current selection
; End    -  receives the end of the current selection
   ; EM_GETSEL = 0x00B0 -> msdn.microsoft.com/en-us/library/bb761598(v=vs.85).aspx
   Start := End := 0
   DllCall("User32.dll\SendMessage", "Ptr", HWND, "UInt", 0x00B0, "UIntP", Start, "UIntP", End, "Ptr")
   Start++, End++
   Return True
}

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。