1 (изменено: OmTatSat, 2015-12-01 00:39:49)

Тема: AHK: Копировать или вставить по удержанию ЛКМ.

С чего началось

+ открыть спойлер

Как я понимаю проблема в том, что при отпускании lbutton сбивается выделение, нужно на время заблокировать отжатие lbutton, отпустить после копирования. Подскажите пожалуйста как это сделать.

#NoTrayIcon ; comment with ; like ;#NoTrayIcon to use with trayicon, or leave it, to use without trayicon
~lButton::
    starttime1 := A_TickCount
	MouseGetPos, X, Y
	
	Wait, lButton
	MouseGetPos, X2, Y2
    elapsedtime := A_TickCount - starttime1
    IF ((elapsedtime > 320) & (X = X2) & (y = y2) & (A_Cursor = "IBeam"))
    {
        ;Долгое нажатие
        ;soundbeep, 100, 500
        ;Send, ^{SC02F}    
		 PixelSearch,,, X-108, Y-108, X+108, Y+108, 0x3399ff,, Fast RGB ; определяем синий цвет
if (!ErrorLevel = 1) ; если нашёл
{
	Send, ^{SC02e}
	msgbox, copy
		}
	if (!ErrorLevel = 0) ; если нашёл
{
	Send, ^{SC02F}
	msgbox, past
	}
}
return

Чем закончилось, благодаря Alectric http://forum.script-coding.com/viewtopi … 419#p99419

Как работает: выделяешь текст, не отпуская ЛКМ кнопку ждешь сообщения о том, что все скопировано, затем зажимаешь ЛКМ на пустом месте и ждешь сообщения, что вставлено; с файлами аналогично.

#SingleInstance,Force
SetKeyDelay,0
SetWinDelay,20

loop
{
  sleep,10
  if (!do and a_timeidle>700 and GetKeyState("Lbutton","P"))
  {
    do=1
    if Text:=Copy(c="")
    {
      settimer,removetooltip,-2000
      if !(Text~="^\w:\\")
      {
        tooltip,Текст скопирован.`n`n%Text%
        clipboard:=Text
      }
      else
        tooltip,Файл скопирован.`n%Text%

    }
    else
    {
      tooltip,Вставка.
      settimer,removetooltip,-1000
      sendinput,{lbutton up}
      sendinput,^{vk56}
    }
  }
  else if (do and !GetKeyState("Lbutton","P"))
    do=
;tooltip,% Text "`n" a_timeidle
}
return

removetooltip:
tooltip
return

Copy(c="")
{
  tmp:=clipboardall
  if c
  {
    Clipboard=
    loop,30
    {
      sleep,10
    } until !Clipboard
    sendinput,{lbutton up}
    sendinput,^{vk43}
  }
  loop,30
  {
    sleep,10
  } until Clipboard
  txt:=Clipboard
  if !(Txt~="^\w:\\")
    Clipboard:=tmp
  return % txt
}

2

Re: AHK: Копировать или вставить по удержанию ЛКМ.

OmTatSat, ознакомьтесь с этой темой, отредактируйте свой пост.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Копировать или вставить по удержанию ЛКМ.

OmTatSat, Вы хотите задать вопрос или предложить готовый скрипт? О чём речь?

4

Re: AHK: Копировать или вставить по удержанию ЛКМ.

ypppu "Подскажите пожалуйста как это сделать." Скрипт пока не полностью рабочий, по этому прошу о помощи.

5

Re: AHK: Копировать или вставить по удержанию ЛКМ.

OmTatSat пишет:

Подскажите пожалуйста как это сделать.

Что - это?

6

Re: AHK: Копировать или вставить по удержанию ЛКМ.

ypppu "нужно на время заблокировать отжатие lbutton, отпустить после копирования"

7

Re: AHK: Копировать или вставить по удержанию ЛКМ.

http://i.smiles2k.net/aiwan_smiles/shok.gif

8

Re: AHK: Копировать или вставить по удержанию ЛКМ.

+ Что то типо этого?
#if A_Cursor = "IBeam"
	lbutton::
		MouseGetPos, x1, y1
		loop
		MouseGetPos, x2, y2
		Until value := (A_TimeSinceThisHotkey>400)  ? 2
					:  (!GetKeyState(A_ThisHotkey,"p") 
					or (abs(x2-x1) and abs(y2-y1))) ? 1 : 0

		if value = 1
		{
			Click down
			keywait lbutton
			Click up
		}
			
		if value = 2
			tooltip действие для зажатого клика который не двигался в течении 400мс

Если value равно 1, то это значит что вторая точка положения курсора не равна первой, либо был клик меньше нужного диапазона времени. При этом условии клик мыши стандартный(можно выделять текст или кликать по нужным местам поля)
А если же value равно 2, то это значит что клик был в течении 400мс без сдвигов.
Но к сожжению, у скрипта задержка пару тиков и текст выделяется не полностью.


А почему нельзя например сделать на среднюю кнопку мыши?

9

Re: AHK: Копировать или вставить по удержанию ЛКМ.

C цветом перехотелось делать, так как оттенки в разных программах могут быть разные, ну и проблему с отпусканием lbutton на месте - пропадание выделения, так и не победил.

Решил использовать типа жесты

#NoTrayIcon ; comment with ; like ;#NoTrayIcon to use with trayicon, or leave it, to use without trayicon
~lButton::
    starttime1 := A_TickCount
	MouseGetPos, X, Y
	KeyWait, lButton
	MouseGetPos, X2, Y2
    elapsedtime := A_TickCount - starttime1
	b := y - y2
	;ToolTip, %b%
	if ((b >0) & (elapsedtime < 520)) ; зажатие lbutton и смещение вверх
		Send, ^{SC02e} ; ctrl c
	if ((b <0) & (elapsedtime < 520)) ; зажатие lbutton и смещение вниз
		Send, ^{SC02D} ; ctrl x
    IF ((elapsedtime > 320) & (X = X2) & (y = y2)) ; зажатие lbutton на месте
        Send, ^{SC02F}    ; ; ctrl v
		 return

10 (изменено: OmTatSat, 2015-11-30 20:23:26)

Re: AHK: Копировать или вставить по удержанию ЛКМ.

yalanne спасибо за желание помочь. Не хотелось бы полностью занимать lbutton то есть без ~ вдруг в каких-то приложениях это боком вылезет. Пробовал решить проблему через hotkey но так и не получилось, да и цвет как оказалось не такой уж и надёжный параметр, точнее вообще не надёжный))
По этому пришёл к тому, что написал выше.
Средняя кнопка используется, по её длинному нажатию в браузере под курсором мыши появляется список открытых вкладок.

11 (изменено: Alectric, 2015-11-30 22:47:19)

Re: AHK: Копировать или вставить по удержанию ЛКМ.

Вот такой вариант:

http://forum.script-coding.com/viewtopi … 419#p99419

Выдели текст и не отпускай кнопку до появления сообщения.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

12

Re: AHK: Копировать или вставить по удержанию ЛКМ.

Alectric выделяю текст, зажимаю пишет всегда вставка. Случайно понял свою ошибку - после выделения не нужно отпускать кнопку, супер реализация!! Выделяю ярлыки на раб столе, пишет скопировано. Зажимаю на пустом месте раб стола, пишет вставка, но ничего не появляется. Можно сделать, чтобы скрипт мог всё копировать?

13 (изменено: Alectric, 2015-11-30 23:03:57)

Re: AHK: Копировать или вставить по удержанию ЛКМ.

Не знаю как можно записать в clipboard из переменной так, чтобы система думала что скопирован файл... может кто-нибудь еще подскажет. Были темы про clipboard, нужно покапаться...

...

Вроде работает...

#SingleInstance,Force
SetKeyDelay,0
SetWinDelay,20

loop
{
  sleep,10
  if (!do and a_timeidle>700 and GetKeyState("Lbutton","P"))
  {
    do=1
    if Text:=Copy(1)
    {
      settimer,removetooltip,-2000
      if !(Text~="^\w:\\")
      {
        tooltip,Текст скопирован.`n`n%Text%
        clipboard:=Text
      }
      else
        tooltip,Файл скопирован.`n%Text%

    }
    else
    {
      tooltip,Вставка.
      settimer,removetooltip,-1000
      sendinput,{lbutton up}
      sendinput,^{vk56}
    }
  }
  else if (do and !GetKeyState("Lbutton","P"))
    do=
;tooltip,% Text "`n" a_timeidle
}
return

removetooltip:
tooltip
return

Copy(c="")
{
  tmp:=clipboardall
  if c
  {
    Clipboard=
    loop,30
    {
      sleep,10
    } until !Clipboard
    sendinput,{lbutton up}
    sendinput,^{vk43}
  }
  loop,30
  {
    sleep,10
  } until Clipboard
  txt:=Clipboard
  if !(Txt~="^\w:\\")
    Clipboard:=tmp
  return % txt
}
Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

14

Re: AHK: Копировать или вставить по удержанию ЛКМ.

Alectric, если Вы поняли, чего хочет OmTatSat, расскажте нам.

15 (изменено: Alectric, 2015-11-30 22:55:44)

Re: AHK: Копировать или вставить по удержанию ЛКМ.

?...
Странно, вроде все понятно... ну ладно: он хочет копировать текст или файлы просто зажав левую кнопку мыши, и затем вставлять, также, просто зажав левую кнопку мыши.
Как работает: выделяешь текст и, не отпуская ЛКМ кнопку, ждешь сообщения о том, что все скопировано, затем зажимаешь ЛКМ на пустом месте и ждешь сообщения, что вставлено; с файлами аналогично.

PS Можно и на ты, мы уж тут все друг друга знаем по никам и стилям кодинга... наверно.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

16

Re: AHK: Копировать или вставить по удержанию ЛКМ.

Alectric Огромное спасибо за помощь, очень удобно получилось!

17

Re: AHK: Копировать или вставить по удержанию ЛКМ.

Alectric, ясно, способ интересный. Хотя лично мне тяжело держать кнопку пару секунд.
P. S.: Можно и на ты.

Тему следовало назвать "AHK: Копировать и вставить по удержанию ЛКМ".

18 (изменено: OmTatSat, 2015-12-01 01:57:05)

Re: AHK: Копировать или вставить по удержанию ЛКМ.

Alectric никак понять не могу, где при вставке делается клик из-за которого теряется выделение, соответственно теряется возможность замещения выделенного текста?
Пробовал поменять местами

sendinput,{lbutton up}
sendinput,^{vk56}

и даже вообще убрать sendinput,{lbutton up}, всё равно выделение теряется перед вставкой. Это поправимо, или такова специфика скрипта?

19 (изменено: Alectric, 2015-12-01 08:44:19)

Re: AHK: Копировать или вставить по удержанию ЛКМ.

OmTatSat пишет:

где при вставке делается клик

Клик ты делаешь сам.

OmTatSat пишет:

такова специфика скрипта

Верно, т.к. если выделен текст, скрипт это узнает и скопирует его, вместо того чтобы вставить старый скопированный текст.

Можно сделать вставку текста на среднюю кнопку мыши, добавив в цикл этот код:

  if (!od and a_timeidle>700 and GetKeyState("Mbutton","P"))
  {
    od=1
    if clipboard
    {
      tooltip,Вставка.
      settimer,removetooltip,-1000
      sendinput,{Mbutton up}
      sendinput,^{vk56}
    }
  }
  else if (od and !GetKeyState("Mbutton","P"))
    od=
Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

20 (изменено: OmTatSat, 2015-12-01 12:23:05)

Re: AHK: Копировать или вставить по удержанию ЛКМ.

Alectric пишет:

если выделен текст, скрипт это узнает и скопирует его, вместо того чтобы вставить старый скопированный текст

У меня если по выделеному тексту зажать lbutton происходит вставка. То-есть копирование только если lbutton была зажата, перемещена, и удержана. И выделение текста пропадает прямо перед вставкой, не сразу после нажатия lbutton, скажем примерно после секунды, двух  удержания.

Mbutton к сожалению уже используется.

Теперь понял, что вы имели ввиду

закомментировав

;sendinput,{lbutton up}
sendinput,^{vk43}

Ещё раз спасибо за скрипт.

21 (изменено: OmTatSat, 2015-12-01 13:07:57)

Re: AHK: Копировать или вставить по удержанию ЛКМ.

В принципе использование mbutton хорошее решение, оказалось оно нормально уживается с моим предыдущим использованием mbutton - разные задержки.
Ещё бы одну проблему победить, когда перетаскиваешь окно с текстом, и курсор положения в тексте в это время мигает, то происходит вставка.

22 (изменено: stealzy, 2015-12-02 01:06:45)

Re: AHK: Копировать или вставить по удержанию ЛКМ.

Использую копирование-вставку по MButton(если есть выделение - копирует, иначе вставляет):

MButton::copyPaste()

copyPaste() {
	ClipSaved:=Clipboard
	Clipboard:=""
	Send ^{Ins}
	Sleep 20
	if (Clipboard="") {
		Clipboard:=ClipSaved
		Send ^{vk56} ; V
	}
}

23

Re: AHK: Копировать или вставить по удержанию ЛКМ.

stealzy минус такого подхода, заменить выбранный текст не возможно

24 (изменено: stealzy, 2015-12-02 15:20:39)

Re: AHK: Копировать или вставить по удержанию ЛКМ.

OmTatSat ваш подход тоже не позволяет заменить выделенный текст (если вы про скрипт в первом сообщении).

25

Re: AHK: Копировать или вставить по удержанию ЛКМ.

stealzy если к нему добавить

if (!od and a_timeidle>700 and GetKeyState("Mbutton","P"))
  {
    od=1
    if clipboard
    {
      tooltip,Вставка.
      settimer,removetooltip,-1000
      sendinput,{Mbutton up}
      sendinput,^{vk56}
    }
  }
  else if (od and !GetKeyState("Mbutton","P"))
    od=

то позволяет