Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Linoge
Эксперт Hardware
2414 / 1724 / 290
Регистрация: 25.10.2011
Сообщений: 5,141
1

Запрет запуска приложений после текущего (перевести с VB 6.0)

27.06.2012, 11:44. Просмотров 1012. Ответов 5
Метки нет (Все метки)

Прошу помощи в переводе кода с vb6.
Или может предложить более простой вариант запрета запуска приложений после текущего.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" _
(ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function Process32First Lib "kernel32" _
(ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "kernel32" _
(ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Sub CloseHandle Lib "kernel32" (ByVal hPass As Long)
 
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, _
ByVal uExitCode As Long) As Long
 
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 * 260
End Type
 
Dim LastProc
 
Private Sub Check1_Click()
If Check1 Then
    Dim proc As PROCESSENTRY32
    snap = CreateToolhelp32Snapshot(15, 0)
    proc.dwSize = Len(proc)
    k = Process32First(snap, proc)
    Do While k
        LastProc = proc.szExeFile
        k = Process32Next(snap, proc)
        'List1.AddItem LastProc
    Loop
    CloseHandle snap
    
    Me.Caption = LastProc
    Timer1.Interval = 10
    Timer1.Enabled = True
Else
    Timer1.Enabled = False
End If
End Sub
 
Private Sub Timer1_Timer()
If Check1 Then
    Dim proc As PROCESSENTRY32
    snap = CreateToolhelp32Snapshot(15, 0)
    proc.dwSize = Len(proc)
    k = Process32First(snap, proc)
    flag = False
    Do While k
        sProc = proc.szExeFile
        If flag Then
            hProc = OpenProcess(&H1, False, proc.th32ProcessID)
            TerminateProcess hProc, 0&
        End If
        If StrComp(sProc, LastProc, vbTextCompare) = 0 Then flag = True
        k = Process32Next(snap, proc)
    Loop
    CloseHandle snap
Else
    Timer1.Enabled = False
End If
End Sub
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.06.2012, 11:44
Ответы с готовыми решениями:

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

Запрет запуска html-приложений
Доброго времени суток! Ребят, в общем, какая проблема... У нас на предприятии уже 2 или 3 раз...

Запрет запуска определённых приложений
Здравствуйте, форумчане. У меня есть вопрос: Смысл следующий: запретить использовать, например...

Запрет запуска второй копии приложений
Нужно запретить запуск второй копии чужого приложения. Т.е. пользователь ткнул 5 раз на ярлык GTA5...

Сильно тормозит ПК после запуска определенных приложений
Ситуация такая: Установил игру, не запустилась и после нажатия на кнопку не отправлять отчет ПК...

5
LapisAlchemist
248 / 160 / 14
Регистрация: 10.03.2012
Сообщений: 544
Записей в блоге: 2
27.06.2012, 14:48 2
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
Imports System.Runtime.InteropServices
 
<StructLayout(LayoutKind.Sequential)> _
Public Structure PROCESSENTRY32
    Public dwSize As UInteger
    Public cntUsage As UInteger
    Public th32ProcessID As UInteger
    Public th32DefaultHeapID As IntPtr
    Public th32ModuleID As UInteger
    Public cntThreads As UInteger
    Public th32ParentProcessID As UInteger
    Public pcPriClassBase As Integer
    Public dwFlags As UInteger
    <VBFixedString(260), MarshalAs(UnmanagedType.ByValTStr, SizeConst:=260)> Public szExeFile As String
End Structure
 
<Flags()> _
Public Enum SnapshotFlags As Integer
    HeapList = &H1
    Process = &H2
    Thread = &H4
    [Module] = &H8
    Module32 = &H10
    Inherit = &H80000000
    All = &Hf
    NoHeaps = &H40000000
End Enum
 
<DllImport("kernel32.dll", SetLastError:=True)> _
Private Shared Function CreateToolhelp32Snapshot(ByVal dwFlags As SnapshotFlags, ByVal th32ProcessID As UInteger) As IntPtr
End Function
 
<DllImport("kernel32.dll")> _
Private Shared Function Process32First(ByVal hSnapshot As IntPtr, ByRef lppe As PROCESSENTRY32) As Boolean
End Function
 
<DllImport("kernel32.dll")> _
Private Shared Function Process32Next(ByVal hSnapshot As IntPtr, ByRef lppe As PROCESSENTRY32) As Boolean
End Function
 
<DllImport("kernel32.dll", SetLastError:=True)> _
Private Shared Function CloseHandle(ByVal hHandle As IntPtr) As Boolean
End Function
 
<DllImport("kernel32.dll")> _
Private Shared Function OpenProcess(ByVal dwDesiredAccess As ProcessAccessFlags, <MarshalAs(UnmanagedType.Bool)> ByVal bInheritHandle As Boolean, ByVal dwProcessId As Integer) As IntPtr
End Function
 
<DllImport("kernel32.dll", SetLastError:=True)> _
Private Shared Function TerminateProcess(ByVal hProcess As IntPtr, ByVal uExitCode As UInteger) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
 
Dim LastProc As String
 
Private Sub Check1_Click()
If Check1.Checked Then
    Dim proc As New PROCESSENTRY32()
    snap = CreateToolhelp32Snapshot(15, 0)
    proc.dwSize = proc.Lenght 'так, наверно, правильно будет? :) На шарпе это именно так делается
    Dim k As Boolean = Process32First(snap, proc)
    Do While k
        LastProc = proc.szExeFile
        k = Process32Next(snap, proc)
        'List1.AddItem LastProc
    Loop
    CloseHandle(snap)
    
    Me.Caption = LastProc
    Timer1.Interval = 10
    Timer1.Start()
Else
    Timer1.Stop()
End If
End Sub
 
Private Sub Timer1_Timer(ByVal sender As Object, ByVal e As EventArgs) Handles Timer1.Timer
If Check1.Checked Then
    Dim proc As New PROCESSENTRY32()
    snap = CreateToolhelp32Snapshot(15, 0)
    proc.dwSize = proc.Lenght
    k = Process32First(snap, proc)
    Dim flag As Boolean = False
    Do While k
        sProc = proc.szExeFile
        If flag Then
            hProc = OpenProcess(&H1, False, proc.th32ProcessID)
            TerminateProcess hProc, 0&
        End If
        If StrComp(sProc, LastProc, vbTextCompare) = 0 Then flag = True
        k = Process32Next(snap, proc)
    Loop
    CloseHandle(snap)
Else
    Timer1.Stop()
End If
End Sub
1
kOS_77
194 / 186 / 9
Регистрация: 14.06.2011
Сообщений: 495
27.06.2012, 15:29 3
Цитата Сообщение от Linoge Посмотреть сообщение
Прошу помощи в переводе кода с vb6.
Или может предложить более простой вариант запрета запуска приложений после текущего.
Вы имеете ввиду запуска только одного экземпляра программы ?
0
Linoge
Эксперт Hardware
2414 / 1724 / 290
Регистрация: 25.10.2011
Сообщений: 5,141
27.06.2012, 16:05  [ТС] 4
iprog,
Спасибо, но пока не работает как раз в месте определения размера переменной.
Не фурычит ни Len(proc) - "Ввод/вывод файла структуры с полем "dwSize" типа "UInteger" является недопустимым." ни proc.Lenght - "нет метода".

kOS_77, имелось ввиду любого приложения.
0
LapisAlchemist
248 / 160 / 14
Регистрация: 10.03.2012
Сообщений: 544
Записей в блоге: 2
27.06.2012, 20:38 5
Хе, я пока писал код, проглядел, что proc -- это экземпляр структуры, и решил, что это строка .
Вот, нашел, но на шарпе:
C#
1
proc.dwSize = (UInt32)Marshal.SizeOf(typeof(PROCESSENTRY32));
0
Linoge
Эксперт Hardware
2414 / 1724 / 290
Регистрация: 25.10.2011
Сообщений: 5,141
02.07.2012, 16:52  [ТС] 6
iprog, почти так, на vbnet выглядит следующим образом
vb.net
1
proc.dwSize = Marshal.SizeOf(proc)
И весь код для желающих, на форме таймер и CheckBox
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
Imports System.Runtime.InteropServices
 
Public Class Form1
 
    Public Structure PROCESSENTRY32
        Public dwSize As UInt32
        Public cntUsage As UInt32
        Public th32ProcessID As UInt32
        Public th32DefaultHeapID As IntPtr
        Public th32ModuleID As UInt32
        Public cntThreads As UInt32
        Public th32ParentProcessID As UInt32
        Public pcPriClassBase As UInt32
        Public dwFlags As Int32
        <VBFixedString(260), MarshalAs(UnmanagedType.ByValTStr, SizeConst:=260)> _
        Public szExeFile As String
    End Structure
 
    Public Enum SnapshotFlags As Integer
        HeapList = &H1
        Process = &H2
        Thread = &H4
        [Module] = &H8
        Module32 = &H10
        Inherit = &H80000000
        All = &HF
        NoHeaps = &H40000000
    End Enum
 
    Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" _
        (ByVal dwFlags As SnapshotFlags, ByVal th32ProcessID As UInteger) As IntPtr
    Private Declare Function Process32First Lib "kernel32" (ByVal hSnapshot As IntPtr, _
                                                ByRef lppe As PROCESSENTRY32) As Boolean
    Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapshot As IntPtr, _
                                                ByRef lppe As PROCESSENTRY32) As Boolean
    Private Declare Function CloseHandle Lib "kernel32" (ByVal hHandle As IntPtr) As Boolean
 
    Dim LastProc As String, mas_id(200) As Int64
    Dim k, n
 
    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        Dim proc As New PROCESSENTRY32(), snap
        If CheckBox1.Checked Then
 
            snap = CreateToolhelp32Snapshot(15, 0)
            proc.dwSize = Marshal.SizeOf(proc)
            k = Process32First(snap, proc)
            Dim flag As Boolean
            Do While k
                flag = True
                If proc.th32ProcessID > 99 Then
                    For i = 0 To n
                        If proc.th32ProcessID = mas_id(i) Then flag = False
                    Next
                    If flag Then
                        Process.GetProcessById(proc.th32ProcessID).Kill()
                        'ListBox1.Items.Add("убит " & proc.th32ProcessID & " " & Process.GetProcessById(proc.th32ProcessID).ProcessName)
                    End If
                End If
                k = Process32Next(snap, proc)
            Loop
            CloseHandle(snap)
        Else
            Timer1.Stop()
        End If
    End Sub
 
    Private Sub CheckBox1_Click(sender As Object, e As EventArgs) Handles CheckBox1.Click
        Dim proc As New PROCESSENTRY32(), snap
        If CheckBox1.Checked Then
            snap = CreateToolhelp32Snapshot(15, 0)
            proc.dwSize = Marshal.SizeOf(proc)
            k = Process32First(snap, proc)
            Dim i = 0
            Do While k
                LastProc = proc.szExeFile
                k = Process32Next(snap, proc)
                'ListBox1.Items.Add(LastProc)
                mas_id(i) = proc.th32ProcessID
                i += 1
            Loop
            n = i - 1
            CloseHandle(snap)
            Me.Text = LastProc
            Timer1.Interval = 10
            Timer1.Start()
        Else
            Timer1.Stop()
        End If
    End Sub
1
02.07.2012, 16:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2012, 16:52

Сброс приложений по умолчания после запуска ПО через флешку
Добрый день, возникла проблема на Windows 10, после того как я запускаю фотошоп с флешки, то у меня...

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

Как определить время запуска текущего сервера?
Привет, мне необходимо узнать, как давно запустился сервер. Как это лучше сделать?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru