Список запущеных приложений...

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Memfivosfey
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 17.02.2005 (Чт) 14:55

Список запущеных приложений...

Сообщение Memfivosfey » 22.02.2005 (Вт) 10:30

Как узнать с какими приложениями в данный момент работает пользователь и конкретно активное...
В программировании нет не решаемых проблемм, есть проблеммы на которые
мы не можем найти решение...

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 22.02.2005 (Вт) 10:40

Поиск по форуму. Ключевые слова - enumprocesses
I don't understand. Sorry.

Ship
Новичок
Новичок
 
Сообщения: 35
Зарегистрирован: 15.01.2005 (Сб) 0:53

Сообщение Ship » 22.02.2005 (Вт) 11:49

Может быть это подойдет:
На форме: Timer, Command1, ListBox
Код: Выделить всё
Option Explicit

Const TH32CS_SNAPPROCESS As Long = 2&
Const MAX_PATH As Integer = 260
Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String * MAX_PATH
End Type
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function CreateToolhelpSnapshot Lib "Kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function ProcessFirst Lib "Kernel32" Alias "Process32First" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function ProcessNext Lib "Kernel32" Alias "Process32Next" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Sub CloseHandle Lib "Kernel32" (ByVal hPass As Long)

Private Sub Command1_Click()'Список всех процессов

List1.Clear
Dim hSnapShot As Long
Dim uProcess As PROCESSENTRY32
Dim r As Long
hSnapShot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)

If hSnapShot = 0 Then
    Exit Sub
End If

uProcess.dwSize = Len(uProcess)
r = ProcessFirst(hSnapShot, uProcess)

Do While r
    List1.AddItem uProcess.szExeFile
    r = ProcessNext(hSnapShot, uProcess)
Loop

Call CloseHandle(hSnapShot)

End Sub

Private Sub Timer1_Timer()'заголовок активного окна

Dim hwnd As Long
Dim buffer As String
buffer = Space(100)

hwnd = GetForegroundWindow()
GetWindowText hwnd, buffer, 100
Form1.Caption = buffer

End Sub

Memfivosfey
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 17.02.2005 (Чт) 14:55

Сообщение Memfivosfey » 22.02.2005 (Вт) 12:19

Ship писал(а):Может быть это подойдет:
На форме: Timer, Command1, ListBox
Код: Выделить всё
Option Explicit

Const TH32CS_SNAPPROCESS As Long = 2&
Const MAX_PATH As Integer = 260
Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String * MAX_PATH
End Type
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function CreateToolhelpSnapshot Lib "Kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function ProcessFirst Lib "Kernel32" Alias "Process32First" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function ProcessNext Lib "Kernel32" Alias "Process32Next" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Sub CloseHandle Lib "Kernel32" (ByVal hPass As Long)

Private Sub Command1_Click()'Список всех процессов

List1.Clear
Dim hSnapShot As Long
Dim uProcess As PROCESSENTRY32
Dim r As Long
hSnapShot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)

If hSnapShot = 0 Then
    Exit Sub
End If

uProcess.dwSize = Len(uProcess)
r = ProcessFirst(hSnapShot, uProcess)

Do While r
    List1.AddItem uProcess.szExeFile
    r = ProcessNext(hSnapShot, uProcess)
Loop

Call CloseHandle(hSnapShot)

End Sub

Private Sub Timer1_Timer()'заголовок активного окна

Dim hwnd As Long
Dim buffer As String
buffer = Space(100)

hwnd = GetForegroundWindow()
GetWindowText hwnd, buffer, 100
Form1.Caption = buffer

End Sub
Спасибо помогло, список есть....
А как теперь выяснить какое приложение именно активно в данный момент времени.... Тобишь на каком сфокусирован пользователь...
В программировании нет не решаемых проблемм, есть проблеммы на которые
мы не можем найти решение...

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 22.02.2005 (Вт) 12:57

GetActiveWindow



Сказано же было: в поиск.

В следующий раз, кто напишет хоть один ответ в тему, которая явно находится поиском (пусть даже и по английским словам) будет награжден замечанием.
I don't understand. Sorry.

Ship
Новичок
Новичок
 
Сообщения: 35
Зарегистрирован: 15.01.2005 (Сб) 0:53

Сообщение Ship » 22.02.2005 (Вт) 13:23

Тобишь на каком сфокусирован пользователь...

Private Sub Timer1_Timer()'заголовок активного окна

Dim hwnd As Long
Dim buffer As String
buffer = Space(100)

hwnd = GetForegroundWindow()
GetWindowText hwnd, buffer, 100
Form1.Caption = buffer

End Sub


Caption Формы становится заголовком активного окна

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 22.02.2005 (Вт) 18:16

2RayShade: GetForegroundWindow :-P
(не упускать же шанс поддеть модера)
Изображение

Memfivosfey
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 17.02.2005 (Чт) 14:55

Сообщение Memfivosfey » 22.02.2005 (Вт) 18:21

Усё, въехал, всё просто суперски работает....
Спасибо Ship!
В программировании нет не решаемых проблемм, есть проблеммы на которые
мы не можем найти решение...

Memfivosfey
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 17.02.2005 (Чт) 14:55

Сообщение Memfivosfey » 22.02.2005 (Вт) 18:23

А ты RayShade Scarmarked Не ругайся, искал по форуму, там много воды, а найти что нужно не могу!!!!!

А Ship ответил прямо в десятку...
В программировании нет не решаемых проблемм, есть проблеммы на которые
мы не можем найти решение...

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 22.02.2005 (Вт) 19:04

Ой, что сейчас будет! :D

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 22.02.2005 (Вт) 19:25

Amed писал(а):Ой, что сейчас будет! :D


Ой ничего сейчас не будет

Тока не надо меня в поиск посылать :D

Как узнатиь папку из которой был запущен процес :?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 22.02.2005 (Вт) 19:47

Ramzes, ты чего :?: :shock:
Я же только на прошлой неделе это разжёвывал...
GetWindowModuleFileName (по hWnd) / GetModuleFileNameEx (по hProcess)
Изображение

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 22.02.2005 (Вт) 19:56

tyomitch писал(а):Ramzes, ты чего :?: :shock:
Я же только на прошлой неделе это разжёвывал...
GetWindowModuleFileName (по hWnd) / GetModuleFileNameEx (по hProcess)


Я ничего, мне просто стало вдруг очень интересно, а ApiGuide'a под рукой нету :( :oops:

neic
Жираф
Жираф
 
Сообщения: 492
Зарегистрирован: 13.02.2005 (Вс) 23:44
Откуда: Сланцы

Сообщение neic » 20.06.2005 (Пн) 20:47

Блин последних 5 постов(включая мой) полный флуд мой пост поясняющий так что за флуд мона и не ругать! А вы чё тему развиваете если уже всё нашлось!?

--=GAMER=--
Фиолетовый бот
Фиолетовый бот
Аватара пользователя
 
Сообщения: 810
Зарегистрирован: 22.03.2004 (Пн) 11:29
Откуда: Владивосток

Сообщение --=GAMER=-- » 24.06.2005 (Пт) 5:10

Традиция .... :wink:
В темноте слепец — самый надежный проводник. В эпоху безумия пусть тебя ведет сумасшедший.

rRenderer Engine
VB Wiki

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.06.2005 (Пт) 7:53

neic, GAMER, а где вы здесь флуд вообще нашли-то? :shock:
Лежал себе топик с февраля, никто его не трогал, вдруг откуда ни возьмись вы двое...
Изображение

SAS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 101
Зарегистрирован: 21.06.2005 (Вт) 0:30
Откуда: Петропавловск-Камчатский

Сообщение SAS » 20.07.2005 (Ср) 0:58

Ship писал(а):Может быть это подойдет:
На форме: Timer, Command1, ListBox
Код: Выделить всё
Option Explicit

Const TH32CS_SNAPPROCESS As Long = 2&
Const MAX_PATH As Integer = 260
Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String * MAX_PATH
End Type
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function CreateToolhelpSnapshot Lib "Kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function ProcessFirst Lib "Kernel32" Alias "Process32First" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function ProcessNext Lib "Kernel32" Alias "Process32Next" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Sub CloseHandle Lib "Kernel32" (ByVal hPass As Long)

Private Sub Command1_Click()'Список всех процессов

List1.Clear
Dim hSnapShot As Long
Dim uProcess As PROCESSENTRY32
Dim r As Long
hSnapShot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)

If hSnapShot = 0 Then
    Exit Sub
End If

uProcess.dwSize = Len(uProcess)
r = ProcessFirst(hSnapShot, uProcess)

Do While r
    List1.AddItem uProcess.szExeFile
    r = ProcessNext(hSnapShot, uProcess)
Loop

Call CloseHandle(hSnapShot)

End Sub

Private Sub Timer1_Timer()'заголовок активного окна

Dim hwnd As Long
Dim buffer As String
buffer = Space(100)

hwnd = GetForegroundWindow()
GetWindowText hwnd, buffer, 100
Form1.Caption = buffer

End Sub

А можно ли преобразовать этот код для использования на VBScript - конкретно меня интересует - как ывзвать функции API на VBScript?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 20.07.2005 (Ср) 1:03

Нельзя.
Можно только создать на VB6 библиотеку с вызовами API и из скрипта обращаться к ней.
Изображение

SAS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 101
Зарегистрирован: 21.06.2005 (Вт) 0:30
Откуда: Петропавловск-Камчатский

Сообщение SAS » 20.07.2005 (Ср) 1:19

tyomitch писал(а):Нельзя.
Можно только создать на VB6 библиотеку с вызовами API и из скрипта обращаться к ней.

Очень жаль. У меня этот скрипт должен работать при загрузке asp страницы с сервера на клиентских машинах. Библиотеку как переходник сделать можно, но тогда ее придется загружать и регистрировать на клиентских машинах. Неужели нет стандартного переходника, который входил бы в состав Вин ХР?

Jenizix
Географ
Географ
Аватара пользователя
 
Сообщения: 545
Зарегистрирован: 20.04.2004 (Вт) 20:52
Откуда: Москва

Сообщение Jenizix » 20.07.2005 (Ср) 1:24

SAS, ты хоть представь что будет если все смогут выполнять апи ф-ии на клиентских компах!!!!!! Беспредел!
Ушел в себя, вернусь не скоро...

Если вам нужно сделать прозрачной только форму, а контролы на ней нет, то вам сюда!!!

SAS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 101
Зарегистрирован: 21.06.2005 (Вт) 0:30
Откуда: Петропавловск-Камчатский

Сообщение SAS » 20.07.2005 (Ср) 1:25

tyomitch писал(а):Нельзя.
Можно только создать на VB6 библиотеку с вызовами API и из скрипта обращаться к ней.

Подобная тема уже обсуждалась http://bbs.vbstreets.ru/viewtopic.php?t=9545&highlight=windows+api+vbscript, там дается ссылка на уже готовый переходник с примерами - http://cwashington.netreach.net/main/tools/default.asp?topic=a-m, но, к сожалению меня это не очень устраивает, так как длл-ка должна копироваться на клиентскую машину и там регистрироваться. Может быть есть какие нибудь другие способы перечислить окна работающих приложений (w/o API) и переключаться программно между ними из vbscript?

SAS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 101
Зарегистрирован: 21.06.2005 (Вт) 0:30
Откуда: Петропавловск-Камчатский

Сообщение SAS » 20.07.2005 (Ср) 1:28

Jenizix писал(а):SAS, ты хоть представь что будет если все смогут выполнять апи ф-ии на клиентских компах!!!!!! Беспредел!

Да, действительно. Я об этом как-то не подумал.

Jenizix
Географ
Географ
Аватара пользователя
 
Сообщения: 545
Зарегистрирован: 20.04.2004 (Вт) 20:52
Откуда: Москва

Сообщение Jenizix » 20.07.2005 (Ср) 1:31

Мне бы такое удовольствие...
Ушел в себя, вернусь не скоро...

Если вам нужно сделать прозрачной только форму, а контролы на ней нет, то вам сюда!!!

SAS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 101
Зарегистрирован: 21.06.2005 (Вт) 0:30
Откуда: Петропавловск-Камчатский

Сообщение SAS » 20.07.2005 (Ср) 6:41

Jenizix писал(а):SAS, ты хоть представь что будет если все смогут выполнять апи ф-ии на клиентских компах!!!!!! Беспредел!

Однако можно устроить беспредел и без API функций - используя класс WMI - можно убивать и создавать процессы, просматривать их список, выключать машину и пр. Однако я пока не пойму можно ли с помощью этого объекта получить список окон работающих приложений. Список процессов я уже получил.

Jenizix
Географ
Географ
Аватара пользователя
 
Сообщения: 545
Зарегистрирован: 20.04.2004 (Вт) 20:52
Откуда: Москва

Сообщение Jenizix » 20.07.2005 (Ср) 11:58

SAS, угу вот тока у меня опера, и мне по барабану все эти БВСкрипты...
Ушел в себя, вернусь не скоро...

Если вам нужно сделать прозрачной только форму, а контролы на ней нет, то вам сюда!!!

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 20.07.2005 (Ср) 13:30

Jenizix писал(а):SAS, угу вот тока у меня опера, и мне по барабану все эти БВСкрипты...

Даже если у тебя опера - от выполнения скриптов, при применении групповых политик в домене, она не освободит. Если ты в домене, а в политике предусмотрен запуск скрипта при загрузке компьютера - то выполнится без проблем. Вот если при отображении странички - тогда да - тут и в IE можно накрутить запрет на выполнение скриптов.
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 20.07.2005 (Ср) 15:06

Jenizix писал(а):...и мне по барабану все эти БВСкрипты...


Ну BV ещё до скриптов не добрался... А вот как доберётся! :)
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

SAS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 101
Зарегистрирован: 21.06.2005 (Вт) 0:30
Откуда: Петропавловск-Камчатский

Сообщение SAS » 20.07.2005 (Ср) 22:00

Jenizix писал(а):SAS, угу вот тока у меня опера, и мне по барабану все эти БВСкрипты...

На самом деле без разницы - пользуетесь Вы Интернет через MS IE или оперу или кардебалет какой нибудь и не важно на VBScript или на JavaScript я напишу этот скрипт, он будет выполняться в нашей интрасети на каждой локальной машине как сценарий Windows Script Host (WSH). Здесь я пытался узнать об объектной модели WMI для того, чтобы узнать список работающих приложений. имеющих активные окна.

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 21.07.2005 (Чт) 7:30

SAS писал(а):
Jenizix писал(а):SAS, угу вот тока у меня опера, и мне по барабану все эти БВСкрипты...

На самом деле без разницы - пользуетесь Вы Интернет через MS IE или оперу или кардебалет какой нибудь и не важно на VBScript или на JavaScript я напишу этот скрипт, он будет выполняться в нашей интрасети на каждой локальной машине как сценарий Windows Script Host (WSH). Здесь я пытался узнать об объектной модели WMI для того, чтобы узнать список работающих приложений. имеющих активные окна.

Тогда тебе прямая дорога в WMI - класс Win32_Process. Там и хендлы можешь узнать и PID процесса (чтобы потом можно было управлять им через Shell.Activate(ProcessPID) ...
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

SAS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 101
Зарегистрирован: 21.06.2005 (Вт) 0:30
Откуда: Петропавловск-Камчатский

Сообщение SAS » 21.07.2005 (Чт) 8:13

Ruslan Demidow писал(а):Тогда тебе прямая дорога в WMI - класс Win32_Process. Там и хендлы можешь узнать и PID процесса (чтобы потом можно было управлять им через Shell.Activate(ProcessPID) ...

Процессы как перечислять я понял еще вчера.
Код: Выделить всё

'чтобы запустить этот пример нужно скопировать
'содержимое в файл "*.vbs", сохранить его и запустить

on error resume next

'create instances of all processes
Machine = InputBox ("Enter a machine name" & vbCRLF & _
                "например //geoth0", " ","//")
set oWMI = _
   GetObject("winmgmts:{impersonationLevel=impersonate}" & _
             "!" & Machine).InstancesOf("Win32_Process")

' enumerate all processes
For Each oProcess in oWMI
processes =  processes &  oProcess.Name & " " & oProcess.ProcessID & " " & oProcess.priority & chr (13) & chr(10)
Next
msgbox processes

Но вот как ими управлять я не понял. В соответствии с документацией для использования Shell.Activate необходимо как параметр передавать заголовок окна, которое нужно активировать - а вот заголовки как получить я не знаю. Если для этого как то используется список процессов - то как? ведь не для всех процессов есть открытые окна.

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, SemrushBot и гости: 40

    TopList