Guest Posted April 3, 2014 Posted April 3, 2014 (edited) Hello, Previously I wrote this code: Func _Process2Hnds($Process) Local $pid , $list , $i , $wpid , $Output[1] If Not IsNumber($Process) Then $pid = ProcessExists($Process) Else $pid = $Process EndIf If $pid > 0 Then $list = WinList() For $i = 1 To $list[0][0] If $list[$i][0] <> "" And BitAND(WinGetState($list[$i][1]), 2) Then $wpid = WinGetProcess($list[$i][0]) ;_ArrayDisplay($list) If $wpid = $pid Then _ArrayAdd($Output,$list[$i][1]) EndIf Next EndIf $Output[0] = UBound($Output)-1 Return $Output EndFunc ;==>_Process2Wins That code get some process name and Return an array which contains all the windows handles of the process. the problem is that now i use the code in another script and that script requires to run that code at much higher frequency. this is an demonstration of the "higher frequency": While 1 $ProcessHnds = _Process2Hnds("xxxx.exe") .... .... Sleep(50) WEnd This is causes to high CPU use - about 5% CPU use.. I need more efficient code which takes less CPU Thanks for helpers! Edited April 4, 2014 by Guest
JohnOne Posted April 4, 2014 Posted April 4, 2014 Try... #Include <WinAPIEx.au3> Func _Process2Hnds($Process) Local $pid If Not IsNumber($Process) Then $pid = ProcessExists($Process) Else $pid = $Process EndIf Local $aArray = _WinAPI_EnumProcessWindows($pid) If Not IsArray($aArray) Then Return SetError(1, 0, 0) EndIf Return $aArray EndFunc ;==>_Process2Hnds2 If it suits. AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans.
Guest Posted April 4, 2014 Posted April 4, 2014 (edited) Try... #Include <WinAPIEx.au3> Func _Process2Hnds($Process) Local $pid If Not IsNumber($Process) Then $pid = ProcessExists($Process) Else $pid = $Process EndIf Local $aArray = _WinAPI_EnumProcessWindows($pid) If Not IsArray($aArray) Then Return SetError(1, 0, 0) EndIf Return $aArray EndFunc ;==>_Process2Hnds2 If it suits. Thank you! but it seems less efficient code It takes 10%-12% CPU. Edited April 4, 2014 by Guest
BrewManNH Posted April 4, 2014 Posted April 4, 2014 ProcessExists is a CPU intensive function, that is what's causing the issue. If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag GudeHow to ask questions the smart way! I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from. Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. - ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. - Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. - _FileGetProperty - Retrieve the properties of a file - SciTE Toolbar - A toolbar demo for use with the SciTE editor - GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. - Latin Square password generator
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now