Войти

Показать полную графическую версию : [решено] Запуск $form сверху окон, но не поверх всех.


9119
20-12-2020, 11:12
$main_form = New-Object System.Windows.Forms.Form
$main_form.TopMost = $true
$Icon = New-Object system.drawing.icon ("$p\icon.ico")
$main_form.Icon = $Icon
$main_form.Text ='Text-To-Speech by Google'
$main_form.Width = 700
$main_form.Height = 700
$main_form.AutoSize = $true
$main_form.ShowDialog()

При установке $main_form.TopMost = $true - форма запускается и держится поверх всех окон.

Как можно добится того, чтобы $form запускалась поверх всех текущих открытых окон, но при запуске другого (более нового) окна, новое окно перекрывало бы $form?
т.е. так как работает запуск окон/приложений в Windows.

Iska
20-12-2020, 11:44
9119, убрать строку с «$main_form.TopMost = $true», разумеется.

Fors1k
20-12-2020, 13:08
$main_form = New-Object System.Windows.Forms.Form
$Icon = New-Object system.drawing.icon ("$p\icon.ico")
$main_form.Icon = $Icon
$main_form.Text ='Text-To-Speech by Google'
$main_form.Width = 700
$main_form.Height = 700
$main_form.AutoSize = $true

$TextBox = New-Object System.Windows.Forms.TextBox
$TextBox.Width = 628
$TextBox.Height = 460
$TextBox.AutoSize = $true
$TextBox.Location = New-Object System.Drawing.Point(25,180)
$TextBox.Multiline = $True
$main_form.Controls.Add($TextBox)

$main_form.Add_Shown({$main_form.Activate(); $TextBox.focus()})
$main_form.ShowDialog()

9119
20-12-2020, 14:10
убрать строку »
скрипт упакован в sfx (.exe). при распаковке sfx выполняется батник:
cd "%~dp0"
powershell.exe -ExecutionPolicy Bypass -file "%~dp0\bin\Voice_config.ps1"

При таком запуске, без TopMost = $true, форма появляется за тем окном проводника из которого я запускаю sfx. А надо, чтобы поверх него появлялся.

$main_form.Add_Shown({$main_form.Activate(); $TextBox.focus()}) »
- увы также остается за окном проводника.


С TopMost = $true» работает как положено, но мне не нужно жестко все время поверх всех окон. Нужно поверх всех окон на момент запуска..

Iska
20-12-2020, 17:03
скрипт упакован в sfx (.exe). при распаковке sfx выполняется батник: »
Начинают выясняться интересные подробности. Игла в утке, утка в зайце, заяц… Вы понимаете, что об этом нужно было писать сразу?

Что за sfx, чем и как создан?

Fors1k
20-12-2020, 18:21
Exe запускает батник, батник запускает ps1 - зачем таким заниматься? Запускайте сразу ps1 файл.

Iska
20-12-2020, 18:43
Fors1k, там, небось, ещё какой-нибудь заяц hidecon.exe посредником, «чтобы чёрное окно не маячило».

9119
20-12-2020, 19:11
ещё какой-нибудь заяц hidecon.exe посредником »
к чему это?

об этом нужно было писать сразу »
да, забыл указать. виноват.
зачем таким заниматься? »
Банально, от нехватки мозгов в данном направлении. это ж вроде очевидно))
Но это не было вопросом в данной теме, верно? Менять не будем.



Архив sfx создан winrarom. распаковывается во временную папку и запускает батник, который приведен выше/ниже.
ВСЕ! - Никаких уток/зайцев и прочей живности.

Вопрос по теме актуален.....
Как можно добится того, чтобы $form запускалась поверх всех текущих открытых окон, но при запуске другого (более нового) окна, новое окно перекрывало бы $form?
При условии что Voice_config.ps1 запускается батником:
cd "%~dp0"
powershell.exe -ExecutionPolicy Bypass -file "%~dp0\bin\Voice_config.ps1"

Iska
20-12-2020, 21:46
Архив sfx создан winrarom. распаковывается во временную папку и запускает батник, который приведен выше/ниже. »
Выложите Ваш sfx.

9119
20-12-2020, 23:44
Iska, таки утки/зайцы), виноват).
батник после распаковки запускался через прогу hidec.exe.
hidec.exe start.bat
Такой запуск скрывал консоль PS (что меня устраивало), но при этом отоброжало форму за текущим окном в Windows (причина создания темы).

Теперь при распаковке запускает сразу start.bat, но т.к теперь отображает консольное окно powershell под формой, строку запуска в батнике переписал так:
start powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -file "%~dp0\bin\Voice_config.ps1"
также в батнике команда на разрешение запуска неподписанных скриптов
powershell -Command Set-ExecutionPolicy RemoteSignedТ.е по сути - запрос по теме - решен.
убрать строку с «$main_form.TopMost = $true» »

9119
21-12-2020, 00:06
del

Iska
21-12-2020, 00:53
9119, Вам выше коллега Fors1k написал (http://forum.oszone.net/post-2943582.html#post2943582), что пакетный файл вовсе не нужен (особенно с таким именем, но это уже другой вопрос), исполняйте непосредственно:
powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -file ".\bin\Voice_config.ps1"

9119
21-12-2020, 01:43
Iska, да, действительно... главная заморочка (для меня) была в получении текущего расположения.
а %~dp0 винрар не понимает. Поэтому и юзал батник.

Но я не учел что рар запускает powershell из той же папки куда распаковывает файлы и в данном случае путь ".\bin\Voice_config.ps1" работает.
Благодарю!


Но чтобы избавится от пакетного файла полностью мне нужно еще как-то выполнить
powershell -Command Set-ExecutionPolicy RemoteSigned
причем с правами админа (если выполнять из-под cmd)...


Подскажите как это можно сделать...

Iska
21-12-2020, 05:37
Но я не учел что рар запускает powershell из той же папки куда распаковывает файлы и в данном случае путь ".\bin\Voice_config.ps1" работает. »
SFX-команды: Setup
--------------------------------------------------------------------------------
Setup=<программа>
После удачного извлечения файлов SFX-модуль попытается запустить указанную <программу>. Перед запуском программы текущей станет папка, в которую были извлечены файлы. Если в имени программы есть пробелы, то оно должно быть заключено в кавычки.


мне нужно еще как-то выполнить »
Просто добавьте ещё одну строку с «Setup=…» в комментарий архива:
Setup=powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -file ".\bin\Voice_config.ps1"
Setup=powershell.exe -Command Set-ExecutionPolicy RemoteSigned


причем с правами админа (если выполнять из-под cmd)... »
Исполняйте sfx с административными привилегиями. Порождённые им процессы унаследуют данный токен.

9119
21-12-2020, 09:27
del




© OSzone.net 2001-2012