Прочитать параметры запуска чужого процесса - VB
Формулировка задачи:
Здравствуйте, коллеги!
Требуется подсказка вот в каком вопросе. Запускается процесс с именем "msaccess.exe" и ему при запуске передаются параметры типа : "C:\Program Files\PIMSlider\Start_SI.vbs" "C:\Program Files\TTT\ttt.mde" /bla_bla_bla
Необходимо из другой программы найти этот процесс и прочитать путь к файлу ttt.mde. Процесс нахожу, далее :
В результате возвращается такая строка :
"C:\Program Files\Microsoft Office\OFFICE11\MSACCESS.EXE" -Embedding "C:\Program Files\Microsoft Office\OFFICE11\MSACCESS.EXE" WinSta0\Default ????C:\Windows\SYSTEM32\ntdll.dll ????C:\Windows\system32 ?????#???#?? ????gnp?#?#? ? ?&?????# ?#?#?#?
Где ж запрятана ссылка на базу ttt.mde, путь к которой передается процессу "msaccess.exe" как параметр? Прошу помощи
Листинг программы
- Dim ntStatus As Long
- Dim objBasic As PROCESS_BASIC_INFORMATION
- Dim objFlink As Long
- Dim objPEB As Long, objLdr As Long
- Dim objBaseAddress As Long
- Dim bytName(260 * 2 - 1) As Byte
- Dim strModuleName As String, objName As Long
- Dim objCid As CLIENT_ID
- Dim objOa As OBJECT_ATTRIBUTES
- Dim hProcess As Long
- Dim lngRet As Long, lngReturn As Long
- objOa.Length = Len(objOa)
- objCid.UniqueProcess = dwProcessId ' здесь pid процесса access.exe
- ntStatus = NtOpenProcess(hProcess, PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, objOa, objCid)
- If hProcess = 0 Then
- GetProcessCommandLine = ""
- Exit Function
- End If
- ntStatus = NtQueryInformationProcess(hProcess, ProcessBasicInformation, VarPtr(objBasic), Len(objBasic), ByVal 0&)
- If (NT_SUCCESS(ntStatus)) Then
- objPEB = objBasic.PebBaseAddress
- lngRet = ReadProcessMemory(hProcess, ByVal objPEB + &H10, objLdr, 4, ByVal 0&)
- If lngRet <> 1 Then Exit Function
- lngRet = ReadProcessMemory(hProcess, ByVal objLdr + &H44, objName, 4, ByVal 0&)
- If lngRet <> 1 Then Exit Function
- lngRet = ReadProcessMemory(hProcess, ByVal objName, bytName(0), 260 * 2, ByVal 0&)
- If lngRet <> 1 Then Exit Function
- strModuleName = bytName
- If InStr(strModuleName, """") = 0 Then
- strModuleName = Mid(strModuleName, InStr(strModuleName, Chr(0)) + 1, Len(strModuleName) - InStr(strModuleName, Chr(0)))
- Else
- strModuleName = Mid(strModuleName, InStr(strModuleName, """"), Len(strModuleName) - InStr(strModuleName, """"))
- End If
- strModuleName = Left(strModuleName & Chr(0), InStr(strModuleName & Chr(0), Chr(0)) - 1)
- GetProcessCommandLine = strModuleName
- End If
- CloseHandle hProcess
- End Function
Решение задачи: «Прочитать параметры запуска чужого процесса»
textual
Листинг программы
- Sub Test()
- Dim objWMI As Object, objCollection As Object, objApp As Object
- Set objWMI = GetObject("winmgmts:\\.\root\cimv2")
- Set objCollection = objWMI.ExecQuery("SELECT * FROM Win32_Process WHERE Name='excel.exe'")
- Select Case objCollection.Count
- Case 1
- Set objApp = GetObject(, "Excel.Application")
- MsgBox objApp.ActiveWorkbook.Path & "\" & objApp.ActiveWorkbook.Name
- Set objApp = Nothing
- Case 0: MsgBox "Не найдено ни одного процесса."
- Case Else: MsgBox "Найдено более одного процесса."
- End Select
- Set objCollection = Nothing
- Set objWMI = Nothing
- End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д