BCB中如何调用taskkill.exe程序重启explorer.exe进程??

honghust 2008-09-26 05:39:49
我想通过程序去掉桌面快捷方式的小箭头,之前肯定是修改注册表,下一步肯定是要刷新桌面了,这就需要到任务管理器里结束掉explorer.exe然后再在里面新建一个explorer.exe,才能见到去掉小箭头后的效果,如何实现呢,各位帮忙试一下。
...全文
731 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
loveshell 2008-10-06
  • 打赏
  • 举报
回复
taskkill /f /im explorer.exe
start explorer.exe
xjq2003 2008-10-06
  • 打赏
  • 举报
回复


WinExec("taskkill /F /IM IEXPLORE.exe",SW_HIDE);///////关闭IE
ShellExecute(NULL,"open","IEXPLORE.exe",NULL,NULL,SW_SHOWNORMAL);////////启动IE
jacknes009 2008-09-27
  • 打赏
  • 举报
回复
关掉线程可能效果好点噢。
jxw1987628 2008-09-27
  • 打赏
  • 举报
回复
如果上面的不能满足要求,你可以看下我的代码!


void __fastcall TForm1::FormCreate(TObject *Sender)
{

GetProcessList();

}
//---------------------------------------------------------------------------


//下面函数实现遍历系统当前运行的全部进程

void __fastcall TForm1::GetProcessList(void)
{
HANDLE hProcessSnap=0;
PROCESSENTRY32 pe32;
hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hProcessSnap==INVALID_HANDLE_VALUE)
{
ShowMessage("snap error!");
return;
}
pe32.dwSize=sizeof(pe32);
BOOL bSnap=Process32First(hProcessSnap,&pe32) ;
TListItem* pItem=0;
pItem=ListView1->Items->Add();
pItem->Caption=IntToStr( pe32.th32ProcessID);
pItem->SubItems->Add(pe32.szExeFile);
pItem->SubItems->Add(IntToStr(pe32.cntThreads));
pItem->SubItems->Add(IntToStr(pe32.cntUsage));
while(bSnap)
{
bSnap=Process32Next(hProcessSnap,&pe32);
pItem=ListView1->Items->Add();
pItem->Caption=IntToStr( pe32.th32ProcessID);
pItem->SubItems->Add(pe32.szExeFile);
pItem->SubItems->Add(IntToStr(pe32.cntThreads));
pItem->SubItems->Add(IntToStr(pe32.pcPriClassBase));
}
CloseHandle(hProcessSnap);
}

//下面是在某个Button中结束选中的进程
void __fastcall TForm1::N1Click(TObject *Sender)
{

HANDLE hThread=NULL;
TListItem*pItem=0;
pItem=ListView1->Selected;
if(pItem==0)
{
ShowMessage("没有选中任何进程!");
return;
}
else
{
int ThreadID=StrToInt(pItem->Caption);
hThread=OpenProcess(PROCESS_ALL_ACCESS,false,ThreadID);
if(hThread==NULL)
{
ShowMessage("打开进程失败!");
return ;
}
else
{
if(TerminateProcess(hThread ,0))
{
CloseHandle(hThread);
ListView1->Items->Clear();
GetProcessList();//刷新列表
ShowMessage("结束进程成功!");
}
else
{
ShowMessage("结束进程失败!");
}
}

}
return ;
}



对于结束掉你的Explore.exe是可以的,你只需要循环的时候判断它的szExeFile是不是"explore.exe“

另外你再调用CreateProcess来创建进程!
honghust 2008-09-27
  • 打赏
  • 举报
回复
我的是IE啊。不过还是没有任何反映,我开了几个ie窗口。应该没有问题吧。对了,有qq没,qq方便些。我qq278430631
yumikoo 2008-09-27
  • 打赏
  • 举报
回复
WinExec("taskkill /F /IM IEXPLORE.exe",SW_HIDE);///////关闭IE
我已经测试过了啊。你先看下你用的什么浏览器,他的进程是不是IEXPLORE.exe。其实完善点,你可以多一个针对IE窗口存在的查询判断的。如果你的IE进程IEXPLORE.exe打开着,那就肯定可以关闭的。如果没有打开,这句话从视觉上来看没有什么效果的。界面也灭有特别的反应。
honghust 2008-09-27
  • 打赏
  • 举报
回复
你试过你给的那句没,我试了,好象没有效果啊,第二句有效果,第一句没效果,不信你自己试试。我也没有找到taskkill这个文件到底在哪个地方。
yumikoo 2008-09-27
  • 打赏
  • 举报
回复
Taskkill
结束一个或多个任务或进程。可以根据进程 ID 或图像名来结束进程。

语法
taskkill [/s Computer [/u Domain\UserName [/p Password]]] {[/fi Filter [/fi Filter [ ...]]] [{/pid ProcessID | /im ImageName}] | /pid ProcessID | /im ImageName} [/f] [/t]

参数
/s Computer

指定远程计算机名称或 IP 地址(不能使用反斜杠)。该默认值是本地计算机。

/u Domain\UserName

使用 UserName 或 Domain\UserName 指定的用户的帐户权限运行该命令。仅在指定 /s 后才能指定 /u。默认值是当前登录发布命令的计算机的用户具有的权限。

/p Password

指定在 /u 参数中指定的用户帐户的密码。

/fi Filter

指定将要终止或不终止的进程的类型。可以指定多个筛选器。使用通配符 (*) 指定所有任务或图像名称。以下是有效的筛选器名称、运算符和值:


名称 运算符 值
Status
eq, ne
RUNNING | NOT RESPONDING | UNKNOWN

Imagename
eq, ne
任何有效字符串。

PID
eg, ne, gt, lt, ge, le
任何有效的正整数。

Session
eg, ne, gt, lt, ge, le
任何有效的会话数。

CPUTime
eq, ne, gt, lt, ge, le
格式为 HH:MM:SS 的有效时间。MM 和 SS 参数应在 0 到 59 之间,HH 参数可以是任何一个有效的无符号数值。

Memusage
eg, ne, gt, lt, ge, le
任何有效的整数。

Username
eq, ne
任何有效的用户名 ([Domain\]UserName)。

Services
eq, ne
任何有效字符串。

Windowtitle
eq, ne
任何有效字符串。

Modules
eq, ne
任何有效字符串。


/pid ProcessID

指定将终止的进程的进程 ID。

/im ImageName

指定将终止的进程的图像名称。使用通配符 (*) 指定所有图像名称。

/f

指定将强制终止的进程。对于远程进程可忽略此参数,所有远程进程都将被强制终止。

/t

终止指定的进程与该进程启动的任何子进程。

/?

在命令提示符下显示帮助。

注释
• 指定远程系统时,不支持“WindowTitle”和“Status”筛选器。

• 只有与筛选器一起指定时,通配符 (*) 才能被接受。

• 无论是否指定 /f 参数,都会始终强制执行对远程进程的终止操作。

• 向 HOSTNAME 筛选器提供计算机名将导致关机和中止所有进程。

• 使用 tasklist 确定要终止的进程的进程 ID (PID)。

• Taskkill 替代了 Kill 工具。


示例
下面的示例说明如何使用 taskkill 命令:

taskkill /pid 1230 /pid 1241 /pid 1253

taskkill /f /fi "USERNAME eq NT AUTHORITY\SYSTEM" /im notepad.exe

taskkill /s srvmain /f /im notepad.exe

taskkill /s srvmain /u maindom\hiropln /p p@ssW23 /fi "IMAGENAME eq note*" /im *

taskkill /s srvmain /u maindom\hiropln /fi "USERNAME ne NT*" /im *

taskkill /pid 2134 /t /fi "username eq administrator"

taskkill /f /fi "PID ge 1000" /im *
honghust 2008-09-27
  • 打赏
  • 举报
回复
能解释下taskkill参数的含义吗?
yumikoo 2008-09-26
  • 打赏
  • 举报
回复

WinExec("taskkill /F /IM IEXPLORE.exe",SW_HIDE);///////关闭IE
ShellExecute(NULL,"open","IEXPLORE.exe",NULL,NULL,SW_SHOWNORMAL);////////启动IE

yuanreid 2008-09-26
  • 打赏
  • 举报
回复
如果运行的用户有权限,可以通过程序进行。首先需要枚举所有的系统进程,名称匹配判断后,将该进程杀掉,然后启动新的进程。

下面是我原来写过的一个判断某个进程是否运行的程序,在此基础上添加杀进程的功能已经非常简单了。


bool __fastcall TfrmMain::IsMainAppRunning()
{
if(FAppProcessName == "")
return false;

AddReMessage("检查当前系统进程\t ……",clBlue, "[进行中……]", clRed);
bool ret = false;
sz = 0;
if(EnumProcesses(lpidProcess, 500, &sz))
{
ReplaceReMessage("检查当前系统进程\t ……",clBlue, "共发现"+IntToStr(sz)+"个", clGreen);


HANDLE hProcess;
HMODULE lphModule;
DWORD cbNeeded;
for(int i=0;i<int(sz);i++)
{
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ, false, lpidProcess[i]);

if(hProcess!=NULL)
{
cbNeeded = 0;
if(!EnumProcessModules(hProcess, &lphModule, sizeof(HMODULE), &cbNeeded))
{
continue;
}
char lpBaseName[255]="unknown";
if(GetModuleBaseName(hProcess, lphModule, lpBaseName, sizeof(lpBaseName)))
{
if(AnsiString(lpBaseName) == FAppProcessName)
{
ret = true;
AddReMessage("系统正在运行",clRed, NULL, TColor(NULL));
break;
}
}
}
CloseHandle(hProcess);
}
}
else
{
ReplaceReMessage("检查当前系统进程\t ……",clBlue, "失败", clRed);
}
return ret;
}

13,870

社区成员

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

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