창 구석에있는 “X”닫기 버튼을 누르는 것과 비슷한 방법으로 명령 줄에서 프로그램을 닫거나 종료하는 방법은 무엇입니까?
Win7 Ultimate, Win7 Home, WinXP의 3 가지 버전의 Windows에서 크롬을 닫으려고합니다.
Ultimate 및 XP에서 : TSKILL chrome
집에서 : TASKKILL /IM chrome.exe
TSKILL chrome
:
(크롬을 닫고 cmd 오류는
없지만 다시 시작할 때 크롬 오류 복원 )
TASKKILL /IM chrome.exe
:
(그것은 크롬을 닫고, 더 크롬을 다시 실행 오류,
cmd를하지만 오류 : “종료 자식 프로세스 (4-5에 대한) 만에 강제로 불가능은 /F
“)
나에게 오류를 표시하지 크롬 재발의 경우 내가 cmd를 자식 오류를 무시해서는 안 ?
답변
프로그램을 종료 / 종료하는 올바른 방법은 궁극적으로 소프트웨어에 따라 다릅니다. 그러나 일반적으로 WM_CLOSE 메시지를받을 때마다 Windows 프로그램을 닫는 것이 가장 좋습니다. 메모리를 올바르게 풀고 핸들을 닫습니다. 응용 프로그램 종료를 알리는 다른 메시지가 있지만 각 메시지를 처리하는 방법은 소프트웨어 작성자에게 달려 있습니다.
taskkill /IM process.exe
taskkill은 WM_CLOSE 메시지를 보낸 다음 제대로 닫을 지 여부는 응용 프로그램에 달려 있습니다. 이 /T
옵션을 사용하여 하위 프로세스에도 신호를 보낼 수도 있습니다.
/F
프로세스를 강제 종료 하려면이 옵션 만 사용하십시오 .
다른 옵션으로는 PowerShell 또는 타사 응용 프로그램을 사용하여 Alt + F4 키 보내기가 있습니다.
업데이트 된 질문으로 업데이트
오류는 무시하십시오. 크롬은 많은 프로세스를 생성합니다. 프로세스가 TASKKILL이 전송하는 WM_CLOSE 메시지를 승인하지 않으면 오류가 발생합니다. 메시지 루프가있는 프로세스 만 메시지를 수신 할 수 있으므로 메시지 루프가없는 프로세스는 해당 오류를 생성합니다. 대부분 이러한 프로세스는 크롬 확장 프로그램 및 플러그인입니다.
오류를 숨기려면 출력을 캡처하십시오.
taskkill /IM chrome.exe >nul
요약 : TASKKILL은 WM_CLOSE 구현 및 링크 된 Microsoft KB에 따라 응용 프로그램을 닫는 명령 줄을 통한 올바른 방법 입니다.
답변
NirCmd 사용해보기 (다운로드 : x86 x64 )
프로세스를 정상적으로 닫도록 설계된 “closeprocess”명령이 있습니다. 문서에 따라 앱을 종료하지 않고 WM_CLOSE
대상 프로세스의 모든 최상위 창으로 보냅니다 .
사용 예 :
nircmd closeprocess chrome.exe
그래도 문제가 해결되지 않으면 응용 프로그램에 비정상적인 정리 절차가있는 것입니다. 내부에서 어떤 일이 발생하는지보고 싶습니다. 대상 응용 프로그램이 무엇인지 알려주십시오.
답변
What is the proper way to close/exit programs from command line,
similar to pressing the "X" close button in the corner of the window?
해당 질문에 대한 답변을 찾을 수 있습니다 here
( Microsoft 링크 ).
WM_CLOSE
닫으려는 창으로 메시지를 보낼 수 있습니다 . 많은 창 WM_CLOSE
은 사용자에게 문서를 저장하라는 메시지를 표시합니다.
이를 올바르게 수행하는 도구는 @Kill
입니다. 또한 봐 SendMsg을 .
일괄 처리 로이 작업을 수행하는 방법을 모르지만 vbscript를 사용할 수 있습니다. Alt+ F4키를 시뮬레이션합니다 (신호와 동일 WM_CLOSE
).
아래에서이 스크립트의 동작을 실행하십시오.
Set WshShell = WScript.CreateObject("WScript.Shell")
' Start Notepad.exe
WshShell.Run "%windir%\notepad.exe"
' Select, or bring Focus to a window named `Notepad`
WshShell.AppActivate "Notepad"
' Wait for 4 seconds
WScript.Sleep 4000
WshShell.SendKeys "Foo"
WshShell.SendKeys "{ENTER}"
WshShell.SendKeys "Bar"
WshShell.SendKeys "{ENTER}"
WshShell.SendKeys "{CAPSLOCK}"
WshShell.SendKeys "baz"
WshShell.SendKeys "%{F4}"
Here
SendKeys의 목록 키 이름입니다.
스크립트를 실행하면 메모장 이 열리고 일부 단어가 작성된 다음 프로그램을 종료하라는 신호가 전달됩니다 (아래 그림 참조).
추가 질문
프로그램을 최소화하거나 vbscript로 백그라운드를 시작할 수 있습니까?
예. 다음 코드를 사용하십시오.
WshShell.Run "%windir%\notepad.exe", 2
자세한 내용은을 확인하십시오 Run Method
.
크롬은 VBScript에서 URL로 이동할 수 있습니까?
Dim iURL
Dim objShell iURL = "www.google.com"
set objShell = CreateObject("Shell.Application")
objShell.ShellExecute "chrome.exe", iURL, "", "", 1
크롬이 기본값이면 다음을 사용하십시오.
set objShell = CreateObject("WScript.Shell")
objShell.run(iURL)
특정 애플리케이션 ( chrome.exe )에 초점을 맞추는 방법이 있습니까?
Here
예를 들어.
다른 창을 사용하는 것과 독립적으로 크롬에만 alt + f4를 보내고 싶습니다.
다음 코드는 Windows 8에서 작동합니다 .
Dim objShell
iURL = "www.google.com.br"
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run(iURL)
' Select, or bring Focus to Google Chrome
WshShell.AppActivate "Google Chrome"
' Wait for 5 seconds
WScript.Sleep 5000
WshShell.SendKeys "%{F4}"
답변
프로그램의 최상위 창에 적절한 WM_SYSCOMMAND
메시지 ( SC_CLOSE
명령 과 함께 )를 보낼 수있는 명령 줄 유틸리티가 있습니다 . 적어도 하나는 곧 언급 될 것입니다. (누군가는 AutoIt에 대해 언급 할 것입니다. 그러면 PowerShell과로 어떻게 할 수 있는지에 대한 답변이 있습니다 CloseMainWindow()
.)
Windows 용 명령 인터프리터 및 명령 스크립트 프로세서 인 JP Software의 TCC 에 내장 명령으로 제공되는 명령 줄 유틸리티를 이라고 TASKEND
합니다.
답변
알았어, 거짓말하지 않을거야. 나는 이것을 stackoverflow에서 보았고 그것이 어려운 질문이라고 생각했다. Soooo 방금 지난 2 시간 동안 코드를 작성했습니다. 그리고 여기 있습니다 ….
아래 단계를 수행 한 후 “시작”을 누른 후 “TaskClose notepad.exe”를 입력하면 문서화되지 않은 모든 메모장 파일이 바탕 화면에 자동 저장됩니다. chrome.exe를 자동으로 닫고 복원 설정을 저장합니다.
if 조건 하에서 다른 응용 프로그램에 대한 추가 설정을 추가 및 제거 할 수 있습니다. 예를 들어 :
If InStr(SINGLECLOSEAPPS, WScript.arguments(0)) Then
SmartSendKeys strOutput,"bypass","%{F4}"
ElseIf InStr(AUTOCLOSEAPPS, WScript.arguments(0)) Then
SmartSendKeys strOutput,"","%{F4}|%s|{autoname}.txt|%s"
'Example 1: =============================================
ElseIf InStr(WScript.arguments(0), "outlook") Then
SmartSendKeys strOutput,"","%{F4}" 'Activate Alt+4
'========================================================
'Example 2: =============================================
ElseIf InStr(WScript.arguments(0), "notepad") Then 'I know, already in my autoapps
SmartSendKeys strOutput,"","%{F4}|%s|{autosave}.txt" 'Activate Alt+4 + Save File + {AutoSave} = autoincrement filename
'========================================================
Else
SmartSendKeys strOutput,"bypass","%{F4}"
End If
vbs 및 배치 파일은 다음 절차를 수행합니다.
- 실행 파일을 수집합니다.
- 작업 목록에서 실행 가능한 응용 프로그램 이름을 쿼리합니다.
- 창이 열려 있는지 확인할 때까지 “Alt + TAB (x)”절차를 수행합니다.
- 그런 다음 롤링 명령이 “Alt + F4″인지 아니면 극단적 인 경우에도 실행됩니다.
- Alt + F4
- 저장 활성화
- 자동 증분 파일 이름
- 응용 프로그램을 종료하십시오.
ReturnAppList.bat : “C : \ windows \ system32 \”에 설치
for /f "tokens=10 delims=," %%F in ('tasklist /v /fi "imagename eq %1" /fo csv') do @echo %%~F >>result.txt
TaskClose.bat : “C : \ windows \ system32 \”및 “C : \ Users \ YourUserName \”에 설치
C:\windows\system32\wscript.exe c:\windows\system32\taskclose.vbs %1
TaskClose.vbs : “C : \ windows \ system32 \”에 설치
Set WshShell = CreateObject("WScript.Shell")
Const SINGLECLOSEAPPS = "chrome.exe|iexplore.exe|firefox.exe"
Dim DEFAULTSAVELOCATION : DEFAULTSAVELOCATION = wshshell.SpecialFolders("Desktop")
Const AUTOCLOSEAPPS = "notepad.exe"
Const WshFinished = 1
Const WshFailed = 2
strCommand = "returnapplist.bat "
Set WshShellExec = WshShell.Exec(strCommand & WScript.Arguments(0))
WScript.sleep 2000
Select Case WshShellExec.Status
Case WshFinished
strOutput = LoadStringFromFile("result.txt")
Case WshFailed
strOutput = LoadStringFromFile("result.txt")
End Select
'SmartSendKeys(application_name_array, bypassclause, additionalcommands)
'========================
If InStr(SINGLECLOSEAPPS, WScript.arguments(0)) Then
SmartSendKeys strOutput,"bypass","%{F4}"
ElseIf InStr(AUTOCLOSEAPPS, WScript.arguments(0)) Then
SmartSendKeys strOutput,"","%{F4}|%s|{autoname}.txt|%s"
Else
SmartSendKeys strOutput,"bypass","%{F4}"
End If
'SmartSendKeys(application_name_array, bypassclause, additionalcommands)
'========================
Function SmartSendkeys(fArr, LoopCount, RollCommands)
Dim x
Dim splt : splt = Split(farr, vbCrLf)
If loopcount = "bypass" Then
x = 0
Else
x = UBound(splt)
End If
a = 0
For s=0 To x
If Len(splt(s)) > 1 Then
Set objShell = WScript.CreateObject("WScript.Shell")
c = 1 : tabs = ""
Success = False
Do Until Success = True
Success = objShell.AppActivate(Trim(splt(s)))
If success <> True Then
If c = 1 Then
tabs = "{TAB}"
Else
tabs = "{TAB " & c & "}"
End If
'wscript.echo "Activating: " & "%" & tabs
WshShell.SendKeys "%" & tabs
WScript.Sleep 5000
c = c + 1
If c = 100 Then
WScript.echo "App not found"
Exit Function
End If
End If
Loop
Dim cmds : cmds = Split(rollcommands, "|")
For Each cm In cmds
If InStr(cm, "{autoname}") Then
Dim file_ext : file_ext = Split(cm, ".")
cm = DEFAULTSAVELOCATION & "autosave" & a & "." & file_ext(1)
a = a + 1
End If
WshShell.SendKeys cm
WScript.sleep 500
Next
End If
Next
End Function
Function LoadStringFromFile(filename)
Const fsoForReading = 1
Const fsoForWriting = 2
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(filename, fsoForReading)
Dim fulltext : fulltext = f.ReadAll
LoadStringFromFile = fulltext
f.Close
fso.DeleteFile(filename)
End Function
이것은 작성하기에 많은 즐거움이었고 실제로 답변을 보여주는 것보다 마무리하는 것이 더 행복합니다. 좋은 주 되세요!