Пропишите при автозапуске определенный параметр (ключ) и проверяйте его наличие.Мне нужно определить, с автозапуска или нет.
Попробуйте примерно так, только скомпилируйте.Papazol сказал(а):только носом бы ткнуться куда надо.
#NoTrayIcon
#include <StructureConstants.au3>
If WinExists(@ScriptName & '{[/@$@\]}') Then Exit
AutoItWinSetTitle(@ScriptName & '{[/@$@\]}')
If Not @Compiled Then
MsgBox(16, 'Error', 'Run only compiled')
Exit
EndIf
HotKeySet('1', '_AvtoRun'); 1 - AvtoRun
HotKeySet('2', '_DelAvtoRun'); 2 - DelAvtoRun
HotKeySet('3', '_CreateShortcut'); 3 - CreateShortcut
HotKeySet('4', '_Info'); 4 - Info
HotKeySet('5', '_Exit'); 5 - Exit
While 1
Sleep(1000)
ToolTip(StringFormat('%02d:%02d:%02d\nAvtoRun - Key 1\nDelAvtoRun - Key 2\nCreateShortcut - Key 3\nInfo - Key 4\nExit - Key 5', @HOUR, @MIN, @SEC), 0, 0)
WEnd
Func _Exit()
Exit
EndFunc ;==>_Exit
Func _Info()
If $CmdLine[0] Then
If $CmdLine[1] == 'AvtoRun' Then
MsgBox(64, 'Info', 'AvtoRun ')
Return
EndIf
EndIf
Local $s_Shortcut = _Start_Shortcut()
If Not @error Then
If $s_Shortcut Then
MsgBox(64, 'Info', 'Процесс запущен ярлыком' & @LF & 'Путь к нему: ' & $s_Shortcut)
Else
MsgBox(64, 'Info', 'Процесс запущен' & @LF & 'не ярлыком')
EndIf
EndIf
Return
EndFunc ;==>_Info
Func _CreateShortcut()
FileCreateShortcut(@ScriptFullPath, @DesktopDir & '\Test_Lnk.lnk')
EndFunc ;==>_CreateShortcut
Func _DelAvtoRun()
Local $s_Reg = 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run'
RegDelete($s_Reg, @ScriptName)
EndFunc ;==>_DelAvtoRun
Func _AvtoRun()
Local $s_Reg = 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run'
RegWrite($s_Reg, @ScriptName, 'REG_SZ', '"' & @ScriptFullPath & '" AvtoRun')
EndFunc ;==>_AvtoRun
Func _Start_Shortcut()
Local $t_Startup, $b_Flag, $STARTF_TITLESHORTCUT = 0x800, $iMAX_PATH = 260, $t_Title, $s_ShortcutPath
$t_Startup = DllStructCreate($tagSTARTUPINFO)
DllStructSetData($t_Startup, 'Size', DllStructGetSize($t_Startup))
DllCall('kernel32.dll', 'none', 'GetStartupInfoW', 'ptr', DllStructGetPtr($t_Startup))
If @error Then Return SetError(1, 0, -1)
$b_Flag = DllStructGetData($t_Startup, 'Flags')
If BitAND($b_Flag, $STARTF_TITLESHORTCUT) Then
$t_Title = DllStructCreate('wchar ShortcutPath[' & $iMAX_PATH + 1 & ']', DllStructGetData($t_Startup, 'Title'))
$s_ShortcutPath = DllStructGetData($t_Title, 'ShortcutPath')
If $s_ShortcutPath Then
Return SetError(0, 0, $s_ShortcutPath)
Else
Return SetError(1, 0, -1)
EndIf
Else
Return SetError(0, 0, 0)
EndIf
EndFunc ;==>_Start_Shortcut
Papazol сказал(а):Я подумал, что можно как-либо искусственно поставить флажок "авторан", а потом его проверить, но чаго-то не получается.
если твое решение не совпадает с приведенными выше, было бы хорошим тоном выложить его здесьВсё, спасибо, я сам нашёл. Сделал, всё работает.
#include <GUIConstantsEx.au3>
$IniFile = StringTrimRight ( @ScriptFullPath, 3 ) & 'ini' ; путь к ini-файлу
$RegPath = 'HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run' ; раздел реестра, отвечающий за автозагрузку
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
; ЗАПУСК БЕЗ ini-ФАЙЛА ;
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
If Not FileExists ( $IniFile ) Then ; если ini файла нет, будем его создавать
GUICreate ( 'Test', 250, 165 )
GUISetBkColor(0x00E0FFFF)
$AutoRunCheckBox = GUICtrlCreateCheckbox ( 'Автозагрузка программы', 10, 10, 230, 20 )
GUICtrlSetTip ( $AutoRunCheckBox, 'Требуется ли помещать программу в автозагрузку?' )
$PauseCombo = GUICtrlCreateCombo ( '', 10, 100, 230, 20 )
GUICtrlSetData ( -1,"Пауза, с|10|20|30|40|50|60|70|80|90|100|110|120","Пауза, с" )
GUICtrlSetTip ( $PauseCombo, 'Время задержки между стартом программы и началом работы' )
$OKButton = GUICtrlCreateButton ( 'Готово', 10, 130, 230, 20 )
GUISetState ()
While 1
$Msg = GUIGetMsg () ; получаем сообщение от GUI
Select
Case $Msg = $OKButton ; если нажата кнопка ГОТОВО
$AutoRun = GUICtrlRead ( $AutoRunCheckBox ) ; читаем состояния элементов
$Pause = GUICtrlRead ( $PauseCombo )
Select
Case $AutoRun = $GUI_CHECKED ; автозагрузка выбрана
RegWrite ( $RegPath, "Test", "REG_SZ", '"' & @ScriptFullPath & '" -delay' ) ; добавляем скрипт в автозагрузку
If $Pause = 'Пауза, с' Then ; тогда и пауза должна быть выбрана
MsgBox ( 0, 'Test', 'Укажите время паузы.' ) ; ... сообщаем об этом и...
ContinueLoop ; ... ждём, пока выберут
Else ; если пауза выбрана,..
IniWrite ( $IniFile, "MAIN", "Pause", $Pause ) ; ... заносим её в ini
EndIf
Case $AutoRun = $GUI_UNCHECKED ; автозагрузка не выбрана
RegDelete ( $RegPath, "Test" ) ; удаляем запись в реестре
If $Pause = 'Пауза, с' Then ; если пауза не выбрана,..
IniWrite ( $IniFile, "MAIN", "Pause", '0' ) ; ... заносим в ini просто ноль
Else ; если пауза выбрана,..
IniWrite ( $IniFile, "MAIN", "Pause", $Pause ) ; ... заносим в ini выбранное значение
EndIf
EndSelect
Sleep ( 100 )
Run ( @ScriptFullPath ) ; перезапускаем скрипт
Exit ; выходим
Case $Msg = $GUI_EVENT_CLOSE
Exit
EndSelect
WEnd
EndIf
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
; ЗАПУСК ПРИ НАЛИЧИИ ini-ФАЙЛА ;
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
$Pause = IniRead ( $IniFile, "MAIN", "Pause", 60 ) ; считываем данные из ini-файла
If $CmdLine[0] <> 0 And $CmdLine[1] = '-delay' Then ; если командная строка есть и в ней параметр
TrayTip ( "Test", "Ожидание...", 120, 2 ) ; выводим сообщение
Sleep ( 1000 * Number ( $Pause ) ) ; пауза после загрузки Windows
EndIf
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
; РАБОТА ПРОГРАММЫ ;
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
TrayTip ( "Test", 'Программа работает, работает, работает...', 30, 1 ) ; сообщаем радостную весть
Sleep ( 7000 )
TrayTip ( "Test", 'Закончила работать.', 2, 1 )
Sleep ( 2000 )
Exit