2014-03-11 20:25:46 +0000 2014-03-11 20:25:46 +0000
50
50

Programma's sluiten vanaf de opdrachtregel (Windows)

Wat is de juiste manier om programma’s te sluiten/af te sluiten vanaf de opdrachtregel, vergelijkbaar met het indrukken van de “X” sluitknop in de hoek van het venster?

Ik probeer chroom te sluiten onder 3 verschillende versies van vensters: win7 ultimate, win7 home, winXP

Under Ultimate en XP: TSKILL chrome

Under Home: TASKKILL /IM chrome.exe

TSKILL chrome:

(Het sluit chroom, geen cmd-fouten, maar chroomfout herstellen bij herstarten)

TASKKILL /IM chrome.exe:

(Het sluit chroom, geen chroomfouten bij herstarten, maar fouten in cmd: “onmogelijk om kinderprocessen te beëindigen (ongeveer 4-5), alleen met geweld met /F”)

Moet ik cmd-kinderfouten negeren als bij de herstart chroom geen fouten laat zien?

Antwoorden (5)

45
45
45
2014-03-11 21:51:34 +0000

De juiste manier om een programma te sluiten/af te sluiten hangt uiteindelijk af van de software. Over het algemeen is het echter het beste om Windows programma’s te sluiten wanneer ze het WM_CLOSE bericht ontvangen. Het op de juiste manier vrijgeven van het geheugen en het sluiten van de hendels. Er zijn andere berichten die het sluiten van de applicatie kunnen signaleren, maar het is aan de auteur van de software om te bepalen hoe elk bericht wordt afgehandeld.

taskkill /IM process.exe

taskkill stuurt het WM_CLOSE bericht en het is dan aan de applicatie om te bepalen of het goed moet worden afgesloten. U kunt ook de /T optie gebruiken om ook kinderprocessen te signaleren.

Gebruik de /F optie alleen als u de beëindiging van het proces wilt afdwingen.

Andere opties zijn het verzenden van de Alt+F4 toetsen, met behulp van PowerShell, of toepassingen van derden.

Bijwerken van bijgewerkte vraag

Negeer, de fouten. Chroom genereert veel processen. De fouten worden veroorzaakt wanneer een proces het WM_CLOSE bericht dat TASKKILL verstuurt niet bevestigt. Alleen processen met een berichtlus zullen het bericht kunnen ontvangen, dus de processen die geen berichtlus hebben zullen die fout genereren. Waarschijnlijk zijn deze processen de chromen uitbreidingen en plugins.

Om de fouten te verbergen leggen de uitvoer

taskkill /IM chrome.exe >nul

Samenvatting: TASKKILL is de juiste manier via de commandoregel om applicaties te sluiten volgens de WM_CLOSE-implementatie en de Microsoft KB die ik heb gekoppeld .

9
9
9
2014-03-11 21:21:03 +0000

Probeer NirCmd (Download: x86 x64 )

Het heeft de opdracht “close-process” die is ontworpen om processen sierlijk af te sluiten. Volgens het document beëindigt het geen apps, maar stuurt het WM_CLOSE naar alle vensters op het hoogste niveau van het doelproces. Gebruiksvoorbeeld van

:

nircmd closeprocess chrome.exe

Als dit niet werkt, wed ik dat uw toepassing een ongebruikelijke opschoonprocedure heeft. Ik wil graag zien wat er binnenin gebeurt, dus laat me weten wat je doelapplicatie is.

4
4
4
2014-03-11 23:22:09 +0000
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?

Het antwoord op die vraag is te vinden op here (Microsoft link).

U kunt `WMCLOSE_ berichten sturen naar elk venster dat u wilt sluiten. Veel vensters behandelen _WMCLOSE` om de gebruiker te vragen documenten op te slaan.

Een hulpmiddel dat dit correct doet is @Kill . Kijk ook naar SendMsg .

  • *

Ik weet niet hoe dit in batch te doen, maar u zou het vbscript hiervoor kunnen gebruiken. Simuleren van de Alt + F4 toetsen (staat gelijk aan signaal `WMCLOSE`_).

Uitvoeren en kijken naar het gedrag van dit script hieronder.

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 is de lijst met sleutelnamen voor SendKeys.

Wanneer je het script uitvoert, is het notepad open, worden er enkele woorden geschreven en wordt er een signaal gegeven om het programma te sluiten, zie onderstaande afbeelding.

  • *

Additionele vragen

*Kan ik een programma minimaliseren, of achtergrond met vbscript? *

Ja. Gebruik de volgende code:

WshShell.Run "%windir%\notepad.exe", 2

Voor meer informatie zie de Run Method .

Kan chroom naar een url in vbscript gaan?

Dim iURL  
Dim objShell iURL = "www.google.com"
set objShell = CreateObject("Shell.Application") 
objShell.ShellExecute "chrome.exe", iURL, "", "", 1

Als chroom de standaard is, gebruik dan:

set objShell = CreateObject("WScript.Shell")
objShell.run(iURL)

Source

Is er een manier om de focus op een specifieke toepassing te leggen (chroom. exe)? Here in een voorbeeld.

Ik wil alt+f4 ALLEEN naar chroom sturen, onafhankelijk van wat ik met andere vensters doe.

De volgende code werkt op 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}"
3
3
3
2014-03-11 21:18:50 +0000

Er zijn enkele hulpprogramma’s voor de opdrachtregel die een geschikt WM_SYSCOMMAND-bericht (met SC_CLOSE als opdracht) naar het venster op het hoogste niveau van een programma kunnen sturen. Ik ben er zeker van dat er binnenkort minstens één zal worden vermeld. (Dan zal iemand AutoIt vermelden. )

Het hulpprogramma voor de opdrachtregel dat als een ingebouwde opdracht wordt geleverd in JP Software’s TCC , een opdrachtinterpreter en commandoscriptprocessor voor Windows, wordt CloseMainWindow() genoemd.

2
2
2
2014-03-12 01:37:30 +0000

Oké, ik ga niet liegen. Ik zag dit op stackoverflow en dacht dat het een uitdagende vraag was. Soooo heb ik de laatste 2 uur alleen maar wat code geschreven. En hier is het….

Na het volgen van de onderstaande stappen, kun je “TaskClose notepad.exe” typen nadat je op “Start” hebt gedrukt en het zal alle ongedocumenteerde notepad bestanden automatisch opslaan op het bureaublad. Het zal chrome.exe automatisch sluiten en de restauratie-instellingen opslaan.

U kunt extra instellingen toevoegen en verwijderen voor andere toepassingen onder de if-condities. Bijvoorbeeld:

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

De vbs en batch bestanden voeren de volgende procedures uit:

  • Verzamelt het uitvoerbare bestand.
  • Vraagt de namen van de uitvoerbare toepassingen op uit de takenlijst.
  • Voert een “Alt+TAB(x)” procedure uit totdat het venster geopend is.
  • Voert dan de rollende commando’s uit of het nu “Alt+F4” is of zelfs in extreme gevallen
  • Alt+F4
  • Activeer Opslaan
  • AutoIncrememnt Filename
  • Exit applicatie.

ReturnAppList.bat : installeer in “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 : installeer in “C:windows\system32\”. EN “C:\Users”

C:\windows\system32\wscript.exe c:\windows\system32\taskclose.vbs %1

TaskClose.vbs : installeer in “C:windows” “` 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(applicationnamearray, 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(applicationnamearray, 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 “`

Dit was erg leuk om te schrijven en ik ben blijer om het af te maken dan om het antwoord te laten zien. Heb een geweldige week!