dwerf Posted May 14, 2010 Share Posted May 14, 2010 I know, it's not the true forum for this, but I can't write in the example forum. And with my bad English knowledge i will need some time to get the required messages. Maybe a mod can move this. I wrote a script, that can show you the processes on your PC and the windows of those processes: expandcollapse popupOpt('MustDeclareVars', 1) ;~ #include <GUIConstantsEx.au3> Global Const $GUI_EVENT_CLOSE = -3 Global Const $GUI_CHECKED = 1 Global Const $GUI_SHOW = 16 Global Const $GUI_HIDE = 32 Global Const $GUI_ENABLE = 64 Global Const $GUI_DISABLE = 128 ;~ #include <WindowsConstants.au3> Global Const $WS_MAXIMIZEBOX = 0x00010000 Global Const $WS_MINIMIZEBOX = 0x00020000 Global Const $WS_SIZEBOX = 0x00040000 Global Const $WS_SYSMENU = 0x00080000 Global Const $WS_VSCROLL = 0x00200000 Global Const $WS_BORDER = 0x00800000 Global Const $WS_CAPTION = 0x00C00000 Global Const $WS_POPUP = 0x80000000 Global Const $WS_EX_COMPOSITED = 0x02000000 Global Const $WM_GETMINMAXINFO = 0x0024 Global Const $GUI_SS_DEFAULT_GUI = BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU) SetPrivilege('SeDebugPrivilege', 1) Global $hPsAPI = DllOpen('Psapi.dll') Global $hKernel = DllOpen('Kernel32.dll') OnAutoItExitRegister('_DllClose') Global $Sorted Global $Form1 = GUICreate('Processes and windows monitor', 590, 510, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_MAXIMIZEBOX, $WS_SIZEBOX), $WS_EX_COMPOSITED) Global $Edit1 = GUICtrlCreateEdit('', 10, 10, 570, 430, 3152064) GUICtrlSetResizing($Edit1, 102) GUICtrlSetState($Edit1, $GUI_HIDE) GUICtrlSetBkColor($Edit1, 0xFFFFFF) Global $List1 = GUICtrlCreateList('', 10, 10, 160, 430, BitOr($WS_BORDER, $WS_VSCROLL)) GUICtrlSetResizing($List1, 354) Global $Edit2 = GUICtrlCreateEdit('', 180, 10, 400, 430, 3152064) GUICtrlSetResizing($Edit2, 102) GUICtrlSetBkColor($Edit2, 0xFFFFFF) Global $Prgs1 = GUICtrlCreateProgress(10, 210, 570, 20) GUICtrlSetState($Prgs1, $GUI_HIDE) GUICtrlSetResizing($Prgs1, 646) Global $ChkB1 = GUICtrlCreateCheckbox('Text only', 10, 450, 60, 20) GUICtrlSetResizing($ChkB1, 834) Global $ChkB2 = GUICtrlCreateCheckbox('Correct the pathes while loading', 80, 450, 180, 20) GUICtrlSetResizing($ChkB2, 834) Global $Radi0 = GUICtrlCreateRadio('Sort with ProcessList()', 10, 480, 120, 20) GUICtrlSetResizing($Radi0, 834) Global $Radi1 = GUICtrlCreateRadio('Sort by ProcessID', 140, 480, 100, 20) GUICtrlSetResizing($Radi1, 834) Global $Radi2 = GUICtrlCreateRadio('Sort by ProcessName', 250, 480, 120, 20) GUICtrlSetResizing($Radi2, 834) Global $Butt1 = GUICtrlCreateButton('Reload', 420, 480, 160, 20) GUICtrlSetResizing($Butt1, 836) Global $Button_About = GUICtrlCreateButton('About', 420, 450, 160, 20) GUICtrlSetResizing($Button_About, 836) GUICtrlSetState($ChkB2, $GUI_CHECKED) GUICtrlSetState($Radi2, $GUI_CHECKED) GUIRegisterMsg($WM_GETMINMAXINFO, 'WM_GETMINMAXINFO') GUISetState() Reload() While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $Butt1 Reload() Case $List1 GetText() Case $ChkB1 If BitAND(GUICtrlRead($ChkB1), $GUI_CHECKED) = $GUI_CHECKED Then GUICtrlSetState($Edit1, $GUI_SHOW) GUICtrlSetState($List1, $GUI_HIDE) GUICtrlSetState($Edit2, $GUI_HIDE) Else GUICtrlSetState($Edit1, $GUI_HIDE) GUICtrlSetState($List1, $GUI_SHOW) GUICtrlSetState($Edit2, $GUI_SHOW) EndIf Case $Button_About About() EndSwitch WEnd Func _DllClose() DllClose($hPsAPI) DllClose($hKernel) EndFunc Func WM_GETMINMAXINFO($hWnd, $msg, $wParam, $lParam) Local $Struct = DllStructCreate("int;int;int;int;int;int;int;int;int;int", $lParam) If $hWnd = $Form1 Then DllStructSetData($Struct, 7, 598) DllStructSetData($Struct, 8, 511) EndIf EndFunc Func Reload() GUICtrlSetState($ChkB1, $GUI_DISABLE) GUICtrlSetState($ChkB2, $GUI_DISABLE) GUICtrlSetState($Butt1, $GUI_DISABLE) GUICtrlSetState($Radi0, $GUI_DISABLE) GUICtrlSetState($Radi1, $GUI_DISABLE) GUICtrlSetState($Radi2, $GUI_DISABLE) GUICtrlSetState($Edit1, $GUI_HIDE) GUICtrlSetState($List1, $GUI_HIDE) GUICtrlSetState($Edit2, $GUI_HIDE) GUICtrlSetState($Prgs1, $GUI_SHOW) GUICtrlSetState($Button_About, $GUI_DISABLE) GUICtrlSetData($Edit1, '') GUICtrlSetData($List1, '') GUICtrlSetData($Edit2, '') Local $aProcesses = ProcessList() If @error Or IsArray($aProcesses) <> 1 Or UBound($aProcesses, 0) <> 2 Or $aProcesses[0][0] <= 0 Then MsgBox(48, 'Error', 'Error in ProcessList()') Return SetError(1, 0, 0) EndIf Local $aWindows = WinList() If @error Or IsArray($aWindows) <> 1 Or UBound($aWindows, 0) <> 2 Or $aWindows[0][0] <= 0 Then MsgBox(48, 'Error', 'Error in WinList()') Return SetError(1, 0, 0) EndIf If BitAND(GUICtrlRead($Radi0), $GUI_CHECKED) = $GUI_CHECKED Then $Sorted = 0 ElseIf BitAND(GUICtrlRead($Radi1), $GUI_CHECKED) = $GUI_CHECKED Then SortByPID($aProcesses) $Sorted = 1 ElseIf BitAND(GUICtrlRead($Radi2), $GUI_CHECKED) = $GUI_CHECKED Then SortByPName($aProcesses) $Sorted = 2 EndIf Local $percent = 100/$aProcesses[0][0], $progress = 0 For $i = 1 To $aProcesses[0][0] Step +1 GUICtrlSetData($Edit1, 'Process ID: ' & $aProcesses[$i][1] & @CRLF & _ 'Process Name: ' & $aProcesses[$i][0] & @CRLF & _ 'Process Path: ' & _ProcessGetPath($aProcesses[$i][1]) & @CRLF, 1) If $Sorted = 2 Then GUICtrlSetData($List1, $aProcesses[$i][0] & ' - ' & $aProcesses[$i][1] & '|') Else GUICtrlSetData($List1, $aProcesses[$i][1] & ' - ' & $aProcesses[$i][0] & '|') EndIf For $i2 = 1 To $aWindows[0][0] Step +1 If WinGetProcess($aWindows[$i2][1]) = $aProcesses[$i][1] Then GUICtrlSetData($Edit1, 'Window Name: ' & $aWindows[$i2][0] & @CRLF & _ 'Window Handle: ' & $aWindows[$i2][1] & @CRLF, 1) EndIf Next GUICtrlSetData($Edit1, @CRLF, 1) $progress += $percent GUICtrlSetData($Prgs1, $progress) Next GUICtrlSetState($Prgs1, $GUI_HIDE) GUICtrlSetData($Prgs1, 0) If BitAND(GUICtrlRead($ChkB1), $GUI_CHECKED) = $GUI_CHECKED Then GUICtrlSetState($Edit1, $GUI_SHOW) Else GUICtrlSetState($List1, $GUI_SHOW) GUICtrlSetState($Edit2, $GUI_SHOW) EndIf GUICtrlSetState($Button_About, $GUI_ENABLE) GUICtrlSetState($Radi0, $GUI_ENABLE) GUICtrlSetState($Radi1, $GUI_ENABLE) GUICtrlSetState($Radi2, $GUI_ENABLE) GUICtrlSetState($ChkB1, $GUI_ENABLE) GUICtrlSetState($ChkB2, $GUI_ENABLE) GUICtrlSetState($Butt1, $GUI_ENABLE) EndFunc Func GetText() Local $Title = GUICtrlRead($List1), $PID, $Text If $Sorted = 2 Then $PID = StringTrimLeft($Title, StringInStr($Title, ' - ')+2) Else $PID = StringLeft($Title, StringInStr($Title, ' - ')-1) EndIf $Text = GUICtrlRead($Edit1) $Text = StringMid($Text, StringInStr($Text, 'Process ID: ' & $PID & @CRLF)) $Text = StringLeft($Text, StringInStr($Text, @CRLF & @CRLF, 0, 1)-1) GUICtrlSetData($Edit2, $Text) EndFunc Func _ProcessGetPath($hPID) Local $sPath = DllStructCreate('char[1000]') Local $hProcess = DllCall($hKernel, 'int', 'OpenProcess', 'dword', 0x0400 + 0x0010, 'int', 0, 'dword', $hPID) DllCall($hPsAPI, 'long', 'GetModuleFileNameEx', 'long', $hProcess[0], 'int', 0, 'ptr', DllStructGetPtr($sPath), 'long', DllStructGetSize($sPath)) DllCall($hKernel, 'int', 'CloseHandle', 'hwnd', $hProcess[0]) Local $ret = DllStructGetData($sPath, 1) If BitAND(GUICtrlRead($ChkB2), $GUI_CHECKED) = $GUI_CHECKED Then Local $c, $Drives = DriveGetDrive('ALL') For $i = 1 To $Drives[0] Step +1 If Not StringInStr($Drives[$i], ':') Then ContinueLoop $c = StringInStr($ret, $Drives[$i]) If $c = 1 Then ExitLoop ElseIf $c > 1 Then $ret = StringTrimLeft($ret, $c-1) ExitLoop EndIf Next If StringInStr($ret, '\SystemRoot\') = 1 Then $ret = StringReplace($ret, '\SystemRoot', @WindowsDir, 1) EndIf Return $ret EndFunc Func SortByPID(ByRef $aArray) Local $max, $var, $id For $i = 1 To $aArray[0][0] Step +1 $max = -1 For $i2 = $i To $aArray[0][0] Step +1 If $aArray[$i2][1] < $max Or $max = -1 Then $max = $aArray[$i2][1] $id = $i2 EndIf Next For $i2 = 0 To 1 Step +1 $var = $aArray[$i][$i2] $aArray[$i][$i2] = $aArray[$id][$i2] $aArray[$id][$i2] = $var Next Next EndFunc Func SortByPName(ByRef $aArray) If IsArray($aArray) <> 1 Or UBound($aArray, 0) <> 2 Then Return SetError(1) Local $vVar, $chr = -1, $max, $asc, $id For $i = 0 To $aArray[0][0] Step +1 If StringLen($aArray[$i][0]) > $chr Or $chr = -1 Then $chr = StringLen($aArray[$i][0]) Next For $chr = $chr To 1 Step -1 For $num = 1 To $aArray[0][0] Step +1 $max = -1 For $i = $num To $aArray[0][0] Step +1 $asc = Asc(StringMid($aArray[$i][0], $chr, 1)) If $asc < $max Or $max = -1 Then $max = $asc $id = $i EndIf Next For $i = 0 To 1 $vVar = $aArray[$id][$i] For $ii = $id-1 To $num Step -1 $aArray[$ii+1][$i] = $aArray[$ii][$i] Next $aArray[$num][$i] = $vVar Next Next Next EndFunc ;================================================================================== ; Function: SetPrivilege( $privilege, $bEnable ) ; Description: Enables (or disables) the $privilege on the current process ; (Probably) requires administrator privileges to run ; ; Author(s): Larry (from autoitscript.com's Forum) ; Notes(s): ; http://www.autoitscript.com/forum/index.php?s=&showtopic=31248&view=findpost&p=223999 ;================================================================================== Func SetPrivilege( $privilege, $bEnable ) Const $MY_TOKEN_ADJUST_PRIVILEGES = 0x0020 Const $MY_TOKEN_QUERY = 0x0008 Const $MY_SE_PRIVILEGE_ENABLED = 0x0002 Local $hToken, $SP_auxret, $SP_ret, $hCurrProcess, $nTokens, $nTokenIndex, $priv Local $LUID, $TOKEN_PRIVILEGES, $NEWTOKEN_PRIVILEGES, $ret, $f ;MustDeclareVars, me $nTokens = 1 $LUID = DLLStructCreate("dword;int") If IsArray($privilege) Then $nTokens = UBound($privilege) $TOKEN_PRIVILEGES = DLLStructCreate("dword;dword[" & (3 * $nTokens) & "]") $NEWTOKEN_PRIVILEGES = DLLStructCreate("dword;dword[" & (3 * $nTokens) & "]") $hCurrProcess = DLLCall("kernel32.dll","hwnd","GetCurrentProcess") $SP_auxret = DLLCall("advapi32.dll","int","OpenProcessToken","hwnd",$hCurrProcess[0], _ "int",BitOR($MY_TOKEN_ADJUST_PRIVILEGES,$MY_TOKEN_QUERY),"int*",0) If $SP_auxret[0] Then $hToken = $SP_auxret[3] DLLStructSetData($TOKEN_PRIVILEGES,1,1) $nTokenIndex = 1 While $nTokenIndex <= $nTokens If IsArray($privilege) Then $priv = $privilege[$nTokenIndex-1] Else $priv = $privilege EndIf $ret = DLLCall("advapi32.dll","int","LookupPrivilegeValue","str","","str",$priv, _ "ptr",DLLStructGetPtr($LUID)) If $ret[0] Then If $bEnable Then DLLStructSetData($TOKEN_PRIVILEGES,2,$MY_SE_PRIVILEGE_ENABLED,(3 * $nTokenIndex)) Else DLLStructSetData($TOKEN_PRIVILEGES,2,0,(3 * $nTokenIndex)) EndIf DLLStructSetData($TOKEN_PRIVILEGES,2,DllStructGetData($LUID,1),(3 * ($nTokenIndex-1)) + 1) DLLStructSetData($TOKEN_PRIVILEGES,2,DllStructGetData($LUID,2),(3 * ($nTokenIndex-1)) + 2) DLLStructSetData($LUID,1,0) DLLStructSetData($LUID,2,0) EndIf $nTokenIndex += 1 WEnd $ret = DLLCall("advapi32.dll","int","AdjustTokenPrivileges","hwnd",$hToken,"int",0, _ "ptr",DllStructGetPtr($TOKEN_PRIVILEGES),"int",DllStructGetSize($NEWTOKEN_PRIVILEGES), _ "ptr",DllStructGetPtr($NEWTOKEN_PRIVILEGES),"int*",0) $f = DLLCall("kernel32.dll","int","GetLastError") EndIf $NEWTOKEN_PRIVILEGES=0 $TOKEN_PRIVILEGES=0 $LUID=0 If $SP_auxret[0] = 0 Then Return 0 $SP_auxret = DLLCall("kernel32.dll","int","CloseHandle","hwnd",$hToken) If Not $ret[0] And Not $SP_auxret[0] Then Return 0 return $ret[0] EndFunc Func About() If Not IsDeclared('Form_About') Then Global $Form_About = GUICreate('About...', 275, 230, -1, -1, BitOR($WS_CAPTION, $WS_POPUP, $WS_SYSMENU), -1, $Form1) Global $A_Label_Name = GUICtrlCreateLabel('Processes and windows monitor', 10, 10, 255, 15) GUICtrlSetFont($A_Label_Name, 12, 600) Global $A_Label_Version = GUICtrlCreateLabel('Version: 0.99', 10, 30, 85, 15) GUICtrlSetFont($A_Label_Version, 11, 450) Global $A_Label_Author = GUICtrlCreateLabel('Author: dwerf', 10, 50, 70, 15) GUICtrlSetFont($A_Label_Author, 8.5, 450) Global $A_Label_Thanks = GUICtrlCreateLabel('Thanks to:' & @CRLF & 'Yashied' & @TAB & @TAB & 'kzru_hunter' & @CRLF & 'Larry' & @TAB & @TAB & 'BugFix' & @CRLF & 'Anton' & @TAB & @TAB & 'AspirinJunkie', 10, 80, 175, 65) GUICtrlSetFont($A_Label_Thanks, 10, 450) Global $A_Label_RU = GUICtrlCreateLabel('http://autoitscript.ru/', 10, 165, 100, 17) GUICtrlSetFont($A_Label_RU, 8.5, 400, 0) GUICtrlSetColor($A_Label_RU, 0x0000FF) GUICtrlSetCursor($A_Label_RU, 0) Global $A_Label_DE = GUICtrlCreateLabel('http://autoit.de/', 10, 185, 80, 17) GUICtrlSetFont($A_Label_DE, 8.5, 400, 0) GUICtrlSetColor($A_Label_DE, 0x0000FF) GUICtrlSetCursor($A_Label_DE, 0) Global $A_Label_COM = GUICtrlCreateLabel('http://autoitscript.com/', 10, 205, 110, 17) GUICtrlSetFont($A_Label_COM, 8.5, 400, 0) GUICtrlSetColor($A_Label_COM, 0x0000FF) GUICtrlSetCursor($A_Label_COM, 0) Global $A_Button_Close = GUICtrlCreateButton('OK', 185, 190, 80, 30) EndIf Local $L_Hover = 0, $gci GUISetState(@SW_SHOW, $Form_About) GUISetState(@SW_DISABLE, $Form1) While 1 $gci = GUIGetCursorInfo($Form_About) If Not @error Then Switch $gci[4] Case $A_Label_RU If Not $L_Hover = 1 Then GUICtrlSetFont($A_Label_RU, 8.5, 400, 4) GUICtrlSetFont($A_Label_DE, 8.5, 400, 0) GUICtrlSetFont($A_Label_COM, 8.5, 400, 0) $L_Hover = 1 EndIf Case $A_Label_DE If Not $L_Hover = 2 Then GUICtrlSetFont($A_Label_RU, 8.5, 400, 0) GUICtrlSetFont($A_Label_DE, 8.5, 400, 4) GUICtrlSetFont($A_Label_COM, 8.5, 400, 0) $L_Hover = 2 EndIf Case $A_Label_COM If Not $L_Hover = 3 Then GUICtrlSetFont($A_Label_RU, 8.5, 400, 0) GUICtrlSetFont($A_Label_DE, 8.5, 400, 0) GUICtrlSetFont($A_Label_COM, 8.5, 400, 4) $L_Hover = 3 EndIf Case Else If Not $L_Hover = 0 Then GUICtrlSetFont($A_Label_RU, 8.5, 400, 0) GUICtrlSetFont($A_Label_DE, 8.5, 400, 0) GUICtrlSetFont($A_Label_COM, 8.5, 400, 0) $L_Hover = 0 EndIf EndSwitch EndIf Switch GUIGetMsg() Case $GUI_EVENT_CLOSE, $A_Button_Close ExitLoop Case $A_Label_RU ShellExecute('http://autoitscript.ru/') Case $A_Label_DE ShellExecute('http://autoit.de/') Case $A_Label_COM ShellExecute('http://autoitscript.com/') EndSwitch WEnd GUISetState(@SW_ENABLE, $Form1) GUISetState(@SW_HIDE, $Form_About) EndFunc argumentum 1 Link to comment Share on other sites More sharing options...
wolfbartels Posted May 18, 2010 Share Posted May 18, 2010 congratulations! it seems to work fine. Link to comment Share on other sites More sharing options...
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