powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Простое приложение без GUI выдает свою активность (песочные часики).
6 сообщений из 31, страница 2 из 2
Простое приложение без GUI выдает свою активность (песочные часики).
    #38966798
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2А Cursor.Hide() не работает?
Нет, не помогает.

Если например сделать
Код: vbnet
1.
2.
3.
sub main()
  msgbox("OK")
end sub


то по визуальным ощущениям "часики" мурыжатся еще до выполнения OK, так что код тут вообще ни причем.

> Class Library :)
>+ Windows Scheduler
ну вы сами то не согласны что вы бред не относящийся к теме несете?

>оформи вин-сервис и никаких часиков :)
он оформлен, не для маленькой утилитки, а для проги в целом(которая эту утилитку например запускает)
2 режима работы:
1) как приложение
2) как сервис
Естественно во втором случае никаких часиков нет, потому что System-другой аккаунт, об этом случае речь не идет.

Изопропил,
ты вот единственный кто возможно дело говорит.
Доки что ты процитировал я читал.

>если нужно решить задачу - придётся полюбить
>ещё четверг и пятница - ты ж любитель API - вызывай (никто не мешает посмотреть исходники среды)
трудозатратно, счас мозги больше в сторону POP-SSL и т.п. смотрят, это интереснее, надо допилить и довтыкать в проект

Понимаешь еще, "извне" - это не решение. Ты затычку предлагаешь по любому.
"Извне" я ее решил уже переделав в "консоль", и посылая "извне" HIDE. Это хорошее решение.
Даже если твой совет с CreateProcess и работает, то это кривое решение, и явно уступает выбранному мной Console+Hide.

Вопрос в другом. Просто жмем файл. Мышкой. И получаем "часики" пусть на секунду. Даже если main() пустая.
Но консоль же не показывает "часики" (и где тут флаги?).
М.б. в конфиге каком надо где чего поменять? Консоль же без часиков запускается.
...
Рейтинг: 0 / 0
Простое приложение без GUI выдает свою активность (песочные часики).
    #38966842
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Возможно я не правильно понял, но вроде это для процесса, который создает окно
да именно так

Дмитрий77Консоль же без часиков запускается.
да. В заголовке exe файла не зря ж флажки присутствуют, которые задаются при сборке приложения (vbc) -
Код: plaintext
1.
2.
3.
4.
5.
6.
/target:exe                       Создать консольное приложение (по умолчанию). (Краткая форма: /t)
/target:winexe                    Создать приложение для Windows.
/target:library                   Создать библиотечную сборку.
/target:module                    Создать модуль, который может быть добавлен в сборку.
/target:appcontainerexe           Создать приложение Windows, выполняемое в контейнере AppContainer.
/target:winmdobj                  Создать промежуточный файл метаданных Windows

как пишет MSDN - чтоб погасить часики, которые включил CreateProcess нужно или окно нарисовать или GetMessage вызвать. Попробуй на старте приложения максимально близко к точке входа сделать PostMessage и GetMessage


Дмитрий77"Извне" я ее решил уже переделав в "консоль", и посылая "извне" HIDE. Это хорошее решение. Извращение, ибо для запуска без окна в CreateProcess нужно задать флаги

StartupInfo.dwFlags = STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow = SW_HIDE;
...
Рейтинг: 0 / 0
Простое приложение без GUI выдает свою активность (песочные часики).
    #38968010
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилДмитрий77"Извне" я ее решил уже переделав в "консоль", и посылая "извне" HIDE. Это хорошее решение. Извращение, ибо для запуска без окна в CreateProcess нужно задать флаги

StartupInfo.dwFlags = STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow = SW_HIDE;
Не извращение, по сути я и делаю то что ты сказал, может не так выразился:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
...
          Try : Shell_Net(IO.Path.Combine(Application.StartupPath, "proga.exe"), _
           "<parameters>", ProcessWindowStyle.Hidden) : Catch : End Try
...
  Public Sub Shell_Net(ByVal PathName As String, _
                       Optional ByVal Parameters As String = vbNullString, _
                       Optional ByVal Style As ProcessWindowStyle = ProcessWindowStyle.Normal)
    Dim ExecInfo As New ProcessStartInfo
    With ExecInfo
      .FileName = PathName
      .Arguments = Parameters
      .WindowStyle = Style
    End With
    Process.Start(ExecInfo)
  End Sub



либо например вот такой вариант иногда использую, если хочу дождаться завершения вызванной проги
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
... 
       ShellAndContinueNet(Chr(34) & IO.Path.Combine(Application.StartupPath, "proga.exe") & Chr(34) & _
         "  <parameters>", AppWinStyle.Hide)
...
  Public Sub ShellAndContinueNet(ByVal AppToRun As String, ByVal mode As AppWinStyle)
    'нехорошей является ситуация когда на момент GetProcessById сам процесс уже завершился
    'чтобы ее предотвратить, выходим по исключению
    Try
      Dim MyProcess As Process = Process.GetProcessById(Shell(AppToRun, mode))
      Do While Not MyProcess.HasExited
        Application.DoEvents()
      Loop
    Catch
    End Try
  End Sub



По поводу часиков.

У меня иногда используется некая KillProga

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
  KillProga("proga") 'прекращение предыдущего процесса proga.exe, если запущен
...
  Public Sub KillProga(ByVal proga As String)
    Do
      TargetName = proga
      hwndEnumTarget = IntPtr.Zero
      ' Examine the window names.
      EnumWindows(New EnumWindowsProc(AddressOf EnumProc), 0)
      ' See if we got an hwnd.
      If hwndEnumTarget = IntPtr.Zero Then
        Exit Do
      Else
        EndTask(hwndEnumTarget)
      End If
    Loop
  End Sub



Дизайн мой давай обсуждать не будем, я другое хочу сказать.
Как не трудно догадаться из функции, она ловит "proga.exe" по окну так сказать.
Дык вот
Если proga.exe - это VB6-проект из одного модуля без форм, то она чудесно убивается через KillProga
Если proga.exe - это VB.Net-проект из одного модуля без форм ( не консоль, а именно который мы тут обсуждаем ), то она ни фига не убивается через KillProga
Если proga.exe - это .Net-проект "Консоль", то понятно что KillProga также его убивает стукнув по шапке консоли где отображается название exe.

Отсюда вывод: VB6 таки создает какое-то окно, ну и соответственно "The system turns the feedback cursor off after the first call to GetMessage" и часиков типа нет. А VB.Net ничего подобного не делает, поэтому и часики заметны, и убить его за эти "уши" нельзя.

Т.е. ну его нифик эти изыскания.
Для указанного случая "Консольное приложение" запускаемое с AppWinStyle.HideProcess либо WindowStyle.Hidden (в зависимости от реализации) - вариант оптимальный. И кстати, я не знаю че там .Net творит с неконсольным, консоль в отличии от "Пустой проект" запускается мгновенно, что тоже хороший плюс.

Возникает вопрос, а если мое приложение иногда выдает какие-то Msgbox то как быть, потому что при HideProcess/Hidden они тоже не выведутся на экран. Ну, тогда делать "Пустой проект" - который с часиками. Но в данном случае (какие-то msgbox), уже предполагается процесс взаимодействия с юзером, т.е. запуск идет как правило как ответ на то что пользователь что-то нажал мышкой или клавиатурой, а в этом случае кратковременное появление часиков разумно и не напрягает.

Копать дальше эту тему считаю бессмысленной тратой времени.
...
Рейтинг: 0 / 0
Простое приложение без GUI выдает свою активность (песочные часики).
    #38968181
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Копать дальше эту тему считаю бессмысленной тратой времени.
извини конечно, но процентов 95 твоих изысканий - бессмысленная трата времени

Хотя если это хобби - почему бы и нет
...
Рейтинг: 0 / 0
Простое приложение без GUI выдает свою активность (песочные часики).
    #38968190
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Дизайн мой давай обсуждать не будем, я другое хочу сказать.

архитертура с несколькими процессами - нормально
способ взаимодействия - негодный - это не обсуждение, а констатация факта
...
Рейтинг: 0 / 0
Простое приложение без GUI выдает свою активность (песочные часики).
    #38968220
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,

давай не будем,забей.
Документация MSDN ссылку на которую ты дал, помогла косвенно понять причину "часиков". Спасибо.
KillProga была написана лет 7 назад и я ее сейчас практически не использую, но то что она не убивает, говорит о том что нет окна и есть "часики" (для пустого .Net проекта, не консольного).
...
Рейтинг: 0 / 0
6 сообщений из 31, страница 2 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Простое приложение без GUI выдает свою активность (песочные часики).
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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