強行關閉視窗 |
缺席
|
anyone
中階會員 發表:1 回覆:63 積分:52 註冊:2007-02-12 發送簡訊給我 |
我用過SendMessage、PostMessage的方式(WM_QUIT和WM_CLOSED)
也試過用ExitProcess 甚至是用TerminateProcess的方式去關閉一視窗 TerminateProcess(hProcess, 0); 視窗卻關不掉,依然存在 用GetLastError取得的資訊為ERROR_NO_MORE_FILES 很奇怪的是視窗明明就存在,為何會ERROR_NO_MORE_FILES 視窗用FindWindow也確實找到,但視窗偏偏就不讓我關閉 請問各位前輩,是否還有其它的方式可以強行關閉視窗? ps.我只能從工作管理員的應用程式裡,選擇此視窗再按工作結束才能關閉此視窗 |
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
anyone
中階會員 發表:1 回覆:63 積分:52 註冊:2007-02-12 發送簡訊給我 |
您的意思是以下的方式嗎?
<textarea class="delphi" rows="10" cols="60" name="code">
OpenProcessToken(...)
if (LookupPrivilegeValue(...))
begin
...
if AdjustTokenPrivileges(...) then ...
end;
TerminateProcess();
</textarea>
我試了,一樣耶! 還是不能關掉視窗 ===================引 用 wameng 文 章=================== SetPrivilegeToken?, SeDebugPrivilege' 設定 DEBUG權限後在 TerminateProcess |
anyone
中階會員 發表:1 回覆:63 積分:52 註冊:2007-02-12 發送簡訊給我 |
|
SleepWalker
一般會員 發表:16 回覆:20 積分:12 註冊:2004-06-21 發送簡訊給我 |
{ For Windows 9x/ME/2000/XP }
function KillTask(ExeFileName: string): Integer; const PROCESS_TERMINATE = $0001; var ContinueLoop: BOOL; FSnapshotHandle: THandle; FProcessEntry32: TProcessEntry32; begin Result := 0; FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); FProcessEntry32.dwSize := SizeOf(FProcessEntry32); ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32); while Integer(ContinueLoop) <> 0 do begin try if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then begin Result := Integer(TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID), 0)); end; ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32); except Integer(ContinueLoop) := 0; end; end; CloseHandle(FSnapshotHandle); end; |
anyone
中階會員 發表:1 回覆:63 積分:52 註冊:2007-02-12 發送簡訊給我 |
這個一樣用的是TerminateProcess的方式
這位前輩,我有用過這方法,沒有用 所以我才問有沒有其它方法 還是謝謝您 ===================引 用 SleepWalker 文 章=================== { For Windows 9x/ME/2000/XP } function KillTask(ExeFileName: string): Integer; const ? PROCESS_TERMINATE = $0001; var ? ContinueLoop: BOOL; ? FSnapshotHandle: THandle; ? FProcessEntry32: TProcessEntry32; begin ? Result := 0; ? FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); ? FProcessEntry32.dwSize := SizeOf(FProcessEntry32); ? ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32); ? while Integer(ContinueLoop) <> 0 do ? begin ??? try ????? if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExeFileName)) or ????????? (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then ????? begin ??????? Result := Integer(TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID), 0)); ????? end; ????? ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32); ??? except ????? Integer(ContinueLoop) := 0; ??? end; ? end; ? CloseHandle(FSnapshotHandle); end; |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |