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

chunwaihome 的博客

 
 
 

日志

 
 

Win Plugin  

2009-08-29 17:28:44|  分类: Powerpro Plugin |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

In the following descriptions, cl is a caption list as defined in the PowerPro help.  Note that this means it could be window handle, since a window handle is a valid captionlist. The win plugin first searches for a visible window matching cl; if none is found, it then tries to find an invisible window matching cl.

In the following descriptions, han represents a window handle obtained from win.handle, win.handlelist, etc.

For any services which take a window handle or a captionlist as the first parameter, you can use the syntax

han.service(params)

to call the service (as a shorter alternative to win.service(han, params)

  • MANIPULATE WINDOWS(視窗操作)

所有Manupulate services都會回返操作窗口的句柄值,因此下面的命令可以以一連串的方式操作。例如

s = win.show("=notepad")               ;激活"記事本"窗口,s回返值是窗口的句柄值

v = win.maximize("=notepad")         ;最大化"記事本"窗口,v回返值是窗口的句柄值

w = win.ontop("=notepad")               ;將窗口總是在置頂,w回返值是窗口的句柄值

其實我們可以將以下的三行命令用一行的命令代替,win.show("=notepad").maximize.ontop

 

 命令

說明

 close(cl)  

關關cl窗口例如win.close("=totalcmd"),cl值可以是"under","active","explorer","filedialog","activebar"等。

註:active亦可用*代替,Window.close("all")可以關閉所有窗口,但用win.close("all")就不能起作用

 closeforce(cl)  強行關閉視窗,你將會失去未儲存的內容。
 rollup(cl)    將窗口捲起來,再執行此命令會還原窗口。
 enable(cl,flag)   
 traymin(cl) 將窗口縮小到系統匣裏    
ontop(cl)    ontop(cl,flag) 

Ontop(cl)將窗口頂置,而ontop(cl,flag)是切換窗口置頂的命令。

如果flag是0將窗口不置頂,1的話將窗口置頂。

trans(cl,num)  或者   transmouse(cl,num)  兩者都能夠將窗口透明化,e.g. win.trans("=totalcmd",150)

將totalcmd透明度調校成150,越大的值代表透明度越高,255表示全透明0則表示完全不透明。而transmouse同樣可以將窗口透明化,它和trans不同的是當窗口被透明化後,滑鼠和鍵盘的操作會穿過該窗口。

show(cl)  或者  showna(cl)

win.show(cl)表示將縮小或縮小到系統匣中的窗口顯示出來。

而win.showna(cl)同樣會將窗口顯示出來但不會激活它。

 hide(cl)    

 將窗口完全隱藏起來,你不會在工作列甚至系統匣中找到它。那如果被隱藏了,怎樣找回它呢?

你可以用win.show(cl)將窗口再顯示出來,它亦解決了window.show(cl)實行於多窗口軟件如firefox或maxthon所引致的問題。

minimize(cl)  最小化窗口
maximize(cl) 最大化窗口
restore(cl)  還原窗口
back(cl)  sends window to back (bottom) of visible windows
tofile(cl,filepath,width,height,cflag)


 


  •   WINDOW DIMENSIONS

 命令

 說明

 left(cl)      顯示窗口的左上角的座標
 right(cl)      顯示窗口的右上角的座標
 top(cl)      顯示窗口的頂部的座標
 bottom(cl)   顯示窗口的底部的座標
 width(cl)     窗口的寛度
 height(cl)    窗口的高度
clientwidth returns client width first window matching cl
clientheight returns client height of first window matching cl

local top left right bottom

left = win.left("=notepad")
top = win.top("=notepad")
right= win.right("=notepad")
bottom = win.bottom("=notepad")
win.debug(top,left,right,bottom)

當我將記事本窗到如下圖的位置,然後執行以上的腳本,得出結果是"2 51 842 576"

Win Plugin - Y偉 - chunwaihome 的博客

  • 以下是window沒有的命令

 

 命令

 意思

settext(cl, "newtext")    改變視窗的標題

e.g. win.settext("=totalcmd","abc"),而abc一定要用双引號括住。除了一般文字外,你還可以用pp的info代替如

win.settext("=notepad",?"&(win.exepath("active"))")

其實它只是傳送WM_SETTEXT去那視窗,WM_SETTEXT是改變視窗標題的命令。

至於什麼是WM_SETTEXT命令我也不會

dropfile(cl, filepath)

模擬拖曳檔案到圖標上

win.dropfile("=notepad",?"c:\abc.txt")

win.dropfile("=acdsee32",?"k:\abc.jpg")




 

     

 

getworkingdir(cl)

例我用notepad打開c:\powerpro\scripts\test.txt,當執行win.getworkingdir("=notepad")命令後,得出結果為c:\powerpro\scripts

 

 getprinters()

 

得出所有印表機的名稱例如

ABiCO CL-400KT
Adobe PDF

如果我將結果複製到記事本會是,ABiCO CL-400KT口Adobe PDF口Win Plugin - Y偉 - chunwaihome 的博客複製到其他軟件就沒問題。

sendkeys/keys

Win.sendkeys和Win.keys兩者效果是相同的,都是傳送keystroke到窗口中。例如 win.sendkeys("{alt}{f4}")表示關閉激活窗口。

你亦可以用{to =exename}傳送keystroke到指定窗口上例如

win.keys ("{to =notepad} abc"),此命令會激活記事本窗口然後abc文字到窗口中。

 debug,debugshow

用debug窗口來顯示結果

win.debug(win.handle("=notepad"),win.caption("=notepad"))

win.debug和debug的分別是debug只能有一個參數,而win.debug可以最多達六個參數,大家要留意的是用win.debug命令是沒有双引號括住的,而debugshow的窗口會顯示在最前面。

  beep(freq, dur)

可以產生不同頻率系統的beep聲

e.g.win.beep(150,150)

你可以逐一嘗不同數值的分別

 messagebeep("type") 而type可以是"question","ok"."hand","exclamation"
setworkingdir(path) sets PowerPro working directory
  message(message, title) 顯示訊息窗口

例如win.message ("chunwai","i love you")

 setdefaultprinter("printer")

設定預設的印表機如win.setdefaultprinter("Adobe PDF")

,而印表機名稱一定要和"印表機和傳真"清單中完全相同不分大小楷

   GetSystemMetrics

這個命令包含很多參數詳情可參考

http://msdn.microsoft.com/en-us/library/ms724385(VS.85).aspx

例如win.GetSystemMetrics("SM_CMOUSEBUTTONS")

這個原本是顯示mouse有多少按鍵,但我的是三顆鍵,但不知道出的結果是5顆。     


 

win.language(cl)

Returns an integer representing current language being used by first window matching cl.  詳細按此

 

  •  Window Handle

 命令

意思

 handle(cl) 獲取窗口的handle值,例如
win.handle("=notepad")
獲取記事本窗口的Handle值。
 handle(cl,"text")

雖然win.handle()能夠獲取程序的句柄值,但有時候,當你同時打開多個同名的程序,你可以用窗口的文本作更一進的細分。例如Total CommanderTMyComboBox上的磁盘是[-r-],執行以下命令

local var = win.handle("=totalcmd","[-r-]")
win.debug(var)

得出TMyComboBox的Handle值是590832

 mainhandlefrompoint(x,y)

由滑標所在的x和y的座標得出窗口的Handle值,例如

win.mainhandlefrompoint("xmouse","ymouse")

命令將會獲得當前滑標位置的句柄值。

;xmouse和ymouse表示滑標的座標詳情按此

 handlefrompoint(x,y)

 由滑標所在的x和y的座標得出子窗口的Handle值,例如當前窗口是total commander,然後將滑標移至Tmypanel的控件上,執行win.handlefrompoint("xmouse","ymouse")命令

得出結果將是TMypanel子窗口的句柄值。

 handlelist(cl, inv)

return blank separate list of window handles matching cl.  Set inv to 1 to include hidden windows.  Set inv to 2 to include hidden windows, excepting those with blank captions.

解釋:得出所有相同名稱程式的句柄值,例如我同時打開了三個"記事本"程序,執行win.HandleList("=notepad')命令後。

得出結果是1510816 32247178 985282以空白格作分隔,它們分別是三個"記事本"的句柄值。

註:Blank Separate的意思是所得結果以空白格作分隔。

 childhandlelist(cl, "text")

由子窗口Class Name獲取子窗口句柄值,比如

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

所得出結果多於一個,因為在total commander裏不止不個tmypanel控制。
459716 132044 66582 132040 132116 66576 132070 132110 66570

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

 handlefromindex(cl, ix)  由子窗口的index值和程序名稱值得出子窗口的句柄值

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

結果是66570

menu(cl,params) Shows a menu of all active windows matching cl and returns handle of selected one, or zero if menu dismissed with no selection.  Omit cl and param or set cl to "" for all windows.  Optionally include param and set to one of "hidden", "traymin", "onlyhidden" as for the *window menu command to select those types of windows.

  •  Child Windows

控件 ID(Control ID)
控件 ID 是指Windows指定給每個控件的數值型標識符(實際上就是整數值)。通常這是用來識別控件的最好的方法。

類別名(ClassNameNN)
每個標準的 Microsoft 控件都具有「類別名」,比如「button(按鈕)」或者「edit(編輯框)」等等。在 AutoIt 中還把它跟該控件的「實例」組合起來,並稱為「ClassNameNN」。比如說某個對話框的上面有三個按鈕,則通常它們的「ClassNameNN」就是"Button1", "Button2", "Button3"如此之類。

當控件ID不適用的時候就可以考慮使用這個方法(這種情況通常發生在靜態文本控件上)。

控件句柄(Control Handle (HWND) )
控件句柄是Windows賦予控件的(獨一無二的)標識符。每個被創建的控件都具有不同的句柄。

 命令

 說明

 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

  • Window Coordinates

rect represents is a string of four blank-separated integers giving a rectanble as "left top right bottom"

pt represents a screen point as "left top".

 命令

 說明

 rect= getworkarea

獲得屏幕的work area,執行win.debug(win.getworkarea())命令後

,所得出的結果是0 0 1680 1050

setworkarea(left,top,right,bottom) 設定屏幕的work area
Notes:setworkarea()  sets screen work area to full size of physical screen
 pts = mappoints(rect1, rect2, ptsIn)

ptsIn contains one or more point as blank-separated numbers.  These are mapped from coordinate system in rect1 to coordinate system in rect2.  For example:


1) mappoints(win.makerect(0,0,xscreen, yscreen), win.getworkarea, han.getrect)

maps from whole screen to within work area


2) mappoints( "0 0 1000 1000", win.getworkarea,"0 0 250 250") maps to upper left quarter of work area

 win.getrect(cl) 獲取窗口的當前位置和尺寸值

例如當我運行*Window Position! 0 0 840 1050 =notepad命令後,窗口的位置被調整在屏幕左上角,寛度為840像數,高度為1050像數。

然後執行win.getrect("=notepad")命令,它所得出值是0 0 840 1050。

  win.setrect(cl, rect)  win.setrect("=notepad","0 0 840 1050")相等於

*Window Position! 0 0 840 1050 =notepad

 win.setpos10000(cl,"s or w", left, top, right, bottom)  s表示以full screen的形式來改變窗口的尺寸和位置,而w表示用當前窗口尺寸的形式來改變窗口的尺寸和位置。

而left, top, right, bottom值可以是0至10000,10000表示營幕最大的高度或寛度比。

""或"="表示用回原來的值

 rect=makerect(left,top,right, bottom)  builds rect structure from four numbers
   
   

  •  Window Focus

GetFocus() 

Getfocus與Handle命令在說明中說兩者都能夠獲取窗口句柄值。但在實際應用中存在著很大的差別,比如win.handle("=notepad")命令能夠獲取"記事本"的窗口句柄值,無論記事本在任何狀態下(minimized,activate,hide)。

相比之下getfocus命令只能獲取激活狀態下的窗口句柄,看似之下,getfocus在功能好似比下去了。但實在不是,getfocus可以獲取子窗口的句柄。這是什麼意思呢?例如尚當滑標正在total command命令框輸入的位置,執行s=win.getfocus() ,它會將當前子窗口命令框句柄值敷於變量s,跟住當我執行win.setfocus(s)後,滑標的位置會出現在原來的命令框中。

 

 SetFcus(han) 需要留意的是setfocus裏的han參數一定要用handle參數,不能用"=totalcmd"作為參數。 例如

 win.setfocus ("197362")

 win.setfocus(win.getfocus())  

  • win.show與win.setfocus的不同之處

setfocus(win.handle("=notepad")) win.show("=notepad")

不同的是win.show能夠將最小化的窗口顯示出來,而win.setfocus不能做到這點。

   

Focus 是指將一個物件變為工作目標的事件或動作, 例如用滑鼠指標在一個文字框中按一下, 這文字框就會出現一個文字插入點 (insertion point), 這時 focus 就是在這文字框上, 按鍵盤輸入文字, 文字就會在文字框出現

  • GET WINDOW INFORMATION


 exists(han)  

回返值如下:

1如果窗口存在的話

0如果窗口不存在的話

gettext(han)

假如han是主窗口句柄值的話,回返值將是窗口的標題。比如

s = win.gettext("=notepad"),s的回返值將是記事本的標題。

假如han是子窗口的句柄值的話,回返值將是子窗口的文本,比如

v =win.childhandlelist("=totalcmd","c=tmypanel9")
s = win.gettext(v)

s的回返值將是tmypanel上的文本。

 getprocessid(han)  

回返程序的process id,至於甚麼是PID?按此

 win.caption(cl)    回返窗口的標題例如

s=win.caption("=notepad")

s的回返值將是記事本的標題"未命名 - 記事本"

 class(cl)   

 回返窗口的class值例如

s = win.class("=notepad")                             ;s的回返值是"notepad"

s = win.class("=maxthon")                             ,s的回返值是IEFrame

s = win.class("=acdsee32")                           ,s的回返值ACDViewer

 exepath(cl) 回返程序的完整路徑,例如當前焦點的窗口是記事本,執行

s= win.exepath("active")

s = win.exepath("*")                     ;"*"表示激活窗口的意思,相等於"active"              

S的回返值C:\windows\system32\notepad.exe,注意在路徑中是沒有双引號的。

 exename(cl) 

回返程式名稱,留意在名稱後是沒有擴展名的,例如當前焦點的窗口是記事本,執行

s = win.exename("active")

s = win.exename("*")                      ;"*"表示激活窗口的意思,相等於"active"

S的回返值是Notepad

 visible(cl) 

回返值如下:

1如果窗口是可見(visible)

2如果窗口是不可見(hidden)

空白表示沒有此窗口

 maxxed(cl)  

回返值如下:

1如果窗口在最大化狀態

0如果窗口不在最大化狀態

 minned(cl)  

回返值如下:

1如果窗口在最小化狀態

0如果窗口不在最小化狀態

 topmost(cl)  

回返值如下:

1如果窗口在"總是在最頂"層狀態
0如果窗口不在"總是在最頂"狀態

 rolled(cl)  回返值如下:

1如果窗口在卷狀態

0如果窗口不在卷狀態

 trayminned(cl) 回返值如下:

1如果窗口在系統匣狀態

0如果窗口不在系統匣狀態

 enabled(cl)

回返值如下:

1如果窗口可用(未被禁用)

0如果窗口不可用

 hascaption(cl)  return 1 if first window matching cl has a caption, 2 if toolbar caption, 0 otherwise.
 resiable(cl)  回返值如下:

1如果窗口能夠改變尺寸

0如果窗口不能夠變尺寸

 maxable(cl)   
 returns 1 if first window matching cl has maximize box, 0 otherwise
 minable(cl)   
 returns 1 if first window matching cl has minimize box, 0 otherwise
 toolwindow(cl)    
 returns 1 if first window matching cl is toolwindow, 0 otherwise
 fullscreen()   returns 1 if foreground window is full screen; 0 otherwise.
   
  评论这张
 
阅读(1069)| 评论(0)
推荐 转载

历史上的今天

评论

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

页脚

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