返回列表 回复 发帖

窗口手术师 v1.0 Au3源码

窗口手术师是一款小巧的控制窗口的好工具。它不但可以轻松复制窗口的文字、标题,还能获取窗口内控件的文本。除了简单的查看功能,它还可以对窗口进行完全的修改——修改标题、改变透明度、改变窗口状态(隐藏、显示等等)、将窗口置顶、修改窗口内控件的文字……总之,在窗口手术师的刀下,你可以随心所欲地控制窗口。

与窗口手术师类似的软件还有CopyText、Pickup Window,但功能却不如窗口手术师强大,也远不如窗口手术师易用。
By 一点笔记

  1. #include <GUIConstants.au3>
  2. #Include <GuiCombo.au3>
  3. #include <Constants.au3>
  4. #include <Array.au3>
  5. #NoTrayIcon
  6. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 变量声明
  7. Dim $Mode = 2, $Ver = "v1.0"
  8. Dim $aboutwin,$email,$Label_03,$Edit1,$send,$aboutwinClose,$oconted

  9. Global Const $WM_NOTIFY = 0x004E
  10. Global Const $WM_HSCROLL = 0x114
  11. Global Const $NM_FIRST = 0
  12. Global Const $NM_CLICK = ($NM_FIRST - 2)
  13. Global Const $NM_DBLCLK = ($NM_FIRST - 3)
  14. Global Const $NM_RCLICK = ($NM_FIRST - 5)
  15. Global Const $TB_LINEUP               = 0; //ラインアップ
  16. Global Const $TB_LINEDOWN             = 1; //ラインダウン
  17. Global Const $TB_PAGEUP               = 2; //ページアップ
  18. Global Const $TB_PAGEDOWN             = 3; //ページダウン
  19. Global Const $TB_THUMBPOSITION        = 4; //マウスでスライダーを移動した
  20. Global Const $TB_THUMBTRACK           = 5; //マウスでスライダーをドラグしている
  21. Global Const $TB_TOP                  = 6; //[Home]キーによる最大値への移動
  22. Global Const $TB_BOTTOM               = 7; //[End]キーによる最小値への移動
  23. Global Const $TB_ENDTRACK             = 8; //スライダーの移動が完了した
  24. Global $list[22]
  25. $list[0] = "「开始」菜单"
  26. $list[1] = "Default IME"
  27. $list[2] = "M"
  28. $list[3] = "SysFader"
  29. $list[4] = "MCI command handling window"
  30. $list[5] = "DirectorExtension"
  31. $list[6] = "CiceroUIWndFrame"
  32. $list[7] = "TF_FloatingLangBar_WndTitle"
  33. $list[8] = "NetDDE Agent"
  34. $list[9] = "TrayIcon"
  35. $list[10] = "CAsyncSocketEx Helper Window"
  36. $list[11] = "Socket Notification Sink"
  37. $list[12] = "Logitech GetMessage Hook"
  38. $list[13] = "LogiTrayMgrWnd"
  39. $list[14] = "Logitech E/M Executive"
  40. $list[15] = "Connections Tray"
  41. $list[16] = "电表"
  42. $list[17] = "Program Manager"
  43. $list[18] = "?汐杵湩圠湩潤wж"
  44. $list[19] = "Acrobat IEHelper"
  45. $list[20] = "MS_WebcheckMonitor"
  46. $list[21] = "窗口手术师 " & $Ver
  47. $blist = StringSplit(IniRead("config.ini","config","black",""),"|")
  48. If Not @error Then
  49. ReDim $list[22+$blist[0]]
  50. For $i = 1 to $blist[0]
  51.   $list[21+$i] = $blist[$i]
  52. Next
  53. EndIf
  54. If IniRead("config.ini","config","isshowmore","false") = "true" Then
  55. $height = 356
  56. $text = " 简化↑"
  57. Else
  58. $height = 81
  59. $text = " 详细↓"
  60. EndIf
  61. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 脚本开始
  62. Opt("GUIOnEventMode", 1)
  63. Opt("TrayOnEventMode",1)
  64. Opt("WinTitleMatchMode",4)
  65. Opt("TrayMenuMode",1)
  66. Opt('GUIResizeMode', 802)
  67. AutoItSetOption ( "RunErrorsFatal",0)
  68. TraySetState()
  69. TraySetToolTip ( "窗口手术师 " & $Ver )
  70. Opt("TrayIconHide",1)
  71. TraySetOnEvent ($TRAY_EVENT_PRIMARYDOWN, "showwin" )
  72. $Parent = GUICreate("") ;用于隐藏任务栏图标
  73. $main = GUICreate("窗口手术师 " & $Ver, 217,$height,@DesktopWidth - 244,24, -1, BitOR($WS_EX_TOPMOST,$WS_EX_WINDOWEDGE),$Parent)
  74. GUISetOnEvent($GUI_EVENT_MINIMIZE, "totray")
  75. GUISetOnEvent($GUI_EVENT_CLOSE, "exitprograme")
  76. GUICtrlCreateLabel("窗口标题:", 6, 6, 64, 17)
  77. $win_titles = GUICtrlCreateCombo("", 6, 24, 205, 25, BitOR($CBS_DROPDOWNLIST,$CBS_AUTOHSCROLL,$WS_HSCROLL,$WS_VSCROLL))
  78. $p_follow = GUICtrlCreateCheckbox("跟随鼠标", 139, 4, 74, 17)
  79. $p_exit = GUICtrlCreateButton("退出", 165, 53, 46, 22, $BS_FLAT)
  80. $win_more = GUICtrlCreateButton($text, 5, 53, 46, 22, $BS_FLAT)
  81. $p_tools = GUICtrlCreateButton("工具", 114, 53, 46, 22, $BS_FLAT)
  82. GUICtrlCreateGroup("窗口信息", 5, 84, 207, 169)
  83. GUICtrlCreateLabel("标题[", 12, 106, 31, 17)
  84. $win_title = GUICtrlCreateInput("", 13, 124, 191, 21, BitOR($ES_AUTOHSCROLL,$ES_READONLY))
  85. $win_change_title = GUICtrlCreateLabel("修改", 43, 106, 28, 17)
  86. GUICtrlSetColor(-1, 0x0000FF)
  87. GUICtrlSetCursor ($win_change_title, 0)
  88. $win_copy_title = GUICtrlCreateLabel("复制", 77, 106, 28, 17)
  89. GUICtrlSetColor(-1, 0x0000FF)
  90. GUICtrlSetCursor ($win_copy_title, 0)
  91. GUICtrlCreateLabel("]:", 102, 106, 10, 17)
  92. GUICtrlCreateLabel(",", 70, 106, 7, 17)
  93. $win_change_chan = GUICtrlCreateLabel("取消", 178, 106, 28, 17)
  94. GUICtrlSetState (-1,$GUI_HIDE)
  95. GUICtrlSetColor(-1, 0x0000FF)
  96. GUICtrlSetCursor ($win_change_chan, 0)
  97. $win_change_ok = GUICtrlCreateLabel("保存", 148, 106, 24, 17)
  98. GUICtrlSetState (-1,$GUI_HIDE)
  99. GUICtrlSetColor(-1, 0x0000FF)
  100. GUICtrlSetCursor ($win_change_ok, 0)
  101. GUICtrlCreateLabel("状态:", 12, 156, 31, 17)
  102. $win_trans = GUICtrlCreateSlider(111, 150, 98, 20)
  103. GUICtrlSetLimit ($win_trans,255)
  104. GUICtrlSetData($win_trans, 255)
  105. GUICtrlCreateLabel("窗口文字[", 13, 180, 55, 17)
  106. $win_copy_text = GUICtrlCreateLabel("复制", 68, 180, 28, 17)
  107. GUICtrlSetColor(-1, 0x0000FF)
  108. GUICtrlSetCursor ($win_copy_text, 0)
  109. GUICtrlCreateLabel("]:", 92, 180, 10, 17)
  110. $win_state = GUICtrlCreateCombo("", 44, 151, 65, 25, BitOR($CBS_DROPDOWNLIST,$CBS_AUTOHSCROLL))
  111. GUICtrlSetData(-1, "隐藏|显示|禁用|可用|最大化|最小化")
  112. $win_text = GUICtrlCreateEdit("", 13, 196, 192, 21, BitOR($ES_READONLY,$ES_WANTRETURN))
  113. $win_close = GUICtrlCreateButton("关闭窗口", 141, 223, 64, 22, $BS_FLAT)
  114. $win_on_top = GUICtrlCreateButton("窗口置顶", 72, 223, 64, 22, $BS_FLAT)
  115. GUICtrlCreateGroup("", -99, -99, 1, 1)
  116. GUICtrlCreateGroup("控件信息", 5, 254, 207, 97)
  117. GUICtrlCreateLabel("控件ID:", 12, 278, 42, 17)
  118. $ctrl_ids = GUICtrlCreateCombo("", 56, 273, 148, 25,BitOR($CBS_DROPDOWNLIST,$CBS_AUTOHSCROLL,$WS_HSCROLL,$WS_VSCROLL))
  119. GUICtrlCreateLabel("控件文字[", 12, 302, 55, 17)
  120. $ctrl_change_text = GUICtrlCreateLabel("修改", 67, 302, 24, 17)
  121. GUICtrlSetColor(-1, 0x0000FF)
  122. GUICtrlSetCursor ($ctrl_change_text, 0)
  123. GUICtrlCreateLabel(",", 92, 302, 7, 17)
  124. $ctrl_copy_text = GUICtrlCreateLabel("复制", 98, 302, 28, 17)
  125. GUICtrlSetColor(-1, 0x0000FF)
  126. GUICtrlSetCursor ($ctrl_copy_text, 0)
  127. GUICtrlCreateLabel("]:", 123, 302, 10, 17)
  128. $ctrl_change_ok = GUICtrlCreateLabel("保存", 148, 302, 24, 17)
  129. GUICtrlSetState (-1,$GUI_HIDE)
  130. GUICtrlSetColor(-1, 0x0000FF)
  131. GUICtrlSetCursor ($ctrl_change_ok, 0)
  132. $ctrl_text = GUICtrlCreateInput("", 12, 321, 192, 21, BitOR($ES_AUTOHSCROLL,$ES_READONLY))
  133. $ctrl_change_chan = GUICtrlCreateLabel("取消", 178, 302, 28, 17)
  134. GUICtrlSetColor(-1, 0x0000FF)
  135. GUICtrlSetState (-1,$GUI_HIDE)
  136. GUICtrlSetCursor ($ctrl_change_chan, 0)
  137. GUICtrlCreateGroup("", -99, -99, 1, 1)
  138. ;;;;;; Menu
  139. $ToolsDummy   = GUICtrlCreateDummy()
  140. $ToolsContext = GUICtrlCreateContextMenu($ToolsDummy)
  141. ;$p_view_keys = GUICtrlCreateMenuItem("设置热键", $ToolsContext)
  142. ;$p_black_wins = GUICtrlCreateMenuItem("窗口过滤", $ToolsContext)
  143. $p_about = GUICtrlCreateMenuItem("关于/Bug上报", $ToolsContext)
  144. GUICtrlCreateMenuItem("", $ToolsContext)
  145. $p_visti = GUICtrlCreateMenuItem("访问网站...", $ToolsContext)
  146. $p_check_new = GUICtrlCreateMenuItem("检查更新...", $ToolsContext)
  147. GUICtrlSetOnEvent ($win_titles,"load_title_for_ctrl")
  148. GUICtrlSetOnEvent ($win_more,"show_more")
  149. GUICtrlSetOnEvent ($p_exit,"exitprograme")
  150. GUICtrlSetOnEvent ($win_close,"close_win")
  151. GUICtrlSetOnEvent ($win_on_top,"on_top")
  152. GUICtrlSetOnEvent ($win_state,"set_state")
  153. GUICtrlSetOnEvent ($win_copy_title,"copy_text")
  154. GUICtrlSetOnEvent ($win_copy_text,"copy_text")
  155. GUICtrlSetOnEvent ($ctrl_copy_text,"copy_text")
  156. GUICtrlSetOnEvent ($win_change_title,"change_title")
  157. GUICtrlSetOnEvent ($win_change_ok,"change_title")
  158. GUICtrlSetOnEvent ($win_change_chan,"change_title")
  159. GUICtrlSetOnEvent ($ctrl_ids,"load_ctrl")
  160. GUICtrlSetOnEvent ($ctrl_change_text,"change_text")
  161. GUICtrlSetOnEvent ($ctrl_change_ok,"change_text")
  162. GUICtrlSetOnEvent ($ctrl_change_chan,"change_text")
  163. GUICtrlSetOnEvent ($p_follow,"change_mode")
  164. GUICtrlSetOnEvent ($p_tools,"show_tool_menu")
  165. GUICtrlSetOnEvent ($p_about,"show_about")
  166. GUICtrlSetOnEvent ($p_visti,"vistblog")
  167. GUICtrlSetOnEvent ($p_check_new,"Update")
  168. If IniRead("config.ini","config","mouse","false") = "true" Then
  169. $Mode = 2
  170. GUICtrlSetState ($p_follow  ,$GUI_CHECKED)
  171. Else
  172. $Mode = 1
  173. GUICtrlSetState ($p_follow  ,$GUI_UNCHECKED)
  174. EndIf
  175. $otrans = GUICtrlRead($win_trans)
  176. $owin = GUICtrlRead($win_titles)
  177. $ohandle = WinGetHandle ($owin)
  178. Dim $octrlid,$ohwins,$to_select_ctrl
  179. Global $owins = load_win_titles(IniRead("config.ini","config","lastwin",""))
  180. load_title()
  181. load_ctrls()
  182. load_text()
  183. Global $ostate = load_state()
  184. $octrlid = GUICtrlRead($ctrl_ids)
  185. GUIRegisterMsg($WM_NOTIFY, "WM_Notify_Events")
  186. GUIRegisterMsg($WM_HSCROLL, "MY_WM_HSCROLL")
  187. GUISetState(@SW_SHOW)

  188. While 1
  189. Switch $Mode
  190.   Case 1
  191.    Sleep(100)
  192.    $nwins = _GetWins ()
  193.    $owin = WinGetTitle($ohandle)
  194.    If ($owin <> GUICtrlRead($win_title) And $owin <> GUICtrlRead($win_titles)) Or (UBound($owins) <> UBound($nwins) And _CompareArray($nwins,$owins) =0 ) Then
  195.     load_win_titles($owin)
  196.     load_title()
  197.     load_ctrls()
  198.     load_text()
  199.     load_state()
  200.     $owins = $nwins
  201.    EndIf
  202.   Case 2
  203.    Sleep(60)
  204.    $nowtitle = WinGetTitle("active")
  205.    If ($nowtitle ="" Or _IsIn($nowtitle) = 1 Or $nowtitle = $list[21]) And WinExists(GUICtrlRead($win_titles)) =0 Then
  206.     load_win_titles()
  207.     load_title()
  208.     load_state()
  209.     load_ctrls()
  210.     load_text()
  211.    ElseIf $nowtitle <> $list[21] Then
  212.     If _IsIn($nowtitle) = 1 Or $nowtitle ="" Then
  213.      load_text()
  214.     ElseIf _IsIn($nowtitle) = 0 And $nowtitle <>"" And ($nowtitle <> GUICtrlRead($win_title) And $nowtitle <> GUICtrlRead($win_titles)) And $nowtitle <> $list[21] Then
  215.      load_win_titles($nowtitle)
  216.      load_title()
  217.      load_state()
  218.      load_ctrls()
  219.      load_text()
  220.     Else
  221.      load_text()
  222.     EndIf
  223.    Else
  224.     load_text()
  225.    EndIf
  226.   Case 3
  227.    ;;;该部分代码已隐藏
  228.    change_mode()
  229.   Case 4
  230.    ;;;该部分代码已隐藏
  231.    change_mode()
  232. EndSwitch
  233. WEnd
  234. Func Hot_Key()
  235. Switch @HotKeyPressed
  236.   Case ""
  237. EndSwitch
  238. EndFunc
  239. Func show_about()
  240. If WinExists("关于") = 1 Then
  241.   WinActivate("关于")
  242. Else
  243.   $aboutwin = GuiCreate("关于", 215, 190,-1, -1,BitOR($WS_SYSMENU,$WS_CAPTION,$WS_POPUPWINDOW,$WS_BORDER),-1,$main)
  244.   GUISetOnEvent($GUI_EVENT_CLOSE, "exitprograme")
  245.   GuiCtrlCreateLabel("版本: " & $Ver, 5, 5, 105, 15)
  246.   GuiCtrlCreateLabel("E-mail: ", 5, 20, 40, 15)
  247.   $email= GuiCtrlCreateLabel("zcbenz@gmail.com", 46, 20, 100, 15,$SS_NOTIFY)
  248.   GUICtrlSetColor(-1,0x0000ff)
  249.   GUICtrlSetCursor(-1, 0)
  250.   GuiCtrlCreateLabel("Blog: ", 5, 35, 40, 15)
  251.   $Label_03 = GuiCtrlCreateLabel("http://my.opera.com/z8519312", 35,35, 170, 15,$SS_NOTIFY)
  252.   GUICtrlSetColor($Label_03,0x0000ff)
  253.   GUICtrlSetCursor(-1, 0)
  254.   GUICtrlCreateLabel("您可以将您的意见通过下面的输入框发送给我:", 5, 64, 207, 25)
  255.   $Edit1 = GUICtrlCreateEdit("", 5, 92, 204, 61,$ES_AUTOVSCROLL+$ES_MULTILINE+$ES_WANTRETURN)
  256.   $send = GUICtrlCreateButton("发送", 120, 160, 43, 25,$BS_FLAT)
  257.   $aboutwinClose = GUICtrlCreateButton("关闭", 168, 160, 43, 25,$BS_FLAT)
  258.   GUICtrlSetOnEvent($send,"sendmsg")
  259.   GUICtrlSetOnEvent($email, "openemail")
  260.   GUICtrlSetOnEvent($aboutwinClose, "exitprograme")
  261.   GUICtrlSetOnEvent( $Label_03, "vistblog")
  262.   GUISetState(@SW_SHOW,$aboutwin )
  263. EndIf
  264. EndFunc
  265. Func openemail()
  266. ShellExecute("mailto:zcbenz@gmail.com")
  267. EndFunc
  268. Func vistblog()
  269. ShellExecute("http://my.opera.com/z8519312")
  270. EndFunc
  271. Func sendmsg()
  272. $Mode =4
  273. EndFunc
  274. Func show_tool_menu()
  275. ShowMenu($main, $p_tools, $ToolsContext)
  276. EndFunc
  277. Func change_mode()
  278. If GUICtrlRead($p_follow) =1 Then
  279.   $Mode = 2
  280. Else
  281.   $Mode = 1
  282. EndIf
  283. EndFunc
  284. Func load_ctrl()
  285. $ctrlid = GUICtrlRead($ctrl_ids)
  286. If $octrlid <> $ctrlid Then
  287.   _CtrlSet($ctrl_text,ControlGetText(GUICtrlRead($win_titles),"",$ctrlid) )
  288.   $octrlid = $ctrlid
  289. EndIf
  290. EndFunc
  291. Func change_text()
  292. $wintitle = GUICtrlRead($win_titles)
  293. Switch @GUI_CtrlId
  294.   Case $ctrl_change_text
  295.    GUICtrlSetStyle ($ctrl_text,$ES_AUTOHSCROLL)
  296.    GUIctrlSetState($ctrl_change_chan,$GUI_SHOW)
  297.    GUIctrlSetState($ctrl_change_text,$GUI_DISABLE)
  298.    GUIctrlSetState($ctrl_change_ok,$GUI_SHOW)
  299.   Case $ctrl_change_ok
  300.    $owin = WinGetTitle($ohandle)
  301.    ControlSetText  ($owin,"",GUICtrlRead($ctrl_ids),GUICtrlRead($ctrl_text))
  302.    ;load_win_titles(GUICtrlRead($win_title))
  303.    GUICtrlSetStyle ($ctrl_text,BitOR($ES_AUTOHSCROLL,$ES_READONLY))
  304.    GUIctrlSetState($ctrl_change_chan,$GUI_HIDE)
  305.    GUIctrlSetState($ctrl_change_text,$GUI_ENABLE)
  306.    GUIctrlSetState($ctrl_change_ok,$GUI_HIDE)
  307.   Case $ctrl_change_chan
  308.    _CtrlSet ($ctrl_text,ControlGetText ($wintitle,"",GUICtrlRead($ctrl_ids)))
  309.    GUICtrlSetStyle ($ctrl_text,BitOR($ES_AUTOHSCROLL,$ES_READONLY))
  310.    GUIctrlSetState($ctrl_change_chan,$GUI_HIDE)
  311.    GUIctrlSetState($ctrl_change_text,$GUI_ENABLE)
  312.    GUIctrlSetState($ctrl_change_ok,$GUI_HIDE)
  313. EndSwitch
  314. EndFunc
  315. Func change_title()
  316. $wintitle = GUICtrlRead($win_titles)
  317. Switch @GUI_CtrlId
  318.   Case $win_change_title
  319.    GUICtrlSetStyle ($win_title,$ES_AUTOHSCROLL)
  320.    GUIctrlSetState($win_change_chan,$GUI_SHOW)
  321.    GUIctrlSetState($win_change_title,$GUI_DISABLE)
  322.    GUIctrlSetState($win_change_ok,$GUI_SHOW)
  323.   Case $win_change_ok
  324.    $owin = WinGetTitle($ohandle)
  325.    WinSetTitle ($owin,"",GUICtrlRead($win_title))
  326.    load_win_titles(GUICtrlRead($win_title))
  327.    GUICtrlSetStyle ($win_title,BitOR($ES_AUTOHSCROLL,$ES_READONLY))
  328.    GUIctrlSetState($win_change_chan,$GUI_HIDE)
  329.    GUIctrlSetState($win_change_title,$GUI_ENABLE)
  330.    GUIctrlSetState($win_change_ok,$GUI_HIDE)
  331.   Case $win_change_chan
  332.    _CtrlSet ($win_title,$wintitle)
  333.    GUICtrlSetStyle ($win_title,BitOR($ES_AUTOHSCROLL,$ES_READONLY))
  334.    GUIctrlSetState($win_change_chan,$GUI_HIDE)
  335.    GUIctrlSetState($win_change_title,$GUI_ENABLE)
  336.    GUIctrlSetState($win_change_ok,$GUI_HIDE)
  337. EndSwitch
  338. EndFunc

  339. Func copy_text()
  340. Local $ctrl
  341. Switch @GUI_CtrlId
  342.   Case $win_copy_title
  343.    $ctrl = $win_title
  344.   Case $win_copy_text
  345.    $ctrl = $win_text
  346.   Case $ctrl_copy_text
  347.    $ctrl = $ctrl_text
  348. EndSwitch
  349. ClipPut(GUICtrlRead($ctrl))
  350. MsgBox(270336,"","已复制到剪切板:" & @CRLF &"""" & GUICtrlRead($ctrl) &"""")
  351. EndFunc
  352. Func set_state()
  353. $wintitle = GUICtrlRead($win_titles)
  354. If $ostate <> GUICtrlRead($win_state) Then
  355.   $ostate = GUICtrlRead($win_state)
  356.   Switch $ostate
  357.   Case "隐藏"
  358.    WinSetState ($wintitle, "", @SW_HIDE )
  359.   Case "显示"
  360.    WinSetState ($wintitle, "", @SW_SHOW  )
  361.   Case "禁用"
  362.    WinSetState ($wintitle, "", @SW_DISABLE  )
  363.   Case "可用"
  364.    WinSetState ($wintitle, "", @SW_ENABLE   )
  365.   Case "最大化"
  366.    WinSetState ($wintitle, "", @SW_MAXIMIZE    )
  367.   Case "最小化"
  368.    WinSetState ($wintitle, "", @SW_MINIMIZE   )
  369.   EndSwitch
  370. EndIf
  371. EndFunc
  372. Func on_top()
  373. $wintitle = GUICtrlRead($win_titles)
  374. If GUICtrlRead($win_on_top) = "窗口置顶" Then
  375.   WinSetOnTop ($wintitle,"",1)
  376.   GUICtrlSetData($win_on_top,"取消置顶")
  377. ElseIf GUICtrlRead($win_on_top) = "取消置顶" Then
  378.   WinSetOnTop ($wintitle,"",0)
  379.   GUICtrlSetData($win_on_top,"窗口置顶")
  380. EndIf
  381. EndFunc
  382. Func close_win()
  383. $back = MsgBox(270340,"","确认关闭?")
  384. If $back =6 Then WinKill (GUICtrlRead($win_titles),"")
  385. EndFunc
  386. Func show_more()
  387. $pos = WinGetPos  ( "窗口控制工具","")
  388. If GUICtrlRead($win_more) = " 详细↓" Then
  389.   WinMove  ($main,"", Default, Default, Default , 381)
  390.   GUICtrlSetData($win_more," 简化↑")
  391. ElseIf GUICtrlRead($win_more) = " 简化↑" Then
  392.   WinMove  ($main,"", Default, Default,Default , 106)
  393.   GUICtrlSetData($win_more," 详细↓")
  394. EndIf
  395. EndFunc
  396. Func _SetTrans()
  397. $wintitle = GUICtrlRead($win_titles)
  398. If $otrans <> GUICtrlRead($win_trans) Then
  399.   $otrans = GUICtrlRead($win_trans)
  400.   WinSetTrans ($wintitle,"",$otrans)
  401. EndIf
  402. EndFunc
  403. Func load_win_titles($select = "")
  404. GUICtrlSetData($win_titles,"")
  405. $Wins = _GetWins()
  406. For $x = 1 To UBound($Wins) - 1
  407.   _GUICtrlComboAddString ( $win_titles, $Wins[$x] )
  408. Next
  409. If $select ="" Then
  410.   _GUICtrlComboSetCurSel ($win_titles,0)
  411. Else
  412.   $var3 = _GUICtrlComboSelectString ($win_titles,-1,$select)
  413.   If $var3 = $CB_ERR  Then _GUICtrlComboSetCurSel ($win_titles,0)
  414. EndIf
  415. $owins = $Wins
  416. Return $Wins
  417. EndFunc
  418. Func load_state()
  419. $wintitle = GUICtrlRead($win_titles)
  420. $state = WinGetState ($wintitle)
  421. $state2 = "0"
  422. Select
  423.   Case $state =0
  424.    _CtrlSet($win_state,"不存在")
  425.   Case $state <=5
  426.    $state2 = "隐藏"
  427.   Case 5< $state <=8
  428.    $state2 = "可用"
  429.   Case 8< $state <=15
  430.    $state2 = "显示"
  431.   Case 15< $state <=31
  432.    $state2 = "最小化"
  433.   Case 31< $state
  434.    $state2 = "最大化"
  435. EndSelect
  436. If $state2 <>"0" Then
  437.   If $state2<> GUICtrlRead($win_state) Then
  438.    _GUICtrlComboSelectString ($win_state,-1,$state2)
  439.   EndIf
  440. EndIf
  441. $ostate = $state2
  442. Return $state2
  443. EndFunc
  444. Func load_title_for_ctrl()
  445. $wintitle = GUICtrlRead($win_titles)
  446. _CtrlSet($win_title,$wintitle)
  447. $ohandle = WinGetHandle ($wintitle)
  448. load_title()
  449. load_ctrls()
  450. load_text()
  451. load_state()
  452. EndFunc
  453. Func load_title()
  454. $wintitle = GUICtrlRead($win_titles)
  455. _CtrlSet($win_title,$wintitle)
  456. $ohandle = WinGetHandle ($wintitle)
  457. EndFunc
  458. Func load_text()
  459. $wintitle = GUICtrlRead($win_titles)
  460. _CtrlSet($win_text,WinGetText  ($wintitle))
  461. EndFunc
  462. Func load_ctrls()
  463. $wintitle = GUICtrlRead($win_titles)
  464. GUICtrlSetData($ctrl_ids,"")
  465. GUICtrlSetData($ctrl_text,"")
  466. $classes = StringSplit(_GetClasses($wintitle),@LF)
  467. For $d =1 To UBound($classes) -1
  468.   If StringStripWS($classes[$d],3) <>"" Then _GUICtrlComboAddString ($ctrl_ids,$classes[$d])
  469. Next
  470. If $to_select_ctrl ="" Then
  471.   _GUICtrlComboSetCurSel ($ctrl_ids,0)
  472. Else
  473.   _GUICtrlComboSelectString ($ctrl_ids,-1,$to_select_ctrl)
  474. EndIf
  475. load_ctrl()
  476. EndFunc
  477. Func Update()
  478. $Mode =3
  479. EndFunc

  480. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; sys functions
  481. Func MY_WM_HSCROLL($hWnd, $msg, $wParam, $lParam)
  482. $nScrollCode    = BitAnd($wParam, 0x0000FFFF)
  483.     $nPos         = BitShift($wParam, 16)
  484.     $hwndScrollBar  = $lParam
  485. Switch $nScrollCode
  486.   Case $TB_LINEDOWN ,$TB_LINEUP,$TB_PAGEDOWN,$TB_PAGEUP,$TB_THUMBTRACK
  487.    _SetTrans()
  488. EndSwitch
  489. EndFunc
  490. Func WM_Notify_Events($hWndGUI, $MsgID, $wParam, $lParam)
  491. #forceref $hWndGUI, $MsgID, $wParam
  492.     Local $tagNMHDR, $event, $hwndFrom, $code
  493.     $tagNMHDR = DllStructCreate("int;int;int", $lParam) ;NMHDR (hwndFrom, idFrom, code)
  494.     If @error Then Return
  495.     $event = DllStructGetData($tagNMHDR, 3)
  496. $tagNMHDR = 0
  497.     $event = 0
  498.     $lParam = 0
  499.     Return $GUI_RUNDEFMSG
  500. EndFunc
  501. Func showwin()
  502. Opt("TrayIconHide",1)
  503. GuiSetState(@SW_SHOW , $main)
  504. EndFunc
  505. Func totray()
  506. Opt("TrayIconHide",0)
  507. GuiSetState(@SW_HIDE , $main)
  508. EndFunc
  509. Func exitprograme()
  510. if @GUI_WinHandle = $aboutwin Then
  511.   GUIDelete($aboutwin)
  512. Else
  513.   IniWrite("config.ini","config","lastwin",GUICtrlRead($win_title))
  514.   If GUICtrlRead($win_more) = " 简化↑" Then
  515.    IniWrite("config.ini","config","isshowmore","true")
  516.   Else
  517.    IniWrite("config.ini","config","isshowmore","false")
  518.   EndIf
  519.   If $Mode = 2 Then
  520.    IniWrite("config.ini","config","mouse","true")
  521.   ElseIf $Mode = 1 Then
  522.    IniWrite("config.ini","config","mouse","false")
  523.   EndIf
  524.   Exit
  525. EndIf
  526. EndFunc
  527. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 辅助函数
  528. Func _CompareArray($a1,$a2)
  529. $return =0
  530. If UBound($a1) = UBound($a2) Then
  531.   $return =1
  532.   For $u =0 To UBound($a1) -1
  533.    If $a1[$u] <> $a2[$u] Then $return =0
  534.   Next
  535. EndIf
  536. Return $return
  537. EndFunc
  538. Func _GetWins()
  539. Global $ohwins = WinList()
  540. Dim $twins[1]
  541. For $i =1 To $ohwins[0][0]
  542.   $title = $ohwins[$i][0]
  543.   If StringStripWS($title,3) <>"" And _IsIn($title) = 0 Then
  544.    ReDim $twins[UBound($twins)+1]
  545.    $twins[UBound($twins) -1 ] = $title
  546.   EndIf
  547. Next
  548. Return $twins
  549. EndFunc
  550. Func _CtrlSet($ctrl,$var)
  551. If $var <> GUICtrlRead($ctrl) Then
  552.   GUICtrlSetData($ctrl,$var)
  553. EndIf
  554. EndFunc
  555. Func _IsIn($var)
  556. $result = 0
  557. $var2 = StringStripWS($var,3)
  558. For $x = 0 To UBound($list) - 1
  559.   If $var2 = $list[$x] Then $result = 1
  560. Next
  561. Return $result
  562. EndFunc

  563. Func _Name2Link($link,$LinkNames)
  564. $x = 0
  565. For $i =1 to UBound($LinkNames,1) -1
  566.   If $link = $LinkNames[$i][0] Then
  567.    $x = $i
  568.    ExitLoop
  569.   EndIf
  570. Next
  571. Return $x
  572. EndFunc
  573. Func _Link2Name($link,$LinkNames)
  574. $x= 0
  575. For $i =1 to UBound($LinkNames,1) -1
  576.   If $link = $LinkNames[$i][1] Then
  577.    $x = $i
  578.    ExitLoop
  579.   EndIf
  580. Next
  581. If $x= 0 Then
  582.   Return ""
  583. Else
  584.   Return $LinkNames[$x][0]
  585. EndIf
  586. EndFunc
  587. Func _GetClasses($title)
  588. ;Get array of each control
  589.     Local  $buttonCount = 0, $editCount = 0, $staticCount = 0, $i
  590.     Local $classes = StringSplit(  WinGetClassList($title) , @LF)
  591.     Local  $classIDs[$classes[0]+1]
  592. Local $count[1][2]
  593.     $classIDs[0] = $classes[0]
  594.     For $i = 1 to $classes[0]
  595.       Select
  596.       Case $classes[$i] = "Button"
  597.   $buttonCount = $buttonCount + 1
  598.   $classIDs[$i] = $classes[$i] & $buttonCount
  599.       Case $classes[$i] = "Edit"
  600.         $editCount = $editCount + 1
  601.         $classIDs[$i] = $classes[$i] & $editCount
  602.         $classes[$i] = "Input"
  603.       Case $classes[$i] = "Static"
  604.         $staticCount = $staticCount + 1
  605.         $classIDs[$i] = $classes[$i] & $staticCount
  606.   $classes[$i] = "Label"
  607.      Case Else
  608.         If StringStripWS($classes[$i],3) <> "" Then
  609.    $back = _Name2Link($classes[$i],$count)
  610.    If $back = 0 Then
  611.     ReDim $count[UBound($count)+1][2]
  612.     $count[UBound($count)-1][0] = $classes[$i]
  613.     $count[UBound($count)-1][1] = 1
  614.     $classIDs[$i] = $classes[$i] & 1
  615.    Else
  616.     $classIDs[$i] = $count[$back][0] & ($count[$back][1]+1)
  617.     $count[$back][1] +=1
  618.    EndIf
  619.   EndIf
  620.       EndSelect
  621.    Next
  622.    Local $classIDs2[1]
  623.    For $i = 1 to $classIDs[0]
  624.   If StringStripWS($classIDs[$i],3) <> "" Then
  625.    ReDim $classIDs2[UBound($classIDs2)+1]
  626.    $classIDs2[UBound($classIDs2)-1] = $classIDs[$i]
  627.   EndIf
  628.    Next
  629. ;Display the results
  630.     Local $output = ""
  631.     For $i = 1 to UBound($classIDs2) -1
  632.   $output = $output & $classIDs2[$i] & @LF
  633.     Next
  634.     Return $output
  635. EndFunc
  636. Func ShowMenu($hWnd, $CtrlID, $nContextID)
  637.     Local $hMenu = GUICtrlGetHandle($nContextID)
  638.    
  639.     $arPos = ControlGetPos($hWnd, "", $CtrlID)
  640.    
  641.     Local $x = $arPos[0]
  642.     Local $y = $arPos[1]  + $arPos[3]
  643.    
  644.     ClientToScreen($hWnd, $x, $y)
  645.     TrackPopupMenu($hWnd, $hMenu, $x, $y)
  646. EndFunc
  647. ; Convert the client (GUI) coordinates to screen (desktop) coordinates
  648. Func ClientToScreen($hWnd, ByRef $x, ByRef $y)
  649.     Local $stPoint = DllStructCreate("int;int")
  650.    
  651.     DllStructSetData($stPoint, 1, $x)
  652.     DllStructSetData($stPoint, 2, $y)
  653.     DllCall("user32.dll", "int", "ClientToScreen", "hwnd", $hWnd, "ptr", DllStructGetPtr($stPoint))
  654.    
  655.     $x = DllStructGetData($stPoint, 1)
  656.     $y = DllStructGetData($stPoint, 2)
  657.     ; release Struct not really needed as it is a local
  658.     $stPoint = 0
  659. EndFunc
  660. ; Show at the given coordinates (x, y) the popup menu (hMenu) which belongs to a given GUI window (hWnd)
  661. Func TrackPopupMenu($hWnd, $hMenu, $x, $y)
  662.     DllCall("user32.dll", "int", "TrackPopupMenuEx", "hwnd", $hMenu, "int", 0, "int", $x, "int", $y, "hwnd", $hWnd, "ptr", 0)
  663. EndFunc
复制代码
感谢Baidu,Google,Dreams8给我这次机会!
还要感谢我的爸爸妈妈!
HOHO
返回列表