我还以为是程序呢,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、怎样用批处理获取所有进程的映像名称等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)