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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Запуск скомпилированного скрипта (http://forum.oszone.net/showthread.php?t=191878)

ret52 21-11-2010 21:22 1548124

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

Creat0R 21-11-2010 23:20 1548221

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

ret52 22-11-2010 09:05 1548360

Вот сам скрипт:

#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 1548623

Цитата:

Цитата ret52
Вот сам скрипт »

Код нужно заключать в соответствующие теги.

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

Цитата:

Цитата ret52
Если запускать сам скрипт "run script", то тоже всё ок »

Вот это путает, скрипт не работает после компиляций, или это не важно?

ret52 22-11-2010 21:04 1548932

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

Creat0R 22-11-2010 22:51 1549010

Цитата:

Цитата ret52
программа запускается после выбора в контекстном меню пункта "run script". »

Не понимаю, откуда в меню этот пункт если скрипт скомпилирован?

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

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

ret52 23-11-2010 08:56 1549247

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

Creat0R 23-11-2010 14:31 1549478

Цитата:

Цитата ret52
почему же он не хочет работать без msgbox? »

Видимо оно как то связано с попыткой нажатия клавишы мышки сразу после запуска.

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

Код:

#NoTrayIcon

#include <Misc.au3>
#include <SysTray_UDF.au3>

While _IsPressed("01")
    Sleep(10)
WEnd

$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

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


ret52 25-11-2010 21:55 1551646

Спасибо огромное, действительно помогло.


Время: 06:49.

Время: 06:49.
© OSzone.net 2001-