powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
25 сообщений из 27, страница 1 из 2
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
    #38328456
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно, пока возился с Shell и ShellExecute, привел след. пример где я неявно использую свойство Shell (VB6) задерживать возврат результата.
14519838
Дмитрий77
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Sub Main()
    ...
    ' предполагая что FormMain будет грузиться долго запускаем заставку для ублажения юзера
    Shell App.Path & "\screen.exe", vbNormalFocus
    FormMain.Show

'код загрузки FormMain
Private Sub Form_Load()
  'В самом начале и без проверок!!!
  Dim hwndScreen As Long ' это hwnd главной формы Form1 в приложении screen.exe
  hwndScreen = FindMyWindow(3) 'WINDOWTITLE_SCREENSAVER
...Do-do-do
  SendCommandToScreen hwndScreen, 5 ' отображение загрузки через ProgressBar на заставке
...Do-do-do
  SendCommandToScreen hwndScreen, 50 ' отображение загрузки через ProgressBar на заставке
...Do-do-do
  SendCommandToScreen hwndScreen, 100 ' отображение загрузки через ProgressBar на заставке



Фишка в чем.
hwndScreen -'это окно заставки
И доступно оно будет (<> 0) только когда форма заставки загрузится (в приложении screen.exe)
Когда я эту фигню делал, меня занимал вопрос:
А вдруг я не смогу поймать hwndScreen = FindMyWindow(3) ?
Ведь я только запустил screen.exe и окно могло НЕ УСПЕТЬ запуститься.
И честно готовился чего-нибудь дописывать.
В итоге все оказалось OK. Я об этом забыл.

...
Т.е. я неявно использовал свойство Shell (VB6) не выходить до загрузки формы.

Так вот я обнаружил что это иногда может не сработать.
Не сработало один раз на Notebook на Win7 при старте системы, когда запускается много дряни: всякие авиры, утилиты от Toshiba, вай-фай еще ищет и т.д. - ну т.е. идет некая череда обычных подвисаний, данный комп я от дряни в автозагрузке почистить поленился.
А моя прога тоже стартует из автозагрузки (Run в реестре под текущим юзером).

Т.е. возникла ситуация, когда
Код: vbnet
1.
2.
Private Sub Form_Load()
  hwndScreen = FindMyWindow(3) 'WINDOWTITLE_SCREENSAVER<<<


окна то и не нашла (а Shell-VB6 уже вышел).

На что заменить этот код, чтоб находил окно с гарантией?

Может как-то так?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
if len(Dir(App.Path & "\screen.exe))>0 Then
  Do
    DoEvents
    hwndScreen = FindMyWindow(3)
    if hwndScreen<>0 then
      exit do
    elseif (прошло скажем 15 секунд) Then 'ну не висеть же бесконечно
      exit do
    endif
  Loop
End If


Или есть получше варианты?
...
Рейтинг: 0 / 0
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
    #38328511
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таймер.
...
Рейтинг: 0 / 0
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
    #38328518
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyТаймер.
Таймер в Form_Load (основного приложения) не работает.
А заставка (отдельное приложение) запускается именно на время Form_Load основного.
...
Рейтинг: 0 / 0
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
    #38328522
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И найти hwndScreen надо именно в начале Form_Load (чтоб было куда скидывать progress загрузки).
...
Рейтинг: 0 / 0
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
    #38328526
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну тогда как и сделал.
...
Рейтинг: 0 / 0
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
    #38328533
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyНу тогда как и сделал.
В смысле добавить вот это (еще не сделал):
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
if len(Dir(App.Path & "\screen.exe))>0 Then
  Do
    DoEvents
    hwndScreen = FindMyWindow(3)
    if hwndScreen<>0 then
      exit do
    elseif (прошло скажем 15 секунд) Then 'ну не висеть же бесконечно
      exit do
    endif
  Loop
End If


??
...
Рейтинг: 0 / 0
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
    #38328546
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да.
...
Рейтинг: 0 / 0
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
    #38328661
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, вот так пока сделал (аккуратно):

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Private Sub Form_Load()
...
  'поиск окна hwndScreen (с учетом того что оно могло еще не появиться)
  Dim hwndScreen As Long
  If Len(Dir(App.Path & "\screen.exe")) > 0 Then
    Dim my_timeout As Date
    my_timeout = Now
    Do
      DoEvents
      hwndScreen = FindMyWindow(3) 'WINDOWTITLE_SCREENSAVER
      If hwndScreen <> 0 Then
        Exit Do
      ElseIf DateDiff("s", my_timeout, Now) > 15 Then 'ну не висеть же бесконечно
        Exit Do
      End If
    Loop
  End If
...


Блин, название переменной my_timeout не очень удачное.
Посмотрю, вылезет ли где какая проблема или нет.
...
Рейтинг: 0 / 0
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
    #38328673
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не надо DoEvents, этот цикл будет нормально так подгружать процессор, еще более отсрочивая запуск искомой проги. Нужно вместо DoEvents Sleep воткнуть, все равно форма еще не показалась, пользовательских действий обрабатывать не требуется.
...
Рейтинг: 0 / 0
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
    #38328675
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и воткнуть после, а не до FindMyWindow.
...
Рейтинг: 0 / 0
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
    #38328734
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

AntonariySleep воткнуть, все равно форма еще не показалась, пользовательских действий обрабатывать не требуется.
...
Ну и воткнуть после, а не до FindMyWindow.


Ты про какой Sleep говоришь?
Вот так?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub Form_Load()
...
  'поиск окна hwndScreen (с учетом того что оно могло еще не появиться)
  Dim hwndScreen As Long
  If Len(Dir(App.Path & "\screen.exe")) > 0 Then
    Dim my_timeout As Date
    my_timeout = Now
    Do
      hwndScreen = FindMyWindow(3) 'WINDOWTITLE_SCREENSAVER
      Sleep 100
      If hwndScreen <> 0 Then
        Exit Do
      ElseIf DateDiff("s", my_timeout, Now) > 15 Then 'ну не висеть же бесконечно
        Exit Do
      End If
    Loop
  End If
...


Со Sleep у меня были какие-то непонятки в прошлом, поэтому я его избегаю без крайней необходимости.

Я местами пользуюсь вот этим вариантом:
9304794
Но ты ж понимаешь, что это тот же самый DoEvent.
AntonariyНе надо DoEvents, этот цикл будет нормально так подгружать процессор, еще более отсрочивая запуск искомой проги.
Дык DoEvents вроде затем и нужен, чтоб цикл процессор не грузил. И полная загрузка от DoEvents ложная, обсуждали вроде.
Ну можно наверно DoEvents в конец цикла засунуть:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
if len(Dir(App.Path & "\screen.exe))>0 Then
  Do
    hwndScreen = FindMyWindow(3)
    if hwndScreen<>0 then
      exit do
    elseif (прошло скажем 15 секунд) Then 'ну не висеть же бесконечно
      exit do
    endif
    DoEvents
 Loop
End If

Все равно в 99,9% он выйдет после первого FindMyWindow, чего зря DoEvents запускать всякий раз.

В принципе случайный незапуск Screen.exe не является проблемой.
Ну не запустится, не будет ProgressBar, прога то по любому запустится.
Проблема будет если он НЕУПРАВЛЯЕМО запустился, т.е. прога его запустила, но отследить hwndScreen не сумела. Кто этот Screen закрывать будет?

Ну и на самом деле у меня чуть ошибка в логике.
Для Screen.exe прописано в нем самом "1 экземпляр программы".
Если вдруг предыдущий Screen.exe не завершился (напр. при закрытии приложения за счет эффекта слайдера для красоты он выгружается на 1-2 сек. позже основного приложения), то он и не запустится. Т.е. наличие файла
Код: vbnet
1.
 If Len(Dir(App.Path & "\screen.exe")) > 0 Then


еще не гарантирует что мы его запустили.
А 15 секунд в этом случае висеть мы будем.

А вообще если честно я не уверен, что там проблема была с "ранним" выходом из Shell. Вполне возможно что Form_Load тупо подвис из-за большого к-ва грузимой при старте NoteBook мути и прочих служб. Высечь это еще раз я не сумел.
...
Рейтинг: 0 / 0
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
    #38328832
donpauls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий77Или есть получше варианты?

Думаю, получше вариант будет следующий:
1. На screen.exe помещаем таймер, который будет с периодичностью, скажем в 0,5 сек отслеживать состояние определенного значения реестра. (если равняется "1" - то закрываться)
2. Прямо перед запуском screen.exe основная прога должна прописать значение реестра "0"
3. Когда прога загрузилась, она должна прописать значение "1"
...
Рейтинг: 0 / 0
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
    #38328925
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык DoEvents вроде затем и нужен, чтоб цикл процессор не грузил.DoEvents нужен для того, чтобы включить вызов оконных процедур в цикл. Цикл не перестает работать, а начинает часть времени выполнять иную работу помимо основных инструкций, при этом снижая суммарную нагрузку очень незначительно. А Sleep полностью прекращает работу потока и цикла, и нагрузки на процессор нет вообще. Форма "висит". Но так как ее не видно, это не имеет значения.

И полная загрузка от DoEvents ложная, обсуждали вроде.Я не сказал, что полная, но она заметная по сравнению с ее отсутствием.

за счет эффекта слайдера для красоты он выгружается на 1-2 сек. позже основного приложенияПорнография. Бесят такие программы.
...
Рейтинг: 0 / 0
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
    #38329742
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariySleep.
Иногда проще с тобой согласиться, чем продолжать спор.
Поставил пока
Код: vbnet
1.
2.
3.
4.
5.
... 
    End If
    Sleep 100 'DoEvents
  Loop
End If


Посмотрю не вылезет ли чего. Скорее ничего, т.к. в 99,9% (а может быть в 100% -я ж не знаю чего там было) случаев цикл выйдет выше в первой итерации
Antonariyза счет эффекта слайдера для красоты он выгружается на 1-2 сек. позже основного приложенияПорнография. Бесят такие программы.
Меня например бесит все что выходит за рамки классического интерфейса XP. А юзера например бесит когда ему 5-7 секунд вообще ничего не показывают. В крайнем случае (если будут претензии) сделать галку "Эффект слайдера при загрузке/выгрузке форм в настройках."

P.S. Под слайдером я понимаю следующий код:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Private Sub TimerAlpha_Timer()
  If scr_state = scrLoading Then
    Transparent_v = Transparent_v + IIf(FastMode, 15, 5) 'уменьшаем прозрачность
    Call SetLayeredWindowAttributes(Me.hwnd, TransparentColor, Transparent_v, LWA_COLORKEY Or LWA_ALPHA)
    If Transparent_v = 255 Then
      TimerAlpha.Enabled = False
      scr_state = scrNothing
    End If
  ElseIf scr_state = scrUnloading Then
    Transparent_v = Transparent_v - IIf(FastMode, 15, 5) 'увеличиваем прозрачность
    Call SetLayeredWindowAttributes(Me.hwnd, TransparentColor, Transparent_v, LWA_COLORKEY Or LWA_ALPHA)
    If Transparent_v = 0 Then
      TimerAlpha.Enabled = False
      scr_state = scrNothing
      Unload Me
    End If
  End If
End Sub



donpaulsДмитрий77Или есть получше варианты?

Думаю, получше вариант будет следующий:
1. На screen.exe помещаем таймер, который ...отслеживать состояние определенного значения реестра. ...
Не нравится мне эта идея. Очередной наворот типа "детский сад". Напоминает пуляние файлами.
P.S. Пуляние SendMessage мне нравится куда больше.
...
Рейтинг: 0 / 0
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
    #38330072
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77 P.S. Под слайдером я понимаю следующий код:Тоже этим баловался. Избавился на следующий день.
...
Рейтинг: 0 / 0
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
    #38330093
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyТоже этим баловался. Избавился на следующий день.
Для окон типа About и для заставки вполне приемлимо.

Еще эта штука позволяет вырезать из формы куски по маске заданного цвета, ну т.е. делать скин это называется кажется. Но на этот момент особо закладываться не стал, потому как оно плохо дружит с 32-битными тенями.
Хотел сделать заставку, вырезав людей по контуру (из фотографии), но задолбался вырезать эти контуры по клеточкам (там обязательно надо делать bmp, в jpg фон смазывается).
В итоге хоть и воспользовался идеей, но сделал просто скругленный прямоугольник с надписью, а большую иконку пришлось брать 256 цветов а не 32-бит (хорошо хоть она очень простая и 256 цветов от 32-бит на глаз почти не отличается).
...
Рейтинг: 0 / 0
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
    #38337896
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий, я не советчик в более удобном способе, но у меня надежный гарант socket. Стукнуть и передать значение "я живой" не проблема (даже через интернет)
...
Рейтинг: 0 / 0
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
    #38337899
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sleep, doevent - так далеко не зайдешь. Есть таймера. Делай свои регистры, назначай проверочные статусы, режимы и проверяй. На VB6 это очень удобно из-за ctrl+breack чтоб отладить состояние. Если бы такого не было, лучше уж c++
...
Рейтинг: 0 / 0
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
    #38337937
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей159,

Я про эту тему:
Обмен сообщениями между двумя СВОИМИ приложениями
помню, хотя пока не разбирался.
Я не привык бросать текущую незавершенную работу ради изучения новых (для меня) технологий или например осваивания новых программных систем типа .Net

Конкретно в этой теме цена вопроса 2 копейки. И DoEvents вполне сошел бы чтоб не тратить время. Antonariy таки убедил меня поставить Sleep. Я поставил и забил.
...
Рейтинг: 0 / 0
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
    #38337942
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тоже когда-то так думал. И сложно было разобраться самому. С трех интересующих вопросов, мог один подойти. Остальное нужно было самому. Но со временем я подошел к тому что, то что я делаю оказалось для меня мало и нужно было изучать и делать новые модули. А в помощь мне стало создание и оптимизация модулей. Сейчас все важные модули находятся в одной папке. К любому проекту стоит только подключить этот модуль или класс. Форма+2 Socket+таймер+глоб.модуль обеспечивает сейчас все: все удаленные работы с папками и файлами: копирование/перемещение/создание/удаление/сравнение по хеш, по размеру. Своими протоколами отдалено могу управлять чем задумал, получать что задумал. Сейчас изучаю протокол 2P2. Он прост, но его так запутали чтоб мы все думали что это почти не возможно. А с таймерами началось очень давно. Я сниму на видео одну программку которая уже закончена и имеет товарный вид (постараюсь выложить) и ты сам поймешь нужно тебе идти вперед или как-то попробовать обойтись без этого. В таймерах главное глобальные переменные и static. Меняешь значение (условно выдуманные режимы) и проверяешь их в таймере на условие. Все. Если режим=1 и задание=выполнено тогда режим=2, исполнить процедуру№2, выход из таймера.
...
Рейтинг: 0 / 0
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
    #38343179
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Не сработало один раз на Notebook на Win7 при старте системы, когда запускается много дряниА моя прога тоже стартует из автозагрузки (Run в реестре под текущим юзером).

Т.е. возникла ситуация, когда
Код: vbnet
1.
2.
Private Sub Form_Load()
  hwndScreen = FindMyWindow(3) 'WINDOWTITLE_SCREENSAVER<<<


окна то и не нашла (а Shell-VB6 уже вышел).

На что заменить этот код, чтоб находил окно с гарантией?

Воспроизвел.
Напрасны все эти споры.
Ситуация которую здесь пытался лечить мифическая, ни одна из "затычек" не сработает за ненадобностью.

При загрузке компа может произойти следующее.
Заставка быстро загрузится и покажет пустой прогрессбар (в заставке нет ничего сложного).
А вот загрузка основной проги может тут же стопорнуть (секунд на 5-10) - потому как она завязана на аудиокарту, на сеть (Wi-FI) и т.д. да и в принципе при загрузке компа такое поведение вполне типично.

Прогрессбар начнет ползти вверх через эти 5-10 сек - просто надо было подождать.
А hwnd она находит по любому т.к. VB-6 Shell держит 100%.

Собственно это паника была с моей стороны - не более.
Надеюсь я не ошибся на этот раз.

А этот код просто вреден:
Код: vbnet
1.
2.
      ElseIf DateDiff("s", my_timeout, Now) > 15 Then 'ну не висеть же бесконечно
        Exit Do


При отсутствии screen.exe и в ряде других ситуаций он тупо стопорнет загрузку проги на 15 сек.
...
Рейтинг: 0 / 0
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
    #38343785
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, прикольно. Сначала запустить экшешник, а потом искать куда он улетел. Типа чтоб жизнь малиной не казалась. Я искал хэндлы программ чтобы установить контекст в своей апликухе. Ну, типа над каким она окном - такие типы файлов актуальны и такие инструменты дозволены. И как-то не прельстило это геморройное занятие, а оно вот как может быть оказывается. Самому себе можно подлянку устроить. :)

Вырезать по пикселам не обязательно. Обычно выделяете, потом в индекс и там чистите уже.
...
Рейтинг: 0 / 0
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
    #38343809
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл давно как это делается, но кажется наоборот. Типа ваш Screen.exe как более легкое приложение сразу покажет форму, на ней кого-нибудь и запустит основное приложение. Затем будет искать его хэндл, как найдет начнет слать мессаги. Теоретически приложение должно отвечать, а запускатель показывать что происходит. Когда основное приложение загружено оно сообщает наконец самое главное и запускатель выходит из цикла ожидания. Это все геморрой без овладения процессами в ВБ, поэтому я не парился, а только юзал запускатель как затычку от повторных запусков жирной апликухи:

Sub Main()
On Error GoTo start
AppActivate "My App"
Exit Sub

start:
Call Shell("C:\Program Files\MyApp\myapp.exe", vbNormalFocus)
End Sub
...
Рейтинг: 0 / 0
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
    #38344550
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
debloggerСначала запустить экшешник, а потом искать куда он улетел.
А что, есть другие варианты?
Заметь, что я ищу не экшешник(процесс), который я запустил, а ОКНО, которое этот ПРОЦЕСС запустил. Это не одно и то же.
...
Рейтинг: 0 / 0
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
    #38346823
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

В смысле основное приложение безоконное?
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]