获取Explorer进程ID的两种方式

    技术2026-08-17  25

    获取 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

    最新回复(0)