VC 关闭 进程

来源:百度知道 编辑:UC知道 时间:2024/06/30 16:58:08
首先说明编程的目的:在程序(A进程)中实现对正在运行的另一程序(B进程)进行关闭。要求:B进程(这里假定B是一个文件传输的进程)为安全退出,B程序如果正在进行文件传输或与C进程(这里假定只有一个)进行通信的时候,则必须等待当前任务完成后关闭且关闭的时间A进程要获知(实现进程同步)。

顺便问以下几个问题:1,实现进程同步是不是一定要进行进程通信呀?在我想设计的这个程序中,实行的同步实质只是对关闭进程的一个控制,并没有想传递数据,如果像进程通信那样编写程序,感觉上有点复杂。
2,事件对象,能否在进程中应用呢?事件对象是属于线程的还是进程的呀?
3,一般而言,我们创建进程的时候,两进程之间是互相不联系的,线程呢?比如:启动一个程序(主线程也会产生),那么在主线程我们运行的程序中,再开一个或两个线程,那么他们对程序中数据是可以访问么?我好像没有听到两线程之间通信这一说法。
能否把线程看成是一个函数调用一样,只不过这种函数是完全并行运行的。(虽然从本质上这种理解是错误的,实质是CPU片选分配时间)。而且这两个线程函数之间可共享进程(程序)的数据,且能进行实现同步(如:利用事件对象,互斥体对象等)。这种理解对不?对线程的理解感觉很混乱。
后面的三个问题,希望能形象地讲解。对于程序的实现及要学习的知识,希望能详细地答复,期待您的回复。
在我查了下findwindow的MSDN,貌似用findwindown传递消息的方式更简单,消息是属于某个句柄(多数为一个窗口的),那么pWnd->PostMessage(WM_CLOSE); //pWnd为已获得的句柄,.
非常感谢一楼的回答,我想知道,如果正运行的程序最小化能否得到窗口句柄呢? WINCE环境下运行。

首先根据进程名找到该进程的ID,如已知某进程的进程名为Application.exe,可以用列举进程的办法找的该进程的ID(前提是系统中有且只有一个这样的进程):
HANDLE hProcessSnap;
TCHAR ProcessName[]="Application.exe";
DWORD ProcessID=0x00;
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(hProcessSnap==INVALID_HANDLE_VALUE)
{
printf("列举进程失败\n");
return ;
}
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(pe32);
BOOL bProcess = Process32First(hProcessSnap, &pe32);
TCHAR buff[1024];
while(bProcess)
{
if(strcmp(ProcessName,pe32.szExeFile)==0)
{
ProcessID= pe32.th32ProcessID;
break;
}
memset(buff, 0x00, 1024);
bProcess=Process32Next(hProcessSnap, &pe32);
}
if(ProcessID==0)
{
printf("没有找到进程%s", ProcessName);
return;
}

然后把ProcessID作为参数,按照下面这篇文章所说的方法得到该进程的主窗口句柄:运行VC,我关闭应用程序窗口了,为什么进程中还有该程序运行 关闭进程 VC 关闭不了数据库连接 VC++遇到问题需要关闭?? 哪些进程最好关闭 关闭CSRSS进程 进程关闭会怎样? 强行关闭进程 VB 关闭QQ进程 电脑进程怎么关闭?