获取Explorer进程ID的两种方式

来源:互联网 发布:取餐叫号软件 编辑:程序博客网 时间:2024/05/17 09:26

获取Explorer进程ID的两种方式

由进程ID进而用OpenProcess函数获取句柄

 

1.       通过桌面类和名称

                .data?    

szDesktopClass      db    'Progman',0                ;桌面的窗口类

szDesktopWindow db    'Program Manager',0         ;桌面的窗口名称

dwProcessID     dd   ?                        ;保存进程ID

dwThreadID      dd   ?                       ;保存线程ID

                .code

invoke     FindWindow,addr szDesktopClass,addr szDesktopWindow ;获取桌面窗口句柄

invoke     GetWindowThreadProcessId,eax,offset dwProcessID      ;获取进程ID

mov     dwThreadID,eax                     ;线程ID

2.       进程快照方式,比较可执行文件名

                .data?

szExplorer      db      'EXPLORER.EXE',0   ;可执行文件名

dwExplorerID    dd     ?                   ;保留Explorer进程ID

                .code

_ProcTest proc

        local @stProcess:PROCESSENTRY32          ;每一个进程的信息

              local @hSnapShot                           ;快照句柄     

           pushad                          

              invoke     RtlZeroMemory,addr @stProcess,sizeof @stProcess ; 0初始化进程结构

              mov @stProcess.dwSize,sizeof @stProcess                 ;手工填写 结构大小

              invoke     CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,0 ;获取进程快照

              mov @hSnapShot,eax                                  ;快照句柄

              invoke     Process32First,@hSnapShot,addr @stProcess       ;第一个进程

              .while      eax             

                      invoke   lstrcmp,addr @stProcess.szExeFile,addr szExplorer ;比较文件名                     

                      .if   eax == 0       ;0,说明进程名相同                      

                             mov eax,@stProcess.th32ProcessID

                             mov dwExplorerID,eax

                    .endif                   

                   invoke   Process32Next,@hSnapShot,addr @stProcess ;下一个进程

              .endw

              invoke     CloseHandle,@hSnapShot ;关闭快照

              popad

_ProcTest endp

原创粉丝点击