Автор
|
Тема: Невидимая программа
|
cr |
опубликован 06-11-2001 16:23 MSK
Как сделать так, чтобы программу не было видно в процессах? И если можно, чтобы диспетчеры (NT, TaskInfo) ее не видели.
|
AlexR
|
опубликован 06-11-2001 19:22 MSK
Option Explicit Private Declare Function RegisterServiceProcess Lib "kernel32.dll" _ (ByVal dwProcessId As Long, ByVal dwType As Long) As Long Private Declare Function GetCurrentProcessId Lib "kernel32.dll" () As Long Private Sub toVisible() Call RegisterServiceProcess(GetCurrentProcessId, 0) End Sub Private Sub toInvisible() Call RegisterServiceProcess(GetCurrentProcessId, 1) End Sub или Private Declare Function RegisterServiceProcess Lib "kernel32" (ByVal ProcessID As Long, ByVal ServiceFlags As Long) As Long Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long Private Sub Form_Load() RegisterServiceProcess GetCurrentProcessId, 1 'Hide app End Sub Private Sub Form_Unload(Cancel As Integer) RegisterServiceProcess GetCurrentProcessId, 0 'Remove service flag End Sub
|
Emerald
|
опубликован 07-11-2001 12:13 MSK
Малоизвестный факт, но все гораздо проще. Всего-то строка: app.visible = false... и все. |
Vasya2000
|
опубликован 07-11-2001 13:01 MSK
Любой процесс можно увидеть, если знать где смотреть. Не знаю как в Win NT, а в 98 можно запустить 16-разрядный процесс, его точно не видно. |
cr
|
опубликован 08-11-2001 16:08 MSK
to AlexR В кернел32 нет функции RegisterServiceProcess. Can't find DLL entry point RegisterServiceProcess in kernel32.dllto Emerald Это как использовать? Ставил в форм_лоад - он пишет: Method or Data member not found to Vasya2000 И как запустить 16-и разрядный процесс? |
Vasya2000
|
опубликован 08-11-2001 16:13 MSK
ты вообще правильно ее используешь?Public Declare Function GetCurrentProcessId Lib "kernel32" _ () As Long Public Declare Function RegisterServiceProcess Lib "kernel32" _ (ByVal dwProcessID As Long, ByVal dwType As Long) As Long Dim ret As Long ret = RegisterServiceProcess(GetCurrentProcessId, 1)
|
Vasya2000
|
опубликован 08-11-2001 16:19 MSK
не знаю как запускать 16-разрядный процесс, но он точно запускается. на вижуал бейсике не получится такая прога. на си - может быть, а на бейсике - фиг.
|
Vasya2000
|
опубликован 08-11-2001 16:27 MSK
кстати, у тебя какой windows? |
cr
|
опубликован 08-11-2001 16:30 MSK
to Vasya2000 Использую вроде правильно, все уже перепробовал.. Когда пытаюсь запустить, пишет: Can't find DLL entry point RegisterServiceProcess in kernel32.dllможет это из-за того, что я под NT?
|
Vasya2000
|
опубликован 09-11-2001 14:39 MSK
ясен перец из-за этого. NT использует другие библиотеки. |
Lamer
|
опубликован 10-11-2001 11:23 MSK
В NT эту ф-ю убрали намеренно для того, чтобы ни один предательский вирус не смог себя скрыть. В NT видны все процессы, без исключения! Чтобы нельзя было закрыть приложение в NT, либо через ASM, обращаясь к стеку памяти, стирают имя класса окна или винд-ворд, например. На VB это просто невозможно. Остаётся лишь «система пяти окон»! |
Vasya2000
|
опубликован 10-11-2001 11:59 MSK
Lamer, а что такое "система пяти окон"?
|
Lamer
|
опубликован 10-11-2001 23:45 MSK
Принцип работы этой системы вытекает из принципа мультизадачности Windows. То есть, если ты не в курсе, процессор не выполняет все проги виндов одновременно, согласно распоряжениям Windows он выделяет каждому приложению определённое системное время (по дефалту около тысячной миллисекунды или такту). В течение этого времени он выполняет некоторый процесс (изменяет или читает всего несколько десятков байт, так называемое «слово»), а затем переключается на следующий в очереди. В Windows все проги являются окнами, скрытыми от юзеровских глаз. Так вот если запустить прогу пять раз, то есть создать 5 окон, и эти окна каждую миллисекунду будут проверять наличие друг друга, причём если кол-во экземпляров меньше пяти, то запускать себя ещё и ещё раз, пока окон не будет опять пять экземпляров. Почему пять? Да потому, что пять окон не возможно прикрыть за один такт, и никакая другая прога (типа диспетчера задач) не сможет прикрыть все экземпляры! |
Vasya2000
|
опубликован 11-11-2001 12:34 MSK
Lamer, а ты крут |
cr
|
опубликован 12-11-2001 11:29 MSK
плохА.. принцип 5ти окон не работает, а асм я пока не знаю...Может кто знает, хотя бы, как отключить alt? |
Vasya2000
|
опубликован 13-11-2001 13:31 MSK
Есть надежный способ - выломать все лишние кнопки с клавиатуры. |
Vasya2000
|
опубликован 13-11-2001 13:34 MSK
Не, есть способ еще круче - надо вообще выкинуть клаву и оставить только джойстик! |
AlexR
|
опубликован 13-11-2001 16:28 MSK
Ещё проще: поставить MS-DOS - там никакие процессы точно не будут видны :)) |
AlexR
|
опубликован 13-11-2001 16:29 MSK
А можно просто выкинуть монитор... |
cr
|
опубликован 14-11-2001 09:19 MSK
Большое спасибо за советы!Кнопки из клавы уже отковырял, присабачил джойстик от спектрума, сижу, вот, монитор разбираю, пытаюсь наити чип, который отвечает за вывод на экран запущенных процессов. Жаль что на них не написано, два раза уже ошибся. Теперь он почему-то сильно гудит и издает какие-то странные запахи, когда включается, а включается и выключается когда захочет. А вот под мэсэдосом мои проги вообще не запускаются. Странно, правда? ПаРаДоКС, однако.. :) cr |
purpe
|
опубликован 14-11-2001 11:34 MSK
а я вообще начинал кодить на басике в БК-0010. Советую тебе папробовать.
|
Vasya2000
|
опубликован 14-11-2001 14:06 MSK
К черту басик и бк0010. есть же программируемые микрокалькуляторы!!
|
purpe
|
опубликован 14-11-2001 15:19 MSK
но там нет басика ...
|
Vasya2000
|
опубликован 14-11-2001 16:10 MSK
там еще нет кнопки альт и процессы невидимые, стелс мать его, понимаешь |
purpe
|
опубликован 14-11-2001 16:55 MSK
ну если на то пошло, то на счётах вообще нет кнопок, сплошные костяшки ...
|
al
|
опубликован 14-11-2001 20:51 MSK
Мне кажется, что для нормальной задачи невидимость вообще-то не нужна. Все эти вопросы про невидимость (а они в этом форуме появляются чуть не каждую неделю) нужны для написания всяких гадов. Уча людей подобным фокусам мы потом можем сами получить такую програму по e-mail |
cr
|
опубликован 15-11-2001 11:23 MSK
To al: Почему обязательно гадов? Я, например, пишу программу для контроля доступа к машине, когда этот самый доступ платный (например, интернет-кафе или гейм-клуб). В NT с этим проблемм нет, но в 95, 98 такие функции напрочь отсутствуют. Допустим, по истечении оплаченного времени, запускается окно, которое закрывает весь экран, является постоянно активным и требует ввода пароля для выгрузки себя (упрощенный вариант). Необходимо отключить: alt+tab, alt+F4, ctrl+alt+del и скрыть процесс с глаз долой, чтобы его не могли завершить... alt+tab и alt+F4 я уже преодолел... Если не хотите делиться со всеми, напишите, хотя бы на емыльник(cr@inett.ru).. Буду очень благодарен! cr |
Vasya2000
|
опубликован 15-11-2001 15:24 MSK
Идея-то хороша, только непойму почему ты пишешь прогу для 98 виндов под NT? |
cr
|
опубликован 15-11-2001 15:59 MSK
To vasya2000Потому, что пишу программу дома (wNT), для использования ее вне дома (w98). Дома не могу установить w98(локальная сеть-много юзеров, w98 - это самоубийство), а там, где нужна эта программа, нельзя установить и работать в VB. Но это неважно, где и для чего писать программу. Все они должны быть универсальны. Всегда. А такие функции и свойства программы могут пригодиться во многих других случаях. И то, что кто-то видит в этом опасность, так это его проблеммы. Информация должна быть доступной. Если у кого-то есть мешок палок, то только на нем будет лежать ответственность, за то, что он будет раскидывать эти палки во все стороны или просто построит из них околицу. cr |
AlexR
|
опубликован 15-11-2001 19:05 MSK
Ну если под Windows98 то то что я писал должно пойти. |
Lamer
|
опубликован 17-11-2001 11:57 MSK
Принцип пяти окон надёжен. Наверное ты открыл пять окон в рамках одного процесса (в своём приложении). Надо создать стандарт EXE , который бы при загрузка, запускал себя ещё 4 раза, скрывал все свои окна (Visible=False, ShowInTaskBar=False)! Затем, с помощью API ф-ии (например, FindWindow или ф-ий перечисления процессов) определял кол-во своих копий и запускал новые, если их меньше чем 5! |
Lamer
|
опубликован 17-11-2001 12:11 MSK
Кстати, посмотри на форуме мою тему "Отключение горячих клавиш Windows", там кто-то прислал код для отключения всех клавиш (включая Ctrl+Alt+Del), но поверь, когда какая нибудь прога зависнит и юзер не сможет вызвать окно завершения задач, его это сильно не обрадует, ведь придётся перегружать тачку! |
Vasya2000
|
опубликован 17-11-2001 12:58 MSK
Lamer, а можно поймать момент закрытия программы? Чтото типа события Unload? К примеру: я использую в своей проге функцию TerminateProcess, а другая прога (написанная на бейсике), к которй я пытаюсь применить эту функцию, реагирует на это? И перед тем как закрыться - запускает себя в новом процессе?? |
Lamer
|
опубликован 17-11-2001 13:24 MSK
Это и не надо! Пусть лучше прога проверяет наличие каждого экземпляра через каждые 100 миллисекунд! |
Vasya2000
|
опубликован 17-11-2001 13:33 MSK
5 лишних процессов в памяти может существенно снизить производительность системы. Но если других вариантов нет - значит система пяти окон - форева! |
Lamer
|
опубликован 17-11-2001 13:37 MSK
Нет, не собираешься же ты запихивать 5 экземпляров огромной проги в память, пусть у этих экземпляров будут общие данные, например они будут использовать одну библиотеку, или будут синхронизированы с помощью к примеру мутекса! |
Vasya2000
|
опубликован 17-11-2001 13:40 MSK
"...или будут синхронизированы с помощью к примеру мутекса!" - попбдробнее об этом пожалуйста, что такое мутекс?? |
Lamer
|
опубликован 17-11-2001 13:44 MSK
Знаешь как в книгах обычно пишут "Эта тема выходит за рамки данной книги", так вот, мне уже пора бежать по делам, а рассказу о мутексах, событиях и симафорах будет достаточно длинным! Вообщем это что-то вроде системного таймера ВИНДОВ. Поищи доку в нете! Ну можешь задать последний вопрос и я уже уйду потихоньку! |
cr
|
опубликован 19-11-2001 15:21 MSK
Всем спасибо! Проблема разрешена.cr |