Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem AutoIt a funkce ClipGet()

Zdravím.
Používám AutoIt v3.3.10.2 a mám problém s tím, že funkce ClipGet() někdy (většinou ano, ale není na to spolehnutí) nenačte text předtím uložený do schránky přes Ctrl-Ins (Ctrl-C tam není podporované). Ve schránce ten uložený text přitom je. Je vidět, že kurzor myši na tom místě klikne a problikne i zvýraznění vybraného textu ale do proměnné $bak se to nedostane.

Zjistil jsem, že částečně pomůže vložit krátkou prodlevu mezi vložením na obrazovce vybraného textu do schránky a vlastní funkcí. Spolehlivé to ale i tak úplně není.

V tomto případě si někdy opakovaně klikne a tváří se jako by údaj nepřečetl.

Příklad kousku kódu

;; Čekám až se na určeném místě obrazovky objeví text "usp" abych mohl pokračovat dál
MouseClick("left",86,819,2)
Send("{CTRLDOWN}{INS}{CTRLUP}")
Sleep(200)
$bak = ClipGet()
if $bak <> "usp" Then
	ClipPut ( " " )
	sleep (1000)
	MouseClick("left",86,819,2)
	Send("{CTRLDOWN}{INS}{CTRLUP}")
	Sleep(200)
	$bak = ClipGet()
	if $bak <> "usp" Then
		ClipPut ( " " )
		sleep (1000)
		MouseClick("left",86,819,2)
		Send("{CTRLDOWN}{INS}{CTRLUP}")
		Sleep(200)
		$bak = ClipGet()
		if $bak <> "usp" Then
			ClipPut ( " " )
			sleep (1000)
		else
                        Exit
		EndIf
	EndIf
EndIf

;; Ok našel se, jdeme dál
MouseMove(152,818)
MouseClick("left",152,818,2)
Send("{CTRLDOWN}{INS}{CTRLUP}")
Sleep(200)
$bak = ClipGet()
if number($bak) = 259 Or number($bak) = 254 Then
		Send("{SPACE}n")
EndIf

Nemáte nějaký jiný tip, co s tím?

Předmět Autor Datum
skus pouzit _ClipBoard_SetData a _ClipBoard_GetData na pracu s clipboardom
emem 25.08.2015 14:32
emem
Děkuji za tip. Hned po dovolené ověřím. nový
yorg 26.08.2015 07:28
yorg
Ověřeno a pokud tehdy nebyly zrovna skvrny na Slunci, tak to vypadá, že to je skutečně spolehlivější… nový
yorg 28.08.2015 08:20
yorg
Menší oprava. Spolehlivější ano, ale ne zcela. Bez té 100ms pauzy to spolehlivé není. Původně při po… poslední
yorg 28.08.2015 12:31
yorg

Menší oprava. Spolehlivější ano, ale ne zcela. Bez té 100ms pauzy to spolehlivé není. Původně při použití ClipGet() tu prodlevu v podstatě zařizoval řádek Send("{RIGHT}{CTRLDOWN}v{CTRLUP}{LEFT}")

_ClipBoard_SetData("")
WinActivate("Microsoft Excel - tabulka","")
Send("{CTRLDOWN}c{CTRLUP}")
sleep(100)
;;test jestli už nejsem na konci
$xx = StringLen(_ClipBoard_GetData())
If $xx > 2 Then
;;  Send("{RIGHT}{CTRLDOWN}v{CTRLUP}{LEFT}")
else
	Exit
EndIf

Zpět do poradny Odpovědět na původní otázku Nahoru