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

-

-
- Сообщения: 212
- Зарегистрирован: 17.02.2005 (Чт) 14:55
-
Memfivosfey » 22.02.2005 (Вт) 10:30
Как узнать с какими приложениями в данный момент работает пользователь и конкретно активное...
В программировании нет не решаемых проблемм, есть проблеммы на которые
мы не можем найти решение...
-
RayShade
-
- 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

-

-
- Сообщения: 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

-

-
- Сообщения: 12822
- Зарегистрирован: 20.10.2002 (Вс) 17:02
- Откуда: חיפה
tyomitch » 22.02.2005 (Вт) 18:16
2RayShade: Get
ForegroundWindow
(не упускать же шанс поддеть модера)
-
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
Ой, что сейчас будет!

-
Ramzes
-
- Скромный человек

-

-
- Сообщения: 5004
- Зарегистрирован: 12.04.2003 (Сб) 11:59
- Откуда: Из гробницы :)
-
Ramzes » 22.02.2005 (Вт) 19:25
Amed писал(а):Ой, что сейчас будет!

Ой ничего сейчас не будет
Тока не надо меня в поиск посылать
Как узнатиь папку из которой был запущен процес

-
tyomitch
-
- Пользователь #1352

-

-
- Сообщения: 12822
- Зарегистрирован: 20.10.2002 (Вс) 17:02
- Откуда: חיפה
tyomitch » 22.02.2005 (Вт) 19:47
Ramzes, ты чего
Я же только на прошлой неделе это разжёвывал...
GetWindowModuleFileName (по hWnd) / GetModuleFileNameEx (по hProcess)
-
Ramzes
-
- Скромный человек

-

-
- Сообщения: 5004
- Зарегистрирован: 12.04.2003 (Сб) 11:59
- Откуда: Из гробницы :)
-
Ramzes » 22.02.2005 (Вт) 19:56
tyomitch писал(а):Ramzes, ты чего

Я же только на прошлой неделе это разжёвывал...
GetWindowModuleFileName (по hWnd) / GetModuleFileNameEx (по hProcess)
Я ничего, мне просто стало вдруг очень интересно, а ApiGuide'a под рукой нету

-
neic
-
- Жираф

-
-
- Сообщения: 492
- Зарегистрирован: 13.02.2005 (Вс) 23:44
- Откуда: Сланцы
-
neic » 20.06.2005 (Пн) 20:47
Блин последних 5 постов(включая мой) полный флуд мой пост поясняющий так что за флуд мона и не ругать! А вы чё тему развиваете если уже всё нашлось!?
-
tyomitch
-
- Пользователь #1352

-

-
- Сообщения: 12822
- Зарегистрирован: 20.10.2002 (Вс) 17:02
- Откуда: חיפה
tyomitch » 24.06.2005 (Пт) 7:53
neic, GAMER, а где вы здесь флуд вообще нашли-то?
Лежал себе топик с февраля, никто его не трогал, вдруг откуда ни возьмись вы двое...
-
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

-

-
- Сообщения: 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

-

-
- Сообщения: 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
Кто сейчас на конференции
Сейчас этот форум просматривают: AhrefsBot, Google-бот, SemrushBot, Yandex-бот и гости: 0