如何使用 Autohotkey 将 ListView 中的复选框设置为选中状态

发布于 2024-09-05 07:39:41 字数 567 浏览 12 评论 0原文

我正在编写一个 Autohotkey 脚本,需要“选中”和“取消选中”listViewControl 内定义的复选框。

我认为做到这一点的方法是使用 LVM_SETITEMSTATE 参数使用 SendMessage 到列表视图(或者可能到列表视图项目本身?) 但我不知道确切的格式...有人知道吗?

SendMessage, LVM_SETITEMSTATE, 1000, SysListView321

我认为 1000 意味着该复选框将被选中,2000 意味着他将被取消选中。

我需要为每个 ListViewItem 执行循环吗?

我也尝试过使用

 LV_Modify(0, "+Checked")

但它似乎也不起作用。

为了强调这个问题,我没有创建自己的列表视图,我正在尝试操纵现有应用程序 ListView 的状态...... (我正在运行安装程序并使用 AutoHotKey 脚本,我按每个屏幕上的下一个按钮,但在此屏幕中我需要首先选择所有组件,然后才移动到下一个屏幕) 这里有 AutoHotKey 专家吗?

I am writing a Autohotkey script that need to 'check' and 'uncheck' checkboxes defined inside a listViewControl.

I think the way to do it is using a SendMessage to the listview (or maybe to the listview item itself?) using the LVM_SETITEMSTATE parameter
but i don't know the exact format...anyone have any idea?

SendMessage, LVM_SETITEMSTATE, 1000, SysListView321

i think that 1000 means that the checkbox will be checked and 2000 means that he will be unchecked.

do i need to do a loop for each ListViewItem?

I had also tried to use the

 LV_Modify(0, "+Checked")

But it doesnt seems to work also.

To emphasize the problem, I am not creating my own List View, i'm trying to manipulate the state of an exisiting application ListView....
(i'm running an installer and using the AutoHotKey script i press the next buttons on each of the screens, but in this screen i need to first select all the components and only then move to the next screen)
Any AutoHotKey Experts in here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心是晴朗的。 2024-09-12 07:39:41

解决这个问题的一种方法(一种非优雅的方法)是:

ControlGet, List, List,, SysListView321,,,,
{    
    Loop, Parse, List, `n  ; Rows are delimited by linefeeds (`n).
    {           
        RowNumber := A_Index
        Loop, Parse, A_LoopField, %A_Tab%   ; Fields (columns) in each row are delimited by tabs (A_Tab).
        {                               
            if A_Index = 3 
            {               
                IfInString, HaystackTemp, %A_LoopField%
                {                       
                    ControlSend, SysListview321, {Space}                        
                }
            }
        }
        ControlSend, SysListview321, {Down}                         
    }
}

你知道一种更优雅的方法吗?

One way of solving this issue ( a non elegant way) is :

ControlGet, List, List,, SysListView321,,,,
{    
    Loop, Parse, List, `n  ; Rows are delimited by linefeeds (`n).
    {           
        RowNumber := A_Index
        Loop, Parse, A_LoopField, %A_Tab%   ; Fields (columns) in each row are delimited by tabs (A_Tab).
        {                               
            if A_Index = 3 
            {               
                IfInString, HaystackTemp, %A_LoopField%
                {                       
                    ControlSend, SysListview321, {Space}                        
                }
            }
        }
        ControlSend, SysListview321, {Down}                         
    }
}

Do you know a more elegant way?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文