C++获取进程号及窗口

#include <TlHelp32.h>

//根据进程名获取进程ID
BOOL GetPidByProcessName(TCHAR *pProcess, DWORD*dwPid)
{
    HANDLE hSnapshot;
    PROCESSENTRY32 lppe;
    //创建系统快照
    hSnapshot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL); 

    if (hSnapshot == NULL)
        return FALSE; 

    //初始化 lppe 的大小
    lppe.dwSize = sizeof(lppe); 

    //查找第一个进程
    if (!::Process32First(hSnapshot, &lppe))
        return FALSE;
    do
    {
        if(_tcscmp(lppe.szExeFile, pProcess) == 0)
        {
            *dwPid =  lppe.th32ProcessID;
        }
    }
    while (::Process32Next(hSnapshot, &lppe)); //查找下一个进程  

    return TRUE;
}

//根据进程ID获取窗口句柄
HWND GetHwndByPid(DWORD dwProcessID)
{
    //返回Z序顶部的窗口句柄
    HWND hWnd = ::GetTopWindow(0);

    while ( hWnd )
    {
        DWORD pid = 0;
        //根据窗口句柄获取进程ID
        DWORD dwTheardId = ::GetWindowThreadProcessId( hWnd,&pid);

        if (dwTheardId != 0)
        {
            if ( pid == dwProcessID )
            {
                return hWnd;
            }
        }
        //返回z序中的前一个或后一个窗口的句柄
        hWnd = ::GetNextWindow(hWnd , GW_HWNDNEXT);

    }
    return hWnd;
}

typedef struct
{
 HWND hWnd;
 DWORD dwPid;
}WNDINFO;
 
BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam)
{
 WNDINFO* pInfo = (WNDINFO*)lParam;
 DWORD dwProcessId = 0;
 GetWindowThreadProcessId(hWnd, &dwProcessId);
 
 if(dwProcessId == pInfo->dwPid)
 {
  pInfo->hWnd = hWnd;
  return FALSE;
 }
 return TRUE;
}
 
HWND GetHwndByProcessId(DWORD dwProcessId)
{
 WNDINFO info = {0};
 info.hWnd = NULL;
 info.dwPid = dwProcessId;
 EnumWindows(EnumWindowsProc, (LPARAM)&info);
 return info.hWnd;
}

时间: 2024-10-08 09:11:02

C++获取进程号及窗口的相关文章

Shell命令之ps获取指定进程的进程号

直接看代码 ps aux|grep upload2FTP.sh|grep -v "grep"|awk '{print $2}' 其中awk指定输出第二列内容(centos对应进程号)

C#根据进程名称获取进程的句柄?

C#根据进程名称获取进程的句柄或C#如何获取其他进程的句柄? 不用FindWindow方法! [StructLayout(LayoutKind.Sequential)] public struct ProcessEntry32 { public uint dwSize; public uint cntUsage; public uint th32ProcessID; public IntPtr th32DefaultHeapID; public uint th32ModuleID; public

shell获取进程ID的方法: pidof | pgrep | ps-A+grep+awk

shell获取进程ID的方法: 我知道和实践过的有这么三种: ps -A |grep "cmdname"| awk '{print $1}' pidof "cmdname" pgrep "cmdname" 这三种在bash和busybox ash里面的运行结果稍有不同, 第一种完全相同,但是因为调用命令次数较多,性能上是不行的. 第二种: pidof 只能获取程序的文件名匹配到的进程号,在ash中 比如 pidof "usr/bin/t

每天进步一点点——重新认识Linux中的进程号

转载请说明出处:http://blog.csdn.net/cywosp/article/details/38968011 1. 概述 众所周知,进程(process)是一个可执行程序的实例,但是在Linux中进程可以重新改写为,进程是由内核定义的抽象的实体,并为该实体分配用以执行程序的各项系统资源.从内核的角度看,进程由用户内存空间(user-space memory)和一系列内核数据结构组成,其中用户内存空间包含了程序代码及代码所使用的变量,而内核数据结构则用于维护进程状态信息.记录在内核数据

C#依据进程名称获取进程的句柄?

C#依据进程名称获取进程的句柄或C#怎样获取其它进程的句柄? 有时候标题名是动态变化的,所以不使用FindWindow方法! [StructLayout(LayoutKind.Sequential)] public struct ProcessEntry32 { public uint dwSize; public uint cntUsage; public uint th32ProcessID; public IntPtr th32DefaultHeapID; public uint th32

windows 内核下获取进程路径

windows 内核下获取进程路径 思路:1):在EPROCESS结构中获取.此时要用到一个导出函数:PsGetProcessImageFileName,申明如下: NTSYSAPI UCHAR *    PsGetProcessImageFileName(    __in PEPROCESS Process    ); 此函数获取的是一个简单的进程名,并不是绝对路径. 2):ZwQueryInformationProcess. 要想获取进程的绝对路径,可用一个未公开的函数:ZwQueryInf

自动巡检kafka进程号并自启

#!/bin/sh#ps -ef | grep $proc_name | grep -v grep | awk '{print $2}'source /etc/profileproc_dir="/data/modules/kafka_2.12-1.1.1" ? ?# 程序目录proc_name="kafka.Kafka" ? ? ? ? ? ? ? ? ? ? ?# 进程名file_name="/data/lzmhtest/crontab/kafka/ka

获取进程列表及相关信息

闲着没事,看着任务管理器好玩,查资料先简单实现一下,代码中没有加入获取CPU占用率的代码,这个代码网上很多,只是不喜欢那种写法,这里就不写了.以后继续完善,对于System Process和System的信息还没法获得,那位兄弟知道可以提个醒. 代码如下 [delphi] view plaincopy unit Main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Form

Shell 脚本 ,, 根据进程号退出 从而关机

#!/bin/bash fun(){ ps -ef | grep "$1" | awk '{print $2 $8}' > /usr/file while read line ;do if [[ $line == $1 ]] then # do something // return fi done < /usr/file echo "shutdown ... after 3s " sleep 3 shutdown -h now } while true