小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

用Autoit進(jìn)行簡單的桌面操作 | autoit 簡簡單單

 禁忌石 2010-12-14

用Autoit進(jìn)行簡單的桌面操作

雖然autoit本身并不提供操作桌面的相關(guān)函數(shù),不過利用已有的窗口函數(shù)我們?nèi)钥梢詫ψ烂孢M(jìn)行簡單的控制。

一、桌面句柄的取得

Windows的桌面實(shí)際上就是一個(gè)窗口,其標(biāo)題就是"Program Manager",而桌面上的圖標(biāo)則是一個(gè)標(biāo)準(zhǔn)的SysListView32控件。因此,我們可以這樣獲取桌面窗口和控件的句柄:

CODE: AutoIt $handle = WinGetHandle("Program Manager") ;窗口句柄
$ctrl = ControlGetHandle("Program Manager","","SysListView321") ;控件句柄當(dāng)然了,使用窗口函數(shù)時(shí)我們并不一定要用窗口句柄和控件句柄,不過在調(diào)用系統(tǒng)API時(shí)我們只能使用窗口句柄,而且這樣會(huì)讓代碼更整潔一些。

二、對桌面窗口的控制

既然已經(jīng)得到了桌面窗口的句柄,我們就不妨利用窗口函數(shù)對桌面簡單操作一下:

CODE: AutoIt WinClose ($handle) ;顯示關(guān)機(jī)對話框
Sleep(5000)
WinSetTrans ($handle,"",100) ;桌面圖標(biāo)透明(實(shí)際上沒這么簡單)
$pos = WinGetPos ($handle)
MsgBox(0,"DesktopWidth",$pos[2])
MsgBox(0,"DesktopHeight",$pos[3])
WinKill ($handle) ;重啟桌面另外需要說明的是,只要用WinMove函數(shù)移動(dòng)桌面,桌面圖標(biāo)就會(huì)消失。

三、對桌面圖標(biāo)的控制

因?yàn)樽烂鎴D標(biāo)是一個(gè)ListView32控件,所以用ControlListView函數(shù)就可以對桌面圖標(biāo)進(jìn)行基本的操作:

CODE: AutoIt ControlListView($handle,"",$ctrl,"SelectAll") ;選中桌面全部圖標(biāo)
ControlListView($handle,"",$ctrl,"SelectClear") ;取消選擇
ControlListView($handle,"",$ctrl,"Select",4,7) ;選中第5到8個(gè)圖標(biāo)
MsgBox(0,"第一個(gè)圖標(biāo)名稱",ControlListView($handle,"",$ctrl,"GetText",0,0))
MsgBox(0,"圖標(biāo)總數(shù)",ControlListView($handle,"",$ctrl,"GetItemCount"))
MsgBox(0,"選中圖標(biāo)數(shù)",ControlListView($handle,"",$ctrl,"GetSelectedCount"))
ControlListView($handle,"",$ctrl,"ViewChange","list") ;列表形式顯示桌面圖標(biāo)(失敗)
ControlListView($handle,"",$ctrl,"ViewChange","details") ;以"詳細(xì)信息"的形式列出
ControlListView($handle,"",$ctrl,"ViewChange","smallicons") ;復(fù)原
ControlListView($handle,"",$ctrl,"ViewChange","largeicons") ;同上
ControlDisable ($handle,"",$ctrl) ;無法點(diǎn)擊桌面圖標(biāo)
ControlEnable ($handle,"",$ctrl) ;恢復(fù)
ControlHide ($handle,"",$ctrl) ;隱藏桌面圖標(biāo)
ControlShow ($handle,"",$ctrl) ;恢復(fù)
;下面是列出全部選中的圖標(biāo)
$num = ControlListView($handle,"",$ctrl,"GetSelected",1)
$array= StringSplit($num,"|")
For $i = 1 To $array[0]
MsgBox(0,"選中的第"&$i&"個(gè)圖標(biāo)",ControlListView($handle,"",$ctrl,"GetText",$array[$i],0))
Next

1.移動(dòng)桌面圖標(biāo)

移動(dòng)圖標(biāo)主要靠發(fā)送LVM_SETITEMPOSITION消息來實(shí)現(xiàn),下面是一個(gè)例子,其中$i_index、$i_x、$i_y分別代表要移動(dòng)的圖標(biāo)(這里是第2個(gè))、移動(dòng)到的x坐標(biāo)、y坐標(biāo):

CODE: AutoIt

#include <Misc.au3>

Global Const $LVM_FIRST = 0x1000
Global Const $LVM_SETITEMPOSITION = ($LVM_FIRST + 15)

$i_index = 1
$i_x = 500
$i_y = 600

_SendMessage(ControlGetHandle("Program Manager","",1), $LVM_SETITEMPOSITION, $i_index, BitOR(BitShift($i_y, -16), BitAND($i_x, 0xFFFF)))

2.設(shè)置桌面的對齊網(wǎng)格

由于對齊網(wǎng)格是listview控件的一種style,所以通過使用LVM_SETEXTENDEDLISTVIEWSTYLE消息我們就能對此進(jìn)行設(shè)置:

CODE: AutoIt

#Include <misc.au3>
#include <GuiListView.au3>

$LVS_EX_SNAPTOGRID = 0x80000

;對齊到網(wǎng)格
_SendMessage(ControlGetHandle("Program Manager","",1), $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_SNAPTOGRID, $LVS_EX_SNAPTOGRID)

;不對齊
_SendMessage(ControlGetHandle("Program Manager","",1), $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_SNAPTOGRID, 0)

3.讓窗口處于最下層

通過將某一窗口設(shè)為桌面的子窗口,我們就能實(shí)現(xiàn)窗口置底:

CODE: AutoIt

$gui = GuiCreate("MyGUI", 227, 119)
DllCall("user32.dll", "int", "SetParent", "hwnd", $gui, "hwnd",WinGetHandle("Program Manager"))

GuiSetState()

Do
;;;
Until GuiGetMsg() =-3

Exit

4.設(shè)置任務(wù)欄的狀態(tài)

利用SHAppBarMessage函數(shù)我們能對任務(wù)欄的狀態(tài)進(jìn)行控制:

CODE: AutoIt

Global Const $ABM_SETSTATE = 0x0000000a
Global Const $ABS_ALWAYSONTOP = 0x2
Global Const $ABS_AUTOHIDE = 0x1

Global $pabd = DllStructCreate("dword;int;uint;uint;int;int;int;int;int")
DllStructSetData($pabd,1,DllStructGetSize($pabd)) ;cbSize
DllStructSetData($pabd,2,ControlGetHandle("Start","","Shell_TrayWnd")) ;hWnd

Func SHAppBarMessage($Message,ByRef $pabd)
$lResult = DllCall("shell32.dll","int","SHAppBarMessage","int",$Message,"ptr",DllStructGetPtr($pabd))
If Not @error Then
If $lResult[0] Then
Return $lResult[0]
EndIf
EndIf
SetError(1)
Return False
EndFunc

;要設(shè)置不同的狀態(tài),請取消相應(yīng)語句的注釋
;DllStructSetData($pabd,9,$ABS_AUTOHIDE) ;自動(dòng)隱藏,且不位于窗口前
;DllStructSetData($pabd,9,$ABS_ALWAYSONTOP) ;不自動(dòng)隱藏,且位于窗口前
DllStructSetData($pabd,9,BitOR($ABS_ALWAYSONTOP,$ABS_AUTOHIDE)) ;自動(dòng)隱藏,且位于窗口前

SHAppBarMessage($ABM_SETSTATE,$pabd) ;發(fā)送ABM_SETSTATE消息應(yīng)用修改

更多關(guān)于SHAppBarMessage函數(shù)的信息請看這里。

5.隱藏任務(wù)欄、開始按鈕、任務(wù)欄圖標(biāo)等

說到這里我們已經(jīng)轉(zhuǎn)向了對任務(wù)欄的控制,同桌面一樣,任務(wù)欄也是一個(gè)窗口,開始按鈕、時(shí)鐘等都是其下的控件,我們可以像控制窗口一樣控制任務(wù)欄:

CODE: AutoIt

Opt("WinTitleMatchMode", 4)

$sTrayWindow = WinGetHandle("[CLASS:Shell_TrayWnd]") ;窗口句柄

$sTrayClock = ControlGetHandle($sTrayWindow,"","TrayClockWClass1") ;時(shí)鐘句柄
$sTrayNotify = ControlGetHandle($sTrayWindow,"","TrayNotifyWnd1") ;任務(wù)欄圖標(biāo)句柄
$sStartButton = ControlGetHandle($sTrayWindow,"","Button1") ;開始按鈕句柄

;隱藏任務(wù)欄
WinSetState($sTrayWindow,"",@SW_HIDE)

;隱藏任務(wù)欄時(shí)鐘
WinSetState($sTrayClock,"",@SW_SHOW)

;隱藏任務(wù)欄圖標(biāo)(會(huì)馬上還原)
WinSetState($sTrayNotify,"",@SW_HIDE)

;隱藏開始按鈕
WinSetState($sStartButton,"",@SW_HIDE)

6.桌面圖標(biāo)的相關(guān)控制

細(xì)心的朋友會(huì)發(fā)現(xiàn),我控制桌面圖標(biāo)時(shí)都是用的名為SendMessage的API函數(shù),而autoit里全部以_GUICtrlListView打頭的函數(shù)都是這樣定義的,也就是說,利用autoit已有的這些函數(shù)我們就能對桌面圖標(biāo)進(jìn)行控制,比如說:

CODE: AutoIt

#include <GuiListView.au3>
_GUICtrlListViewDeleteAllItems (ControlGetHandle("Program Manager","","SysListView321"))

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多