进程的若干思考

在任务管理器中查看到explore的进程ID,但是explore程序并没有打开。

联想到几个问题:

能看到进程ID,程序没有打开,是不是隐藏了进程呢?

使用易语言的外挂作坊模块的打开进程(进程ID)命令,能打开explore程序吗?

如果能打开程序,多次使用该命令,打开多个explore程序,它们都是一个进程ID吗?进程句柄肯定不一样。

---------------------------------------------------------------------------------------------------------------------------

终于搞清楚了:

操作系统把每个进程间都进行隔离处理,如果想要控制别的进程则需要 打开进程()
打开那个进程ID,得到一个可以控制那个进程的句柄,每次打开的得到进程句柄都是会变化的.当不再使用该进程句柄时需要 关闭句柄()
关掉.因为被打开的进程句柄,即使那个进程已经关闭了句柄还会一直有效.而windows系统最多只能提供65536/4=16384个可用的句柄数.若不停的打开进程ID却不及时关掉不用的进程句柄,会导致系统变慢程序崩溃.
----------------------------------------------------------------------------------------------------------------------------

.版本 2

.程序集 窗口程序集1

.子程序 __启动窗口_创建完毕

 .子程序 _按钮1_被单击
.局部变量 进程句柄, 整数型

进程句柄 = 打开进程 (4876)          //4876是计算器的进程ID, 打开进程 (4876)获得计算器的进程句柄,从而可以在本程序中控制计算器的进程。
信息框 (到文本 (进程句柄), 0, )       //显示计算器的进程句柄
进程_结束进程 (进程句柄)               //结束计算器进程

----------------------------------------------------------------------------------------------------------------------------

.版本 2

进程句柄 = 打开进程 (3904)           //3904是在任务管理器中查到的
信息框 (到文本 (进程句柄), 0, )
进程句柄 = 打开进程 (3904)
输出调试文本 (到文本 (进程句柄))

实验显示: 这两次打开进程(进程ID)获得的进程句柄是不一样的。

----------------------------------------------------------------------------------------------------------------------------

另一个问题:不能每次都用任务管理器查看进程的ID,那怎么用代码获得进程的ID呢?

可以使用:进程_取窗口进程ID(),或者是窗口_取窗口进程ID()。必要参数为:窗口句柄。

那窗口句柄又是怎样得到呢?使用:窗口_取窗口句柄()。参数为:窗口类名,窗口标题,是否模糊标题。

窗口类名、窗口标题等信息可以通过软件查看得到,如精易编程助手等。

------------------------------------------------------------------------------------------------------------------------------

还有两个常用的取得进程ID的命令:进程取ID(),进程_取程序进程ID()

进程_取程序进程ID(),参数:1、进程ID数组,可空(返回取到的第一个进程)。为什么是进程ID数组呢,因为若程序多次打开,则相同程序名,有多个进程存在。

                                          2、不带路径的程序名。

进程取ID(),             参数:不带路径的程序名

.版本 2

.程序集 窗口程序集1

.子程序 __启动窗口_创建完毕

.子程序 _按钮1_被单击
.局部变量 计次, 整数型
.局部变量 数目, 整数型
.局部变量 进程ID数组, 整数型, , "0"

数目 = 进程_取程序进程ID (进程ID数组, “Calc.exe”)
信息框 (到文本 (数目), 0, )
.计次循环首 (取数组成员数 (进程ID数组), 计次)
    输出调试文本 (到文本 (进程ID数组[计次]) + #换行符)
.计次循环尾 ()

//注意数组是用中括号[],来调用数组元素。而不是用小括号(),因为如果用小括号()这时程序会认为这是个命令,而不是数组。

-----------------------------------------------------------------------------------------------------------------------------

posted on 2011-06-11 10:35  wanghj_dz  阅读(294)  评论(0编辑  收藏  举报

导航