注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

chunwaihome 的博客

 
 
 

日志

 
 

讓Powerpro辨認TC的左右窗格  

2009-10-11 11:39:35|  分类: PowerPro |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

前言:

如果大家習慣了Total Commander中超方便的目錄切換(CTRL+D)與文件定位,再回到windows的打開、保存對話框中切換目錄,會感覺極度不便。如果您未用過TC、或想了解它更多的操作,下面是TC的教學網http://xbeta.info/studytc/

如何解決這個問題呢?

  • 方法一

  樸素辦法:TC+ 複製。先在TC中定位到目標,然後ctrl+1/2/3複製其路徑/文件名/完整路徑,最後粘貼到對話框中。這是一種笨辦法,但比較樸素,無須其他工具軟件。

  • 方法二

  高級辦法:FavMenu。利用FavMenu這個小軟件,用戶可以在任意對話框中,使用TC的文件夾菜單功能。

   FavMenu:totalcmd.net下載

  FavMenu是用AutoHotkey——筆者非常推崇的腳本工具,FavMenu的配置格式與Total Commander保持一致,也可以直接沿用TC的配置,因為它本來就是作為TC的擴展而開發的。幾乎所有TC收藏目錄功能——包括插件、虛擬變量——它都能實現。並且可以在TC不啟動的情況下正常使用。當然,多數用戶的TC實際上都是一直打開的。它在第一次啟動時會自動檢測TC,如果檢測不到,就與資源管理器一起集成。

  它的配置界面如下,然後就可以在任何地方按快捷鍵(比如Ctrl+q)調出快捷菜單了,十分方便。

下圖紅色框著的是代表total commander的左右窗格的路徑,單擊後可快速切換到該資料夾。原本是很好用的,可惜它不支援TC7.0以上的版本,大家看見圖中的路徑是亂碼來的,作者也沒有任何更新來解決此問題。

那唯有嘗試用Powerpro做啦讓Powerpro辨認TC的左右窗格 - Y偉 - chunwaihome 的博客

讓Powerpro辨認TC的左右窗格 - Y偉 - chunwaihome 的博客

 

 而Powerpro怎樣能夠辨認Total Commander(TC)的窗格上的文字呢,亦即是說我們要得到TC子窗口上的資訊文字。而TC的子窗口包括TButtonBar,TMyPanel,TPathPanel,TMyComboBox,TMylistBox,Edit等等見下圖

讓Powerpro辨認TC的左右窗格 - Y偉 - chunwaihome 的博客

當我們執行*exec Windowinfo命令後,它會出現如圖下的窗框,然後您可以將滑標移到TC的TMypanel子窗口上

讓Powerpro辨認TC的左右窗格(後篇) - Y偉 - chunwaihome 的博客

,得出的十六進制子窗口handle值是0x1040a,亦即十進制的60570

怎樣將十六進制轉為十進制,在這裏提供兩個方供大家作參考:

  1. 用系統的計算機(Calc.exe)程式.
  2. 執行win.childhandlelist("=totalcmd","c=tmypanel")命令後,它會得出tmypanel十進制的句柄值。但如果有多個子窗口名稱是tmypanel的話,結果將會出現一系列的數值例如459716 132044 66582 132040 132116 66576 132070 132110 66570,最後那個"66570"就是您真正想要的句柄值。

註:用Powerpro的*exec windowinfo 命令所得出的句柄值是用十六進制方式顯示的。

 

 命令

 說明

 parent(han)

得出父窗口的句柄值,han可以是任何子窗口的句柄值。例如子窗口TMypanel 句柄值是66570

那父窗口句柄值就是:

s = win.parent("66570")

s變量的輸出值就是132070

 idfromhandle(han)

Child Handle-->ID值:由子窗口的句柄值得出它的id值

s = win.idfromhandle("66570")

s變量的輸出值就是66570

 handlefromid(cl,id)

id-->Child Handle值: 由子窗口的id 值得出子窗口的句柄值

s = win.handlefromid("=totalcmd","66570")

s變量的輸出值就是66570

 handlefromindex(cl, ix)

index-->Child Handle值:  由子窗口的index和CL值得出子窗口句柄值

s = win.handlefromindex("=totalcmd","25")

s變量的輸出值就是66570

indexfromhandle(han)

child handle-->Index值:由子窗口的句柄值得出index值

s = win.indexfromhandle("66570")

s變量的輸出值就是25

 
childhandlelist(cl,"text")

Class-->handle值:由子窗口Class Name獲取子窗口句柄值

s = win.childhandlelist("=totalcmd","c=tmypanel")

s變量的輸出值就是:
459716 132044 66582 132040 132116 66576 132070 132110 66570

註:如果text參數被省略的話,結果會得出CL所有子窗口句柄值

childtextbyindex(cl,n)

 index-->text:得到第n個index子窗口的文字

s = win.childtextbyindex("=totalcmd","25")

s變量的輸出值就是:

[download]  1.3 G of 54.8 G free

 childtextbyid(cl,n)

 id-->text:得到第n個id子窗口的文字

s = win.childtextbyid("=totalcmd","66570")

s變量的輸出值就是:

[download]  1.3 G of 54.8 G free

獲取TButtonBar上顯示的文字


那您會問到底用什麼方法得到TbuttonBarClass Name呢?

除了用Powerpro的*exe windowinfo內置命令外,您還可以用StaffEye軟件來獲取TC子窗口名稱如圖二,關於StaffEye說明按此

圖二

讓Powerpro辨認TC的左右窗格(後篇) - Y偉 - chunwaihome 的博客

 

  命令

 結果

win.childhandlelist("=totalcmd","c=TButtonbar") handle=133420
  win.parent("133420") parent handle = 854164
 win.idfromhandle("133420")  133420
 win.handlefromid("=totalcmd","133420")  133420
 win.handlefromindex("=totalcmd",27)  133420
 win.indexfromhandle("133420")  27
 win.childtextbyindex("=totalcmd","27") 沒有任何結果
 win.childtextbyid("=totalcmd","133420") 沒有任何結果

[簡介:]

執行Childtextbyindex和Childtextbyid後沒有得出任何結果,這是正常的,因為TButtonBar上本身沒有任何文字。

獲取TMyComboBox上的文字

local var var2 var3

var = win.childhandlelist("=totalcmd","c=TMyComboBox")

child handle值:        var  = 133338


var2 = win.indexfromhandle("133338")

child handle值:        var  = 133338


var3 = win.childtextbyindex("=totalcmd","25")

text:             var3= [-i-]


測試TMyComboBox的碟盘是否符合條件,下面腳本是測試TMyCombox上的磁盘是否[-i-],如果是的話執行message the text is correct命令,否則執行message the text is incorrect。

if (win.childtextbyindex("=totalcmd","25")=="[-i-]")do
message the text is correct
else
message the text is incorrect
Endif

ChildTextByid

如果在沒有獲取任何子窗口的class name的情況下,那我們到底怎樣可以得到子窗口的文字呢?

可以執行win.childhandlelist命令獲取所有子窗口的handle值:

var = win.childhandlelist("=totalcmd")

得出所有子窗口的handle值,得出結果包括

67570 67586 133028 67566 657214 67560 133030 198520 198550 67552 133034 67588 133082 133080 329626 67590 133024 67540 263350 67592 133072 133070 264104 133022 67530 67584

這麼多子窗口Handle值,那 到底怎樣判斷那個Child handle屬於那個子窗口?

因為Child handle值就等於Child id值,所以可以執行以下命令

win.childtextbyid("=totalcmd","67540")

得出結果是[software]  6,580 M of 83,745 M free,亦即是左窗格TMypanel。然後我們放進不同的child handle作測試

win.childtextbyid("=totalcmd","67584")

win.childtextbyid("=totalcmd","67530")

.........

但我們可以怎樣可以用Looping的方法幫我們去測試所有id值呢?

有待解決...........而且每次打開程式的時候,id值都會改變所以這個方法不好。

ChildTextByIndex

因為Child id會隨著每次啟動程式而改變,而Child index的好處在於它每次打開程序時都是固定的。例如

win.childhandlelist("=totalcmd","c=TPathPanel")

因為TC包括左右兩個窗格 (TPathPanel) ,所以得出兩個child handle值:329626 264104 。然後分別執行以下兩個 命令:win.indexfromhandle("329626" )  win.indexfromhandle("264104" )

得出的index是23 和15。

最後執行win.childtextbyindex("=totalcmd","23") win.childtextbyindex("=totalcmd","15") 獲取TC TPathPanel上的文字。

結果是:i:\webcam\staffeye\*.*和k:\Program Files\PowerPro\scripts\*.*

留意這語法是錯誤的win.indexfromhandle("329626", "264104")

  •  實例六

承接上面的例子,既然可以用 win.childtextbyindex("=totalcmd","23") 去獲得TpathPanel上的文字,換言之我們可以用遁環的方法去測試不同的index值。

For(i = 1;i<=50;i = i+1)
                win.debug(win.childtextbyindex("c=TTOTAL_CMD",i))
EndFor

改良版:

For(i = 1;i<=250;i = i+1)
           Local var = win.childtextbyindex("c=TTOTAL_CMD",i)
           win.debug(var)
           if(_EOF_ == 1)do                  ;; after all indexes are processed, _EOF_ == 1
                         break

           endif
EndFor

 

Local i = 1
@CmbBtn
if(i<=305)do
win.debug(win.childtextbyindex("c=TTOTAL_CMD",i))
If(_eof_==1)do
break
endif
i = i+1
Jump CmbBtn
else(else和quit在這裏是可被刪除亦不會影響到腳本)
quit
Endif

兩個腳本是一樣,你可看出用For的命令短很多。

註:

win.childtextbyindex的解釋:

returns the text in the nth childwindow of first window matching cl.  If there are less than n child windows, sets variable _EOF_ to 1; else sets _EOF_ to 0. First looks for visible windows matching cl; if none, tries hidden windows matching cl.

 

  评论这张
 
阅读(665)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017