问题标签 [syslistview32]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
769 浏览

windows - 从另一个进程读取列表视图数据

这是一种 GUI 自动化应用程序,我想从另一个进程的列表视图中读取数据。

列表视图类是 SysListView32 并具有以下样式集 LVS_OWNERDRAWFIXED

通常,我可以使用以下过程从列表视图中读取文本

  • 在其他进程的内存空间中分配内存
  • 向 listview 发送消息以使用该进程中分配的缓冲区指针读取文本
  • 读取缓冲区

当列表视图不是所有者绘制时它工作正常,但在这种情况下,列表视图似乎是由所有者绘制的,即列表项没有数据。

是否可以通过我讨论过的方法或任何方法或通过挂钩 api 或任何方法从这样的列表视图中读取文本?

0 投票
1 回答
2427 浏览

c - 用 C 枚举 SysListView32 项

我发现的所有示例都与 C# 相关,但我不熟悉它。我的任务是为测试提供某种自动化。我有安装程序,其中第一个按钮位于 SysListView32 内部,据我所知,我的目标是选择它们,按名称选择按钮并单击它最后一部分很明显:

但是当谈到 SysListView32 我无法理解如何在 C 中提取它的对象和名称

0 投票
1 回答
1448 浏览

c# - 选择 AutomationElement(SysListView32 项)

我想选择外部进程的 SysListView32 项。到目前为止,这是我的代码,它正在工作(我可以获取项目的文本和索引),但是如何选择当前项目?

0 投票
1 回答
973 浏览

c# - 从 SysHeader32 获取列的标题文本

我正在开发一个必须从其他应用程序(非托管)捕获数据的 C# 应用程序。

这个另一个应用程序有许多 SysListView32 控件,我必须获取特定 SysListView32 控件的数据,但我唯一可以用来获取此特定控件的是列的标题 (SysHeader32) 文本,它们对于每个 SysListView32 都不同控制。

我从所有 SysListView32 控件中捕获了数据(行和列中的所有文本),但我无法捕获标题列的文本。

任何人都可以帮助我吗?

感谢和抱歉我的英语不好。

0 投票
0 回答
214 浏览

listview - 使用鼠标在虚拟列表视图中选择多个项目时如何防止消息过多?

我一直致力于在 Visual Basic 6 中创建自己的 Virtual Listview 控件。我在 UserControl 中继承了 SysListView32 类,并且能够成功地对控件进行编码以添加、删除甚至排序项目。所有这些都可以快速运行,就像在虚拟 Listview 控件(LVS_OWNERDATA窗口样式集)中一样。但是,当我通过单击拖动鼠标(没有窗口样式)开始对多个项目进行选取框选择时LVS_SINGLESEL,选择过程相当缓慢,并且随着选择的项目越往下走越慢,该过程会变得越来越慢。即使只有 2 - 300 个项目添加到列表中,也会发生这种情况。查看效果的最佳样本量约为 500 项。

当我一直在构建控件时,我还添加了 SysListView32 类通常会获得的几乎所有可能的消息,以及 UserControl 应该获得的每个通知代码,以便在更改 DEBUGFLAG 常量变量时​​,我可以使用VB6 中的即时窗格告诉我到底发生了什么。在进一步调查控件发送和接收的消息后,我注意到NM_CUSTOMDRAW通知代码的发生频率比应有的要高得多,项目索引以项目“0”、“1”、“2”等开头在每个新的选择“浪潮”中打开,即使这些项目实际上不可见。

我尝试通过发送返回值来处理NM_CUSTOMDRAW不在视图中的那些项目的消息。CDRF_SKIPDEFAULT注意,第一个NM_CUSTOMDRAW通知不存储相关项目索引;您需要使用该CDRF_NOTIFYITEMDRAW值处理第一个通知,以便检索正在重新绘制的项目的项目索引。

但是,这并不能解决问题。似乎即使不重绘项目,这些消息在后台发送的事实也足以减慢多个项目的选择速度。甚至LVN_ODCACHEHINT在每一波之前都有通知,将最后一个可见项目索引的范围为“0”,而实际上它们不应该是。

我不需要提供我所有的代码;我并没有对我的代码做任何过于花哨的事情,而且它似乎是使用时控件的默认行为LVS_OWNERDATA,所以我怀疑它是否有助于解决问题。然而,我确实怀疑我需要做一些花哨的事情来解决这个问题。

我也看过这个问题,但是反思超出了我的知识范围,我似乎找不到与WM_REFLECT_NOTIFY.

提前致谢。

0 投票
0 回答
1073 浏览

listview - 使用 Autoit 检查 ListView 复选框项目

我正在使用 Autoit 在 Windows 麦克风设置对话框中自动执行麦克风增强功能。我想检查 SysListView32 中的复选框项目,无论它们是否已检查。我可以通过发送空间来切换,但如果它已经选中,则取消选中该项目。无论如何,我都想检查它们。怎么做?

我如何遍历 SysListView32 中的每个复选框项目并检查它?所有项目都是复选框项目。我没有创建 SysListView32,它在 windows 声音设置对话框中。任何解决方案?

0 投票
1 回答
484 浏览

windows - 100 万行 ListView

我有一个SysListView32应该可以容纳数百万行,以及三列文本 A、B、C,每列 < 256 个字符。

假设 B 列有很多重复(例如:A 列是文件名,B 列是路径,每一行是文件系统的一个文件),并且只有 100k 个不同的值(而不是几百万个)。

是否可以避免ListViewGUI 元素 B 列的内容在 RAM 中重复?

我们可以ListView只用指向数组元素的指针(取自 B 列的不同值的 100k 元素数组)而不是重复数据来填充 a 吗?

如何修改它以使其工作?

0 投票
1 回答
203 浏览

.net - 如何解决windows-10 webbrowser shellfolderview 滚动Bug?

我使用 WebBrowser-Control 来查看文件夹的内容。

在 Windows 10 上,当所选项目从底部移动到顶部时,重新排序内容后会出现显示错误。

让我们重现:

  1. 启动干净的winform或wpf解决方案
  2. 将 WebBrowser-Control 拖到里面
  3. 添加代码以导航到您的自定义文件夹,例如:

    public Form1() { InitializeComponent(); webBrowser1.Navigate(@"C:\tmp\yourfolder\"); }

  4. 启动应用程序,如果需要,切换到详细信息视图(右键单击 - 上下文菜单) WebBrowser 控件在 DetailView 中显示本地文件夹

  5. 按名称列排序,选择第一个条目

  6. 按名称列排序以将项目移动到末尾

所选项目滚动到底部

  1. 再次按名称列排序以将所选项目移至顶部

显示滚动条、窗口和列表不同步

你会看到,滚动条、窗口和列表不同步。滚动条向上移动,但项目没有移动到列表中的第一个位置。此外,该项目仅在鼠标悬停后可见。稍微拖动滚动条也不能治愈这种不当行为。

有人知道如何克服这个问题吗?我正在考虑通过调用 InvalidateRect 或向挂钩的 SysListView32 发送 WM_PAINT 消息来强制 shellfolderview 重绘,但没有成功。

是的,我想显示带有详细信息视图的列表:-)。

如何解决这个问题?

0 投票
1 回答
129 浏览

c# - LVM_GETCOLUMN 不返回结果

我试图窥探一个syslistview32元素。阅读内容效果很好,但我无法获取列标题的文本。

这是“我的”代码(我不想用借来的羽毛装饰自己 - 大部分代码来自https://konradn.wordpress.com/2012/02/21/read-listviewitem-content-from-another -进程/):

无论我为 Column 提供哪个值,结果始终是string.Empty.

获取列表视图内容的功能非常有用,并且非常相似:

有没有人有想法,我做错了什么。

非常感谢您的帮助。

问候,扬

Ps.:我知道UI Automation,我喜欢UI Automation,我知道UI Automation可以解决这个问题,但是我不想在这种情况下使用它。

0 投票
2 回答
234 浏览

c# - LVM_GETCOLUMN 只返回关于第一列的信息

几天前,我在这里有一个关于函数“LVM_GETCOLUMN”的问题,用于获取a中列的文本syslistview32(请在此处找到这个问题:LVM_GETCOLUMN return no result)。

感谢这里的一位用户,我让它运行了。后来我意识到,这个函数只为我提供了第一列的文本。

有谁知道,LV_COLUMN 结构中的哪个参数负责定义目标列?我试过了iOrderiSubItem但无论我更改哪个参数(或者如果我同时更改两者),我总是会得到第一列标题的文本。这是我正在使用的代码: