На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual Basic: Общие вопросы
Здесь обсуждаются вопросы по языку Visual Basic 1-6 (а так же по схожим языкам, как, например, PowerBASIC).
Вопросы по Visual Basic .NET (это который входит в состав Visual Studio 2002/2003/2005/2008+, для тех, кто не в курсе) обсуждаются в разделе .NET.

Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что Вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются. Студенты, вам сюда: ПОМОЩЬ СТУДЕНТАМ!
4. Используйте теги [ code=vba ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Формулируйте свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной (и более) давности, без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта user posted image FAQ Раздела user posted image Кладовка user posted image Наши Исходники user posted image API-Guide user posted image Поиск по Разделу user posted image MSDN Library Online user posted image Google

Ваше мнение о модераторах: user posted image SCINER, user posted image B.V.
Модераторы: SCINER, B.V.
  
> Невидимая программа
    Как сделать так, чтобы программу не было видно в процессах? И если можно, чтобы диспетчеры (NT, TaskInfo) ее не видели.
      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
        Малоизвестный факт, но все гораздо проще. Всего-то строка:
        app.visible = false
        ... и все.
          Любой процесс можно увидеть, если знать где смотреть.
          Не знаю как в Win NT, а в 98 можно запустить 16-разрядный процесс, его точно не видно.
            to AlexR
            В кернел32 нет функции RegisterServiceProcess.
            Can't find DLL entry point RegisterServiceProcess in kernel32.dll
            to Emerald
            Это как использовать?
            Ставил в форм_лоад - он пишет:
            Method or Data member not found
            to Vasya2000
            И как запустить 16-и разрядный процесс?
              ты вообще правильно ее используешь?
              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)
                не знаю как запускать 16-разрядный процесс, но он точно запускается. на вижуал бейсике не получится такая прога. на си - может быть, а на бейсике - фиг.
                  кстати, у тебя какой windows?
                    to Vasya2000
                    Использую вроде правильно, все уже перепробовал..
                    Когда пытаюсь запустить, пишет:
                    Can't find DLL entry point RegisterServiceProcess in kernel32.dll
                    может это из-за того, что я под NT?
                      ясен перец из-за этого. NT использует
                      другие библиотеки.
                        В NT эту ф-ю убрали намеренно для того, чтобы ни один предательский вирус не смог себя скрыть. В NT видны все процессы, без исключения! Чтобы нельзя было закрыть приложение в NT, либо через ASM, обращаясь к стеку памяти, стирают имя класса окна или винд-ворд, например. На VB это просто невозможно. Остаётся лишь «система пяти окон»!
                          Lamer, а что такое "система пяти окон"?
                            Принцип работы этой системы вытекает из принципа мультизадачности Windows. То есть, если ты не в курсе, процессор не выполняет все проги виндов одновременно, согласно распоряжениям Windows он выделяет каждому приложению определённое системное время (по дефалту около тысячной миллисекунды или такту). В течение этого времени он выполняет некоторый процесс (изменяет или читает всего несколько десятков байт, так называемое «слово»), а затем переключается на следующий в очереди. В Windows все проги являются окнами, скрытыми от юзеровских глаз. Так вот если запустить прогу пять раз, то есть создать 5 окон, и эти окна каждую миллисекунду будут проверять наличие друг друга, причём если кол-во экземпляров меньше пяти, то запускать себя ещё и ещё раз, пока окон не будет опять пять экземпляров. Почему пять? Да потому, что пять окон не возможно прикрыть за один такт, и никакая другая прога (типа диспетчера задач) не сможет прикрыть все экземпляры!
                              Lamer, а ты крут
                                плохА..
                                принцип 5ти окон не работает, а асм я пока не знаю...
                                Может кто знает, хотя бы, как отключить alt?
                                  Есть надежный способ - выломать все лишние кнопки с клавиатуры.
                                    Не, есть способ еще круче - надо вообще выкинуть клаву и оставить только джойстик!
                                      Ещё проще: поставить MS-DOS - там никакие процессы точно не будут видны :))
                                        А можно просто выкинуть монитор...
                                          Большое спасибо за советы!
                                          Кнопки из клавы уже отковырял, присабачил джойстик от спектрума, сижу, вот, монитор разбираю, пытаюсь наити чип, который отвечает за вывод на экран запущенных процессов. Жаль что на них не написано, два раза уже ошибся. Теперь он почему-то сильно гудит и издает какие-то странные запахи, когда включается, а включается и выключается когда захочет.
                                          А вот под мэсэдосом мои проги вообще не запускаются. Странно, правда?
                                          ПаРаДоКС, однако..
                                          :)
                                          cr
                                            а я вообще начинал кодить на басике в БК-0010. Советую тебе папробовать.
                                              К черту басик и бк0010. есть же программируемые микрокалькуляторы!!
                                                но там нет басика ...
                                                  там еще нет кнопки альт и процессы невидимые, стелс мать его, понимаешь
                                                    ну если на то пошло, то на счётах вообще нет кнопок, сплошные костяшки ...
                                                      Мне кажется, что для нормальной задачи невидимость вообще-то не нужна. Все эти вопросы про невидимость (а они в этом форуме появляются чуть не каждую неделю) нужны для написания всяких гадов. Уча людей подобным фокусам мы потом можем сами получить такую програму по e-mail
                                                        To al:
                                                        Почему обязательно гадов? Я, например, пишу программу для контроля доступа к машине, когда этот самый доступ платный (например, интернет-кафе или гейм-клуб).
                                                        В NT с этим проблемм нет, но в 95, 98 такие функции напрочь отсутствуют.
                                                        Допустим, по истечении оплаченного времени, запускается окно, которое закрывает весь экран, является постоянно активным и требует ввода пароля для выгрузки себя (упрощенный вариант).
                                                        Необходимо отключить: alt+tab, alt+F4, ctrl+alt+del и скрыть процесс с глаз долой, чтобы его не могли завершить...
                                                        alt+tab и alt+F4 я уже преодолел...
                                                        Если не хотите делиться со всеми, напишите, хотя бы на емыльник(cr@inett.ru).. Буду очень благодарен!
                                                        cr
                                                          Идея-то хороша, только непойму почему ты пишешь прогу для 98 виндов под NT?
                                                            To vasya2000
                                                            Потому, что пишу программу дома (wNT), для использования ее вне дома (w98).
                                                            Дома не могу установить w98(локальная сеть-много юзеров, w98 - это самоубийство), а там, где нужна эта программа, нельзя установить и работать в VB.
                                                            Но это неважно, где и для чего писать программу. Все они должны быть универсальны. Всегда.
                                                            А такие функции и свойства программы могут пригодиться во многих других случаях. И то, что кто-то видит в этом опасность, так это его проблеммы. Информация должна быть доступной.
                                                            Если у кого-то есть мешок палок, то только на нем будет лежать ответственность, за то, что он будет раскидывать эти палки во все стороны или просто построит из них околицу.
                                                            cr
                                                              Ну если под Windows98 то то что я писал должно пойти.
                                                                Принцип пяти окон надёжен. Наверное ты открыл пять окон в рамках одного процесса (в своём приложении). Надо создать стандарт EXE , который бы при загрузка, запускал себя ещё 4 раза, скрывал все свои окна (Visible=False, ShowInTaskBar=False)! Затем, с помощью API ф-ии (например, FindWindow или ф-ий перечисления процессов) определял кол-во своих копий и запускал новые, если их меньше чем 5!
                                                                  Кстати, посмотри на форуме мою тему "Отключение горячих клавиш Windows", там кто-то прислал код для отключения всех клавиш (включая Ctrl+Alt+Del), но поверь, когда какая нибудь прога зависнит и юзер не сможет вызвать окно завершения задач, его это сильно не обрадует, ведь придётся перегружать тачку!
                                                                    Lamer, а можно поймать момент закрытия программы? Чтото типа события Unload?
                                                                    К примеру: я использую в своей проге функцию TerminateProcess, а другая прога (написанная на бейсике), к которй я пытаюсь применить эту функцию, реагирует на это? И перед тем как закрыться - запускает себя в новом процессе??
                                                                      Это и не надо! Пусть лучше прога проверяет наличие каждого экземпляра через каждые 100 миллисекунд!
                                                                        5 лишних процессов в памяти может существенно снизить производительность системы. Но если других вариантов нет - значит система пяти окон - форева!
                                                                          Нет, не собираешься же ты запихивать 5 экземпляров огромной проги в память, пусть у этих экземпляров будут общие данные, например они будут использовать одну библиотеку, или будут синхронизированы с помощью к примеру мутекса!
                                                                            "...или будут синхронизированы с помощью к примеру мутекса!" - попбдробнее об этом пожалуйста, что такое мутекс??
                                                                              Знаешь как в книгах обычно пишут "Эта тема выходит за рамки данной книги", так вот, мне уже пора бежать по делам, а рассказу о мутексах, событиях и симафорах будет достаточно длинным! Вообщем это что-то вроде системного таймера ВИНДОВ. Поищи доку в нете! Ну можешь задать последний вопрос и я уже уйду потихоньку!
                                                                                Всем спасибо! Проблема разрешена.
                                                                                cr
                                                                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                                                0 пользователей:


                                                                                Рейтинг@Mail.ru
                                                                                [ Script execution time: 0,0675 ]   [ 16 queries used ]   [ Generated: 14.05.24, 23:34 GMT ]