c# 窗口句柄和程序Id 高手来!!!

窗口句柄和程序Id是同一个概念吗?如果已经得到窗口句柄,如何得到窗口的程序Id?高手来!!!一个程序有很多窗口句柄,如果已经得到其中一个窗口句柄,如何得到窗口的程序Id(... 窗口句柄和程序Id是同一个概念吗?
如果已经得到窗口句柄,如何得到窗口的程序Id?

高手来!!!
一个程序有很多窗口句柄,如果已经得到其中一个窗口句柄,如何得到窗口的程序Id(窗口句柄不是主窗口的)? 还有如何像超级兔子一样可以用导弹选中一个窗口就框起它?
展开
 我来答
gejun888
2009-06-26 · TA获得超过1201个赞
知道小有建树答主
回答量:699
采纳率:0%
帮助的人:564万
展开全部
肯定不是同一个概念.

"窗口"是计算机编程中非常重要的一个东东,一个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
dkxpsg
2009-06-27 · TA获得超过1627个赞
知道小有建树答主
回答量:592
采纳率:0%
帮助的人:1039万
展开全部
你说的程序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
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式