Что нового

Редактирование буфер обмена

Scarabay

Новичок
Сообщения
10
Репутация
0
Версия AutoIt: 3.3.6.1

Описание:
http://www.forum.com/editpost.php?do=editpost&p=887834
http://www.forum.com/editpost.php?do=editpost&p=937917
http://www.forum.org/posting.php?mode=edit&f=2&p=13644
http://www.forum.org/posting.php?mode=edit&f=2&p=79214
Можно ли как-то сделать, что бы при копировании таких ссылок в буфер, значения заменялись на последние цифры? (887834, 937917, 13644, 79214). Т.е. скопировал ссылку, нажал Ctrl+V, вставились последние цифры.

Примечания: Ссылки буду копировать по-одной. forum.org, forum.com - постоянно разные..
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,665
Репутация
2,463
Re: Редактирование буфер обменна

Народ, вы хоть бы описание раздела читали, тут стол заказов, а не общий раздел помощи по AutoIt.

Цитирую то что ответил только что на руборде:

Помещаться в буфер они будут скриптом, или нужно мониторить б.обмена?
Если скриптом тогда так примерно:

Код:
$sURL = "http://www.forum.org/posting.php?mode=edit&f=2&p=79214"
ClipPut(StringRegExpReplace($sURL, '.*?=', ''))
 

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
Re: Редактирование буфер обменна

CreatoR
Я тоже попробовал составить регулярное выражение...
Прокоментируй, пожалуйста...

Код:
$TEXT="http://www.forum.com/editpost.php?do=editpost&p=887834"
MsgBox(0,"",StringRegExpReplace($TEXT,"(.*)(=)(.*)","\3"))
 
Автор
S

Scarabay

Новичок
Сообщения
10
Репутация
0
Re: Редактирование буфер обменна

Нужно что бы мониторило буфер обмена.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,665
Репутация
2,463
snoitaleR [?]
Прокоментируй, пожалуйста...
По сути тоже самое, но более “жадное” выражение (хотя у меня тоже не “щедрое”) :smile:. Кстати, первые две группы не нужны в виде групп, скобки можно опустить (при заменен естественно использовать \1).

Scarabay [?]
Нужно что бы мониторило буфер обмена
Простой пример:

Код:
$sOldClip = ClipGet()

While 1
	$sCurrentClip = ClipGet()
	
	If $sOldClip <> $sCurrentClip Then
		$sOldClip = StringRegExpReplace($sCurrentClip, '^http://.*=(\d+)$', '\1')
		ClipPut($sOldClip)
	EndIf
	
	Sleep(100)
WEnd
 

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
CreatoR
У меня вопрос по теме: существует событие $WM_DRAWCLIPBOARD=0x0308...
Можно его перехватить не только в родном окне, а и во всей системе?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,665
Репутация
2,463
snoitaleR [?]
Можно его перехватить не только в родном окне, а и во всей системе?
Изменённый пример из справки:

Код:
#include <GUIConstantsEx.au3>
#include <ClipBoard.au3>
#include <WindowsConstants.au3>
#include <SendMessage.au3>

; Create GUI
$hGUI = GUICreate("Clipboard", 600, 400)

; Initialize clipboard viewer
$hNext = _ClipBoard_SetViewer($hGUI)

GUIRegisterMsg($WM_CHANGECBCHAIN, "WM_CHANGECBCHAIN")
GUIRegisterMsg($WM_DRAWCLIPBOARD, "WM_DRAWCLIPBOARD")

; Loop until user exits
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

; Shut down clipboard viewer
_ClipBoard_ChangeChain($hGUI, $hNext)

Func WM_CHANGECBCHAIN($hWnd, $iMsg, $iwParam, $ilParam)
	; If the next window is closing, repair the chain
	If $iwParam = $hNext Then
		$hNext = $ilParam
		; Otherwise pass the message to the next viewer
	ElseIf $hNext <> 0 Then
		_SendMessage($hNext, $WM_CHANGECBCHAIN, $iwParam, $ilParam, 0, "hwnd", "hwnd")
	EndIf
EndFunc

Func WM_DRAWCLIPBOARD($hWnd, $iMsg, $iwParam, $ilParam)
	Local $sClipboard_Data = _ClipBoard_GetData()
	Local $aUrl_Number = StringRegExp($sClipboard_Data, '^http://.*=(\d+)$', 3)
	
	If Not @error Then
		_ClipBoard_SetData($aUrl_Number[0])
		ConsoleWrite($aUrl_Number[0] & @LF)
	EndIf
	
	; Pass the message to the next viewer
	If $hNext <> 0 Then
		_SendMessage($hNext, $WM_DRAWCLIPBOARD, $iwParam, $ilParam)
	EndIf
EndFunc
 

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
CreatoR
Я почему засомневался? События от мышки с помощью функции GUIRegisterMsg() отлавливаются только над окном скрипта...
 
Верх