如何响应动态按钮的事件
本帖最后由 xyhqqaa 于 2013-5-23 00:53 编辑新手求助,工作需要,想弄个小东东。获取局域网内电脑的共享文件夹列表。现在测试自己电脑可以获取到列表。但是只是增加按钮而已。无法点击按钮打开相应文件夹,有点郁闷。
求指教下。哪里错了。还有个两个小问题,点击确定按钮的时候,如果实现删除清空之前获取的按钮。因为如果再次按下确定,就会叠加按钮。。头疼!!最后一个是关于_Net_Share_ShareEnum
,帮助上写的是检索服务器上资源共享的信息,但实际上我只需要获取C$,D$,E$之类的硬盘盘符,像IPC$,共享文件夹之类的就不需要显示了。
_Net_Share_FileGetInfo检索服务器特定资源的信息,不知道如何应用!
。。。。不知道写这么多有没有大哥能理解俺的意思不。。。。。能帮忙给点方法,感激不尽!!
代码如下#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <NetShare.au3>
#region ### START Koda GUI section ### Form=
Local $server, $button
Local $posx=0, $posy=1
;Opt("GUIOnEventMode", 1);启用EventMode
;GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "main")
$Form1 = GUICreate("Form1", 434, 507)
$Label = GUICtrlCreateLabel("计算机名:", 8, 16, 72, 20)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
$Input = GUICtrlCreateInput("", 80, 16, 209, 21)
;$SERVER = GUICtrlRead($Input)
$OK = GUICtrlCreateButton("确定", 304, 16, 123, 25)
$Group = GUICtrlCreateGroup("", 8, 48, 417, 449)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState()
#endregion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
$server = @ComputerName
$share = _Net_Share_ShareEnum($server)
$IPING = Ping($server, 250)
If $IPING = 0 Then MsgBox("", "", "连接错误,检测下网络啦!看自己网络有木有问题,或者对方网络有木有问题")
For $i = 1 To $share
If Mod($i, 6) = 0 And $i <> 0 Then
$posx += 1
$posy = 1
EndIf
$button[$share] = GUICtrlCreateButton($share[$i], 30 + $posx * 180, 75 * $posy - 15, 180, 30)
;GUICtrlSetOnEvent($button[$share] , "main")
$posy += 1
Next
EndSwitch
WEnd
#cs
Func main()
For $i = 1 To $share
Switch @GUI_CtrlId
Case -3
Exit
Case $button[$share[$i]]
MsgBox(0, "第 " & $i & " 个按钮", "我是按钮 " & $i & " 号!", 0, $Form1)
EndSwitch
Next
EndFunc
#ce 本帖最后由 shqf 于 2013-5-23 10:15 编辑
这种情况我比较喜欢用列表框。#include <Array.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <NetShare.au3>
#include <GuiListBox.au3>
#region ### START Koda GUI section ### Form=
Local $server
$Form1 = GUICreate("Form1", 292, 260)
$Label = GUICtrlCreateLabel("计算机名:", 8, 16, 72, 20)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
$Input = GUICtrlCreateInput("", 70, 16, 106, 20)
$OK = GUICtrlCreateButton("确定", 190, 14, 80, 25)
$Group = GUICtrlCreateGroup("共享目录", 8, 48, 274, 200)
$List1 = GUICtrlCreateList("", 16, 63, 161, 180)
$Button1 = GUICtrlCreateButton("打开", 190, 80, 80, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState()
#endregion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $OK
$server = @ComputerName
$share = _Net_Share_ShareEnum($server)
;_ArrayDisplay($share,'Debug~~~')
$IPING = Ping($server, 250)
If $IPING = 0 Then MsgBox("", "", "连接错误,检测下网络啦!看自己网络有木有问题,或者对方网络有木有问题")
_GUICtrlListBox_BeginUpdate($List1)
For $i = 1 To $share
If $share[$i]="2147483648" Then
_GUICtrlListBox_AddString($List1,$share[$i])
EndIf
Next
_GUICtrlListBox_EndUpdate($List1)
Case $Button1
If GUICtrlRead($List1)="" Then
MsgBox(0,"","请选择共享目录!")
else
For $i = 1 To $share
If $share[$i]=GUICtrlRead($List1) Then
;$DMA = DriveMapAdd("", "\\" & $server & "\" & $share[$i], 0)
Run("Explorer.exe /e,/root,\\" & $server & "\" & $share[$i])
EndIf
Next
EndIf
EndSwitch
WEnd
用事件模式,很好解决~
这个钱我就不赚了 ^ ___ ^ 发表于 4 小时前 | 只看该作者
用事件模式,很好解决~
这个钱我就不赚了 ^ ___ ^
版主,请注意休息 这种不定个数的,用treeview应该是更好看,我没使用过treeview,不知道能不能够的 删掉之前的,添加新的~ 回复 2# shqf
您好,请问下
If $share[$i] = "2147483648" Then
怎么理解 原按钮形式的#include <NetShare.au3>
Opt('GUIOnEventMode', 1)
Local $aiBtn, $aShare, $iSL = 0
Local $posx = 0, $posy = 1
$hGui = GUICreate('Form1', 434, 507)
GUISetOnEvent(-3, '_Main')
GUICtrlCreateLabel('计算机名:', 8, 16, 72, 20)
GUICtrlSetFont(-1, 10, 400, 0, 'MS Sans Serif')
$iInput = GUICtrlCreateInput(@ComputerName, 80, 16, 209, 21)
GUICtrlCreateButton('确定', 304, 16, 123, 25)
GUICtrlSetOnEvent(-1, '_Crate')
$Group = GUICtrlCreateGroup('', 8, 48, 417, 449)
GUICtrlCreateGroup('', -99, -99, 1, 1)
_Crate()
GUISetState()
While 1
Sleep(1000)
WEnd
Func _Crate()
If $iSL > 0 Then _Del()
$aShare = _Net_Share_ShareEnum(GUICtrlRead($iInput))
If @error Then Return
$iSL = $aShare
For $i = 1 To $iSL
If Mod($i, 6) = 0 And $i <> 0 Then
$posx += 1
$posy = 1
EndIf
$aiBtn[$i] = GUICtrlCreateButton($aShare[$i], 30 + $posx * 180, 75 * $posy - 15, 180, 30)
GUICtrlSetOnEvent(-1, '_Main')
$posy += 1
Next
EndFunc ;==>_Crate
Func _Del()
For $i = 1 To $iSL
GUICtrlDelete($aiBtn[$i])
Next
Dim $posx = 0, $posy = 1
EndFunc ;==>_Del
Func _Main()
Switch @GUI_CtrlId
Case -3
Exit
Case $aiBtn To $aiBtn[$iSL]
Local $ix = @GUI_CtrlId - $Group - 1
If MsgBox(1, '第 ' & $ix & ' 个按钮', $aShare[$ix] & @LF & '打开:' & $aShare[$ix], 0, $hGui) = 1 Then _
ShellExecute($aShare[$ix])
EndSwitch
EndFunc ;==>_Main
本帖最后由 shqf 于 2013-5-23 12:44 编辑
回复 7# xyhqqaa
为共享类型$STYPE_SPECIA(专用共享)的十进制值。共享类型与其十六进制值对应如下,可以组合:
$STYPE_DISKTREE = 0x00000000
$STYPE_PRINTQ = 0x00000001
$STYPE_DEVICE = 0x00000002
$STYPE_IPC = 0x00000003
$STYPE_TEMPORARY = 0x40000000
$STYPE_SPECIAL = 0x80000000
最好第2 行(磁盘驱动器)与第6行(专用共享)进行组合 进来看看谁领钱的! 居然有人敢领钱啊。{:face (125):}
页:
[1]