Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Запуск $form сверху окон, но не поверх всех. (http://forum.oszone.net/showthread.php?t=347395)

9119 20-12-2020 11:12 2943526

Запуск $form сверху окон, но не поверх всех.
 
Код:

$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 2943531

9119, убрать строку с «$main_form.TopMost = $true», разумеется.

Fors1k 20-12-2020 13:08 2943540

Код:

$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 2943550

Цитата:

Цитата Iska
убрать строку »

скрипт упакован в sfx (.exe). при распаковке sfx выполняется батник:
Код:

cd "%~dp0"
powershell.exe -ExecutionPolicy Bypass -file "%~dp0\bin\Voice_config.ps1"

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

Цитата:

Цитата Fors1k
$main_form.Add_Shown({$main_form.Activate(); $TextBox.focus()}) »

- увы также остается за окном проводника.


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

Iska 20-12-2020 17:03 2943575

Цитата:

Цитата 9119
скрипт упакован в sfx (.exe). при распаковке sfx выполняется батник: »

Начинают выясняться интересные подробности. Игла в утке, утка в зайце, заяц… Вы понимаете, что об этом нужно было писать сразу?

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

Fors1k 20-12-2020 18:21 2943582

Exe запускает батник, батник запускает ps1 - зачем таким заниматься? Запускайте сразу ps1 файл.

Iska 20-12-2020 18:43 2943586

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

9119 20-12-2020 19:11 2943587

Цитата:

Цитата Iska
ещё какой-нибудь заяц hidecon.exe посредником »

к чему это?

Цитата:

Цитата Iska
об этом нужно было писать сразу »

да, забыл указать. виноват.
Цитата:

Цитата Fors1k
зачем таким заниматься? »

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



Архив 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 2943595

Цитата:

Цитата 9119
Архив sfx создан winrarom. распаковывается во временную папку и запускает батник, который приведен выше/ниже. »

Выложите Ваш sfx.

9119 20-12-2020 23:44 2943604

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
Т.е по сути - запрос по теме - решен.
Цитата:

Цитата Iska
убрать строку с «$main_form.TopMost = $true» »


9119 21-12-2020 00:06 2943606

del

Iska 21-12-2020 00:53 2943610

9119, Вам выше коллега Fors1k написал, что пакетный файл вовсе не нужен (особенно с таким именем, но это уже другой вопрос), исполняйте непосредственно:
Код:

powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -file ".\bin\Voice_config.ps1"

9119 21-12-2020 01:43 2943614

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

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


Но чтобы избавится от пакетного файла полностью мне нужно еще как-то выполнить
Код:

powershell -Command Set-ExecutionPolicy RemoteSigned
причем с правами админа (если выполнять из-под cmd)...


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

Iska 21-12-2020 05:37 2943621

Цитата:

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

Цитата:

SFX-команды: Setup
--------------------------------------------------------------------------------
Код:

Setup=<программа>
После удачного извлечения файлов SFX-модуль попытается запустить указанную <программу>. Перед запуском программы текущей станет папка, в которую были извлечены файлы. Если в имени программы есть пробелы, то оно должно быть заключено в кавычки.

Цитата:

Цитата 9119
мне нужно еще как-то выполнить »

Просто добавьте ещё одну строку с «Setup=…» в комментарий архива:
Код:

Setup=powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -file ".\bin\Voice_config.ps1"
Setup=powershell.exe -Command Set-ExecutionPolicy RemoteSigned

Цитата:

Цитата 9119
причем с правами админа (если выполнять из-под cmd)... »

Исполняйте sfx с административными привилегиями. Порождённые им процессы унаследуют данный токен.

9119 21-12-2020 09:27 2943629

del


Время: 01:03.

Время: 01:03.
© OSzone.net 2001-