#NoTrayIcon
#include <Constants.au3>
#include <Misc.au3>
#include <MouseOnEvent.au3>
Opt('TrayMenuMode', 1)
TraySetIcon('shell32.dll', -135)
TraySetClick(16)
TraySetState()
$CopyUseSelection_TrayItem = TrayCreateItem('Копировать по выделению')
TrayItemSetState(-1, $TRAY_CHECKED)
$SwitchMonitoring_TrayItem = TrayCreateItem('Мониторинг выделения включён')
TrayItemSetState(-1, $TRAY_CHECKED)
TrayCreateItem('')
$Exit_TrayItem = TrayCreateItem('Выход')
Global $sCopy_HotKey = '^+c'
Global $sToggleScriptPause_HotKey = '^+p'
Global $sExit_HotKey = '^+e'
Global $iMouse_X_Position = MouseGetPos(0)
Global $iSelected = False
Global $iPaused = True
Global $shWinList = '\.UnicodeClass|SciTEWindow' ; список классов окон, где будет работать
;Global $sFile = @ScriptDir & '\SelectedText.txt'
HotKeySet($sExit_HotKey, '_Quit')
HotKeySet($sToggleScriptPause_HotKey, '_SwitchMonitoring_Proc')
_SwitchMonitoring_Proc()
While 1
Switch TrayGetMsg()
Case $TRAY_EVENT_PRIMARYUP, $SwitchMonitoring_TrayItem
_SwitchMonitoring_Proc()
Case $CopyUseSelection_TrayItem
If TrayItemGetState($CopyUseSelection_TrayItem) = 65 Then
_SetMouseEvent_Proc(1)
HotKeySet($sCopy_HotKey)
Else
_SetMouseEvent_Proc(0)
HotKeySet($sCopy_HotKey, '_CopyUseHotkey_Proc')
EndIf
Case $Exit_TrayItem
_Quit()
EndSwitch
If $iSelected Then
$iSelected = False
$sSelection = _GetSelectedText()
If $sSelection <> '' Then ConsoleWrite($sSelection & @CRLF)
EndIf
WEnd
Func MousePrimaryDown_Event()
$iMouse_X_Position = MouseGetPos(0)
EndFunc ;==>MousePrimaryDown_Event
Func MousePrimaryUp_Event()
If $iMouse_X_Position <> MouseGetPos(0) Then $iSelected = True
EndFunc ;==>MousePrimaryUp_Event
Func _GetSelectedText()
Local $sSelected_Data
;This one is crashing the script :(
;~ Local $hWnd = WinGetHandle('')
;~ Local $sCtrlClass = ControlGetFocus($hWnd);~
;~ If Not StringInStr($sCtrlClass, 'Scintilla') Then
;~ $sSelected_Data = ControlCommand($hWnd, '', $sCtrlClass, 'GetSelected')
;~ If IsString($sSelected_Data) Then Return $sSelected_Data
;~ EndIf
;~ Local $sOld_Clipboard_Data = ClipGet()
If WinActive('[REGEXPCLASS:^(' & $shWinList & ')$]') Then
ClipPut('')
Send('^{INS}')
$sSelected_Data = ClipGet()
;~ ClipPut($sOld_Clipboard_Data)
EndIf
Return $sSelected_Data
EndFunc ;==>_GetSelectedText
Func _CopyUseHotkey_Proc()
$iSelected = True
EndFunc ;==>_CopyUseHotkey_Proc
Func _SwitchMonitoring_Proc()
$iPaused = Not $iPaused
If $iPaused Then
TrayItemSetText($SwitchMonitoring_TrayItem, 'Мониторинг выделения выключен')
TrayItemSetState($SwitchMonitoring_TrayItem, $TRAY_UNCHECKED)
TraySetIcon('shell32.dll', -66)
_SetMouseEvent_Proc(0)
Else
TrayItemSetText($SwitchMonitoring_TrayItem, 'Мониторинг выделения включен')
TrayItemSetState($SwitchMonitoring_TrayItem, $TRAY_CHECKED)
TraySetIcon('shell32.dll', -135)
_SetMouseEvent_Proc(1)
EndIf
EndFunc ;==>_SwitchMonitoring_Proc
Func _SetMouseEvent_Proc($iSet = 1)
If $iSet = 1 And TrayItemGetState($CopyUseSelection_TrayItem) = 68 Then Return 0
Switch $iSet
Case 1
_MouseSetOnEvent($MOUSE_PRIMARYDOWN_EVENT, 'MousePrimaryDown_Event')
_MouseSetOnEvent($MOUSE_PRIMARYUP_EVENT, 'MousePrimaryUp_Event')
Case Else
_MouseSetOnEvent($MOUSE_PRIMARYDOWN_EVENT)
_MouseSetOnEvent($MOUSE_PRIMARYUP_EVENT)
EndSwitch
EndFunc ;==>_SetMouseEvent_Proc
Func _Quit()
_SetMouseEvent_Proc(0)
Exit
EndFunc ;==>_Quit