Что нового

[Элементы GUI] _WinAPI_GetProcessCommandLine и GUI

  • Автор темы max1300
  • Дата начала
M

max1300

Гость
Помогите сделать так что бы функция _WinAPI_GetProcessCommandLine прописовала процессы и также их параметры командной строки записывала в List
имеется такой код

Код:
#include <GUIConstants.au3>
#include <WinAPIProc.au3>
#include <WinAPI.au3>
#RequireAdmin


Local $aAdjust

$hToken = _WinAPI_OpenProcessToken(BitOR($TOKEN_ADJUST_PRIVILEGES, $TOKEN_QUERY))

#Region ### START Koda GUI section ### Form=D:\KodaFormDesinger\Forms\GetProccesInform.kxf
$Form1_1 = GUICreate("GetProgInform  By Max1300   ", 978, 687, 193, 125, BitOR($WS_MINIMIZEBOX,$WS_SIZEBOX,$WS_THICKFRAME,$WS_SYSMENU,$WS_CAPTION,$WS_POPUP,$WS_POPUPWINDOW,$WS_GROUP,$WS_BORDER,$WS_CLIPSIBLINGS))
GUISetBkColor(0xFF0000)
$List1 = GUICtrlCreateList("", 0, 40, 521, 292, BitOR($LBS_SORT,$LBS_MULTICOLUMN,$WS_BORDER))
$Button1 = GUICtrlCreateButton("получить процессы и информацию о них", 176, 344, 217, 25, 0)
$Progress1 = GUICtrlCreateProgress(-8, 376, 521, 25)
$Label1 = GUICtrlCreateLabel("Запущенные процессы", 8, 8, 291, 33)
GUICtrlSetFont(-1, 18, 800, 0, "MS Sans Serif")
$List2 = GUICtrlCreateList("", 528, 48, 449, 292, BitOR($LBS_SORT,$LBS_MULTICOLUMN,$WS_BORDER))
$Label2 = GUICtrlCreateLabel("Параметры командной строки", 528, 16, 383, 33)
GUICtrlSetFont(-1, 18, 800, 0, "MS Sans Serif")
$List3 = GUICtrlCreateList("", 520, 392, 449, 292, BitOR($LBS_SORT,$LBS_MULTICOLUMN,$WS_BORDER))
$Label3 = GUICtrlCreateLabel("Местонахождение исполняемого файла", 536, 360, 402, 28)
GUICtrlSetFont(-1, 14, 800, 0, "MS Sans Serif")
$Label4 = GUICtrlCreateLabel("Обновить информацию о процессах - DEL", 0, 416, 529, 33)
GUICtrlSetFont(-1, 18, 800, 0, "MS Sans Serif")
$Label5 = GUICtrlCreateLabel("Сменить цвет программы - Insert", 0, 464, 418, 33)
GUICtrlSetFont(-1, 18, 800, 0, "MS Sans Serif")
GUISetState(@SW_SHOW)

#EndRegion ### END Koda GUI section ###
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
		Case $GUI_EVENT_CLOSE
            Exit


		_WinAPI_AdjustTokenPrivileges($hToken, $aAdjust, 0, $aAdjust)
		_WinAPI_CloseHandle($hToken)
		Case $Button1
			_WinAPI_AdjustTokenPrivileges($hToken, $SE_DEBUG_NAME, $SE_PRIVILEGE_ENABLED, $aAdjust)
			For $d = 10 To 100
				GUICtrlSetData($Progress1,$d)
			Next
            $qlist = ProcessList()
            For $i = 1 To $qlist[0][0]
                GUICtrlSetData($List1,$qlist[$i][0],1)
				$qlist[$i][1] = _WinAPI_GetProcessCommandLine($qlist[$i][1])
				GUICtrlSetData($List2,$qlist[$i][0] & $qlist,1)
            Next
    EndSwitch
WEnd


у меня функция
Код:
_WinAPI_GetProcessCommandLine
только записывает процессы а должно записывать процессы и параметры командной строки
 

gloss

Ленивое кодило
Сообщения
155
Репутация
5
Этот GUI просто нет слов... :stars:
Лучше не надо..
:laugh:
urNv8Hd.jpg
Удалось заскринить момент где параметры ком. строки от браузера Opera отображаются долю секунды, а потом ошибка.
Код:
GUICtrlSetData($List2,$qlist[$i][1] & $qlist,1)

Отключил вырвиглазность, а то не возможно на это смотреть.
67xhX5U.jpg

Поигрался с процессами, заметил особенность, фокус в List1 и List2 падает на последний запущенный процесс и ком. строка отображается именно от последнего процесса(а если одинаковых процессов много как в моем случае с Opera), то быстро отобразит и выдаст ошибку.
Это не ошибка, это ком. строка от AutoIt3.exe только не полностью.
Лучше используй
Код:
GUICtrlCreateListView

вместо
Код:
GUICtrlCreateList

Вот так:
GUI кривоват, смотрел возможности AutoIt чисто для развития.
Код:
#include <GUIConstants.au3>
#include <GuiListView.au3>
Opt("GUIDataSeparatorChar")
$Form1 = GUICreate("Список процессов", 421, 336, 192, 124)
$List1 = GUICtrlCreateList("PID|Process", 0, 0, 420, 292)
$Button1 = GUICtrlCreateButton("Обновить", 176, 312, 161, 25, 0)
GUISetState()
Do
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $Button1
			_GUICtrlListView_DeleteAllItems($List1)
			$qlist = ProcessList()
			For $i = 1 To $qlist[0][0]
				GUICtrlCreateListViewItem($qlist[$i][1] & "|" & $qlist[$i][0],$List1)
			Next
	EndSwitch
Until $nMsg = -3
 

InnI

AutoIT Гуру
Сообщения
4,958
Репутация
1,448
max1300 [?]
записывать процессы и параметры командной строки
+ путь к файлу процесса
Код:
#include <GUIConstants.au3>
#include <WinAPIProc.au3>
#include <WinAPI.au3>
#RequireAdmin

Global $aAdjust

#Region ### START Koda GUI section ### Form=D:\KodaFormDesinger\Forms\GetProccesInform.kxf
$Form1_1 = GUICreate("GetProgInform  By Max1300   ", 978, 687, 193, 125, $WS_OVERLAPPEDWINDOW)
GUISetBkColor(0xFF0000)
$List1 = GUICtrlCreateList("", 0, 40, 521, 292, BitOR($LBS_MULTICOLUMN, $WS_BORDER))
$Button1 = GUICtrlCreateButton("получить процессы и информацию о них", 176, 344, 217, 25, 0)
$Progress1 = GUICtrlCreateProgress(-8, 376, 521, 25)
$Label1 = GUICtrlCreateLabel("Запущенные процессы", 8, 8, 291, 33)
GUICtrlSetFont(-1, 18, 800, 0, "MS Sans Serif")
$List2 = GUICtrlCreateList("", 528, 48, 449, 292, BitOR($LBS_MULTICOLUMN, $WS_BORDER))
$Label2 = GUICtrlCreateLabel("Параметры командной строки", 528, 16, 383, 33)
GUICtrlSetFont(-1, 18, 800, 0, "MS Sans Serif")
$List3 = GUICtrlCreateList("", 520, 392, 449, 292, BitOR($LBS_MULTICOLUMN, $WS_BORDER))
$Label3 = GUICtrlCreateLabel("Местонахождение исполняемого файла", 536, 360, 402, 28)
GUICtrlSetFont(-1, 14, 800, 0, "MS Sans Serif")
$Label4 = GUICtrlCreateLabel("Обновить информацию о процессах - DEL", 0, 416, 529, 33)
GUICtrlSetFont(-1, 18, 800, 0, "MS Sans Serif")
$Label5 = GUICtrlCreateLabel("Сменить цвет программы - Insert", 0, 464, 418, 33)
GUICtrlSetFont(-1, 18, 800, 0, "MS Sans Serif")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    Switch GUIGetMsg()
      Case $GUI_EVENT_CLOSE
        Exit
      Case $Button1
      GUICtrlSetData($List1, "")
      GUICtrlSetData($List2, "")
      GUICtrlSetData($List3, "")
      $hToken = _WinAPI_OpenProcessToken(BitOR($TOKEN_ADJUST_PRIVILEGES, $TOKEN_QUERY))
      _WinAPI_AdjustTokenPrivileges($hToken, $SE_DEBUG_NAME, $SE_PRIVILEGE_ENABLED, $aAdjust)
      If Not (@error Or @extended) Then
        $aList = ProcessList()
        For $i = 1 To $aList[0][0]
          GUICtrlSendMsg($List1, 0x0180, 0, $aList[$i][0])
          GUICtrlSendMsg($List2, 0x0180, 0, _WinAPI_GetProcessCommandLine($aList[$i][1]))
          GUICtrlSendMsg($List3, 0x0180, 0, _WinAPI_GetProcessFileName($aList[$i][1]))
          GUICtrlSetData($Progress1, 100 / $aList[0][0] * $i)
        Next
        _WinAPI_AdjustTokenPrivileges($hToken, $aAdjust, 0, $aAdjust)
        _WinAPI_CloseHandle($hToken)
      Else
        MsgBox(0, "Error", "Ошибка получения полномочий")
      EndIf
    EndSwitch
WEnd
 
Автор
M

max1300

Гость
Плохо я выучил Autoit v3 нужно учить хорошо все функции и циклы
 
Верх