在windows底层的api中,提供了以下的方法来满足需求:
WTSGetActiveConsoleSessionId: 获取当前active User的 session ID。
CreateProcessAsUser:用当前用户创建一个新的进程。
下面的程序提供了两个方法,一是获取当前活动的用户包括域名和用户名,二是用当前用户创建一个新的进程。
代码如下:PID传给了变量r
@echo off&setlocal enabledelayedexpansionfor /f "delims=, tokens=1,2" %%a in ('tasklist /fo csv /nh') do (
set "%%~a_pid=%%~b"
)
set/p "target=请输入要查询的进程名: "
set "r=!%target%_pid!"
echo [%target%]的PID为: %r%
pause
用pe32th32ProcessID
修改后的代码:
#include<windowsh>
#include<stdioh>
#include<TlHelp32h>
#include<iostream>
using namespace std;
int main(int argc,charargv[])
{
PROCESSENTRY32 pe32;
pe32dwSize = sizeof(pe32);
HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
{
cout<<"CreateToolhelp32Snapshot 调用失败"<<endl;
return-1;
}
BOOL bMore = ::Process32First(hProcessSnap,&pe32);
while(bMore)
{
cout<<"进程ID:"<<pe32th32ProcessID<<" 进程名称:"<<pe32szExeFile<<endl;
bMore = ::Process32Next(hProcessSnap,&pe32);
}
::CloseHandle(hProcessSnap);
cout<<"请按任意键结束……"<<endl;
getchar();
return 0;
}
想要获得windows下面进程的详细信息,仅靠一个任务管理器是不行的。Doc提供了一些命令可以做到这个问题。在开始运行里面输入: 就可以查看到进程的路径,这个时候,应用程序可以做一些 *** 作,比如算程序的MD5值等。然后可以根据tasklist命令查看他的详细信息。 假如想Kill进程,那么就采用ntsd -c q -p PID命令 ,此命令号称是无敌的,只有System、SMSSEXE和CSRSSEXE不能杀。前两个是纯内核态的,最后那个是Win32子系统,ntsd本身需要它。 ntsd从2000开始就是系统自带的用户态调试工具。被调试器附着(attach)的进程会随调试器一起退出,所以可以用来在命令行下终止进程。使用ntsd自动就获得了debug权限,从而能杀掉大部分的进程。用法:开个cmdexe窗口,输入: ntsd -c q -p PID 把最后那个PID,改成你要终止的进程的ID。如果你不知道进程的ID,任务管理器-》进程选项卡-》查看-》选择列-》勾上"PID(进程标识符)",然后就能看见了。
自己理解
以上就是关于在Windows Service 中怎么获取活动用户的进程列表全部的内容,包括:在Windows Service 中怎么获取活动用户的进程列表、windows平台批处理命令,根据进程名称获取进程id,并将id传给某个变量、怎么用VS中的C++获取windows2010系统进程清单等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)