PDA

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


ret52
21-11-2010, 21:22
Проблема в том, что скомпилированный скрипт запускается только через ярлык, или пункт "открыть" в контекстном меню. Если запускать сам скрипт "run script", то тоже всё ок. Суть проблемы: не могу запустить программу двойным нажатием ЛКМ. Сталкивался ли кто-нибудь?

Creat0R
21-11-2010, 23:20
Во-первых хотелось бы посмотреть на содержимое этого скрипта, а во-вторых, хотелось бы узнать ответ на возможно глупый вопрос: В других ситуациях двойное нажатие ЛКМ работает нормально?

ret52
22-11-2010, 09:05
Вот сам скрипт:

#NoTrayIcon
#include <SysTray_UDF.au3>



$Pid = ProcessExists("USBGuard.exe")

If Not $Pid Then
MsgBox(16, "Error", "This process not exists")
Exit
EndIf

$Index = _SysTrayIconIndex("USBGuard.exe")

If @error Then
MsgBox(16, "Error", "This process not have tray icon")
Exit
EndIf

_SysTrayIconClick($Index, "Left")

If @error Then
MsgBox(16, "Error", "There was an error to click on the icon")
Exit
EndIf
Exit
Func _SysTrayIconClick($iIndex, $sButton="Main")
Local $TrayIcon_Pos = _SysTrayIconPos($iIndex)
If Not IsArray($TrayIcon_Pos) Then Return SetError(1, 0, 0)

Local $Old_Mouse_Pos = MouseGetPos()
MouseClick($sButton, $TrayIcon_Pos[0], $TrayIcon_Pos[1], 1, 0)
MouseMove($Old_Mouse_Pos[0], $Old_Mouse_Pos[1], 0)
EndFunc



В других ситуациях ЛКМ нормально работает (по крайней мере в простейшем "Hello world")

Creat0R
22-11-2010, 14:49
Вот сам скрипт »
Код нужно заключать в соответствующие теги.

И что именно не работает при двойном нажатий, сам скрипт запускается? проверить можно добавив в начало скрипта MsgBox(0, '', '').

Если запускать сам скрипт "run script", то тоже всё ок »
Вот это путает, скрипт не работает после компиляций, или это не важно?

ret52
22-11-2010, 21:04
Я наверное запутал. Sorry. Попробую ещё раз.
Не запускается именно скомпилированный скрипт, готовый exe файл. И то, не запускается только после двойного нажатия кнопкой мыши. Если сделать ярлык на программу, и запускать через него, то всё ок.
Так же, программа запускается после выбора в контекстном меню пункта "run script".

Creat0R
22-11-2010, 22:51
программа запускается после выбора в контекстном меню пункта "run script". »
Не понимаю, откуда в меню этот пункт если скрипт скомпилирован?

Можно exe'шник выложить, попробую у себя.

P.S
Ответа на вопрос «что именно не работает при двойном нажатий, сам скрипт запускается?» я так и е получил, а это важно (см. выше как проверить).

ret52
23-11-2010, 08:56
Пункт "run script" есть в меню не скомпилированного скрипта, и он работает отлично.
...
Хм... Сделал как Вы сказали: появляется пустое сообщение, затем выполняется основная часть кода. В принципе всё норм)
А почему же он не хочет работать без msgbox? Такое ощущение что припервом двойном нажатии он запустился и продолжает работать... Поэтому не реагирует на дальнейшие действия....

Creat0R
23-11-2010, 14:31
почему же он не хочет работать без msgbox? »
Видимо оно как то связано с попыткой нажатия клавишы мышки сразу после запуска.

Обойти это можно примерно так:

#NoTrayIcon (http://www.autoitscript.com/autoit3/docs/keywords.htm##notrayicon)

#include (http://www.autoitscript.com/autoit3/docs/keywords.htm##include) <Misc.au3>
#include (http://www.autoitscript.com/autoit3/docs/keywords.htm##include) <SysTray_UDF.au3>

While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) _IsPressed (http://dundats.mvps.org/help/html/libfunctions/_ispressed.htm)("01")
Sleep (http://www.autoitscript.com/autoit3/docs/functions/Sleep.htm)(10)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)

$Pid = ProcessExists (http://www.autoitscript.com/autoit3/docs/functions/ProcessExists.htm)("USBGuard.exe")

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) $Pid Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(16, "Error", "This process not exists")
Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

$Index = _SysTrayIconIndex("USBGuard.exe")

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(16, "Error", "This process not have tray icon")
Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

_SysTrayIconClick($Index, "Left")

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(16, "Error", "There was an error to click on the icon")
Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _SysTrayIconClick($iIndex, $sButton = "Main")
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $TrayIcon_Pos = _SysTrayIconPos($iIndex)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) IsArray (http://www.autoitscript.com/autoit3/docs/functions/IsArray.htm)($TrayIcon_Pos) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(1, 0, 0)

Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $Old_Mouse_Pos = MouseGetPos (http://www.autoitscript.com/autoit3/docs/functions/MouseGetPos.htm)()
MouseClick (http://www.autoitscript.com/autoit3/docs/functions/MouseClick.htm)($sButton, $TrayIcon_Pos[0], $TrayIcon_Pos[1], 1, 0)
MouseMove (http://www.autoitscript.com/autoit3/docs/functions/MouseMove.htm)($Old_Mouse_Pos[0], $Old_Mouse_Pos[1], 0)
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)

ret52
25-11-2010, 21:55
Спасибо огромное, действительно помогло.




© OSzone.net 2001-2012