用DELPHI在2000/xp编一个程序可以得到当前系统进程.并可以对其操作可以关闭系统已有进程!怎么编高手指教!

解决方案 »

  1.   

    OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY │ TOKEN_ADJUST_PRIVILEGES, &hToken);
    // 打开进程的令牌,提升权限;
    AdjustTokenPrivileges(hToken, FALSE, &TokenPrivileges, sizeof(TOKEN_PRIVILEGES), NULL, NULL);
    // 将进程的权限提升到支持调试(Debug);
    CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    // 创建进程的快照;
    Process32First(hProcessSnap, &ProcessEntry32);
    Process32First(hProcessSnap, &ProcessEntry32);
    // 枚举所有进程;
    OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, ProcessEntry32.th32ProcessID);
    // 打开特定进程,以查询进程相关信息;
    GetProcessTimes(hProcess, &CreateTime, &ExitTime, &KernelTime, &UserTime);
    // 获取进程的时间信息; 
    GetProcessMemoryInfo(hProcess, &PMCounter, sizeof(PMCounter));
    // 获取进程的存储区信息;
    GetPriorityClass(hProcess);
    // 获取进程的优先权;
    GetProcessIoCounters(hProcess, &IoCounters);
    // 获取进程的IO使用情况;
    CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessID);
    // 创建模块快照;
    Module32First(hModuleSnap, &ModuleEntry32);
    Module32Next(hModuleSnap, &ModuleEntry32);
    // 枚举进程模块信息;
    CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
    // 创建线程快照;
    Thread32First(hThreadSnap, &ThreadEntry32);
    Thread32Next(hThreadSnap, &ThreadEntry32);
    // 枚举线程信息;
    OpenThread(THREAD_ALL_ACCESS, FALSE, ThreadEntry32.th32ThreadID);
    // 打开线程,须自己获得此函数地址;
    TerminateProcess(hProcess,0);
    // 终止进程;
    SuspendThread(hThread);
    // 悬挂线程;
    ResumeThread(hThread);
    // 激活线程;