我怎么能从一个窗口得到只有文本没有处理号码

本文关键字:文本 号码 处理 窗口 怎么能 一个 | 更新日期: 2023-09-27 18:19:22

我有两个类来获取所有最小化的窗口:

第一个类是WindowSnap.cs:

WindowSnap.cs

第二个类是WindowSnapCollection.cs:

WindowSnapCollection.cs

在windowSnap的第一个类中有一个方法叫做GetAllWindows:

public static WindowSnapCollection GetAllWindows(bool minimized, bool specialCapturring)
        {
            windowSnaps = new WindowSnapCollection();
            countMinimizedWindows = minimized;//set minimized flag capture
            useSpecialCapturing = specialCapturring;//set specialcapturing flag
            EnumWindowsCallbackHandler callback = new EnumWindowsCallbackHandler(EnumWindowsCallback);
            EnumWindows(callback, IntPtr.Zero);
            return new WindowSnapCollection(windowSnaps.ToArray(), true);
        }

最后,我在返回行上使用了一个断点,windowSnaps变量包含15个条目。例如,第一项是:

[0] = {Window Text:, Handle: 31918532}

第二个是:

[3] ={窗口文本:?如何从窗口中获得只有文本而没有句柄号?-堆栈溢出-谷歌Chrome?,句柄:64424060}

在第一个项目中,我可以自己删除这个项目,因为它的文本只有",",这个窗口什么也没有显示。

但是编号[3]和其他项目,我想首先从它们中删除部分Handle: 64424060我不需要用户看到这些信息。但是只有文本,例如number[3]应该看起来像:

?我怎么能从窗口得到只有文本没有处理号码?-堆栈溢出-谷歌Chrome?

并修复行首的"?"。但是我们的想法是只显示每个窗口的名称,而不是带有句柄号的整个文本。

这是我如何添加项目(windows)到form1 listBox:

this.listBoxSnap.Items.AddRange(WindowSnap.GetAllWindows(true, true).ToArray());

在listBox中,我希望看到项目名称或描述/标题,而不是带有句柄号的整个文本。

我怎么能从一个窗口得到只有文本没有处理号码

你可以做一个小技巧。它不是很好,但很有效。在listBoxSnap的顶部添加一个新的列表框,例如listBox1,大小相同。

add in public Form1():

public Form1()
    {
        ...
        for (int i = listBoxSnap.Items.Count - 1; i >= 0; i--)
        {
            string tt = listBoxSnap.Items[i].ToString();
            if (tt.Contains(" ,"))
            {
                listBoxSnap.Items.RemoveAt(i);
            }
        }
        buttonSnap.Enabled = true;
//add here ->
        string[] myList = new string[listBoxSnap.Items.Count];
        for (int i = 0; i < listBoxSnap.Items.Count; i++)
        {
            string tt = listBoxSnap.Items[i].ToString();
            int index = tt.LastIndexOf(",");
            myList [i] = tt.Substring(0, index);
        }
        listBox1.Items.AddRange(myList);
        rectangles = new Rectangle[listBoxSnap.Items.Count];
        isCropped = new bool[listBoxSnap.Items.Count];
        if (this.listBoxSnap.Items.Count > 0)
        {
            this.listBoxSnap.SetSelected(0, true);
            this.listBox1.SetSelected(0, true);
        }
        listBoxSnap.Select();
        listBox1.Select();
   }

change private void listBoxSnap_SelectedIndexChanged(object sender, EventArgs e) to:

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        listBoxSnap.SelectedIndex = listBox1.SelectedIndex;
        drawpicbox(this.listBoxSnap.SelectedIndex);
    }

,将this.listBoxSnap.SelectedIndexChanged += new System.EventHandler(this.listBoxSnap_SelectedIndexChanged);Form1.Designer.cs中删除

添加此事件:

private void listBox1_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            var item = listBox1.IndexFromPoint(e.Location);
            if (item >= 0)
            {
                listBox1.SelectedIndex = item;
                listBoxSnap.SelectedIndex = listBox1.SelectedIndex;
                cm.Show(listBox1, e.Location);
            }
        }
    }

最后加入private void RefreshWindowsList()

private void RefreshWindowsList()
    {
        ...   
        for (int i = listBoxSnap.Items.Count - 1; i >= 0; i--)
        {
            string tt = listBoxSnap.Items[i].ToString();
            if (tt.Contains(" ,"))
            {
                listBoxSnap.Items.RemoveAt(i);
            }
        }
//add here ->
        string[] myList = new string[listBoxSnap.Items.Count];
        for (int i = 0; i < listBoxSnap.Items.Count; i++)
        {
            string tt = listBoxSnap.Items[i].ToString();
            int index = tt.LastIndexOf(",");
            myList [i] = tt.Substring(0, index);
        }
        listBox1.Items.Clear();
        listBox1.Items.AddRange(myList);
        rectangles = new Rectangle[listBoxSnap.Items.Count];
        isCropped = new bool[listBoxSnap.Items.Count];
        textBoxIndex.Text = listBoxSnap.Items.Count.ToString();
        if (this.listBoxSnap.Items.Count > 0)
        {
            this.listBoxSnap.SetSelected(0, true);
            this.listBox1.SetSelected(0, true);
        }
        listBoxSnap.Select();
        listBox1.Select();
    }

瓦尔特