Linux 下C++程序中如何获取本程序运行时的进程名

Linux 下C++程序中如何获取本程序运行时的进程名,第1张

我还以为是程序呢,argv[0]不就行了。如果是动态库的话,就比较麻烦了,先上网down一个busybox的源代码吧,参考一下里面top的实现方式,基本思路就是遍历内核的整个进程链表,根据自己的pid(可以用getpid获得)找到对应的进程名。

GetProcesses()返回的是进程对象Process,对返回的集合中的每个元素逐个访问ProcessId属性就可知道所有进程的PID。

你获得进程名字难道不是访问的ProcessName属性?

这条命令就是你需要的

tasklist /fo table /nh

我想再说下 有些进程你强制结束了系统就崩溃了 所以最好不要用NTSD 用taskkill就可以了

taskkill 只结束那些可以结束的进程 重要的系统进程它是没那个权限的

先给你思路:一,找到要关闭的窗体名称,然后关闭,找不到就不管

二,第一次遍历当前所有进程,保存所有进程, 每1秒钟或几秒钟检测是否有新的进程,然后关闭要指定的进程

下面是第一方法, 第二方法要好些但看要求好像用不到! 所以没发!

'需要控件:command1,text1,timer1

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Private Const WM_CLOSE = &H10

Function CloseFrm(sFrmTitle As String) As String

Dim winHwnd As Long

Dim RetVal As Long

winHwnd = FindWindow(vbNullString, sFrmTitle) '标题为form11,大小写无所谓

DebugPrint winHwnd

If winHwnd <> 0 Then

RetVal = PostMessage(winHwnd, WM_CLOSE, 0&, 0&)

If RetVal = 0 Then CloseFrm = "置入消息错误!"

Else

CloseFrm = sFrmTitle & " 没有找到或没有打开或已经被关闭了!"

End If

End Function

Private Sub Command1_Click()

Timer1Interval = IIf(Command1Caption = "开始监控", 1000, 0) '每一秒钟关闭指定程序

Command1Caption = IIf(Command1Caption = "开始监控", "暂停监控", "开始监控")

End Sub

Private Sub Form_Load()

Text1Text = "计算器"

Command1Caption = "开始监控"

End Sub

Private Sub Timer1_Timer()

MeCaption = CloseFrm(Text1Text)

End Sub

没事做,写个详细代码给你吧

#include<windowsh>

#include<tlhelp32h>//声明快照函数的头文件

int main(int argc,char argv[])

{

PROCESSENTRY32 pe32;

//在使用这个结构之前,先设置它的大小

pe32dwSize=sizeof(pe32);

//给系统内的所有进程拍一个快照

HANDLE hProcessSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

//遍历进程快照,轮流显示每个进程的信息

BOOL bMore=::Process32First(hProcessSnap,&pe32);

while(bMore)

{

if(strcmp("abcexe",pe32szExeFile)==0)//如果找到进程名为abcexe

{

HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pe32th32ProcessID);//获取句柄

/这里已经打开那个进程的句柄了/ }

bMore=::Process32Next(hProcessSnap,&pe32);//寻找下一个

}

return 0;

}

在Android中,可以通过ProcessmyPid()和

RunningAppProcessInfo来取得当前的进程名。

示例1

String getCurProcessName(Context context) {

int pid = androidosProcessmyPid();

ActivityManager mActivityManager = (ActivityManager) context

getSystemService(ContextACTIVITY_SERVICE);

for (ActivityManagerRunningAppProcessInfo appProcess : mActivityManager

getRunningAppProcesses()) {

if (appProcesspid == pid) {

return appProcessprocessName;

}

}

return null;

}

TCHAR GetProcessName(DWORD processID )

{

HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID);

TCHAR procName = new TCHAR[MAX_PATH];

GetModuleFileNameEx(hProcess, NULL, procName, MAX_PATH);

return procName;

}

Process p = ProcessGetProcessById(id)

设p为指定id的进程

那么,Process类有 属性

MainWindowHandle 获取关联进程主窗口的窗口句柄。

MainWindowTitle 获取进程的主窗口标题。

也就是

pMainWindowHandle

pMainWindowTitle

到于主程序类名,不好意思,windows可执行程序不一定是用C#写的哦,所以“不存在”主程序类名这种东西。

以上就是关于Linux 下C++程序中如何获取本程序运行时的进程名全部的内容,包括:Linux 下C++程序中如何获取本程序运行时的进程名、C#用Process.GetProcesses()已经获取所有进程的名称,如何获取所有进程的PID、怎样用批处理获取所有进程的映像名称等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9493687.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存