#116731 - 2004-03-24 05:51 PM
Re: Applications Object
|
Shawn
Administrator
Registered: 1999-08-13
Posts: 8611
|
If running NT5 could use the WMI object(s) and somthing like EndProc()
-Shawn
|
Top
|
|
|
|
#116733 - 2004-03-24 06:16 PM
Re: Applications Object
|
Chris S.
MM club member
Registered: 2002-03-18
Posts: 2368
Loc: Earth
|
Here is a KiXomatic script for enumerating processes. See if you can find the information you are looking for here...
Code:
Break On $strComputer = "." $objWMIService = GetObject("winmgmts:\\" + $strComputer + "\root\cimv2") $colItems = $objWMIService.ExecQuery("Select * from Win32_Process",,48) For each $objItem in $colItems "Caption: " + $objItem.Caption ? "CreationClassName: " + $objItem.CreationClassName ? "CreationDate: " + $objItem.CreationDate ? "CSCreationClassName: " + $objItem.CSCreationClassName ? "CSName: " + $objItem.CSName ? "Description: " + $objItem.Description ? "ExecutablePath: " + $objItem.ExecutablePath ? "ExecutionState: " + $objItem.ExecutionState ? "Handle: " + $objItem.Handle ? "HandleCount: " + $objItem.HandleCount ? "InstallDate: " + $objItem.InstallDate ? "KernelModeTime: " + $objItem.KernelModeTime ? "MaximumWorkingSetSize: " + $objItem.MaximumWorkingSetSize ? "MinimumWorkingSetSize: " + $objItem.MinimumWorkingSetSize ? "Name: " + $objItem.Name ? "OSCreationClassName: " + $objItem.OSCreationClassName ? "OSName: " + $objItem.OSName ? "OtherOperationCount: " + $objItem.OtherOperationCount ? "OtherTransferCount: " + $objItem.OtherTransferCount ? "PageFaults: " + $objItem.PageFaults ? "PageFileUsage: " + $objItem.PageFileUsage ? "ParentProcessId: " + $objItem.ParentProcessId ? "PeakPageFileUsage: " + $objItem.PeakPageFileUsage ? "PeakVirtualSize: " + $objItem.PeakVirtualSize ? "PeakWorkingSetSize: " + $objItem.PeakWorkingSetSize ? "Priority: " + $objItem.Priority ? "PrivatePageCount: " + $objItem.PrivatePageCount ? "ProcessId: " + $objItem.ProcessId ? "QuotaNonPagedPoolUsage: " + $objItem.QuotaNonPagedPoolUsage ? "QuotaPagedPoolUsage: " + $objItem.QuotaPagedPoolUsage ? "QuotaPeakNonPagedPoolUsage: " + $objItem.QuotaPeakNonPagedPoolUsage ? "QuotaPeakPagedPoolUsage: " + $objItem.QuotaPeakPagedPoolUsage ? "ReadOperationCount: " + $objItem.ReadOperationCount ? "ReadTransferCount: " + $objItem.ReadTransferCount ? "SessionId: " + $objItem.SessionId ? "Status: " + $objItem.Status ? "TerminationDate: " + $objItem.TerminationDate ? "ThreadCount: " + $objItem.ThreadCount ? "UserModeTime: " + $objItem.UserModeTime ? "VirtualSize: " + $objItem.VirtualSize ? "WindowsVersion: " + $objItem.WindowsVersion ? "WorkingSetSize: " + $objItem.WorkingSetSize ? "WriteOperationCount: " + $objItem.WriteOperationCount ? "WriteTransferCount: " + $objItem.WriteTransferCount ? ? Next
...then once you get the PID it is an easy matter to terminate the process you want to kill.
|
Top
|
|
|
|
#116734 - 2004-03-24 06:20 PM
Re: Applications Object
|
Radimus
Moderator
Registered: 2000-01-06
Posts: 5187
Loc: Tampa, FL
|
look for EnumProcess() in the UDF forum
it can return all the PIDs of a given app and can terminate specific PIDs
|
Top
|
|
|
|
#116738 - 2004-03-25 10:21 AM
Re: Applications Object
|
Richard H.
Administrator
Registered: 2000-01-24
Posts: 4946
Loc: Leatherhead, Surrey, UK
|
As there is still some confusion over what you are trying to do, let me try and summarise for you - if I've got it wrong you can jump in.
- You have one or more instances of an application running.
- All instances use the same executable, so the underlying process has the same name.
- You can determine which instance you want to kill by looking at the window title for the application (as displayed in the Applications tab of the task manager)
- From the application window in task manager you can get the (primary) PID - right-click on application and choose "Go To Process"
- You can now kill the associated PID
|
Top
|
|
|
|
#116740 - 2004-03-25 04:08 PM
Re: Applications Object
|
Stevie
Starting to like KiXtart
Registered: 2002-01-09
Posts: 199
|
The problem contains a multi-part solution. First you need to identify the Window that contains a specified Window Title. Via script, the only way to achieve this is through some COM implementation. WShell.AppActivate allows activating a window by title, but IIRC, it doesn't return a PID or any other useful info. The ActiveX version of AutoIt will allow you to do what you need but don't know how complex the object model is to get one's head around.
Anyway, finding the window title generally only returns the handle to the window itself and not the underlying PID that created the window in the first place. So the next step would be to translate the window handle into a PID value. Again, IIRC, AutoIt has some features that should allow you to do this.
Not wanting you leave you empty-handed, however, there might be an easier way. If the process calls another file or program as an argument, then via WMI, you can query for the command-line value of the process.
With two instances of notepad, open two different files--however, don't open the files inside of notepad. Right-click two files in explorer and select "Open With..." | Notepad.
Then run this sample script:Code:
$objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") $colProcesses = $objWMIService.ExecQuery("select CommandLine from win32_process where name='notepad.exe'") For Each $objProcess in $colProcesses ? "CmdLine = " + $objProcess.CommandLine Next
You'll be able to see the different files called via the command-line of the originating process.
The big question is if the processes you're looking at include a command-line argument that you can use as a differentiating factor in figuring out which process to terminate. If so, then when you loop to the correct process, killing it should be a simple matter.
Failing that, then I recommend you take a look at the ActiveX version of AutoIt or some other COM object that can provide this information to you.
_________________________
Stevie
|
Top
|
|
|
|
#116745 - 2006-01-30 09:16 PM
Re: Applications Object
|
krabourn
Hey THIS is FUN
Registered: 2000-12-11
Posts: 244
Loc: San Antonio, Texas, USA
|
Here is one way to do it.
Code:
BREAK ON DIM $Nul $Nul = SetOption("Explicit", "On") $Nul = SetOption("NoVarsInStrings", "On") $Nul = SetOption("NoMacrosInStrings", "On") $Nul = SetOption("wrapateol", "on")
DIM $RC, $Index DIM $Computer, $Process
$Computer = @Wksta $Process = "explorer.exe"
$RC = fnProcessFindName($Process, $Computer) ? "Computer " $Computer ? "StatusCode " @Error ? "Process IDs: " $RC[0] ? "Process Count: " $RC[1] ? "Process Time Total: " $RC[2] ? "Process Memory Total: " $RC[3] ? FOR $Index = 0 TO UBound($RC[4]) ? " Name: " $RC[4][$Index][0] ? " ID: " $RC[4][$Index][1] ? " Time: " $RC[4][$Index][2] ? " Memory: " $RC[4][$Index][3] ? " Parent PID: " $RC[4][$Index][4] ? " Executable Path: " $RC[4][$Index][5] ? " Command Line: " $RC[4][$Index][6] ? " Domain: " $RC[4][$Index][7] ? " User: " $RC[4][$Index][8] ? " ------------------------------------------" NEXT
QUIT 0
;fnPing($Address, OPTIONAL $PingCount)
FUNCTION fnProcessFindName($ProcessNameIn, $ComputerName) DIM $ErrorCode, $Nul, $oWMIService, $oItems, $oItem, $oMethod, $oOutParam DIM $ProcessIDs, $ProcessCount, $ProcessTimeTotal, $ProcessMemoryTotal DIM $aProcesses[0], $ProcessName, $ProcessID, $ProcessTime, $ProcessMemory DIM $ProcessParentPID, $ProcessExecutablePath, $ProcessCommandLine DIM $ProcessDomain, $ProcessUser
$ErrorCode = 0 $ProcessTime = 0 $ProcessMemory = 0 $ProcessCount = 0 $ProcessTimeTotal = 0 $ProcessMemoryTotal = 0 $aProcesses[0] = $ProcessName, $ProcessID, $ProcessTime, $ProcessMemory, $ProcessParentPID, $ProcessExecutablePath, $ProcessCommandLine, $ProcessDomain, $ProcessUser
$oWMIService = GetObject("winmgmts:\\" + $ComputerName + "\root\cimv2") IF VarType($oWMIService) = 9 $oItems = $oWMIService.ExecQuery('Select * From Win32_Process where Name="' + $ProcessNameIn + '"',,48) FOR EACH $oItem IN $oItems $ProcessName = $oItem.Name $ProcessID = $oItem.ProcessID $ProcessTime = CInt((CDbl($oItem.UserModeTime) + CDbl($oItem.KernelModeTime)) / 10000000) $ProcessMemory = CDbl($oItem.WorkingSetSize)/1024
$ProcessParentPID = $oItem.ParentProcessId $ProcessExecutablePath = $oItem.ExecutablePath $ProcessCommandLine = $oItem.CommandLine
$oMethod = $oItem.Methods_.Item("GetOwner") $oOutParam = $oItem.ExecMethod_($oMethod.Name) $ProcessDomain = $oOutParam.Domain $ProcessUser = $oOutParam.User IF $aProcesses[UBound($aProcesses)][0] <> "" REDIM PRESERVE $aProcesses[UBound($aProcesses) + 1] ENDIF $aProcesses[UBound($aProcesses)] = $ProcessName, $ProcessID, $ProcessTime, $ProcessMemory, $ProcessParentPID, $ProcessExecutablePath, $ProcessCommandLine, $ProcessDomain, $ProcessUser $ProcessIDs = $ProcessIDs + "" + CStr($oItem.ProcessID) + " " $ProcessCount = $ProcessCount + 1 $ProcessTimeTotal = $ProcessTimeTotal + $ProcessTime $ProcessMemoryTotal = $ProcessMemoryTotal + $ProcessMemory NEXT ELSE $ErrorCode = 9 ENDIF $fnProcessFindName = Left($ProcessIDs, -1), $ProcessCount, $ProcessTimeTotal, $ProcessMemoryTotal, $aProcesses EXIT $ErrorCode ENDFUNCTION
_________________________
Kelly
|
Top
|
|
|
|
#192129 - 2009-02-10 01:35 AM
Re: Applications Object
[Re: krabourn]
|
It_took_my_meds
Hey THIS is FUN
Registered: 2003-05-07
Posts: 273
Loc: Sydney, Australia
|
$oMethod = $oItem.Methods_.Item("GetOwner")
$oOutParam = $oItem.ExecMethod_($oMethod.Name)
$ProcessDomain = $oOutParam.Domain
$ProcessUser = $oOutParam.User
That helped me a lot. Thanks!
|
Top
|
|
|
|
Moderator: Shawn, ShaneEP, Ruud van Velsen, Arend_, Jochen, Radimus, Glenn Barnas, Allen, Mart
|
2023-09-28 [Arend_]
Wow even the shouts are old ;-)
2023-11-17 [Dr_Rick]
I love Kixforms!
2023-11-21 [Dave_Melczer]
Getting DB errors again opening posts...anyone else?
2023-11-24 [Flavien]
DB errors confirmed. This forum is showing its age... UBB 7.2.2 is from 2007
2023-11-27 [Sealeopard]
And there goes the forum :-(
2023-11-30 [NTDOC]
Yes, so old no good easy update path
2023-12-01 [mole]
Posts back. No DB errors. Thanks!
2023-12-29 [BradV]
Happy new year!
2024-02-09 [RSLHA]
No access possible!
2024-02-09 [RSLHA]
Database Error!
2024-02-18 [Dr_Rick]
What happened to Bruno
2024-03-08 [mole]
Thanks for getting the posts back again.
2024-04-18 [MarineV]
will the db errors get fixed????
2024-04-26 [Tonny]
database error, please!
2024-05-09 [NTDOC]
I'm not seeing any errors
2024-05-31 [chojin]
DB is down again
2024-06-04 [selsner]
Still no access, please help!
2024-06-07 [mole]
Looks like DB is back again. Thanks.
2024-06-17 [It_took_my_meds]
We encountered a problem. The reason reported was Database error only visible to forum administrators Please click back to return to the previous page.
2024-07-04 [Armin73]
There is still a database error 🤷♂️
2024-07-09 [0neZero]
There is still a database error 🤷♂️
2024-07-10 [Allen]
DB working a few times in between the messages above. Working again as of 7/10. Thanks Doc
2024-08-31 [NetGnostic]
Bummer, the Database error is back.
2024-09-04 [NTDOC]
Fourms are back up without error for the moment
2024-10-02 [Arend_]
Wll still have database errors ;-)
2024-10-03 [Allen]
Thanks to Doc... it's back.
2024-12-09 [chojin]
could we move kixtart to a new place in order to keep it living ? maybe create a github page and a subreddit?
2024-12-10 [Allen]
do know about moving it, but I know Doc is aware of the DB issue. Should be back online soon.
2024-12-10 [Allen]
don't know...
|
|
0 registered
and 303 anonymous users online.
|
|
|