如何结束一个没有响应的进程?

大伟 2007-05-28 05:07:25
hwnd=FindWindow(NULL,"TEST");
SendMessage(hwnd,WM_CLOSE,NULL,NULL);
这个方法不行,不知道还有什么方法?
...全文
264 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
loveshell 2007-05-29
  • 打赏
  • 举报
回复
列举进程,比较名字。
DWORD findpid(char* inputproname)
{
DWORD PID=NULL;
HANDLE hProcess=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
HANDLE hModule;
PROCESSENTRY32* pinfo=new PROCESSENTRY32;
MODULEENTRY32* minfo=new MODULEENTRY32;
pinfo->dwSize=sizeof(PROCESSENTRY32);
minfo->dwSize=sizeof(MODULEENTRY32);
BOOL report;
char shortpath[MAX_PATH] = "";
char proname[MAX_PATH];
char propath[MAX_PATH];
char defaultpath[MAX_PATH];

report=Process32First(hProcess,pinfo);
HANDLE hToken; // handle to process token
TOKEN_PRIVILEGES tkp; // pointer to token structure
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken);
LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES) NULL, 0);
while(report)
{

hModule=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,pinfo->th32ProcessID);
Module32First(hModule, minfo);
strcpy(proname,pinfo->szExeFile);
if(stricmp(inputproname,proname)==0)
{
PID=pinfo->th32ProcessID;
}
report=Process32Next(hProcess,pinfo);
}
return PID;
}
大伟 2007-05-29
  • 打赏
  • 举报
回复
如何获得进程ID呢?
jacknes009 2007-05-29
  • 打赏
  • 举报
回复
study
大伟 2007-05-29
  • 打赏
  • 举报
回复
用了JSP的一段代码
void KillProgram(LPCSTR ExeName)
{
LPCSTR File;
HANDLE hProcessSnap;
PROCESSENTRY32 pe32;

if (!ExeName || !ExeName[0])
return;
File = strrchr(ExeName, '\\');
if (File!=0)
ExeName = File+1;
hProcessSnap = CreateToolhelp32Snapshot(
TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == (HANDLE)-1)
return;

memset(&pe32, 0, sizeof(pe32));
pe32.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(hProcessSnap, &pe32))
{
do
{
File = strrchr(pe32.szExeFile, '\\');
File = File? File+1 : pe32.szExeFile;
if (strcmpi(File,ExeName)==0) {
TerminateProcess(OpenProcess(PROCESS_ALL_ACCESS,0,pe32.th32ProcessID), 0);
break;
}
}while(Process32Next(hProcessSnap,&pe32));
}
CloseHandle(hProcessSnap);
}


void __fastcall TForm1::Button3Click(TObject *Sender)
{
String strExe = ExtractFilePath(Application->ExeName)+"\\player.exe";
KillProgram(strExe.c_str());
}
//---------------------------------------------------------------------------
netsys2 2007-05-28
  • 打赏
  • 举报
回复
http://access911.net/n/doc1.asp?mode=a&bid=005001&aid=5082789
netsys2 2007-05-28
  • 打赏
  • 举报
回复
bool KillProcessByAPI( DWORD dwPid )
{
HANDLE ps = OpenProcess(1,false,dwPid);
if( ps && TerminateProcess(ps,-9))
return true;
return false;
}

dwPid是进程ID

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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