Global $shWinList = 'Notepad.*|OpusApp|OperaWindowClass|TfrmTabber\.UnicodeClass'
Global $shWinList = 'Notepad.*|OpusApp|OperaWindowClass|TfrmTabber\.UnicodeClass|SciTEWindow'
#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
#NoTrayIcon
#include <Misc.au3>
#include <MouseOnEvent.au3>
Global $hUser32_Dll = DllOpen('User32.dll')
Global $iSelected = False
Global $iPaused = True
HotKeySet('^+e', '_Quit')
HotKeySet('^+w', '_TogglePause')
_TogglePause()
While 1
Sleep(10)
If $iSelected Then
$iSelected = False
If _IsPressed('12', $hUser32_Dll) Then
While _IsPressed('12', $hUser32_Dll)
Sleep(10)
WEnd
$sSelection = _GetSelectedText()
If $sSelection <> '' Then ConsoleWrite($sSelection & @CRLF)
EndIf
EndIf
WEnd
Func MousePrimaryUp_Event()
$iSelected = True
EndFunc ;==>MousePrimaryUp_Event
Func _GetSelectedText()
Local $sOld_Clipboard_Data = ClipGet()
ClipPut('')
Send('^{Insert}')
Sleep(100)
Local $sSelected_Data = ClipGet()
;~ ClipPut($sOld_Clipboard_Data)
Return $sSelected_Data
EndFunc ;==>_GetSelectedText
Func _TogglePause()
$iPaused = Not $iPaused
If $iPaused Then
_MouseSetOnEvent($MOUSE_PRIMARYUP_EVENT)
Else
_MouseSetOnEvent($MOUSE_PRIMARYUP_EVENT, 'MousePrimaryUp_Event')
EndIf
EndFunc ;==>_TogglePause
Func _Quit()
DllClose($hUser32_Dll)
Exit
EndFunc ;==>_Quit
#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
Win7 x86. Работает (копирует в буфер при выделении мышью).Кто-нибудь еще, пожалуйста, проверьте и отпишитесь.
Попробуйте этот вариант. Выделять можно и мышью и клавиатурой.чтобы в SciTE выделеный код сразу заносился в буфер
#include <Misc.au3>
HotKeySet("{F9}", "Pause")
OnAutoItExitRegister("End")
Global $Pause = False, $dll = DllOpen("user32.dll"), $PrevSel = "", $NowSel = ""
Do
If Not $Pause And WinActive("[CLASS:SciTEWindow]") And _
Not (_IsPressed("01", $dll) Or _IsPressed("10", $dll)) Then
$NowSel = ControlCommand("[CLASS:SciTEWindow]", "", "", "GetSelected")
If $NowSel <> $PrevSel Then
Send("^{ins}")
$PrevSel = $NowSel
EndIf
EndIf
Sleep(500)
Until 0
Func Pause()
$Pause = Not $Pause
EndFunc
Func End()
DllClose($dll)
EndFunc