您的位置:程序门 -> vb -> 基础类



再开100分贴:openprocess的问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


再开100分贴:openprocess的问题[已结贴,结贴人:dorothyjesse]
发表于:2007-02-12 14:13:41 楼主
private   sub   command2_click()
      dim   pid   as   long
      getwindowthreadprocessid   me.hwnd,   pid
     
      dim   phandle   as   long
      phandle   =   openprocess(process_all_access,   false,   pid)
      debug.print   phandle
end   sub
每次得的进程句柄为何都不一样呢?我的pid可是一直没变的啊

还有就是能否说说openprocess函数的具体用法及各参数的意义?
发表于:2007-02-12 14:21:291楼 得分:30
private   sub   command2_click()
      dim   pid   as   long
      getwindowthreadprocessid   me.hwnd,   pid
  我想你得到的是窗体的句柄
发表于:2007-02-12 14:37:452楼 得分:0
getwindowthreadprocessid   me.hwnd,   pid
得到的是pid,经过我多次测试此pid与任务列表中的pid一致
发表于:2007-02-12 14:40:473楼 得分:0
private   sub   command2_click()
      dim   pid   as   long
      pid   =   getcurrentprocessid
      dim   phandle   as   long
      phandle   =   openprocess(process_all_access,   false,   pid)
      debug.print   phandle
end   sub
这样得到的phandle也是每次都不一样
发表于:2007-02-12 15:17:464楼 得分:40
declare   function   openprocess   lib   "kernel32 "   alias   "openprocess "   (byval   dwdesiredaccess   as   long,   byval   binherithandle   as   long,   byval   dwprocessid   as   long)   as   long  
说明  
打开一个现有进程的句柄  
返回值  
long,如执行成功,返回进程句柄;零表示失败。会设置getlasterror  
参数表  
参数   类型及说明  
dwdesiredaccess   long,指定这个句柄要求的访问方法。指定api32.txt文件中以process_???开头的一个或多个常数  
binherithandle   long,如句柄能够由子进程继承,则为true  
dwprocessid   long,要打开那个进程的进程标识符  
注解  
这个函数经常用来打开一个要进行同步的进程
 
发表于:2007-02-12 15:19:395楼 得分:0
private   sub   command2_click()
      dim   pid   as   long
      pid   =   getcurrentprocessid
      dim   phandle   as   long
      phandle   =   openprocess(process_all_access,   false,   pid)
      debug.print   phandle
closehandle   phandle

end   sub
这样得到的phandle也是每次都一样了
发表于:2007-02-12 15:20:446楼 得分:0
如果你不closehandle   ,系统只能用另一个 handle了,当然就不一样了
发表于:2007-02-12 16:44:437楼 得分:0
谢谢阿勇同志
按你的说法用此法得不到我要东东了
我的最终目的是要得到程序本身启动时的进程句柄
不知有没有办法解决?
发表于:2007-02-12 17:04:238楼 得分:10
句柄是动态的,当然每次启动都不一样,hwnd和id是不同的
发表于:2007-02-12 17:21:099楼 得分:0
句柄是动态的
==============
我当然知道句柄是动态的,但在某一次启动后它的句柄应该是定下来了吧?我要的就是这个东东。
发表于:2007-02-12 18:20:3310楼 得分:20
程序每次启动系统随机分配进程句柄、hwnd、id当然你每次得到的不一样。
不知道你用这个有什么用,没有什么意义。想得到hdc直接用
        me.hdc
        me.hasdc
        me.hwnd
        app.hinstance
        app.threadid
自己的程序没有必要弄得那么复杂
发表于:2007-02-13 08:14:1511楼 得分:0
private   type   process_information
                hprocess                 as   long
                hthread                   as   long
                dwprocessid           as   long
                dwthreadid             as   long
        end   type

        private   declare   function   createprocessa   lib   "kernel32 "   (byval   _
                lpapplicationname   as   long,   byval   lpcommandline   as   string,   byval   _
                lpprocessattributes   as   long,   byval   lpthreadattributes   as   long,   _
                byval   binherithandles   as   long,   byval   dwcreationflags   as   long,   _
                byval   lpenvironment   as   long,   byval   lpcurrentdirectory   as   long,   _
                lpstartupinfo   as   startupinfo,   lpprocessinformation   as   _
                process_information)   as   long

在用createprocessa打开某一程序时会产生一个process_information,我要的就是process_information中的hprocess


快速检索

最新资讯
热门点击