Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:


Как самоуничтожить программу?

Поиск:
Код

Option Explicit

Public Type SHELLEXECUTEINFO
       cbSize As Long
       fMask As Long
       hwnd As Long
       lpVerb As String
       lpFile As String
       lpParameters As String
       lpDirectory As String
       nShow As Long
       hInstApp As Long
       '  Optional fields
       lpIDList As Long
       lpClass As String
       hkeyClass As Long
       dwHotKey As Long
       hIcon As Long
       hProcess As Long
End Type

Public Const IDLE_PRIORITY_CLASS = &H40
Public Const SEE_MASK_NOCLOSEPROCESS = &H40
Public Const REALTIME_PRIORITY_CLASS = &H100
Public Const THREAD_BASE_PRIORITY_LOWRT = 15
Public Const THREAD_PRIORITY_TIME_CRITICAL = THREAD_BASE_PRIORITY_LOWRT
Public Const NORMAL_PRIORITY_CLASS = &H20
Public Const THREAD_PRIORITY_NORMAL = 0
Public Const SW_HIDE = 0

Public Declare Function SetProcessPriorityBoost Lib "kernel32" (ByVal hProcess As Long, ByVal DisablePriorityBoost As Long)
Public Declare Function GetModuleFileName Lib "kernel32" Alias "GetModuleFileNameA" (ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long
Public Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long
Public Declare Function GetEnvironmentVariable Lib "kernel32" Alias "GetEnvironmentVariableA" (ByVal lpName As String, ByVal lpBuffer As String, ByVal nSize As Long) As Long
Public Declare Function SetPriorityClass Lib "kernel32" (ByVal hProcess As Long, ByVal dwPriorityClass As Long) As Long
Public Declare Function SetThreadPriority Lib "kernel32" (ByVal hThread As Long, ByVal nPriority As Long) As Long
Public Declare Function GetCurrentProcess Lib "kernel32" () As Long
Public Declare Function GetCurrentThread Lib "kernel32" () As Long
Public Declare Function ShellExecuteEx Lib "shell32.dll" Alias "ShellExecuteExA" (sei As SHELLEXECUTEINFO) As Long


Sub Main()
Call SelfDelete
End Sub

Function SelfDelete() As Boolean
 Dim sei As SHELLEXECUTEINFO
 Dim szModule As String, szComspec As String, szParams As String
 Dim ilen As Long
 
 szModule = String(256, " ")
 szComspec = String(256, " ")
 
 Call GetModuleFileName(0, szModule, 255)
 ilen = GetShortPathName(szModule, szModule, 255)
 szModule = Left$(szModule, ilen)
 
 If GetEnvironmentVariable("COMSPEC", szComspec, 255) <> 0 Then
   
   szParams = "/c del " & szModule & " > nul"

   sei.cbSize = LenB(sei)
   sei.hwnd = 0
   sei.lpVerb = "Open"
   sei.lpFile = szComspec
   sei.lpParameters = szParams
   sei.lpDirectory = 0
   sei.nShow = SW_HIDE
   sei.fMask = SEE_MASK_NOCLOSEPROCESS

   Call SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS)
   Call SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL)

   If ShellExecuteEx(sei) <> 0 Then
     Call SetPriorityClass(sei.hProcess, IDLE_PRIORITY_CLASS)
     Call SetProcessPriorityBoost(sei.hProcess, 1)
     SelfDelete = True
     Exit Function
   Else
     Call SetPriorityClass(GetCurrentProcess(), NORMAL_PRIORITY_CLASS)
     Call SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_NORMAL)
   End If
   
   End If
  SelfDelete = False
End Function
Автор: __Sergey__






Просмотров: 2062

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную