saavaage
22-09-2010, 06:44
Проблема:
Сделал скрипт по импорту локальной политики безопасности (файрвол). Код - см. приаттаченный файл.
Вопросы:
1. Все отрабатывает корректно, но есть одно но - процесс мелькания окон виден на экране монитора. Возможно ли его скрыть? Если да, то подскажите, пожалуйста, как.
2. Если нельзя скрыть, то можно ли процесс мелькания спрятать за каким-нибудь окном (например окном утилиты, которая и запускает этот скрипт)
Заранее спасибо за любую помощь.
FlatX007
22-09-2010, 09:22
Может так ... http://rghost.ru/2696747
saavaage
22-09-2010, 13:57
FlatX007, к сожалению, после появления картинки и запуска secpol.msc, скрипт дальше не отрабатывает, импорта не происходит.
Судя по всему, это в принципе не реализуемо, т.к. рабочее окно должно быть активным, а мы пытаемся увести его на второй план.
FlatX007
22-09-2010, 20:31
не реализуемо, т.к. рабочее окно должно быть активным »
Не обязательно, нужно ещё раз перевести на это окно фокус (окно останется на заднем плане но будет активное), проверь ...
saavaage
24-09-2010, 16:07
FlatX007, вот работающий скрипт (так и не понял, в чем его принципиальное отличие от Вашего, кроме использование Disable вместо Hide):
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <WinAPIEx.au3>
#include <GDIPlus.au3>
Global $DebugMode = 0
_GDIPlus_StartUp()
::::::::::::::::::::::;
$Data - вставить здесь инфо из архива
:::::::::::::::::::::::
$sData=Binary($sData)
$file = FileOpen(@MyDocumentsDir&'\my_localpolicy_Ip.ipsec',18)
FileWrite($file, $sData)
FileClose($file)
$tRECT = _WinAPI_GetWorkArea()
$Width = DllStructGetData($tRECT, 'Right') - DllStructGetData($tRECT, 'Left')
$Height = DllStructGetData($tRECT, 'Bottom') - DllStructGetData($tRECT, 'Top')
$X = DllStructGetData($tRECT, 'Left')
$Y = DllStructGetData($tRECT, 'Top')
$hForm = GUICreate('MyGUI', $Width, $Height, $X, $Y, $WS_POPUP, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
$Label1 = GUICtrlCreateLabel("Локальная политика безопасности...", 80, 48, 729, 80)
GUICtrlSetBkColor(-1, -2)
GUICtrlSetFont(-1, 30, 400, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0xFFFF00)
GUISetBkColor(0, $hForm)
WinSetTrans($hForm, '', 255)
GUISetState()
$hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\gpg.png")
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hForm)
_GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 100, 130)
ShellExecute("secpol.msc")
WinWaitActive("Локальные параметры безопасности")
WinSetState("Локальная политика безопасности", "", @SW_DISABLE)
send("{down 1}")
sleep(50)
send('{LSHIFT}+{F10}')
sleep(50)
Send("{down 3}")
sleep(50)
send("{right}")
sleep(50)
send("{down 3}")
sleep(50)
send("{ENTER}")
sleep(50)
send('my_localpolicy_Ip.ipsec')
sleep(50)
send("{ENTER}")
sleep(50)
send("{tab}")
sleep(50)
send("{down 3}")
sleep(50)
send('{LSHIFT}+{F10}')
sleep(50)
send("{down 1}")
sleep(1000)
send("{ENTER}")
sleep(50)
WinClose("Локальные параметры безопасности")
sleep(50)
FileDelete(@MyDocumentsDir&'\my_localpolicy_Ip.ipsec')
sleep(1000)
WinClose("Локальные параметры безопасности")
;~ WinClose("Локальная политика безопасности") ; Win 7
FileDelete(@MyDocumentsDir&'\LocalSecurityIP.ipsec')
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_ShutDown()
Работает, естесственно, с Вашим gpg.png и вставкой в выделенное место информации из моего архива.
Работает , но с оговорками: скрывает за заставкой только первое окно, все последующие (например, контекстные меню) возникающие окна видны. Я так понимаю, что необходимо отлавливать их ID и скрывать каждое? Если так, то, имхо, игра не стоит свечь...
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.