找回密码
 加入
搜索
查看: 105|回复: 3

[GUI管理] 关于获取SysListView32控件问题

[复制链接]
发表于 2024-11-7 09:50:48 | 显示全部楼层 |阅读模式
悬赏50金钱已解决
需求:获取Windows任务管理中任务列表框中的文本内容
现状:使用窗口信息工具查询时,可见文本为空,使用_GUICtrlListView_GetItemTextString也读不到
进展:经过论坛查询和网上搜索,论坛中有大佬提出用【LVM_GETITEM消息获得列表项内容】,我在au3中没有查到这个函数,上网查到了windows应用开发当中有这个函数,但是自己学艺不精,不会用。
诉求:请大佬帮忙解决获取listview32列表框内容,或者说一说如果使用windows应用开发中的函数如何在au3中使用。
提前感谢大佬们了

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

最佳答案

查看完整内容

1. 第一個方案 2.第二個方案 3.第三個方案, 論壇 搜索 進程 看看
发表于 2024-11-7 09:50:49 | 显示全部楼层
1. 第一個方案
#include <MsgBoxConstants.au3>
#include <array.au3>

Example()

Func Example()

    Local $aProcessList = ProcessList()
  _ArrayDisplay($aProcessList, "Run Process")

EndFunc   ;==>Example
2.第二個方案
#include <Array.au3>

_ArrayDisplay(_process(1))

Func _process($show = -1)
        Local $dos

        Switch $show
                Case -1
                        $dos = Run(@ComSpec & " /c " & "tasklist /fo csv","",@SW_HIDE,15)
                        Local $processList = [["映像名称","PID","会话名","会话#","内存使用"]]
                Case Else
                        $dos = Run(@ComSpec & " /c " & "tasklist /fo csv /v","",@SW_HIDE,15)
                        Local $processList = [["映像名称","PID","会话名","会话#","内存使用","状态","用户名","CPU时间","窗口标题 "]]
        EndSwitch

        ProcessWaitClose($dos)
        Local $tasklist = StdoutRead($dos)

        If $tasklist Then
                $tasklist = StringReplace($tasklist,""",""","""|""")
                $tasklist = StringReplace($tasklist,"""","")
                Local $tasklist_line = StringSplit($tasklist,Chr(13))
                For $i = 2 To $tasklist_line[0] - 1;结尾多一行空白内容
                        If $tasklist_line[$i] Then
                                _ArrayAdd($processList,$tasklist_line[$i])
                        EndIf
                Next
        EndIf

        Return $processList
EndFunc
3.第三個方案, 論壇 搜索 進程 看看

评分

参与人数 1金钱 +20 收起 理由
niqindong + 20 非常感谢,您的方案确实可以,其实我只是拿 ...

查看全部评分

发表于 2024-11-8 08:15:56 | 显示全部楼层
曾经外置汉化某软件时的一段代码给你参考一下:
                Case "Snapshot - Select the Volumes you want to save"
                        WinSetTitle($hWnd, "", "Snapshot - 选择要保存的卷")
                        ControlSetText($hWnd, "", "[CLASS:Button; INSTANCE:1]", "下一步(&N)")
                        ControlSetText($hWnd, "", "[CLASS:Button; INSTANCE:2]", "返回(&B)")
                        ControlSetText($hWnd, "", "[CLASS:Static; INSTANCE:2]", "选择要保存的卷")
                        ControlSetText($hWnd, "", "[CLASS:Static; INSTANCE:3]", "所有大小 MB(1024×1024)")
                        ControlSetText($hWnd, "", "[CLASS:Button; INSTANCE:3]", "帮助")
                        $Wnd = _WinAPI_EnumChildWindows($hWnd) ;<WinAPISysWin.au3>
                        For $i = 0 To UBound($Wnd) - 1
                                If $Wnd[$i][1] = 'SysListView32' Then
                                        $Wnd = $Wnd[$i][0]
                                        ExitLoop
                                EndIf
                        Next
                        Local $sSysListView32 = StringSplit("驱动|HD|分区号|分区开始|分区大小|标签|文件系统|大小|已用|可用", "|", 2)
                        For $i = 0 To UBound($sSysListView32) - 1
                                _GUICtrlListView_SetUnicodeFormat($Wnd, True)
                                _GUICtrlListView_SetColumn($Wnd, $i, $sSysListView32[$i]) ;<GuiListView.au3>
                        Next
                        For $i = 0 To _GUICtrlListView_GetItemCount($Wnd)
                                Local $sPartNo = _GUICtrlListView_GetItemText($Wnd, $i, 2)
                                If StringInStr($sPartNo, 'Pri') Then
                                        _GUICtrlListView_SetItemText($Wnd, $i, '主分区' & StringTrimLeft($sPartNo, 3), 2)
                                EndIf
                                If StringInStr($sPartNo, 'Log') Then
                                        _GUICtrlListView_SetItemText($Wnd, $i, '逻辑分区' & StringTrimLeft($sPartNo, 3), 2)
                                EndIf
                        Next
                        For $i = 0 To _GUICtrlListView_GetItemCount($Wnd)
                                Local $sLable = _GUICtrlListView_GetItemText($Wnd, $i, 5)
                                If StringInStr($sLable, 'Unknown') Then
                                        _GUICtrlListView_SetItemText($Wnd, $i, '未知' & StringTrimLeft($sLable, 7), 5)
                                EndIf
                        Next
                        For $i = 0 To _GUICtrlListView_GetItemCount($Wnd)
                                Local $sFileSystem = _GUICtrlListView_GetItemText($Wnd, $i, 6)
                                If StringInStr($sFileSystem, 'Hidden') Then
                                        _GUICtrlListView_SetItemText($Wnd, $i, StringTrimRight($sFileSystem, 6) & '隐藏', 6)
                                EndIf
                        Next

评分

参与人数 1金钱 +20 收起 理由
niqindong + 20 赞一个!

查看全部评分

发表于 2024-11-8 10:26:53 | 显示全部楼层
chishingchan 发表于 2024-11-8 08:15
曾经外置汉化某软件时的一段代码给你参考一下:

当年的“东方快车”就是典型的外置汉化,不知道为什么现在没有这类通用汉化软件了?在翻译软件和AI翻译横行的天下,外置汉化会非常方便啊?
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-21 17:31 , Processed in 0.079194 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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