0

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Automation;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Place your cursor over listview and hit enter...");
            Console.ReadLine();
            POINT pt;
            GetCursorPos(out pt);
            IntPtr hwnd = WindowFromPoint(pt);
            AutomationElement el = AutomationElement.FromHandle(hwnd);
            TreeWalker walker = TreeWalker.ContentViewWalker;
            int i = 0;
            for (AutomationElement child = walker.GetFirstChild(el);
                child != null;
                child = walker.GetNextSibling(child))
            {
                MessageBox.Show("Item:" + child.Current.Name);
                //! Select The Item Here ...
            }
        }
        [StructLayout(LayoutKind.Sequential)]
        private struct POINT
        {
            public int x;
            public int y;
        };

        [DllImport("user32.dll")]
        private static extern IntPtr WindowFromPoint(POINT pt);

        [DllImport("user32.dll")]
        private static extern int GetCursorPos(out POINT pt);
    }
}
4

1 回答 1

-1

您必须调用SendMessageWin API 函数并指定LVM_SETITEMSTATE为您的消息。传入列表视图的窗口句柄LVITEMlParam.

您只需要在LVITEM结构中设置以下字段

lvi.state = LVIS_FOCUSED | LVIS_SELECTED;
lvi.stateMask = LVIS_FOCUSED | LVIS_SELECTED;
lvi.iItem = 5 // Index of item to select

检查 MSDN 以获取它们的状态值。

于 2013-06-01T23:31:14.163 回答