명령 행에서 프로그램 닫기 (Windows)


49

창 구석에있는 "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를 자식 오류를 무시해서는 안 ?


@ MosheKatz : 종료 코드의 예를 보여 주시겠습니까? X 버튼을 눌렀을 때 어떤 일이 발생하는지 알고 싶습니다 ..
— neoDev

6
/ F (강제 종료)가 지정되지 않은 경우 Taskkill은 대상 프로그램에 WM_CLOSE 메시지를 보내 프로그램이 스스로 정리할 수 있도록합니다. 메모장에서이를 테스트하십시오. 메모장을 열고 거기에 무언가를 입력 한 후 "taskkill / im notepad.exe"를 입력하십시오. 데이터를 저장하라는 메시지가 표시됩니다.
— Scott Rhee

@ ScottRhee : 나는 이미 / F없이 실행하려고 시도했지만 적절하지 않은 것처럼 보입니다 ... 잘못입니까?
— neoDev

@ ScottRhee : 크롬도 시도하고 있습니다! : 때때로, 나는 다시 시작 때이 유사한 URL 아래에 노란색 줄에 "탭을 복원"라고 backroom.bostonproductions.com/wp-content/uploads/2012/07/...
— neoDev

@Roger Taskkill / IM chrome.exe에 해당 메시지가 표시되지 않아 이상합니다. 어쨌든, 당신이 옳은 일을했다고 생각합니다. 아래에 답변을 썼으므로 대신 시도하십시오.
— Scott Rhee

답변:


43

프로그램을 종료 / 종료하는 올바른 방법은 궁극적으로 소프트웨어에 따라 다릅니다. 그러나 일반적으로 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에 따라 응용 프로그램을 닫는 명령 줄을 통한 올바른 방법 입니다.


질문을 업데이트했습니다. 살펴보기
— neoDev

@Roger가 내 답변을 업데이트했습니다.
— David Ruhmann

> nul 무엇을 의미합니까?
— neoDev

10
>는 cmd.exe 의 리디렉션 연산자 이며 nul다시는 들리지 않는 공간이 없습니다.
— David Ruhmann

9

NirCmd 사용해보기 (다운로드 : x86 x64 )

프로세스를 정상적으로 닫도록 설계된 "closeprocess"명령이 있습니다. 문서에 따라 앱을 종료하지 않고 WM_CLOSE대상 프로세스의 모든 최상위 창으로 보냅니다 .

사용 예 :

nircmd closeprocess chrome.exe

그래도 문제가 해결되지 않으면 응용 프로그램에 비정상적인 정리 절차가있는 것입니다. 내부에서 어떤 일이 발생하는지보고 싶습니다. 대상 응용 프로그램이 무엇인지 알려주십시오.


질문을 업데이트했습니다. 살펴보기
— neoDev

나는 이것이 더 잘 작동하는 것을 발견했다 : nircmd win close title "나의 프로세스 제목"
— user1495323

4
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)

Source

특정 애플리케이션 ( 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}"

vbscript로 프로그램을 최소화하거나 백그라운드를 시작할 수 있습니까?
— neoDev

1
@Roger 관심이 있다면 Batch + JScript를 단일 파일로 결합하는 방법에 대한 내 대답을 참조하십시오 . JScript는 VBScript가 수행 할 수있는 모든 작업과보다 체계적인 C 스타일을 수행 할 수 있습니다.
— David Ruhmann

크롬은 VBScript에서 URL로 이동할 수 있습니까?
— neoDev

특정 응용 프로그램 (chrome.exe)에 초점을 맞추는 방법이 있습니까?
— neoDev

예, 노력하고 있지만 약간의 지연 (WScript.Sleep 5000) 후에 (WshShell.AppActivate "google chrome")이 있으면이 기간 동안 다른 창을 클릭하면 Google 크롬이 앞에 오지 않습니다. , 나는 툴바에만 초점을 볼 수 있습니다 ....
— neoDev

3

프로그램의 최상위 창에 적절한 WM_SYSCOMMAND메시지 ( SC_CLOSE명령 과 함께 )를 보낼 수있는 명령 줄 유틸리티가 있습니다 . 적어도 하나는 곧 언급 될 것입니다. (누군가는 AutoIt에 대해 언급 할 것입니다. 그러면 PowerShell과로 어떻게 할 수 있는지에 대한 답변이 있습니다 CloseMainWindow().)

Windows 용 명령 인터프리터 및 명령 스크립트 프로세서 인 JP Software의 TCC 에 내장 명령으로 제공되는 명령 줄 유틸리티를 이라고 TASKEND합니다.


질문을 업데이트했습니다. 살펴보기
— neoDev

2

알았어, 거짓말하지 않을거야. 나는 이것을 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

이것은 작성하기에 많은 즐거움이었고 실제로 답변을 보여주는 것보다 마무리하는 것이 더 행복합니다. 좋은 주 되세요!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.