关闭所有非系统启动时的程序?(50分)

  • 主题发起人 主题发起人 wealsh
  • 开始时间 开始时间
W

wealsh

Unregistered / Unconfirmed
GUEST, unregistred user!
我是这样想的,系统启动后备份一下当前的进程列表,在需要的时候列出当前的所有进程与备份列表进行对比,多出来的(即当前打开的进程)强行结束。

但我不想这么做啊,请问还有什么好的方法?
 
2000的话,看 http://www.yesky.com/472/1802972.shtml
 
楼上的,理解错了。我的意思是关掉所有非系统刚启动时的进程(也就是进入系统后我打开的另一些程序,比如:QQ、浏览器、游戏等等。一个按扭就把它们结束了?!)
 
检查进程,如果是非系统进程且在系统启动项中没有的,结束掉它
 
改刘麻子的,不错:(

//---窗体遍历回调函数-- {--窗口句柄--} {--额外参数--}
function EnumWindowsProc(WinHwnd: LongWord; Param: LongWord): Boolean; stdcall;
var
WindowText : string ; // 窗体标题
WindowClass : string ; // 窗体类名

WinThreadID : LongWord; // 线程ID
WinProcessId : LongWord; // 进程ID

ModuleStruct : TMODULEENTRY32; // 模块信息结构
ModuleHandle : LongWord; // 快照句柄
FoundModule : Boolean ; // 是否找到模块

MFileName : string ; // 文件名
begin
{--继续遍历--}
Result := TRUE;
{--过滤条件--}
if ( IsWindowVisible(WinHwnd) or IsIconic(WinHwnd) ) and
(
(GetWindowLong(WinHwnd, GWL_HWNDPARENT) = 0) or
(GetWindowLong(WinHwnd, GWL_HWNDPARENT) = Longint(GetDesktopWindow))
)and
( GetWindowLong(WinHwnd, GWL_EXSTYLE) and WS_EX_TOOLWINDOW = 0 ) then
begin
{-----标题文字------}
SetLength(WindowText, GetWindowTextLength(WinHwnd)+2);
Getwindowtext(WinHwnd, Pchar(WindowText), GetWindowTextLength(WinHwnd)+2);
WindowText := string( Pchar(WindowText) );
{-----窗体类名------}
SetLength(WindowClass, 512);
GetClassName(WinHwnd, Pchar(WindowClass), 512);
WindowClass := string( Pchar(WindowClass) );
{----线程&进程ID----}
WinThreadID := GetWindowThreadProcessId(WinHwnd, @WinProcessId);

{---模块列表快照----}
ModuleHandle := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, WinProcessId);
ModuleStruct.dwSize := sizeof(ModuleStruct);
{-----第1个模块-----}
FoundModule := Module32First(ModuleHandle, ModuleStruct);
while (FoundModule) do
begin
MFileName := UpperCase(ExtractFileName(ModuleStruct.szExePath));
{----是否后缀exe----}
if (MFileName='EXPLORER.EXE') or (MFileName='DELPHI32.EXE') then
Break else
begin
Postmessage(WinHwnd,wm_quit,0,0);
Break;
end;
{----下一个模块----}
FoundModule := Module32Next(ModuleHandle, ModuleStruct);
end;
{----释放句柄----}
CloseHandle(ModuleHandle);
end;
end;


EnumWindows(@EnumWindowsProc,0)
 
不过还是不大理想,一些程序有时还是关不了。。。
 
后退
顶部