कमांड लाइन से प्रोग्राम बंद करें (विंडोज)


49

कमांड लाइन से प्रोग्राम को बंद / बाहर करने का उचित तरीका क्या है, खिड़की के कोने में "X" क्लोज बटन दबाने के समान?

Im विंडोज़ के 3 अलग-अलग संस्करणों के तहत क्रोम को बंद करने की कोशिश कर रहा है: win7 परम, win7 होम, winXP

अंतिम और XP के तहत: TSKILL chrome

घर के नीचे TASKKILL /IM chrome.exe


TSKILL chrome:

(यह क्रोम को बंद कर देता है, कोई cmd त्रुटियां नहीं है,
लेकिन क्रोम त्रुटि को तब पुन


TASKKILL /IM chrome.exe: स्थापित करें ) :

(यह क्रोम को बंद कर देता है, जब इसे रीलेन्च करने पर क्रोम की कोई त्रुटि नहीं होती है,
लेकिन cmd में त्रुटियां: "बाल प्रक्रियाओं को समाप्त करना असंभव है (लगभग 4-5), केवल बल के साथ /F")


क्या मुझे cmd चाइल्ड की त्रुटियों को नजरअंदाज करना चाहिए यदि relaunch chrome पर मुझे कोई त्रुटि नहीं है ?


@MosheKatz: क्या आप मुझे एक्जिट कोड के कुछ उदाहरण दिखा सकते हैं? मैं जानना चाहता हूं कि जब मैं X बटन दबाता हूं तो क्या होता है ..
neoDev

6
टास्किल WM_CLOSE संदेश को लक्षित कार्यक्रम तक भेजता है जब तक / F (जबरन समाप्ति) निर्दिष्ट नहीं किया जाता है, जिससे कार्यक्रम को स्वयं को साफ करने के लिए मौका मिल सके। नोटपैड के साथ यह परीक्षण करें - एक नोटपैड खोलें और वहां कुछ टाइप करें, और "टास्ककिल / आईएम नोटपैड.एड" दर्ज करें। आपको डेटा सहेजने का संकेत दिखाई देगा।
स्कॉट री

@ScottRhee: मैंने पहले ही इसे बिना एफ / एफ के चलाने की कोशिश की थी, लेकिन लगता है कि यह एक बेकार है ... क्या मैं गलत हूं?
नवदेव

@ScottRhee: क्रोम के साथ भी कोशिश कर रहा हूँ! कभी-कभी, जब मैं इसे पुनः जारी करता हूं, तो यह यूआरएल के नीचे एक पीली लाइन में "पुनर्स्थापना टैब" कहता है: backroom.bostonproductions.com/wp-content/uploads/2012/07/…
neoDev

@Roger यह अजीब है क्योंकि मुझे वह संदेश टास्किल / IM chrome.exe के साथ नहीं मिला है। वैसे भी, मेरा मानना ​​है कि आपने सही काम किया है। मैंने नीचे एक उत्तर लिखा है ताकि इसके बजाय कृपया कोशिश करें।
स्कॉट राई

जवाबों:


43

किसी प्रोग्राम को बंद करने / बाहर निकलने का उचित तरीका अंततः सॉफ्टवेयर पर निर्भर करता है। हालाँकि, जब भी वे WM_CLOSE संदेश प्राप्त करते हैं, तो विंडोज प्रोग्रामों को बंद करने के लिए आमतौर पर सबसे अच्छा अभ्यास होता है। स्मृति और समापन हैंडल को उचित रूप से जारी करना। ऐसे अन्य संदेश हैं जो एप्लिकेशन के बंद होने का संकेत दे सकते हैं, लेकिन यह सॉफ्टवेयर के लेखक पर निर्भर है कि प्रत्येक संदेश को कैसे संभाला जाए।

taskkill /IM process.exe

टास्ककिल WM_CLOSE संदेश भेजता है और यह अनुप्रयोग पर निर्भर है कि क्या ठीक से बंद करना है। आप /Tबाल प्रक्रियाओं को भी संकेत देने के लिए विकल्प का उपयोग करना चाह सकते हैं ।

/Fयदि आप प्रक्रिया को समाप्त करना चाहते हैं तो केवल विकल्प का उपयोग करें ।

अन्य विकल्पों में Alt + F4 कुंजियाँ भेजना, PowerShell का उपयोग करना, या तीसरे पक्ष के अनुप्रयोग शामिल होंगे।

अद्यतित प्रश्न के लिए अद्यतन

त्रुटियों को नजरअंदाज करें। क्रोम कई प्रक्रियाएं उत्पन्न करता है। त्रुटियाँ तब होती हैं जब कोई प्रक्रिया WM_CLOSE संदेश को स्वीकार नहीं करती है जो TASKKILL भेजता है। केवल एक संदेश लूप के साथ प्रक्रिया संदेश प्राप्त करने में सक्षम होगी, इसलिए, जिन प्रक्रियाओं में संदेश लूप नहीं है वे त्रुटि उत्पन्न करेंगे। सबसे अधिक संभावना है, ये प्रक्रियाएं क्रोम एक्सटेंशन और प्लगइन्स हैं।

त्रुटियों को छिपाने के लिए आउटपुट कैप्चर करें

taskkill /IM chrome.exe >nul

सारांश: TASKKILL अपने WM_CLOSE कार्यान्वयन और मेरे द्वारा लिंक किए गए Microsoft KB को बंद करने के लिए कमांड लाइन के माध्यम से उचित तरीका है ।


मैंने अपना प्रश्न अपडेट किया, कृपया इस पर एक नज़र डालें
neoDev

@Roger ने मेरे उत्तर को अपडेट किया।
डेविड रुहमन

इसका क्या मतलब है> nul
नवोदय

10
>cmd.exe के लिए पुनर्निर्देशक ऑपरेटर है और nulअंतरिक्ष का शून्य है जहां चीजें फिर से कभी नहीं सुनी जाती हैं।
डेविड रूहमन

9

NirCmd आज़माएं (डाउनलोड करें: x86 x64 )

इसमें "क्लोज़प्रोसेस" कमांड है, जो सुंदर रूप से प्रक्रियाओं को बंद करने के लिए डिज़ाइन किया गया है। अपने दस्तावेज़ के अनुसार, यह ऐप्स को समाप्त नहीं करता है, लेकिन WM_CLOSEलक्ष्य प्रक्रिया के सभी शीर्ष-स्तरीय विंडो में भेजता है।

उपयोग उदाहरण:

nircmd क्लोजप्रोसेस chrome.exe

यदि यह काम नहीं करता है, तो मुझे यकीन है कि आपके आवेदन में एक असामान्य सफाई प्रक्रिया है। मैं देखना चाहूंगा कि अंदर क्या होता है इसलिए कृपया मुझे बताएं कि आपका लक्ष्य आवेदन क्या है।


मैंने अपना प्रश्न अपडेट किया, कृपया इस पर एक नज़र डालें
neoDev

मैंने इसे बेहतर तरीके से काम करने के लिए पाया: nircmd जीत पास का शीर्षक "मेरी प्रक्रिया शीर्षक"
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दस्तावेज़ों को सहेजने के लिए उपयोगकर्ता को संकेत देने के लिए कई खिड़कियां संभालती हैं ।

एक उपकरण जो इसे सही ढंग से करता है @KillSendMsg भी देखें


मुझे नहीं पता कि यह बैच में कैसे करना है, लेकिन आप इसके लिए 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 को केवल क्रोम में भेजना चाहता हूं, स्वतंत्र रूप से मैं अन्य खिड़कियों के साथ कर रहा हूं।

निम्न कोड विंडोज 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?
नवोदय

1
@Roger यदि दिलचस्पी है, तो यहां मेरा जवाब देखें कि कैसे Batch + JScript को एक फ़ाइल में संयोजित किया जाए। JScript अधिकांश कुछ कर सकता है VBScript और अधिक संरचित C शैली में कर सकता है।
डेविड रूहमन

और क्रोम vbscript में कुछ url पर जा सकता है?
नवदेव

क्या विशिष्ट एप्लिकेशन (chrome.exe) पर ध्यान केंद्रित करने का एक तरीका है?
नवदेव

हां, मैं इसके साथ प्रयास कर रहा हूं, लेकिन अगर कुछ देरी के बाद (WScript.Sleep 5000) मेरे पास है (WshShell.AppActivate "google chrome"), अगर इस अवधि के दौरान मैं किसी अन्य विंडो पर क्लिक करता हूं, तो Google क्रोम सामने नहीं आता है। , मैं इसका फोकस केवल टूलबार पर देख सकता हूं ....
neoDev

3

कुछ कमांड-लाइन उपयोगिताओं हैं जो प्रोग्राम के शीर्ष-स्तरीय विंडो में एक उपयुक्त WM_SYSCOMMANDसंदेश ( SC_CLOSEकमांड के साथ) भेज सकते हैं। मुझे यकीन है कि शीघ्र ही कम से कम एक का उल्लेख किया जाएगा। (तब कोई व्यक्ति AutoIt का उल्लेख करेगा। फिर एक उत्तर दिखाया जाएगा कि यह PowerShell के साथ कैसे किया जाए CloseMainWindow()।)

कमांड लाइन उपयोगिता जो कि जेपी सॉफ्टवेयर के टीसीसी में एक अंतर्निहित कमांड के रूप में आती है , एक कमांड दुभाषिया और विंडोज के लिए कमांड स्क्रिप्ट प्रोसेसर को कहा जाता है TASKEND


मैंने अपना प्रश्न अपडेट किया, कृपया इस पर एक नज़र डालें
neoDev

2

ठीक है, झूठ नहीं बोलना। मैंने इसे स्टैकओवरफ्लो पर देखा और सोचा कि यह एक चुनौतीपूर्ण सवाल है। Soooo मैंने अभी पिछले 2 घंटे कुछ कोड लिखने में बिताए हैं। और यहाँ यह है ...।

नीचे दिए गए चरणों का पालन करने के बाद, आप "प्रारंभ" मारने के बाद "TaskClose notepad.exe" टाइप कर सकते हैं और यह डेस्कटॉप में सभी अनिर्दिष्ट नोटपैड फ़ाइलों को ऑटो बचाएगा। यह chrome.exe को ऑटो-बंद कर देगा और पुनर्स्थापना सेटिंग को बचाएगा।

आप अन्य अनुप्रयोगों के लिए अतिरिक्त शर्तें जोड़ सकते हैं और हटा सकते हैं। उदाहरण के लिए:

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
  • सहेजें सक्रिय करें
  • AutoIncrememnt फ़ाइल नाम
  • छोड़ने के लिए प्रार्थनापत्र।

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 \ YourUserserame" में स्थापित करें

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

यह लिखने के लिए बहुत मज़ा था और मैं वास्तव में जवाब दिखाने की तुलना में इसे खत्म करने के बारे में अधिक खुश हूं। आपका सप्ताह अच्छा रहे!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.