Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] GUIOnEventMode vs дочерняя форма vs Combo (обработка цикла)

Ответить
Настройки темы
[решено] GUIOnEventMode vs дочерняя форма vs Combo (обработка цикла)

Ветеран


Сообщения: 903
Благодарности: 161


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: saavaage
Дата: 23-08-2010
Есть форма с вкладкой, на которой выводится инфо о текущих адаптерах системы и статистика сессии по ним. Встала проблема с совмещением режима EventMode и собственно, обработкой событий Combo. Ситуация осложнена наличием дочернего окна с настройками утилиты (планируется):
читать дальше »
Код: Выделить весь код
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
#Include <ComboConstants.au3>
#Include <GUIComboBox.au3>
#Include <GUIConstantsEx.au3>
#Include <StaticConstants.au3>

Global Const $MIB_IF_TYPE_OTHER = 1
Global Const $MIB_IF_TYPE_ETHERNET_CSMACD = 6
Global Const $MIB_IF_TYPE_ISO88025_TOKENRING = 9
Global Const $MIB_IF_TYPE_PPP = 23
Global Const $MIB_IF_TYPE_SOFTWARE_LOOPBACK = 24
Global Const $MIB_IF_TYPE_ATM = 37
Global Const $MIB_IF_TYPE_IEEE80211 = 71
Global Const $MIB_IF_TYPE_TUNNEL = 131
Global Const $MIB_IF_TYPE_IEEE1394 = 144

Global Const $MIB_IF_ADMIN_STATUS_UP = 1
Global Const $MIB_IF_ADMIN_STATUS_DOWN = 2
Global Const $MIB_IF_ADMIN_STATUS_TESTING = 3

Global Const $MIB_IF_OPER_STATUS_NON_OPERATIONAL = 0
Global Const $MIB_IF_OPER_STATUS_UNREACHABLE = 1
Global Const $MIB_IF_OPER_STATUS_DISCONNECTED = 2
Global Const $MIB_IF_OPER_STATUS_CONNECTING = 3
Global Const $MIB_IF_OPER_STATUS_CONNECTED = 4
Global Const $MIB_IF_OPER_STATUS_OPERATIONAL = 5

Global Const $tagMIB_IFROW = 'wchar Name[256];dword Index;dword Type;dword Mtu;dword Speed;dword PhysAddrLen;byte PhysAddr[8];dword AdminStatus;dword OperStatus;dword LastChange;dword InOctets;dword InUcastPkts;dword InNUcastPkts;dword InDiscards;dword InErrors;dword InUnknownProtos;dword OutOctets;dword OutUcastPkts;dword OutNUcastPkts;dword OutDiscards;dword OutErrors;dword OutQLen;dword DescrLen;char Descr[256]'

Global $Dll, $Combo, $Label41, $Label42, $Timer, $Data, $Index = 0, $pIndex = 0, $Adapter[1][3] = [[0]]


Opt("GUIOnEventMode", 1)

$hMain_GUI = GUICreate("Диагностика и Настройка", 619, 442, 189, 122)
GUISetIcon('setupapi.dll', 1)
GUISetFont(8.5, 400, 0, 'MS Shell Dlg')
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")

$Tab1 = GUICtrlCreateTab(8, 16, 601, 377)

;;;; Network ;;;;
$Network = GUICtrlCreateTabItem("Network")

;; интернет  - адаптеры
$Dll = DllOpen('IPHlpApi.dll')

$Data = _WinAPI_GetIfTable($MIB_IF_TYPE_ETHERNET_CSMACD, $Dll)
If Not @error Then
    For $i = 1 To $Data[0][0]
        $Adapter[0][0] += 1
        ReDim $Adapter[$Adapter[0][0] + 1][3]
        $Adapter[$Adapter[0][0]][0] = $Data[$i][1 ] ; Interface index
        $Adapter[$Adapter[0][0]][2] = $Data[$i][19] ; Description
    Next
EndIf

GUICtrlCreateGroup("Интернет-Адаптеры", 16, 288, 585, 97)
GUICtrlCreateLabel("Адаптер:", 32, 309, 49, 17)
$Combo = GUICtrlCreateCombo("", 88, 307,505, 25,  $CBS_DROPDOWNLIST)

If $Adapter[0][0] Then
    For $i = 1 To $Adapter[0][0]
        _GUICtrlComboBox_AddString($Combo, $Adapter[$i][2])
    Next
    $Index = 1
Else
    _GUICtrlComboBox_AddString($Combo, 'None')
    GUICtrlSetState(-1, $GUI_DISABLE)
EndIf
_GUICtrlComboBox_SetCurSel($Combo, 0)
GUICtrlCreateGroup("Трансфер (Bytes + MB):", 24, 333, 569, 44)
GUICtrlCreateLabel("Отдача:", 34, 354, 43, 17)
$Label41 = GUICtrlCreateInput("", 87, 353, 81, 17, $SS_RIGHT)
GUICtrlCreateInput("", 184, 353, 81, 17, $SS_RIGHT)
GUICtrlCreateLabel("Прием:", 346, 354, 43, 17)
$Label42 = GUICtrlCreateInput("", 399, 353, 81, 17, $SS_RIGHT)
GUICtrlCreateInput("", 496, 353, 81, 17, $SS_RIGHT)
_Combo()

DllClose($Dll)

GUICtrlCreateTabItem("")

;;;; Common Buttons ;;;;
$nSettings_Button = GUICtrlCreateButton("Опции", 500, 7, 105, 25)
$nExit_Button = GUICtrlCreateButton("Выход", 535, 400, 70, 33)
GUICtrlSetOnEvent($nExit_Button, "_MainGUI_Events")
GUICtrlSetOnEvent($nSettings_Button, "_MainGUI_Events")
GUISetOnEvent($GUI_EVENT_CLOSE, "_MainGUI_Events", $hMain_GUI)

GUISetState()

While 1
    Sleep(100)
WEnd


Func CLOSEClicked()
  Exit
EndFunc

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;      FUNCTIONS             ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Func _MainGUI_Events()
	Switch @GUI_CtrlId
        Case $GUI_EVENT_CLOSE, $nExit_Button
            Exit
        Case $nSettings_Button
            _Settings_GUI($hMain_GUI)
	EndSwitch
EndFunc

Func _Settings_GUI($hParent)
    Local $iOpt_GOEM, $hSettings_GUI, $nStngs_Close_Button, $nStngs_Save_Button

    $iOpt_GOEM = Opt("GUIOnEventMode", 0)

    $hSettings_GUI = GUICreate("Настройки", 400, 250, -1, -1, -1, -1, $hParent)
    $nStngs_Close_Button = GUICtrlCreateButton("Выход", 20, 220, 60, 20)
    $nStngs_Save_Button = GUICtrlCreateButton("Сохранить", 90, 220, 60, 20)

    GUISetState(@SW_DISABLE, $hParent)
    GUISetState(@SW_SHOW, $hSettings_GUI)

    While 1
	   Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE, $nStngs_Close_Button
                ExitLoop
            Case $nStngs_Save_Button
                MsgBox(64, 'Сохранение настроек', 'Изменения сохранены!', 0, $hSettings_GUI)
			EndSwitch
    WEnd

    GUISetState(@SW_ENABLE, $hParent)
    GUISetState(@SW_HIDE, $hSettings_GUI)

    Opt("GUIOnEventMode", $iOpt_GOEM)
EndFunc

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;           SECTIONS       ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;; Network Section ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; определение текущего АДАПТЕРА и его sent/receive
Func _Combo()
	While 1
    If ($Index) And (($Index <> $pIndex) Or (TimerDiff($Timer) > 1000)) Then
        $Data = _WinAPI_GetIfEntry($Adapter[$Index][0], $Dll)
        If Not @error Then
            GUICtrlSetData($Label41, _Str($Data[14]) & ' bytes')
            GUICtrlSetData($Label42, _Str($Data[8 ]) & ' bytes')
            GUICtrlSetData($Label41 + 1, StringFormat('%.2f', $Data[14] / 1024 / 1024) & ' MB')
            GUICtrlSetData($Label42 + 1, StringFormat('%.2f', $Data[8 ] / 1024 / 1024) & ' MB')
        Else
            GUICtrlSetData($Label41, '')
            GUICtrlSetData($Label42, '')
        EndIf
        $Timer = TimerInit()
        $pIndex = $Index
    EndIf
        $Index = _GUICtrlComboBox_GetCurSel($Combo) + 1
	WEnd
EndFunc


Func _Str($iValue)

    Local $Result = '', $Str = String($iValue)

    While StringLen($Str)
        $Result = '.' & StringRight($Str, 3) & $Result
        $Str = StringTrimRight($Str, 3)
    WEnd
    Return StringTrimLeft($Result, 1)
EndFunc   ;==>_Str

Func _WinAPI_GetIfEntry($iIndex, $Dll = -1)

    Local $Ret, $Data, $Addr, $Count
    Local $tMIB_IFROW

    If $Dll < 0 Then
        $Dll = 'IPHlpApi.dll'
    EndIf

    $tMIB_IFROW = DllStructCreate($tagMIB_IFROW)
    DllStructSetData($tMIB_IFROW, 2, $iIndex)
    $Ret = DLLCall($Dll, 'dword', 'GetIfEntry', 'ptr', DllStructGetPtr($tMIB_IFROW))
    If (@error) Or ($Ret[0]) Then
        Return SetError($Ret[0], 0, 0)
    EndIf
    Dim $Data[20]
    $Data[0 ] = DllStructGetData($tMIB_IFROW, 'Name')
    $Data[1 ] = $iIndex
    $Data[2 ] = DllStructGetData($tMIB_IFROW, 'Type')
    $Data[3 ] = DllStructGetData($tMIB_IFROW, 'Mtu')
    $Data[4 ] = DllStructGetData($tMIB_IFROW, 'Speed')
    $Count = DllStructGetData($tMIB_IFROW, 'PhysAddrLen')
    $Addr = ''
    For $i = 1 To $Count
        $Addr &= Hex(DllStructGetData($tMIB_IFROW, 'PhysAddr', $i), 2) & '-'
    Next
    $Data[5 ] = StringTrimRight($Addr, 1)
    $Data[6 ] = DllStructGetData($tMIB_IFROW, 'AdminStatus')
    $Data[7 ] = DllStructGetData($tMIB_IFROW, 'OperStatus')
    $Data[8 ] = DllStructGetData($tMIB_IFROW, 'InOctets')
    $Data[9 ] = DllStructGetData($tMIB_IFROW, 'InUcastPkts')
    $Data[10] = DllStructGetData($tMIB_IFROW, 'InNUcastPkts')
    $Data[11] = DllStructGetData($tMIB_IFROW, 'InDiscards')
    $Data[12] = DllStructGetData($tMIB_IFROW, 'InErrors')
    $Data[13] = DllStructGetData($tMIB_IFROW, 'InUnknownProtos')
    $Data[14] = DllStructGetData($tMIB_IFROW, 'OutOctets')
    $Data[15] = DllStructGetData($tMIB_IFROW, 'OutUcastPkts')
    $Data[16] = DllStructGetData($tMIB_IFROW, 'OutNUcastPkts')
    $Data[17] = DllStructGetData($tMIB_IFROW, 'OutDiscards')
    $Data[18] = DllStructGetData($tMIB_IFROW, 'OutErrors')
    $Data[19] = StringLeft(DllStructGetData($tMIB_IFROW, 'Descr'), DllStructGetData($tMIB_IFROW, 'DescrLen') - 1)
    Return $Data
EndFunc   ;==>_WinAPI_GetIfEntry

Func _WinAPI_GetIfTable($iType = 0, $Dll = -1)

    Local $Ret, $Row, $Type, $Tag, $Tab, $Addr, $Count, $Lenght
    Local $tMIB_IFTABLE, $tMIB_IFROW

    If $Dll < 0 Then
        $Dll = 'IPHlpApi.dll'
    EndIf

    $tMIB_IFROW = DllStructCreate($tagMIB_IFROW)
    $Row = 'byte[' & DllStructGetSize($tMIB_IFROW) & ']'
    $Tag = 'dword;'
    For $i = 1 To 32
        $Tag &= $Row & ';'
    Next
    $tMIB_IFTABLE = DllStructCreate($Tag)
    $Ret = DLLCall($Dll, 'dword', 'GetIfTable', 'ptr', DllStructGetPtr($tMIB_IFTABLE), 'long*', DllStructGetSize($tMIB_IFTABLE), 'int', 1)
    If (@error) Or ($Ret[0]) Then
        Return SetError($Ret[0], 0, 0)
    EndIf
    $Count = DllStructGetData($tMIB_IFTABLE, 1)
    Dim $Tab[$Count + 1][20]
    $Tab[0][0] = 0
    For $i = 1 To $Count
        $tMIB_IFROW = DllStructCreate($tagMIB_IFROW, DllStructGetPtr($tMIB_IFTABLE, $i + 1))
        $Type = DllStructGetData($tMIB_IFROW, 'Type')
        If ($iType = 0) Or ($iType = $Type) Then
            $Tab[0][0] += 1
            $Tab[$Tab[0][0]][0 ] = DllStructGetData($tMIB_IFROW, 'Name')
            $Tab[$Tab[0][0]][1 ] = DllStructGetData($tMIB_IFROW, 'Index')
            $Tab[$Tab[0][0]][2 ] = $Type
            $Tab[$Tab[0][0]][3 ] = DllStructGetData($tMIB_IFROW, 'Mtu')
            $Tab[$Tab[0][0]][4 ] = DllStructGetData($tMIB_IFROW, 'Speed')
            $Lenght = DllStructGetData($tMIB_IFROW, 'PhysAddrLen')
            $Addr = ''
            For $j = 1 To $Lenght
                $Addr &= Hex(DllStructGetData($tMIB_IFROW, 'PhysAddr', $j), 2) & '-'
            Next
            $Tab[$Tab[0][0]][5 ] = StringTrimRight($Addr, 1)
            $Tab[$Tab[0][0]][6 ] = DllStructGetData($tMIB_IFROW, 'AdminStatus')
            $Tab[$Tab[0][0]][7 ] = DllStructGetData($tMIB_IFROW, 'OperStatus')
            $Tab[$Tab[0][0]][8 ] = DllStructGetData($tMIB_IFROW, 'InOctets')
            $Tab[$Tab[0][0]][9 ] = DllStructGetData($tMIB_IFROW, 'InUcastPkts')
            $Tab[$Tab[0][0]][10] = DllStructGetData($tMIB_IFROW, 'InNUcastPkts')
            $Tab[$Tab[0][0]][11] = DllStructGetData($tMIB_IFROW, 'InDiscards')
            $Tab[$Tab[0][0]][12] = DllStructGetData($tMIB_IFROW, 'InErrors')
            $Tab[$Tab[0][0]][13] = DllStructGetData($tMIB_IFROW, 'InUnknownProtos')
            $Tab[$Tab[0][0]][14] = DllStructGetData($tMIB_IFROW, 'OutOctets')
            $Tab[$Tab[0][0]][15] = DllStructGetData($tMIB_IFROW, 'OutUcastPkts')
            $Tab[$Tab[0][0]][16] = DllStructGetData($tMIB_IFROW, 'OutNUcastPkts')
            $Tab[$Tab[0][0]][17] = DllStructGetData($tMIB_IFROW, 'OutDiscards')
            $Tab[$Tab[0][0]][18] = DllStructGetData($tMIB_IFROW, 'OutErrors')
            $Tab[$Tab[0][0]][19] = StringLeft(DllStructGetData($tMIB_IFROW, 'Descr'), DllStructGetData($tMIB_IFROW, 'DescrLen') - 1)
        EndIf
    Next
    If $Tab[0][0] < $Count Then
        ReDim $Tab[$Tab[0][0] + 1][20]
    EndIf
    Return $Tab
EndFunc   ;==>_WinAPI_GetIfTable

;; конец определение текущего адаптера и его sent/receive

;; End Network  Section  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


Проблема - как только подключаю цикл в функции _Combo() (While 1 .... Wend), перестает отображаться окно формы на экране

Отправлено: 15:11, 23-08-2010

 

Аватара для FlatX007

Ветеран


Сообщения: 553
Благодарности: 87

Профиль | Отправить PM | Цитировать


Пример не рабочий ... нет кучи инклюдов, мне нужно найти их самостоятельно тратить время?

В функции _Combo() присутствует без конечный цикл While 1
Функция DllClose($Dll) не на месте

Не знаю особо не проверял, не вникал в не рабочий пример! :-*

Код: Выделить весь код
AdlibRegister('_Combo')

;~ ....
;~ ....
;~ ....

Func _Combo()
    If ($Index) And (($Index <> $pIndex) Or (TimerDiff($Timer) > 1000)) Then
        $Data = _WinAPI_GetIfEntry($Adapter[$Index][0], $Dll)
        If Not @error Then
            GUICtrlSetData($Label41, _Str($Data[14]) & ' bytes')
            GUICtrlSetData($Label42, _Str($Data[8 ]) & ' bytes')
            GUICtrlSetData($Label41 + 1, StringFormat('%.2f', $Data[14] / 1024 / 1024) & ' MB')
            GUICtrlSetData($Label42 + 1, StringFormat('%.2f', $Data[8 ] / 1024 / 1024) & ' MB')
        Else
            GUICtrlSetData($Label41, '')
            GUICtrlSetData($Label42, '')
        EndIf
        $Timer = TimerInit()
        $pIndex = $Index
    EndIf
    $Index = _GUICtrlComboBox_GetCurSel($Combo) + 1
EndFunc

Отправлено: 19:27, 23-08-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 903
Благодарности: 161

Профиль | Отправить PM | Цитировать


FlatX007, такой вариант дает вывод инфо при загрузке, но при переключении на другой адаптер информация не обновляется. Насколько я понимаю, для обновления информации при переключении адаптеров, должен быть цикл.

Пример сейчас откорректирую и выложу без лишних инклюдов (просто вырезал наспех, извините)

Вот:

читать дальше »
Код: Выделить весь код
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
#Include <ComboConstants.au3>
#Include <GUIComboBox.au3>
#Include <GUIConstantsEx.au3>
#Include <StaticConstants.au3>

Global Const $MIB_IF_TYPE_OTHER = 1
Global Const $MIB_IF_TYPE_ETHERNET_CSMACD = 6
Global Const $MIB_IF_TYPE_ISO88025_TOKENRING = 9
Global Const $MIB_IF_TYPE_PPP = 23
Global Const $MIB_IF_TYPE_SOFTWARE_LOOPBACK = 24
Global Const $MIB_IF_TYPE_ATM = 37
Global Const $MIB_IF_TYPE_IEEE80211 = 71
Global Const $MIB_IF_TYPE_TUNNEL = 131
Global Const $MIB_IF_TYPE_IEEE1394 = 144

Global Const $MIB_IF_ADMIN_STATUS_UP = 1
Global Const $MIB_IF_ADMIN_STATUS_DOWN = 2
Global Const $MIB_IF_ADMIN_STATUS_TESTING = 3

Global Const $MIB_IF_OPER_STATUS_NON_OPERATIONAL = 0
Global Const $MIB_IF_OPER_STATUS_UNREACHABLE = 1
Global Const $MIB_IF_OPER_STATUS_DISCONNECTED = 2
Global Const $MIB_IF_OPER_STATUS_CONNECTING = 3
Global Const $MIB_IF_OPER_STATUS_CONNECTED = 4
Global Const $MIB_IF_OPER_STATUS_OPERATIONAL = 5

Global Const $tagMIB_IFROW = 'wchar Name[256];dword Index;dword Type;dword Mtu;dword Speed;dword PhysAddrLen;byte PhysAddr[8];dword AdminStatus;dword OperStatus;dword LastChange;dword InOctets;dword InUcastPkts;dword InNUcastPkts;dword InDiscards;dword InErrors;dword InUnknownProtos;dword OutOctets;dword OutUcastPkts;dword OutNUcastPkts;dword OutDiscards;dword OutErrors;dword OutQLen;dword DescrLen;char Descr[256]'

Global $Dll, $Combo, $Label41, $Label42, $Timer, $Data, $Index = 0, $pIndex = 0, $Adapter[1][3] = [[0]]


Opt("GUIOnEventMode", 1)

$hMain_GUI = GUICreate("Диагностика и Настройка", 619, 442, 189, 122)
GUISetIcon('setupapi.dll', 1)
GUISetFont(8.5, 400, 0, 'MS Shell Dlg')
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")

$Tab1 = GUICtrlCreateTab(8, 16, 601, 377)

;;;; Network ;;;;
$Network = GUICtrlCreateTabItem("Network")

;; интернет  - адаптеры
$Dll = DllOpen('IPHlpApi.dll')

$Data = _WinAPI_GetIfTable($MIB_IF_TYPE_ETHERNET_CSMACD, $Dll)
If Not @error Then
    For $i = 1 To $Data[0][0]
        $Adapter[0][0] += 1
        ReDim $Adapter[$Adapter[0][0] + 1][3]
        $Adapter[$Adapter[0][0]][0] = $Data[$i][1 ] ; Interface index
        $Adapter[$Adapter[0][0]][2] = $Data[$i][19] ; Description
    Next
EndIf

GUICtrlCreateGroup("Интернет-Адаптеры", 16, 288, 585, 97)
GUICtrlCreateLabel("Адаптер:", 32, 309, 49, 17)
$Combo = GUICtrlCreateCombo("", 88, 307,505, 25,  $CBS_DROPDOWNLIST)

If $Adapter[0][0] Then
    For $i = 1 To $Adapter[0][0]
        _GUICtrlComboBox_AddString($Combo, $Adapter[$i][2])
    Next
    $Index = 1
Else
    _GUICtrlComboBox_AddString($Combo, 'None')
    GUICtrlSetState(-1, $GUI_DISABLE)
EndIf
_GUICtrlComboBox_SetCurSel($Combo, 0)
GUICtrlCreateGroup("Трансфер (Bytes + MB):", 24, 333, 569, 44)
GUICtrlCreateLabel("Отдача:", 34, 354, 43, 17)
$Label41 = GUICtrlCreateInput("", 87, 353, 81, 17, $SS_RIGHT)
GUICtrlCreateInput("", 184, 353, 81, 17, $SS_RIGHT)
GUICtrlCreateLabel("Прием:", 346, 354, 43, 17)
$Label42 = GUICtrlCreateInput("", 399, 353, 81, 17, $SS_RIGHT)
GUICtrlCreateInput("", 496, 353, 81, 17, $SS_RIGHT)
_Combo()

DllClose($Dll)

GUICtrlCreateTabItem("")

;;;; Common Buttons ;;;;
$nSettings_Button = GUICtrlCreateButton("Опции", 500, 7, 105, 25)
$nExit_Button = GUICtrlCreateButton("Выход", 535, 400, 70, 33)
GUICtrlSetOnEvent($nExit_Button, "_MainGUI_Events")
GUICtrlSetOnEvent($nSettings_Button, "_MainGUI_Events")
GUISetOnEvent($GUI_EVENT_CLOSE, "_MainGUI_Events", $hMain_GUI)

GUISetState()

While 1
    Sleep(100)
WEnd


Func CLOSEClicked()
  Exit
EndFunc

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;      FUNCTIONS             ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Func _MainGUI_Events()
	Switch @GUI_CtrlId
        Case $GUI_EVENT_CLOSE, $nExit_Button
            Exit
        Case $nSettings_Button
            _Settings_GUI($hMain_GUI)
	EndSwitch
EndFunc

Func _Settings_GUI($hParent)
    Local $iOpt_GOEM, $hSettings_GUI, $nStngs_Close_Button, $nStngs_Save_Button

    $iOpt_GOEM = Opt("GUIOnEventMode", 0)

    $hSettings_GUI = GUICreate("Настройки", 400, 250, -1, -1, -1, -1, $hParent)
    $nStngs_Close_Button = GUICtrlCreateButton("Выход", 20, 220, 60, 20)
    $nStngs_Save_Button = GUICtrlCreateButton("Сохранить", 90, 220, 60, 20)

    GUISetState(@SW_DISABLE, $hParent)
    GUISetState(@SW_SHOW, $hSettings_GUI)

    While 1
	   Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE, $nStngs_Close_Button
                ExitLoop
            Case $nStngs_Save_Button
                MsgBox(64, 'Сохранение настроек', 'Изменения сохранены!', 0, $hSettings_GUI)
			EndSwitch
    WEnd

    GUISetState(@SW_ENABLE, $hParent)
    GUISetState(@SW_HIDE, $hSettings_GUI)

    Opt("GUIOnEventMode", $iOpt_GOEM)
EndFunc

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;           SECTIONS       ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;; Network Section ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; определение текущего АДАПТЕРА и его sent/receive
Func _Combo()
	While 1
    If ($Index) And (($Index <> $pIndex) Or (TimerDiff($Timer) > 1000)) Then
        $Data = _WinAPI_GetIfEntry($Adapter[$Index][0], $Dll)
        If Not @error Then
            GUICtrlSetData($Label41, _Str($Data[14]) & ' bytes')
            GUICtrlSetData($Label42, _Str($Data[8 ]) & ' bytes')
            GUICtrlSetData($Label41 + 1, StringFormat('%.2f', $Data[14] / 1024 / 1024) & ' MB')
            GUICtrlSetData($Label42 + 1, StringFormat('%.2f', $Data[8 ] / 1024 / 1024) & ' MB')
        Else
            GUICtrlSetData($Label41, '')
            GUICtrlSetData($Label42, '')
        EndIf
        $Timer = TimerInit()
        $pIndex = $Index
    EndIf
        $Index = _GUICtrlComboBox_GetCurSel($Combo) + 1
	WEnd
EndFunc


Func _Str($iValue)

    Local $Result = '', $Str = String($iValue)

    While StringLen($Str)
        $Result = '.' & StringRight($Str, 3) & $Result
        $Str = StringTrimRight($Str, 3)
    WEnd
    Return StringTrimLeft($Result, 1)
EndFunc   ;==>_Str

Func _WinAPI_GetIfEntry($iIndex, $Dll = -1)

    Local $Ret, $Data, $Addr, $Count
    Local $tMIB_IFROW

    If $Dll < 0 Then
        $Dll = 'IPHlpApi.dll'
    EndIf

    $tMIB_IFROW = DllStructCreate($tagMIB_IFROW)
    DllStructSetData($tMIB_IFROW, 2, $iIndex)
    $Ret = DLLCall($Dll, 'dword', 'GetIfEntry', 'ptr', DllStructGetPtr($tMIB_IFROW))
    If (@error) Or ($Ret[0]) Then
        Return SetError($Ret[0], 0, 0)
    EndIf
    Dim $Data[20]
    $Data[0 ] = DllStructGetData($tMIB_IFROW, 'Name')
    $Data[1 ] = $iIndex
    $Data[2 ] = DllStructGetData($tMIB_IFROW, 'Type')
    $Data[3 ] = DllStructGetData($tMIB_IFROW, 'Mtu')
    $Data[4 ] = DllStructGetData($tMIB_IFROW, 'Speed')
    $Count = DllStructGetData($tMIB_IFROW, 'PhysAddrLen')
    $Addr = ''
    For $i = 1 To $Count
        $Addr &= Hex(DllStructGetData($tMIB_IFROW, 'PhysAddr', $i), 2) & '-'
    Next
    $Data[5 ] = StringTrimRight($Addr, 1)
    $Data[6 ] = DllStructGetData($tMIB_IFROW, 'AdminStatus')
    $Data[7 ] = DllStructGetData($tMIB_IFROW, 'OperStatus')
    $Data[8 ] = DllStructGetData($tMIB_IFROW, 'InOctets')
    $Data[9 ] = DllStructGetData($tMIB_IFROW, 'InUcastPkts')
    $Data[10] = DllStructGetData($tMIB_IFROW, 'InNUcastPkts')
    $Data[11] = DllStructGetData($tMIB_IFROW, 'InDiscards')
    $Data[12] = DllStructGetData($tMIB_IFROW, 'InErrors')
    $Data[13] = DllStructGetData($tMIB_IFROW, 'InUnknownProtos')
    $Data[14] = DllStructGetData($tMIB_IFROW, 'OutOctets')
    $Data[15] = DllStructGetData($tMIB_IFROW, 'OutUcastPkts')
    $Data[16] = DllStructGetData($tMIB_IFROW, 'OutNUcastPkts')
    $Data[17] = DllStructGetData($tMIB_IFROW, 'OutDiscards')
    $Data[18] = DllStructGetData($tMIB_IFROW, 'OutErrors')
    $Data[19] = StringLeft(DllStructGetData($tMIB_IFROW, 'Descr'), DllStructGetData($tMIB_IFROW, 'DescrLen') - 1)
    Return $Data
EndFunc   ;==>_WinAPI_GetIfEntry

Func _WinAPI_GetIfTable($iType = 0, $Dll = -1)

    Local $Ret, $Row, $Type, $Tag, $Tab, $Addr, $Count, $Lenght
    Local $tMIB_IFTABLE, $tMIB_IFROW

    If $Dll < 0 Then
        $Dll = 'IPHlpApi.dll'
    EndIf

    $tMIB_IFROW = DllStructCreate($tagMIB_IFROW)
    $Row = 'byte[' & DllStructGetSize($tMIB_IFROW) & ']'
    $Tag = 'dword;'
    For $i = 1 To 32
        $Tag &= $Row & ';'
    Next
    $tMIB_IFTABLE = DllStructCreate($Tag)
    $Ret = DLLCall($Dll, 'dword', 'GetIfTable', 'ptr', DllStructGetPtr($tMIB_IFTABLE), 'long*', DllStructGetSize($tMIB_IFTABLE), 'int', 1)
    If (@error) Or ($Ret[0]) Then
        Return SetError($Ret[0], 0, 0)
    EndIf
    $Count = DllStructGetData($tMIB_IFTABLE, 1)
    Dim $Tab[$Count + 1][20]
    $Tab[0][0] = 0
    For $i = 1 To $Count
        $tMIB_IFROW = DllStructCreate($tagMIB_IFROW, DllStructGetPtr($tMIB_IFTABLE, $i + 1))
        $Type = DllStructGetData($tMIB_IFROW, 'Type')
        If ($iType = 0) Or ($iType = $Type) Then
            $Tab[0][0] += 1
            $Tab[$Tab[0][0]][0 ] = DllStructGetData($tMIB_IFROW, 'Name')
            $Tab[$Tab[0][0]][1 ] = DllStructGetData($tMIB_IFROW, 'Index')
            $Tab[$Tab[0][0]][2 ] = $Type
            $Tab[$Tab[0][0]][3 ] = DllStructGetData($tMIB_IFROW, 'Mtu')
            $Tab[$Tab[0][0]][4 ] = DllStructGetData($tMIB_IFROW, 'Speed')
            $Lenght = DllStructGetData($tMIB_IFROW, 'PhysAddrLen')
            $Addr = ''
            For $j = 1 To $Lenght
                $Addr &= Hex(DllStructGetData($tMIB_IFROW, 'PhysAddr', $j), 2) & '-'
            Next
            $Tab[$Tab[0][0]][5 ] = StringTrimRight($Addr, 1)
            $Tab[$Tab[0][0]][6 ] = DllStructGetData($tMIB_IFROW, 'AdminStatus')
            $Tab[$Tab[0][0]][7 ] = DllStructGetData($tMIB_IFROW, 'OperStatus')
            $Tab[$Tab[0][0]][8 ] = DllStructGetData($tMIB_IFROW, 'InOctets')
            $Tab[$Tab[0][0]][9 ] = DllStructGetData($tMIB_IFROW, 'InUcastPkts')
            $Tab[$Tab[0][0]][10] = DllStructGetData($tMIB_IFROW, 'InNUcastPkts')
            $Tab[$Tab[0][0]][11] = DllStructGetData($tMIB_IFROW, 'InDiscards')
            $Tab[$Tab[0][0]][12] = DllStructGetData($tMIB_IFROW, 'InErrors')
            $Tab[$Tab[0][0]][13] = DllStructGetData($tMIB_IFROW, 'InUnknownProtos')
            $Tab[$Tab[0][0]][14] = DllStructGetData($tMIB_IFROW, 'OutOctets')
            $Tab[$Tab[0][0]][15] = DllStructGetData($tMIB_IFROW, 'OutUcastPkts')
            $Tab[$Tab[0][0]][16] = DllStructGetData($tMIB_IFROW, 'OutNUcastPkts')
            $Tab[$Tab[0][0]][17] = DllStructGetData($tMIB_IFROW, 'OutDiscards')
            $Tab[$Tab[0][0]][18] = DllStructGetData($tMIB_IFROW, 'OutErrors')
            $Tab[$Tab[0][0]][19] = StringLeft(DllStructGetData($tMIB_IFROW, 'Descr'), DllStructGetData($tMIB_IFROW, 'DescrLen') - 1)
        EndIf
    Next
    If $Tab[0][0] < $Count Then
        ReDim $Tab[$Tab[0][0] + 1][20]
    EndIf
    Return $Tab
EndFunc   ;==>_WinAPI_GetIfTable

;; конец определение текущего адаптера и его sent/receive

;; End Network  Section  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


PS шапку тоже поправил

-------
мы рождены, чтоб сказку сделать былью


Отправлено: 19:51, 23-08-2010 | #3


Аватара для FlatX007

Ветеран


Сообщения: 553
Благодарности: 87

Профиль | Отправить PM | Цитировать


А зачем нужен режим EventMode ? обычным никак что ли ?

Отправлено: 20:25, 23-08-2010 | #4


Ветеран


Сообщения: 903
Благодарности: 161

Профиль | Отправить PM | Цитировать


FlatX007, Creat0R посоветовал (http://forum.oszone.net/post-1478430-9.html). Мне так показалось более изящнее, чтоли. Вроде все работало, так вот взялся переделать и нарвался на косяк...

PS просто на форме много вкладок и все с обработкой инфы + по кнопкам. Если все кнопки "повесить" на MessageLoop, боюсь будут проблемы.

-------
мы рождены, чтоб сказку сделать былью


Отправлено: 20:34, 23-08-2010 | #5


Аватара для FlatX007

Ветеран


Сообщения: 553
Благодарности: 87

Профиль | Отправить PM | Цитировать


Я не работал с этим режимом, мне так и не удалось считать "активный" таб в режиме EventMode.

Цитата saavaage:
Если все кнопки "повесить" на MessageLoop, боюсь будут проблемы. »
Проблем не будет никаких!

Пример с табами:
Код: Выделить весь код
$Form1 = GUICreate("Test", 250, 106, 192, 124)
$Tab1 = GUICtrlCreateTab(0, 0, 249, 105)
$TabSheet1 = GUICtrlCreateTabItem("Вкладка одЫн")
$TabSheet2 = GUICtrlCreateTabItem("Вкладка два")
GUICtrlCreateTabItem("")
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case -3
            Exit
        Case $Tab1
            ConsoleWrite("Активный таб - " & GUICtrlRead($Tab1) & @CRLF)
    EndSwitch
WEnd
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:51, 23-08-2010 | #6


Ветеран


Сообщения: 903
Благодарности: 161

Профиль | Отправить PM | Цитировать


FlatX007, у меня раньше и был этот режим. Взялся переделывать на перспективу. Практически все уже адаптировал и вот...
Подождем, что скажут остальные участники...

Пока могу только выложить скрипт, на основе которого я и извращался..

читать дальше »
Код: Выделить весь код
cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.0.0
 Author:         Yashied

 Script Function:
    Traffic metter. (Example)

#ce ----------------------------------------------------------------------------

#Region Initialization

#NoTrayIcon

#Include <ComboConstants.au3>
#Include <GUIComboBox.au3>
#Include <GUIConstantsEx.au3>
#Include <StaticConstants.au3>
#Include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)

Global Const $MIB_IF_TYPE_OTHER = 1
Global Const $MIB_IF_TYPE_ETHERNET_CSMACD = 6
Global Const $MIB_IF_TYPE_ISO88025_TOKENRING = 9
Global Const $MIB_IF_TYPE_PPP = 23
Global Const $MIB_IF_TYPE_SOFTWARE_LOOPBACK = 24
Global Const $MIB_IF_TYPE_ATM = 37
Global Const $MIB_IF_TYPE_IEEE80211 = 71
Global Const $MIB_IF_TYPE_TUNNEL = 131
Global Const $MIB_IF_TYPE_IEEE1394 = 144

Global Const $MIB_IF_ADMIN_STATUS_UP = 1
Global Const $MIB_IF_ADMIN_STATUS_DOWN = 2
Global Const $MIB_IF_ADMIN_STATUS_TESTING = 3

Global Const $MIB_IF_OPER_STATUS_NON_OPERATIONAL = 0
Global Const $MIB_IF_OPER_STATUS_UNREACHABLE = 1
Global Const $MIB_IF_OPER_STATUS_DISCONNECTED = 2
Global Const $MIB_IF_OPER_STATUS_CONNECTING = 3
Global Const $MIB_IF_OPER_STATUS_CONNECTED = 4
Global Const $MIB_IF_OPER_STATUS_OPERATIONAL = 5

Global Const $tagMIB_IFROW = 'wchar Name[256];dword Index;dword Type;dword Mtu;dword Speed;dword PhysAddrLen;byte PhysAddr[8];dword AdminStatus;dword OperStatus;dword LastChange;dword InOctets;dword InUcastPkts;dword InNUcastPkts;dword InDiscards;dword InErrors;dword InUnknownProtos;dword OutOctets;dword OutUcastPkts;dword OutNUcastPkts;dword OutDiscards;dword OutErrors;dword OutQLen;dword DescrLen;char Descr[256]'

Global $hParent, $hForm, $Dll, $Msg, $Combo, $Label1, $Label2, $Timer, $Data, $Index = 0, $pIndex = 0, $Adapter[1][3] = [[0]]

$Dll = DllOpen('IPHlpApi.dll')

$Data = _WinAPI_GetIfTable($MIB_IF_TYPE_ETHERNET_CSMACD, $Dll)
If Not @error Then
    For $i = 1 To $Data[0][0]
        $Adapter[0][0] += 1
        ReDim $Adapter[$Adapter[0][0] + 1][3]
        $Adapter[$Adapter[0][0]][0] = $Data[$i][1 ] ; Interface index
        $Adapter[$Adapter[0][0]][1] = $Data[$i][5 ] ; Adapter physical address (MAC)
        $Adapter[$Adapter[0][0]][2] = $Data[$i][19] ; Description
    Next
EndIf

#EndRegion Initialization

#Region Main State

$hParent = GUICreate('', -1, -1, -1, -1, -1, $WS_EX_TOOLWINDOW)
$hForm = GUICreate('?', 400, 155, -1, -1, BitOR($WS_CAPTION, $WS_SYSMENU), $WS_EX_TOPMOST, $hParent)
GUISetFont(8.5, 400, 0, 'MS Shell Dlg', $hForm)
GUISetIcon('setupapi.dll', 5)
GUICtrlCreateLabel('Adapter:', 14, 20, 44, 14)
$Combo = GUICtrlCreateCombo('', 60, 16, 326, 21, $CBS_DROPDOWNLIST)
If $Adapter[0][0] Then
    For $i = 1 To $Adapter[0][0]
        _GUICtrlComboBox_AddString($Combo, $Adapter[$i][2])
    Next
    WinSetTitle($hForm, '', $Adapter[1][1])
    $Index = 1
Else
    _GUICtrlComboBox_AddString($Combo, 'None')
    GUICtrlSetState(-1, $GUI_DISABLE)
EndIf
_GUICtrlComboBox_SetCurSel($Combo, 0)
GUiCtrlCreateGroup('Transfer (Bytes)', 14, 50, 372, 91)
GUICtrlCreateLabel('Sent:', 30, 80, 52, 14)
$Label1 = GUICtrlCreateLabel('', 86, 80, 106, 14, $SS_RIGHT)
GUICtrlCreateLabel('', 204, 80, 70, 14, $SS_RIGHT)
GUICtrlCreateLabel('Received:', 30, 104, 52, 14)
$Label2 = GUICtrlCreateLabel('', 86, 104, 106, 14, $SS_RIGHT)
GUICtrlCreateLabel('', 204, 104, 70, 14, $SS_RIGHT)
GUISetState()

While 1
    If ($Index) And (($Index <> $pIndex) Or (TimerDiff($Timer) > 1000)) Then
        $Data = _WinAPI_GetIfEntry($Adapter[$Index][0], $Dll)
        If Not @error Then
            GUICtrlSetData($Label1, _Str($Data[14]) & ' bytes')
            GUICtrlSetData($Label2, _Str($Data[8 ]) & ' bytes')
            GUICtrlSetData($Label1 + 1, StringFormat('%.2f', $Data[14] / 1024 / 1024) & ' MB')
            GUICtrlSetData($Label2 + 1, StringFormat('%.2f', $Data[8 ] / 1024 / 1024) & ' MB')
        Else
            GUICtrlSetData($Label1, '')
            GUICtrlSetData($Label2, '')
        EndIf
        $Timer = TimerInit()
        $pIndex = $Index
    EndIf
    $Msg = GUIGetMsg()
    Switch $Msg
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $Combo
            $Index = _GUICtrlComboBox_GetCurSel($Combo) + 1
            WinSetTitle($hForm, '', $Adapter[$Index][1])
    EndSwitch
WEnd

DllClose($Dll)

#EndRegion Main State

#Region Additional Functions

Func _Str($iValue)

    Local $Result = '', $Str = String($iValue)

    While StringLen($Str)
        $Result = '.' & StringRight($Str, 3) & $Result
        $Str = StringTrimRight($Str, 3)
    WEnd
    Return StringTrimLeft($Result, 1)
EndFunc   ;==>_Str

Func _WinAPI_GetIfEntry($iIndex, $Dll = -1)

    Local $Ret, $Data, $Addr, $Count
    Local $tMIB_IFROW

    If $Dll < 0 Then
        $Dll = 'IPHlpApi.dll'
    EndIf

    $tMIB_IFROW = DllStructCreate($tagMIB_IFROW)
    DllStructSetData($tMIB_IFROW, 2, $iIndex)
    $Ret = DLLCall($Dll, 'dword', 'GetIfEntry', 'ptr', DllStructGetPtr($tMIB_IFROW))
    If (@error) Or ($Ret[0]) Then
        Return SetError($Ret[0], 0, 0)
    EndIf
    Dim $Data[20]
    $Data[0 ] = DllStructGetData($tMIB_IFROW, 'Name')
    $Data[1 ] = $iIndex
    $Data[2 ] = DllStructGetData($tMIB_IFROW, 'Type')
    $Data[3 ] = DllStructGetData($tMIB_IFROW, 'Mtu')
    $Data[4 ] = DllStructGetData($tMIB_IFROW, 'Speed')
    $Count = DllStructGetData($tMIB_IFROW, 'PhysAddrLen')
    $Addr = ''
    For $i = 1 To $Count
        $Addr &= Hex(DllStructGetData($tMIB_IFROW, 'PhysAddr', $i), 2) & '-'
    Next
    $Data[5 ] = StringTrimRight($Addr, 1)
    $Data[6 ] = DllStructGetData($tMIB_IFROW, 'AdminStatus')
    $Data[7 ] = DllStructGetData($tMIB_IFROW, 'OperStatus')
    $Data[8 ] = DllStructGetData($tMIB_IFROW, 'InOctets')
    $Data[9 ] = DllStructGetData($tMIB_IFROW, 'InUcastPkts')
    $Data[10] = DllStructGetData($tMIB_IFROW, 'InNUcastPkts')
    $Data[11] = DllStructGetData($tMIB_IFROW, 'InDiscards')
    $Data[12] = DllStructGetData($tMIB_IFROW, 'InErrors')
    $Data[13] = DllStructGetData($tMIB_IFROW, 'InUnknownProtos')
    $Data[14] = DllStructGetData($tMIB_IFROW, 'OutOctets')
    $Data[15] = DllStructGetData($tMIB_IFROW, 'OutUcastPkts')
    $Data[16] = DllStructGetData($tMIB_IFROW, 'OutNUcastPkts')
    $Data[17] = DllStructGetData($tMIB_IFROW, 'OutDiscards')
    $Data[18] = DllStructGetData($tMIB_IFROW, 'OutErrors')
    $Data[19] = StringLeft(DllStructGetData($tMIB_IFROW, 'Descr'), DllStructGetData($tMIB_IFROW, 'DescrLen') - 1)
    Return $Data
EndFunc   ;==>_WinAPI_GetIfEntry

Func _WinAPI_GetIfTable($iType = 0, $Dll = -1)

    Local $Ret, $Row, $Type, $Tag, $Tab, $Addr, $Count, $Lenght
    Local $tMIB_IFTABLE, $tMIB_IFROW

    If $Dll < 0 Then
        $Dll = 'IPHlpApi.dll'
    EndIf

    $tMIB_IFROW = DllStructCreate($tagMIB_IFROW)
    $Row = 'byte[' & DllStructGetSize($tMIB_IFROW) & ']'
    $Tag = 'dword;'
    For $i = 1 To 32
        $Tag &= $Row & ';'
    Next
    $tMIB_IFTABLE = DllStructCreate($Tag)
    $Ret = DLLCall($Dll, 'dword', 'GetIfTable', 'ptr', DllStructGetPtr($tMIB_IFTABLE), 'long*', DllStructGetSize($tMIB_IFTABLE), 'int', 1)
    If (@error) Or ($Ret[0]) Then
        Return SetError($Ret[0], 0, 0)
    EndIf
    $Count = DllStructGetData($tMIB_IFTABLE, 1)
    Dim $Tab[$Count + 1][20]
    $Tab[0][0] = 0
    For $i = 1 To $Count
        $tMIB_IFROW = DllStructCreate($tagMIB_IFROW, DllStructGetPtr($tMIB_IFTABLE, $i + 1))
        $Type = DllStructGetData($tMIB_IFROW, 'Type')
        If ($iType = 0) Or ($iType = $Type) Then
            $Tab[0][0] += 1
            $Tab[$Tab[0][0]][0 ] = DllStructGetData($tMIB_IFROW, 'Name')
            $Tab[$Tab[0][0]][1 ] = DllStructGetData($tMIB_IFROW, 'Index')
            $Tab[$Tab[0][0]][2 ] = $Type
            $Tab[$Tab[0][0]][3 ] = DllStructGetData($tMIB_IFROW, 'Mtu')
            $Tab[$Tab[0][0]][4 ] = DllStructGetData($tMIB_IFROW, 'Speed')
            $Lenght = DllStructGetData($tMIB_IFROW, 'PhysAddrLen')
            $Addr = ''
            For $j = 1 To $Lenght
                $Addr &= Hex(DllStructGetData($tMIB_IFROW, 'PhysAddr', $j), 2) & '-'
            Next
            $Tab[$Tab[0][0]][5 ] = StringTrimRight($Addr, 1)
            $Tab[$Tab[0][0]][6 ] = DllStructGetData($tMIB_IFROW, 'AdminStatus')
            $Tab[$Tab[0][0]][7 ] = DllStructGetData($tMIB_IFROW, 'OperStatus')
            $Tab[$Tab[0][0]][8 ] = DllStructGetData($tMIB_IFROW, 'InOctets')
            $Tab[$Tab[0][0]][9 ] = DllStructGetData($tMIB_IFROW, 'InUcastPkts')
            $Tab[$Tab[0][0]][10] = DllStructGetData($tMIB_IFROW, 'InNUcastPkts')
            $Tab[$Tab[0][0]][11] = DllStructGetData($tMIB_IFROW, 'InDiscards')
            $Tab[$Tab[0][0]][12] = DllStructGetData($tMIB_IFROW, 'InErrors')
            $Tab[$Tab[0][0]][13] = DllStructGetData($tMIB_IFROW, 'InUnknownProtos')
            $Tab[$Tab[0][0]][14] = DllStructGetData($tMIB_IFROW, 'OutOctets')
            $Tab[$Tab[0][0]][15] = DllStructGetData($tMIB_IFROW, 'OutUcastPkts')
            $Tab[$Tab[0][0]][16] = DllStructGetData($tMIB_IFROW, 'OutNUcastPkts')
            $Tab[$Tab[0][0]][17] = DllStructGetData($tMIB_IFROW, 'OutDiscards')
            $Tab[$Tab[0][0]][18] = DllStructGetData($tMIB_IFROW, 'OutErrors')
            $Tab[$Tab[0][0]][19] = StringLeft(DllStructGetData($tMIB_IFROW, 'Descr'), DllStructGetData($tMIB_IFROW, 'DescrLen') - 1)
        EndIf
    Next
    If $Tab[0][0] < $Count Then
        ReDim $Tab[$Tab[0][0] + 1][20]
    EndIf
    Return $Tab
EndFunc   ;==>_WinAPI_GetIfTable

#EndRegion Windows Message Functions

-------
мы рождены, чтоб сказку сделать былью


Отправлено: 21:07, 23-08-2010 | #7


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата saavaage:
Проблема - как только подключаю цикл в функции _Combo() (While 1 .... Wend), перестает отображаться окно формы на экране »
Ну а что ты ожидал, _Combo крутит вечный цикл, дело до показа GUI (GUISetState) не доходит.
Какова цель этого цикла? если вместо главного, то просто поставь вызов этой функций вместо основново цикла:

Код: Выделить весь код
GUISetState()

_Combo()

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 22:18, 23-08-2010 | #8


Ветеран


Сообщения: 903
Благодарности: 161

Профиль | Отправить PM | Цитировать


Creat0R, цель - отображать текущее состояние sent/receive адаптеров. При выборе любого из списка (у меня их 2) показывается в режиме реального времени их работа-трафик.

-------
мы рождены, чтоб сказку сделать былью


Отправлено: 22:31, 23-08-2010 | #9


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата saavaage:
отображать текущее состояние sent/receive адаптеров. При выборе любого из списка (у меня их 2) показывается в режиме реального времени их работа-трафик. »
Это вызывает большую нагрузку на процессор. Лучше это делать через AdlibRegister один раз в секунду, а события Combo повесить в функцию «_MainGUI_Events».

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 00:33, 24-08-2010 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] GUIOnEventMode vs дочерняя форма vs Combo (обработка цикла)

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Как получить значение текущего индекса Combo и кол-во элементов Combo malev AutoIt 4 22-06-2009 16:27
VBA - выход из цикла иоанн Программирование и базы данных 2 26-05-2009 22:24
Проблема с ASUS Combo Evjuk Оптические приводы 3 22-03-2008 20:02
выбор из цикла slaine Вебмастеру 10 25-08-2005 12:36
Проблема с CDRW/DVD combo Elka Оптические приводы 17 30-05-2004 22:46




 
Переход