명령 행에서 프로그램 닫기 (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.