找回密码
 加入
搜索
查看: 3051|回复: 12

[GUI管理] 关于Combo的三个小问题

  [复制链接]
发表于 2017-3-11 21:33:17 | 显示全部楼层 |阅读模式
#include <WinAPI.au3>
#include <GuiComboBox.au3>
#include <Array.au3>
#include <GuiButton.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Global $sComboRead
Local $hGUI = GUICreate("进程列表", 360, 180, -1, -1)
Local $hCombo = GUICtrlCreateCombo("", 10, 20,200,30)
Local $hButnf = GUICtrlCreateButton("搜索", 285, 15, 60,30)
Local $iClose = GUICtrlCreateButton("关闭", 285,135,60, 35)
GUISetState()
;--------------------------------------------------------------------------------------------------------------------
_SendMessage($hCombo, 0x14B)
Local $prr = ProcessList()
For $i = 1 To $prr[0][0]
        _GUICtrlComboBox_AddString($hCombo,$prr[$i][0])
Next
Sleep(9000)
Local $iPID = Run("notepad.exe", "", @SW_SHOWMINIMIZED)
Sleep(9000)
ProcessClose($iPID)

;--------------------------------------------------------------------------------------------------------------------
While 1
  Switch GUIGetMsg()
     Case $GUI_EVENT_CLOSE, $iClose
          ExitLoop
         Case $hCombo
          _SendMessage($hCombo, 0x14B)
                  _GUICtrlComboBox_BeginUpdate($hCombo)
          Local $prr = ProcessList()
          For $i = 1 To $prr[0][0]
                          _GUICtrlComboBox_AddString($hCombo,$prr[$i][0])
          Next
          _GUICtrlComboBox_EndUpdate($hCombo)
          Case $hButnf
                    local $ret=_GUICtrlComboBox_FindString($hCombo, "notepad.exe",100)
                    ConsoleWrite($ret & @CRLF)
   EndSwitch
WEnd
如上,想把进程列表导入Combo,并能实时更新,但是效果不行
想实现的效果是
1、如何在点击组合框的下拉箭头展现列表的时候,列表的项目能跟系统的进程管理器一样即时刷新呢?
   上例中打开和关闭notepad.exe进程在列表中没有反应
2、列表的项目怎么按拼音或其它条件排序呢?不排序的话看着杂乱无章
3、如何查找列表中的项目呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2017-3-12 15:37:45 | 显示全部楼层
回调函数每隔 sleep(300)刷新一次?
 楼主| 发表于 2017-3-12 20:23:42 | 显示全部楼层
回调函数每隔 sleep(300)刷新一次?
heroxianf 发表于 2017-3-12 15:37

要用到回调函数吗?刚接触AU3的Combo,发现自定义函数不少,是不是有什么函数不知道,没用上呢....
 楼主| 发表于 2017-3-24 23:13:03 | 显示全部楼层
帖子沉了,还无解。再回头看看....
发表于 2017-3-25 12:50:06 | 显示全部楼层
 楼主| 发表于 2017-3-26 10:13:10 | 显示全部楼层
做个参考!
heroxianf 发表于 2017-3-25 12:50

感谢指点....
 楼主| 发表于 2017-3-26 10:17:34 | 显示全部楼层
用回调函数定时刷新似乎有些浪费或占用资源。能实现按需刷新就好了.....
发表于 2017-3-26 15:54:37 | 显示全部楼层
回复 7# cashiba



Local $prr = ProcessList()
Local $ii = 0
For $i = 2 To $prr[0][0] ;- 1
_GUICtrlComboBox_AddString($hCombo, $prr[$i][0])
_GUICtrlListView_AddItem($ListView1, $prr[$i][0], 3)
$DriveFreeGB = ByteConversion($prr[$i][1]);单位转换
_GUICtrlListView_AddSubItem($ListView1, $ii, $DriveFreeGB, 1)
$ii += 1
Next

AdlibRegister("Ffive", 60000)

While 1
        Sleep(1000)
WEnd

Func Ffive()
        GUICtrlSendMsg($ListView1, $LVM_DELETEALLITEMS, 0, 0)
        GUICtrlSetData($hCombo, "")
        _WinAPI_PostMessage($ListView1, 0x0100, 0X74, 0)
        _WinAPI_PostMessage($hCombo, 0x0100, 0X74, 0)
        Local $prr = ProcessList()
        Local $ii = 0
        For $i = 2 To $prr[0][0] ;- 1
                _GUICtrlComboBox_AddString($hCombo, $prr[$i][0])
                ;GUICtrlSetData($ListView1, $prr[$i][0])
                ;GUICtrlCreateListViewItem($prr[$i][0], $ListView1)
                _GUICtrlListView_AddItem($ListView1, $prr[$i][0], 3)
                $DriveFreeGB = ByteConversion($prr[$i][1]);单位转换
                _GUICtrlListView_AddSubItem($ListView1, $ii, $DriveFreeGB, 1)
                ;_GUICtrlListView_AddSubItem($ListView1, $ii, $prr[$i][2], 2)
                $ii += 1
        Next
EndFunc   ;==>Ffive

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1金钱 +19 收起 理由
cashiba + 19

查看全部评分

 楼主| 发表于 2017-3-27 00:03:58 | 显示全部楼层
回复  cashiba
chzj589 发表于 2017-3-26 15:54

谢谢chzj589大虾~
看样子也就是是用回调函数来解决了,就是时不时的闪烁一下有些不美....
发表于 2017-3-29 18:05:32 | 显示全部楼层
本帖最后由 kk_lee69 于 2017-3-29 18:32 编辑

回复 1# cashiba


    不用回調函數吧˙

使用  GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")  即可達到所要效果吧
 楼主| 发表于 2017-3-30 21:48:43 | 显示全部楼层
回复  cashiba
不用回調函數吧˙
使用  GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")  即可達 ...
kk_lee69 发表于 2017-3-29 18:05

对消息还不是太熟,再慢慢琢磨...感谢指点!
发表于 2017-3-30 22:33:24 | 显示全部楼层
回复 11# cashiba

請直接 點擊 COMBO 下拉三角形   多次  即可看到成效

#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.8.1
 Author:         myName

 Script Function:
        Template AutoIt script.

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

; Script Start - Add your code below here

#include <WinAPI.au3>
#include <GuiComboBox.au3>
#include <Array.au3>
#include <GuiButton.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Global $sComboRead
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

Local $hGUI = GUICreate("表", 360, 180, -1, -1)
Local $hCombo = GUICtrlCreateCombo("", 10, 20,200,30)
Local $hButnf = GUICtrlCreateButton("搜索", 285, 15, 60,30)
Local $iClose = GUICtrlCreateButton("??", 285,135,60, 35)

GUISetState()
;--------------------------------------------------------------------------------------------------------------------
_SendMessage($hCombo, 0x14B)
Local $prr = ProcessList()
For $i = 1 To $prr[0][0]
        _GUICtrlComboBox_AddString($hCombo,$prr[$i][0])
Next




$CHECK=0



;--------------------------------------------------------------------------------------------------------------------
While 1
  Switch GUIGetMsg()
     Case $GUI_EVENT_CLOSE, $iClose
          ExitLoop
         Case $hCombo

          Case $hButnf
F)
   EndSwitch
WEnd



Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
        #forceref $hWnd, $iMsg, $iwParam, $ilParam
        Local $hWndFrom, $iIDFrom, $iCode
        ;$hWndFrom = $hWnd
        $hWndFrom = $ilParam
        $iIDFrom =_WinAPI_LoWord($iwParam);獲取低位 $iControl = BitAND($iwParam, 0xFFFF)
        $iCode = _WinAPI_HiWord($iwParam);獲取高位 $iMsg = BitShift($iwParam, 16)


        IF $iCode=7 Then
                IF $CHECK=1 Then
                GUICtrlSetData($hCombo, "", "")
                GUICtrlSetData($hCombo, "重新搜索1|重新搜索2", "重新搜索2")
                $CHECK=0
                Else
                        $CHECK=1
                        GUICtrlSetData($hCombo, "", "")
                        Local $prr = ProcessList()
                        For $i = 1 To $prr[0][0]
                                        _GUICtrlComboBox_AddString($hCombo,$prr[$i][0])
                        Next
                        
                EndIf
        EndIf

        Return $GUI_RUNDEFMSG
EndFunc   ;==>_WM_COMMAND

评分

参与人数 1金钱 +19 收起 理由
cashiba + 19

查看全部评分

 楼主| 发表于 2017-3-31 22:24:28 | 显示全部楼层
谢谢kk_lee69大虾不吝赐教....
收藏代码学习了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-25 07:32 , Processed in 0.091592 second(s), 30 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表