我怎么能从一个窗口得到只有文本没有处理号码
本文关键字:文本 号码 处理 窗口 怎么能 一个 | 更新日期: 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();
}
瓦尔特