请问怎样得到Window系统中当前有几个程序在运行,怎样控制他们.

qns12345 2000-01-30 10:50:00
请问怎样得到Window系统中当前有几个程序在运行,怎样控制他们.
如得到当前系统中有n个程序,并想将其中某一个关闭,和全部将某一个
程序最大化,在程序中怎样实现.
...全文
214 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
土豆 2000-06-25
  • 打赏
  • 举报
回复
要用ToolHelp32的,给大家几个我写的函数看看,我自己用的,绝对好直接调用的

呵呵:

//
//TaskList.h
//
#define _TASKLIST_H
#define _TASKLIST_H

#include <afxtempl.h>

#define TITLE_SIZE 64
#define PROCESS_SIZE MAX_PATH


class CTaskListEntry : public CObject
{
public:
CTaskListEntry()
{ProcessName[0] = WindowTitle[0] = 0;}

~CTaskListEntry() {}

DWORD dwProcessId;
DWORD dwInheritedFromProcessId;
BOOL flags;
HWND hwnd;
CHAR ProcessName[PROCESS_SIZE];
CHAR WindowTitle[TITLE_SIZE];
};

typedef CTypedPtrArray<CObArray, CTaskListEntry*> CTaskList;

//
//Functions
//
DWORD GetTaskList95(CTaskList& refTask);
BOOL KillProcess(CTaskListEntry* pEntry,BOOL bForce);
VOID GetWindowTitles(CTaskList& refList);

BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam);

#endif


//
//TaskList.cpp
//

#include <windows.h>
#include <string.h>
#include <tlhelp32.h>

#include "TaskList.h"

//取得所有进程,并返回进程数
DWORD GetTaskList95(CTaskList& refList)
{
HANDLE hProcessSnap = NULL;
PROCESSENTRY32 pe32 = {0};
DWORD dwTaskCount = 0;

hProcessSnap =CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == (HANDLE)-1)
return 0;

// 通过漫游Snapshot,取得进程信息
dwTaskCount = 0;
pe32.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(hProcessSnap, &pe32)){
do{
LPSTR pCurChar;

CTaskListEntry* pEntry = new CTaskListEntry;

//取得可执行文件名
pCurChar = pe32.szExeFile + lstrlen (pe32.szExeFile);
while(*pCurChar != '\\' && pCurChar != pe32.szExeFile)
--pCurChar;
lstrcpy(pEntry->ProcessName, pCurChar);

pEntry->flags = 0;
pEntry->dwProcessId = pe32.th32ProcessID;

refList.Add(pEntry);

++dwTaskCount;
}
while (Process32Next(hProcessSnap, &pe32));
}
else
dwTaskCount = 0;
CloseHandle (hProcessSnap);

return dwTaskCount;
}

//取得所有进程的窗口句柄和窗口标题
VOID GetWindowTitles(CTaskList& refList)
{
EnumWindows( EnumWindowsProc, (LPARAM) &refList );
}

BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)
{
DWORD pid = 0;
int i;
CHAR buf[TITLE_SIZE];

CTaskList& refList = *((CTaskList*) lParam);//将传入参数进行类型转换

// 根据窗口句柄得到进程ID
if (!GetWindowThreadProcessId( hwnd, &pid )) {
return TRUE;
}

//漫游TaskList查找窗口对应的项
for (i=0; i < refList.GetSize(); i++){
if (refList[i]->dwProcessId == pid){
refList[i]->hwnd = hwnd;

if (GetWindowText( refList[i]->hwnd, buf, sizeof(buf)))
strcpy( refList[i]->WindowTitle, buf);
break;
}
}

return TRUE;
}

BOOL KillProcess(CTaskListEntry* pEntry, BOOL bForce)
{
HANDLE hProcess;

if (bForce || !pEntry->hwnd){
hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, pEntry->dwProcessId);
if (hProcess == NULL){
return FALSE;
}

if (!TerminateProcess( hProcess, 1)){
// This function terminates the specified process and all of its threads
CloseHandle( hProcess );
return FALSE;
}
}
// kill the process
PostMessage(pEntry->hwnd, WM_CLOSE, 0, 0);
return TRUE;
}
box 2000-03-21
  • 打赏
  • 举报
回复
我这有几个这方面的例子,已经email给你csdn@188.net,希望能有所帮助。
starlyq 2000-01-30
  • 打赏
  • 举报
回复
查一下api,可把当前程序的所有句柄获取
WHQ 2000-01-30
  • 打赏
  • 举报
回复
用ToolHelp,你可得到系统中所有的进程(有窗口的或没窗口的)
kxy 2000-01-30
  • 打赏
  • 举报
回复
The EnumWindows function enumerates all top-level windows on the screen by passing the handle of each window, in turn, to an application-defined callback function. EnumWindows continues until the last top-level window is enumerated or the callback function returns FALSE.

BOOL EnumWindows(

WNDENUMPROC lpEnumFunc, // pointer to callback function
LPARAM lParam // application-defined value
);
SendMessage(xx,WM_QUIT,0,0);
The ShowWindow function sets the specified window's show state.

BOOL ShowWindow(

HWND hWnd, // handle of window
int nCmdShow // show state of window
);


69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧