c# 窗口句柄和程序Id 高手来!!!
窗口句柄和程序Id是同一个概念吗?如果已经得到窗口句柄,如何得到窗口的程序Id?高手来!!!一个程序有很多窗口句柄,如果已经得到其中一个窗口句柄,如何得到窗口的程序Id(...
窗口句柄和程序Id是同一个概念吗?
如果已经得到窗口句柄,如何得到窗口的程序Id?
高手来!!!
一个程序有很多窗口句柄,如果已经得到其中一个窗口句柄,如何得到窗口的程序Id(窗口句柄不是主窗口的)? 还有如何像超级兔子一样可以用导弹选中一个窗口就框起它? 展开
如果已经得到窗口句柄,如何得到窗口的程序Id?
高手来!!!
一个程序有很多窗口句柄,如果已经得到其中一个窗口句柄,如何得到窗口的程序Id(窗口句柄不是主窗口的)? 还有如何像超级兔子一样可以用导弹选中一个窗口就框起它? 展开
2个回答
展开全部
肯定不是同一个概念.
"窗口"是计算机编程中非常重要的一个东东,一个Windows窗体是一个窗口,一个按钮,一个文本框同样也是一个窗口.
而用于唯一标识它们的就是句柄,通俗来说,句柄的一个"柄"字非常形象,例如:我们抓起一个扇柄,就可以操纵这个扇子的运行.句柄很像我们人类的身份证号,是一种唯一标识.
可以采用:FindWindow函数来取得一个窗口的句柄.
在C#中声明如下:
[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
static extern IntPtr FindWindow(string 类名, string 标题);
<注意:在C#中使用API,请加上:
using System.Runtime.InteropServices; //在使用API函数之前先要引用
>
<可在本人博文中看到:http://hi.baidu.com/gj888/blog/item/047e9b23d344be4dac34de2f.html>
而一个Windows Form程序,可以由一个或多个窗体组成,"窗体"是窗口,而窗体上也可能有很多的控件(例如:按钮或文本框等),这些控件也是窗口.
到这里,您就应该可以明白句柄和程序ID不是一个概念了吧?
葛军 hi.baidu.com/gj888
"窗口"是计算机编程中非常重要的一个东东,一个Windows窗体是一个窗口,一个按钮,一个文本框同样也是一个窗口.
而用于唯一标识它们的就是句柄,通俗来说,句柄的一个"柄"字非常形象,例如:我们抓起一个扇柄,就可以操纵这个扇子的运行.句柄很像我们人类的身份证号,是一种唯一标识.
可以采用:FindWindow函数来取得一个窗口的句柄.
在C#中声明如下:
[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
static extern IntPtr FindWindow(string 类名, string 标题);
<注意:在C#中使用API,请加上:
using System.Runtime.InteropServices; //在使用API函数之前先要引用
>
<可在本人博文中看到:http://hi.baidu.com/gj888/blog/item/047e9b23d344be4dac34de2f.html>
而一个Windows Form程序,可以由一个或多个窗体组成,"窗体"是窗口,而窗体上也可能有很多的控件(例如:按钮或文本框等),这些控件也是窗口.
到这里,您就应该可以明白句柄和程序ID不是一个概念了吧?
葛军 hi.baidu.com/gj888
展开全部
你说的程序Id是指的进程ID吗?如果是的话这么写就行
using System.Runtime.InteropServices;
using System.Diagnostics;
[DllImport("user32.dll")]
private static extern int GetWindowThreadProcessId(int hWnd, IntPtr ProcessId);
private void button2_Click(object sender, EventArgs e)
{
int handle = this.Handle.ToInt32();//输入一个控件或窗体的句柄
Process[] process = Process.GetProcesses();
int threadId = GetWindowThreadProcessId(handle, IntPtr.Zero);
foreach (Process var in process)
{
foreach (ProcessThread var2 in var.Threads)
{
if (var2.Id == threadId)
{
MessageBox.Show("进程名:" + var.ProcessName + "\nPID:" + var.Id + "\n路径:" + var.MainModule.FileName);
}
}
}
}
你说的导弹那个看看这个吧,有源代码,类似Spy++
http://www.codeproject.com/KB/graphics/screen_capturing.aspx
using System.Runtime.InteropServices;
using System.Diagnostics;
[DllImport("user32.dll")]
private static extern int GetWindowThreadProcessId(int hWnd, IntPtr ProcessId);
private void button2_Click(object sender, EventArgs e)
{
int handle = this.Handle.ToInt32();//输入一个控件或窗体的句柄
Process[] process = Process.GetProcesses();
int threadId = GetWindowThreadProcessId(handle, IntPtr.Zero);
foreach (Process var in process)
{
foreach (ProcessThread var2 in var.Threads)
{
if (var2.Id == threadId)
{
MessageBox.Show("进程名:" + var.ProcessName + "\nPID:" + var.Id + "\n路径:" + var.MainModule.FileName);
}
}
}
}
你说的导弹那个看看这个吧,有源代码,类似Spy++
http://www.codeproject.com/KB/graphics/screen_capturing.aspx
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询