Zwei ganz kleine Fragen... :)

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Scrypton
Posts: 17
Joined: 19 May 2014, 17:18

Zwei ganz kleine Fragen... :)

19 May 2014, 17:26

N'Abend zusammen,

habe zwei kleine Fragen auf dem Herzen, die ich trotz Google und Forensuche einfach nicht gelöst bekomme:

1. Hotkey ist auf Strg und h gesetzt (^h). Aktion, sagen wir ein einfacher Sendinput wird ausgeführt.
Diese Aktion soll bei jeder erneuten Betätigung von "h" ausgeführt werden, solange dabei Strg gedrückt bleibt.
Wird Strg jedoch auch losgelassen, folgt Aktion 2.

Wie ist das zu lösen?

2. Wie ist zu verhindern, dass das Label "OnClipboardChange" ausgeführt wird, wenn innerhalb des Scripts durch eine Aktion die Zwischenablage verändert wird?

Ich hoffe, mich um diese Uhrzeit noch verständlich ausgedrückt zu haben. ^^


Liebe Grüße,
Patrick
strobo
Posts: 125
Joined: 30 Sep 2013, 15:24

Re: Zwei ganz kleine Fragen... :)

20 May 2014, 06:41

Ich hoffe, mich um diese Uhrzeit noch verständlich ausgedrückt zu haben.
War okay, trotzdem Code her;)
Scrypton
Posts: 17
Joined: 19 May 2014, 17:18

Re: Zwei ganz kleine Fragen... :)

20 May 2014, 10:12

strobo wrote:
Ich hoffe, mich um diese Uhrzeit noch verständlich ausgedrückt zu haben.
War okay, trotzdem Code her;)
Ich verstehe zwar nicht wozu, da es sich um eine grundsätzliche Problematik handelt die ich bereits bei einem ehemaligen Projekt gerne gelöst hätte; aber gerne doch:

Code: Select all

Cache = 1

Gui, Add, Button, x15 y10 w85 , Test
Gui, Add, Button, x110 y10 w85 , Test2
Gui, Add, Edit, x20 y50 w500 h300 vOutFolder,
Gui, Show, w814 h450, Test
return

^c::
Suspend, on
Send, ^c
if (Cache = 1)
{
	Cache1 = %ClipboardAll%
	SetTimer, TimerTip, 1500
	ToolTip, Inhalt in die 1. Zwischenablage kopiert!`nStrg + Numlock1
	Cache = 2
	Suspend, off
	return
}
if (Cache = 2)
{
	Cache2 = %ClipboardAll%
	SetTimer, TimerTip, 1500
	ToolTip, Inhalt wurde in die 2. Zwischenablage kopiert!`nStrg + Numlock2
	Cache = 3
	Suspend, off
	return
}
if (Cache = 3)
{
	Cache3 = %ClipboardAll%
	SetTimer, TimerTip, 1500
	ToolTip, Inhalt wurde in die 3. Zwischenablage kopiert!`nStrg + Numlock3
	Cache = 4
	Suspend, off
	return
}
if (Cache = 4)
{
	Cache4 = %ClipboardAll%
	SetTimer, TimerTip, 1500
	ToolTip, Inhalt wurde in die 4. Zwischenablage kopiert!`nStrg + Numlock4
	Cache = 5
	Suspend, off
	return
}
if (Cache = 5)
{
	Cache5 = %ClipboardAll%
	SetTimer, TimerTip, 1500
	ToolTip, Inhalt wurde in die 5. Zwischenablage kopiert!`nStrg + Numlock5
	Cache = 6
	Suspend, off
	return
}
if (Cache = 6)
{
	Cache6 = %ClipboardAll%
	SetTimer, TimerTip, 1500
	ToolTip, Inhalt wurde in die 6. Zwischenablage kopiert!`nStrg + Numlock6
	Cache = 7
	Suspend, off
	return
}
if (Cache = 7)
{
	Cache7 = %ClipboardAll%
	SetTimer, TimerTip, 1500
	ToolTip, Inhalt wurde in die 7. Zwischenablage kopiert!`nStrg + Numlock7
	Cache = 8
	Suspend, off
	return
}
if (Cache = 8)
{
	Cache8 = %ClipboardAll%
	SetTimer, TimerTip, 1500
	ToolTip, Inhalt wurde in die 8. Zwischenablage kopiert!`nStrg + Numlock8
	Cache = 9
	Suspend, off
	return
}
if (Cache = 9)
{
	Cache9 = %ClipboardAll%
	SetTimer, TimerTip, 1500
	ToolTip, Inhalt wurde in die 9. Zwischenablage kopiert!`nStrg + Numlock9
	Cache = 1
	Suspend, off
	return
}
return

^Numpad1::
Clipboard = %Cache1%
Send, ^v
return

^Numpad2::
Clipboard = %Cache2%
Send, ^v
return

^Numpad3::
Clipboard = %Cache3%
Send, ^v
return

^Numpad4::
Clipboard = %Cache4%
Send, ^v
return

^Numpad5::
Clipboard = %Cache5%
Send, ^v
return

^Numpad6::
Clipboard = %Cache6%
Send, ^v
return

^Numpad7::
Clipboard = %Cache7%
Send, ^v
return

^Numpad8::
Clipboard = %Cache8%
Send, ^v
return

^Numpad9::
Clipboard = %Cache9%
Send, ^v
return

TimerTip:
SetTimer, TimerTip, Off
ToolTip
return

Exit:
GuiClose:
ExitApp
Ich spiele derzeit an einer kleinen Funktion für die Zwischenablage, mein Code sieht mittlerweile nicht mehr exakt so aus wie hier angegeben. Da ich mich jedoch noch in der Arbeit befinde, komme ich an meinen aktuellsten Versuch nicht heran.

Mein Ziel: Wird die Zwischenablage verändert, wird der jeweilige Inhalt durch das Script gesichert.
Bei Paste "Strg+V" soll dann ein Tooltip erscheinen, der den jeweiligen Inhalt wieder gibt - durch wiederholtes drücken von V blättert man praktisch durch die virtuelle Zwischenablage und fügt den zu wünschenden Inhalt dann ein, wenn man Strg los lässt.

Da ich aber nicht verlange, dass man mir hier meine Arbeit erledigt und mir einen fertigen Code vorlegt wollte ich eigentlich nur wissen, wie meine im Startbeitrag geschilderten Probleme gelöst werden können. :)


Liebe Grüße,
Patrick

//Edit: Die Gui, das Edit-Control und die zwei Buttons sind irrelevant, sind noch überbleibsel anderer Tests... ^^
strobo
Posts: 125
Joined: 30 Sep 2013, 15:24

Re: Zwei ganz kleine Fragen... :)

20 May 2014, 11:09

Ich verstehe zwar nicht wozu
hilft den Helfern, setzt einen Kontext.
Da ich aber nicht verlange, dass man mir hier meine Arbeit erledigt und mir einen fertigen Code vorlegt...
das hast du mit deiner eigenen Code-Vorlage jetzt bewiesen (nicht dass du in Verdacht standest.) Ein aufs Problem runtergekochtes Skript ist allerdings vorzuziehen.

Code: Select all

a := 0 ; markiert ^h.          
^h::
        a := 1
        ; ... (hier nicht den Wert speichern)
return
#if (a)
~lctrl up::
~rctrl up::
        ; ...     
        a := 0
return
#if
Ungetestet. Falls das nicht läuft, als erstes den ~lctrl up Hotkey für sich alleine testen.
Scrypton
Posts: 17
Joined: 19 May 2014, 17:18

Re: Zwei ganz kleine Fragen... :)

20 May 2014, 17:10

N'Abend strobo,

vielen Dank, mit deiner Hilfe konnte ich beide Probleme lösen. Es funktioniert nun wie gewünscht; bis auf eine Kleinigkeit.
Bilder und Texte samt Formatierungen bleiben in den 8 "virtuellen Zwischenablagen" erhalten und lassen sich wie gewünscht durchblättern und ausgeben. Für das Durchblättern samt Tooltips lässt sich für eben diese durch A_EventInfo auch ermitteln, obs ein Bild oder ein Text ist (noch nicht eingebaut).

Dateien jedoch, die ich kopiere und an einem anderen Ort einfügen möchte lassen sich damit nicht handhaben - es erscheint: nichts.

Hier mein bisheriger Code:

Code: Select all

#NoEnv
#SingleInstance force
OnExit, GuiClose
;Critical, on
a := 0 ; Variabel legt fest, ob LControl losgelassen wird, 0=prüft nicht, 1=prüft
b := 0 ; Variabel legt fest, ob Label "OnClipboardChange" durchläuft oder nicht, 0=läuft durch, 1=setzt auf return
Cache = 0
VirCache = 1
return




^v::
a := 1
b := 1
If (VirCache = 1)
{
	Clipboard = %Cache1%
	Tooltip, 1. Zwischenablage`n%Clipboard%
	VirCache = 2
	VirCacheResult = 1
	return
}
If (VirCache = 2)
{
	Clipboard = %Cache2%
	Tooltip, 2. Zwischenablage`n%Clipboard%
	VirCache = 3
	VirCacheResult = 2
	return
}
If (VirCache = 3)
{
	Clipboard = %Cache3%
	Tooltip, 3. Zwischenablage`n%Clipboard%
	VirCache = 4
	VirCacheResult = 3
	return
}
If (VirCache = 4)
{
	Clipboard = %Cache4%
	Tooltip, 4. Zwischenablage`n%Clipboard%
	VirCache = 5
	VirCacheResult = 4
	return
}
If (VirCache = 5)
{
	Clipboard = %Cache5%
	Tooltip, 5. Zwischenablage`n%Clipboard%
	VirCache = 6
	VirCacheResult = 5
	return
}
If (VirCache = 6)
{
	Clipboard = %Cache6%
	Tooltip, 6. Zwischenablage`n%Clipboard%
	VirCache = 7
	VirCacheResult = 6
	return
}
If (VirCache = 7)
{
	Clipboard = %Cache7%
	Tooltip, 7. Zwischenablage`n%Clipboard%
	VirCache = 8
	VirCacheResult = 7
	return
}
If (VirCache = 8)
{
	Clipboard = %Cache8%
	Tooltip, 8. Zwischenablage`n%Clipboard%
	VirCache = 1
	VirCacheResult = 8
	return
}
return



#if (a)
~lctrl up::
~rctrl up::
Suspend, on
gosub, TimerTip ;ToolTip ausschalten
if (VirCacheResult = 1)
{
	a := 0
	Send, ^v
	VirCache = 1
	b := 0
	Suspend, off
	return
}
if (VirCacheResult = 2)
{
	a := 0
	Send, ^v
	VirCache = 1
	b := 0
	Suspend, off
	return
}
if (VirCacheResult = 3)
{
	a := 0
	Send, ^v
	VirCache = 1
	b := 0
	Suspend, off
	return
}
if (VirCacheResult = 4)
{
	a := 0
	Send, ^v
	VirCache = 1
	b := 0
	Suspend, off
	return
}
if (VirCacheResult = 5)
{
	a := 0
	Send, ^v
	VirCache = 1
	b := 0
	Suspend, off
	return
}
if (VirCacheResult = 6)
{
	a := 0
	Send, ^v
	VirCache = 1
	b := 0
	Suspend, off
	return
}
if (VirCacheResult = 7)
{
	a := 0
	Send, ^v
	VirCache = 1
	b := 0
	Suspend, off
	return
}
if (VirCacheResult = 8)
{
	a := 0
	Send, ^v
	VirCache = 1
	b := 0
	Suspend, off
	return
}
return





OnClipboardChange:
if (b = 1)
{
return	
}
Suspend, on
ClipArt   := (!(A_EventInfo) ? "Leer" : (A_tntInfo>1) ? "2" : "1" ) ; 1=Text, 2=Bild
if (Cache = 0)
{
	Cache = 1
	Suspend, off
	return
}
if (Cache = 30)
{
	Suspend, off
	return
}
if (Cache = 1)
{
	Cache1 = %ClipboardAll%
	SetTimer, TimerTip, 1500
	ToolTip, Inhalt in die 1. Zwischenablage kopiert!
	Cache = 2
	Suspend, off

	return
}
if (Cache = 2)
{
	Cache2 = %ClipboardAll%
	SetTimer, TimerTip, 1500
	ToolTip, Inhalt wurde in die 2. Zwischenablage kopiert!
	Cache = 3
	Suspend, off
	return
}
if (Cache = 3)
{
	Cache3 = %ClipboardAll%
	SetTimer, TimerTip, 1500
	ToolTip, Inhalt wurde in die 3. Zwischenablage kopiert!
	Cache = 4
	Suspend, off
	return
}
if (Cache = 4)
{
	Cache4 = %ClipboardAll%
	SetTimer, TimerTip, 1500
	ToolTip, Inhalt wurde in die 4. Zwischenablage kopiert!
	Cache = 5
	Suspend, off
	return
}
if (Cache = 5)
{
	Cache5 = %ClipboardAll%
	SetTimer, TimerTip, 1500
	ToolTip, Inhalt wurde in die 5. Zwischenablage kopiert!
	Cache = 6
	Suspend, off
	return
}
if (Cache = 6)
{
	Cache6 = %ClipboardAll%
	SetTimer, TimerTip, 1500
	ToolTip, Inhalt wurde in die 6. Zwischenablage kopiert!
	Cache = 7
	Suspend, off
	return
}
if (Cache = 7)
{
	Cache7 = %ClipboardAll%
	SetTimer, TimerTip, 1500
	ToolTip, Inhalt wurde in die 7. Zwischenablage kopiert!
	Cache = 8
	Suspend, off
	return
}
if (Cache = 8)
{
	Cache8 = %ClipboardAll%
	SetTimer, TimerTip, 1500
	ToolTip, Inhalt wurde in die 8. Zwischenablage kopiert!
	Cache = 9
	Suspend, off
	return
}
return



TimerTip:
SetTimer, TimerTip, Off
ToolTip
return

Exit:
GuiClose:
ExitApp
Für einen konkreten Denkanstoß wäre ich sehr dankbar.
Eventuell auch der eine oder andere Hinweis, wie das bisherige besser oder einfacher hätte gelöst werden können. :)

Schönen Abend noch.

Liebe Grüße,
Patrick
strobo
Posts: 125
Joined: 30 Sep 2013, 15:24

Re: Zwei ganz kleine Fragen... :)

21 May 2014, 04:06

In etwa so könnte man ein paar Zeilen sparen:

Code: Select all

^v::
    a := 1
    b := 1
    x := VirCache
    Clipboard := Cache%x%
    Tooltip, %x%. Zwischenablage`n%Clipboard%
    VirCache := x >= 8 ? 1 : x+1
    VirCacheResult := x
return
Man könnte auch noch Clipboard cachen (cache := Clipboard) und sehen wohin das führt.
Scrypton
Posts: 17
Joined: 19 May 2014, 17:18

Re: Zwei ganz kleine Fragen... :)

21 May 2014, 09:01

strobo wrote:In etwa so könnte man ein paar Zeilen sparen:

Code: Select all

^v::
    a := 1
    b := 1
    x := VirCache
    Clipboard := Cache%x%
    Tooltip, %x%. Zwischenablage`n%Clipboard%
    VirCache := x >= 8 ? 1 : x+1
    VirCacheResult := x
return
Man könnte auch noch Clipboard cachen (cache := Clipboard) und sehen wohin das führt.
Super, werde ich heute Abend in etwa so umsetzen.

Bezüglich dem Kopieren und Einfügen von Dateien fällt dir auch keine Lösung ein, oder doch? ^^
strobo
Posts: 125
Joined: 30 Sep 2013, 15:24

Re: Zwei ganz kleine Fragen... :)

21 May 2014, 09:52

Naja, cache := Clipboard speichert zumindest den Pfad einer Datei (z.B. nach ^c im explorer).
Auf
http://www.autohotkey.com/docs/misc/Cli ... ipboardAll
wird ausserdem gezeigt wie man ClipboardAll in und (wieder) aus einer Datei bekommt.
just me
Posts: 9424
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Zwei ganz kleine Fragen... :)

22 May 2014, 00:45

Moin,

welche Windows Version läuft bei Dir? Zumindest unter Win 8.1 gibt es möglicherweise Probleme mit dem Zugriff auf ClipboardAll, wenn im Explorer eine Datei zum Kopieren ausgewählt wurde => http://ahkscript.org/boards/viewtopic.php?f=14&t=3517.
Scrypton
Posts: 17
Joined: 19 May 2014, 17:18

Re: Zwei ganz kleine Fragen... :)

22 May 2014, 04:18

just me wrote:Moin,

welche Windows Version läuft bei Dir? Zumindest unter Win 8.1 gibt es möglicherweise Probleme mit dem Zugriff auf ClipboardAll, wenn im Explorer eine Datei zum Kopieren ausgewählt wurde => http://ahkscript.org/boards/viewtopic.php?f=14&t=3517.
Hmm... Tatsache.
Zuhause nutze ich Win 8.1, damit funktioniert das einfügen kopierter Dateien nicht.

Hier auf der Arbeit läuft Win 7 und es funktioniert.
Beheben kann man das nicht, nehme ich an?
just me
Posts: 9424
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Zwei ganz kleine Fragen... :)

22 May 2014, 05:15

Ich nehme an, dass sich lexikos bereits damit beschäftigt. Wenn es eine Lösung gibt, werden wird sie (hoffentlich) im nächsten Update enthalten sein.

Bis dahin halte ich die Füße still. ;)
Scrypton
Posts: 17
Joined: 19 May 2014, 17:18

Re: Zwei ganz kleine Fragen... :)

22 May 2014, 10:14

Kleines "Problemchen" - anbei erstmal mein aktueller Code:

Code: Select all

#NoEnv
#SingleInstance force
OnExit, GuiClose
;Critical, on
a := 0 ; Variabel legt fest, ob LControl losgelassen wird, 0=prüft nicht, 1=prüft
b := 0 ; Variabel legt fest, ob Label "OnClipboardChange" durchläuft oder nicht, 0=läuft durch, 1=setzt auf return
Cache = 0
VirCache = 1
CacheRun = 0
return


^v::
CacheRun:
if (CacheRun = 0)
{
    Suspend, on
    Send, ^v
    Suspend, off
    return
}
a := 1
b := 1
x := VirCache
    Clipboard := Cache%x%
	ClipArt   := (!(Clipboard) ? "Leer" : (Clipboard>1) ? "2" : "1" )
	ClipString := SubStr(ClipBoard,1,300)
    CacheCheck := Cache%x%
	if (CacheCheck = "")
    {
        VirCache = 1
        GoSub, CacheRun
        return
    }
    if (ClipArt = "Leer")
    {
        Tooltip, %x%. Zwischenablage`n`n~~ B I L D ~~`n
        VirCache := x >= 8 ? 1 : x+1
        return
    }
	Tooltip, %x%. Zwischenablage`n`n%ClipString%
	VirCache := x >= 8 ? 1 : x+1
return


#if (a)
~lctrl up::
~rctrl up::
Suspend, on
gosub, TimerTip ;ToolTip ausschalten
a := 0
Send, ^v
VirCache = 1
b := 0
Suspend, off
return


OnClipboardChange:
ClipArt   := (!(A_EventInfo) ? "Leer" : (A_EventInfo>1) ? "2" : "1" )
if (b = 1)
{
return 
}
Suspend, on
if (Cache = 0)
{
    Cache = 1
    Suspend, off
    return
}
if (Cache = 30)
{
    Suspend, off
    return
}
if (Cache = 1)
{
    Cache1 = %ClipboardAll%
    SetTimer, TimerTip, 1500
    ToolTip, Inhalt in die 1. Zwischenablage kopiert!
    Cache = 2
    CacheRun = 1
    Cache1Check = 0
    if (ClipArt = 2)
    {
        Cache1Check = 1
    }
    Suspend, off
    return
}
if (Cache = 2)
{
    Cache2 = %Cache1%
    Cache1 = %ClipboardAll%
    SetTimer, TimerTip, 1500
    ToolTip, Inhalt wurde in die 2. Zwischenablage kopiert!
    Cache = 3
    Cache2Check = 0
    if (ClipArt = 2)
    {
        Cache2Check = 1
    }
    Suspend, off
    return
}
if (Cache = 3)
{
    Cache3 = %Cache2%
    Cache2 = %Cache1%
    Cache1 = %ClipboardAll%
    SetTimer, TimerTip, 1500
    ToolTip, Inhalt wurde in die 3. Zwischenablage kopiert!
    Cache = 4
    Cache3Check = 0
    if (ClipArt = 2)
    {
        Cache3Check = 1
    }
    Suspend, off
    return
}
if (Cache = 4)
{
    Cache4 = %Cache3%
    Cache3 = %Cache2%
    Cache2 = %Cache1%
    Cache1 = %ClipboardAll%
    SetTimer, TimerTip, 1500
    ToolTip, Inhalt wurde in die 4. Zwischenablage kopiert!
    Cache = 5
    Cache4Check = 0
    if (ClipArt = 2)
    {
        Cache4Check = 1
    }
    Suspend, off
    return
}
if (Cache = 5)
{
    Cache5 = %Cache4%
    Cache4 = %Cache3%
    Cache3 = %Cache2%
    Cache2 = %Cache1%
    Cache1 = %ClipboardAll%
    SetTimer, TimerTip, 1500
    ;ToolTip, Inhalt wurde in die 5. Zwischenablage kopiert!
    Cache = 6
    Cache5Check = 0
    if (ClipArt = 2)
    {
        Cache5Check = 1
    }
    Suspend, off
    return
}
if (Cache = 6)
{
    Cache6 = %Cache5%
    Cache5 = %Cache4%
    Cache4 = %Cache3%
    Cache3 = %Cache2%
    Cache2 = %Cache1%
    Cache1 = %ClipboardAll%
    SetTimer, TimerTip, 1500
    ;ToolTip, Inhalt wurde in die 6. Zwischenablage kopiert!
    Cache = 7
    Cache6Check = 0
    if (ClipArt = 2)
    {
        Cache6Check = 1
    }
    Suspend, off
    return
}
if (Cache = 7)
{
    Cache7 = %Cache6%
    Cache6 = %Cache5%
    Cache5 = %Cache4%
    Cache4 = %Cache3%
    Cache3 = %Cache2%
    Cache2 = %Cache1%
    Cache1 = %ClipboardAll%
    SetTimer, TimerTip, 1500
    ;ToolTip, Inhalt wurde in die 7. Zwischenablage kopiert!
    Cache = 8
    Cache7Check = 0
    if (ClipArt = 2)
    {
        Cache7Check = 1
    }
    Suspend, off
    return
}
if (Cache = 8)
{
    Cache8 = %Cache7%
    Cache7 = %Cache6%
    Cache6 = %Cache5%
    Cache5 = %Cache4%
    Cache4 = %Cache3%
    Cache3 = %Cache2%
    Cache2 = %Cache1%
    Cache1 = %ClipboardAll%
    SetTimer, TimerTip, 1500
    ;ToolTip, Inhalt wurde in die 8. Zwischenablage kopiert!
    Cache = 9
    Cache8Check = 0
    if (ClipArt = 2)
    {
        Cache8Check = 1
    }
    Suspend, off
    return
}
return



TimerTip:
SetTimer, TimerTip, Off
ToolTip
return

Exit:
GuiClose:
ExitApp
An und für sich funktioniert nun alles genau so, wie ich es mir zum Ziel gemacht habe (mit Ausnahme des Kopierens bzw. Einfügens von Dateien).
Einzig: Wenn ich auf eine Webseite gehe und eine Grafik kopiere über Rechtsklick -> Kopieren funktioniert das nicht; im Gegenteil stürzt die Anwendung ab, wenn ich die Grafik irgendwo einfügen möchte.

Image

Weiß einer von euch, woran das liegt?
just me
Posts: 9424
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Zwei ganz kleine Fragen... :)

23 May 2014, 01:45

Moin,

diese Logik kann ich nicht wirklich nachvollziehen:

Code: Select all

    Clipboard := Cache%x%
    ClipArt   := (!(Clipboard) ? "Leer" : (Clipboard>1) ? "2" : "1" )
    ClipString := SubStr(ClipBoard,1,300)
    CacheCheck := Cache%x%
    if (CacheCheck = "")
    {
        VirCache = 1
        GoSub, CacheRun
        return
    }
    if (ClipArt = "Leer")
    {
        Tooltip, %x%. Zwischenablage`n`n~~ B I L D ~~`n
        VirCache := x >= 8 ? 1 : x+1
        return
    }
    Tooltip, %x%. Zwischenablage`n`n%ClipString%
    VirCache := x >= 8 ? 1 : x+1
Das hier ClipArt := (!(Clipboard) ? "Leer" : (Clipboard>1) ? "2" : "1" ) sieht so aus, als würdest Du versuchen, den A_EventInfo Teil aus OnClipboardChange: nachzuahmen, es macht aber so nur wenig Sinn. Cache%x% wird zuerst nach Clipboard und dann noch einmal nach CacheCheck übertragen. Wenn Du interne Prüfungen durchführen willst, solltest Du das mit der internen Variablen machen, und erst nach Prüfung das Clipboard verändern.

Versuch es mal mit folgenden Änderungen:

Code: Select all

^v::
Iterations := 0 ; <<<<< einfügen
CacheRun:
...
...
...
    if (CacheCheck = "")
    {
        VirCache = 1
        Iterations++ ; <<<<< einfügen
        ToolTip, Aufruf CacheRun %Iterations% ; <<<<< einfügen
        GoSub, CacheRun
        return
    }
Vielleicht läuft das Skript in einer Schleife, bis der Stack überläuft.
Scrypton
Posts: 17
Joined: 19 May 2014, 17:18

Re: Zwei ganz kleine Fragen... :)

23 May 2014, 09:28

just me wrote:Das hier ClipArt := (!(Clipboard) ? "Leer" : (Clipboard>1) ? "2" : "1" ) sieht so aus, als würdest Du versuchen, den A_EventInfo Teil aus OnClipboardChange: nachzuahmen, es macht aber so nur wenig Sinn.
Es macht aber doch genau das, was ich damit erreichen wollte.
Werde es trotzden abändern, wenn ich zuhause bin.
just me wrote:Versuch es mal mit folgenden Änderungen:

Code: Select all

^v::
Iterations := 0 ; <<<<< einfügen
CacheRun:
...
...
...
    if (CacheCheck = "")
    {
        VirCache = 1
        Iterations++ ; <<<<< einfügen
        ToolTip, Aufruf CacheRun %Iterations% ; <<<<< einfügen
        GoSub, CacheRun
        return
    }
Vielleicht läuft das Skript in einer Schleife, bis der Stack überläuft.
Du hast Recht, das tut es. Es läuft sehr schnell hoch und beendet sich dann.
Woran liegt das? Warum nur, wenn ich eine Grafik aus dem Web kopiere und bei anderen nicht?

Kann man dem entgegen steuern?


Liebe Grüße,
Patrick
just me
Posts: 9424
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Zwei ganz kleine Fragen... :)

23 May 2014, 11:55

Es liegt wohl daran, dass bei jedem Aufruf von CacheRun immer wieder die Bedingung if (CacheCheck = "") erfüllt ist, was dann wieder zu einem Aufruf von CacheRun führt, u.s.w., u.s.w.

Ich bin jetzt erst einmal ein paar Tage offline. Aber es wird sich schon ein anderer Helfer finden.

Viel Glück!
strobo
Posts: 125
Joined: 30 Sep 2013, 15:24

Re: Zwei ganz kleine Fragen... :)

23 May 2014, 12:58

; ... (hier nicht den Wert speichern)
überträgt sich doch auf ^v (im Beispiel wars ^h).
Du wolltest das Clipboard mit (sowas wie) ctrl up füllen, dann gehören die entsprechenden
Code-zeilen auch da hin.
Für (cache1 = "") kann das skript in einer "schleife" landen (VirCache = 1 Absicht?).
Scrypton
Posts: 17
Joined: 19 May 2014, 17:18

Re: Zwei ganz kleine Fragen... :)

23 May 2014, 17:27

strobo wrote:
; ... (hier nicht den Wert speichern)
überträgt sich doch auf ^v (im Beispiel wars ^h).
Du wolltest das Clipboard mit (sowas wie) ctrl up füllen, dann gehören die entsprechenden
Code-zeilen auch da hin.
Ich muss die Zwischenablage bereits mit ^v füllen, um eine Vorschau des Inhalts des jeweiligen virtuellen Zwischenspeichers in einem Tooltip wiedergeben zu können, ehe dieser dann mit dem loslassen der Control-Taste gesendet wird.
Beziehe ich mich dabei auf die Variable, welche das Clipboard füllt anstelle des CLipboards, funktionierts nicht.
strobo wrote:Für (cache1 = "") kann das skript in einer "schleife" landen (VirCache = 1 Absicht?).
Ersteres dient dazu zu überprüfen, ob der aktuell aufgerufene "virtuelle Zwischenspeicher" leer ist. Wenn er leer ist, wird die Variable "VirCache" auf 1 gesetzt, um nachfolgend wieder bei der 1. Zwischenablage zu landen.
strobo
Posts: 125
Joined: 30 Sep 2013, 15:24

Re: Zwei ganz kleine Fragen... :)

24 May 2014, 04:03

Ich muss die Zwischenablage bereits mit ^v füllen, um eine Vorschau des Inhalts des jeweiligen virtuellen Zwischenspeichers in einem Tooltip wiedergeben zu können
Nö, cache%x% (o.ä.) tuts auch:p
Wenn er leer ist, wird die Variable "VirCache" auf 1 gesetzt, um nachfolgend wieder bei der 1. Zwischenablage zu landen.
Joa, und wenn (cache1 = ""), dann ...
Scrypton
Posts: 17
Joined: 19 May 2014, 17:18

Re: Zwei ganz kleine Fragen... :)

24 May 2014, 04:14

strobo wrote:
Ich muss die Zwischenablage bereits mit ^v füllen, um eine Vorschau des Inhalts des jeweiligen virtuellen Zwischenspeichers in einem Tooltip wiedergeben zu können
Nö, cache%x% (o.ä.) tuts auch:p
Offensichtlich nicht.
Wenn ich mich mit ClipString := SubStr(ClipBoard,1,300) nicht auf das Clipboard beziehe sondern auf cache1, erscheint bei mir im Tooltip keine Textvorschau des Inhalts der Variable.

Habe es eben noch einmal ausprobiert.
Ist jetzt ohnehin notwendig (nehme ich an?), da ich, sofern die Vorschau ein Bild ist, dieses verkleinert anstelle des Tooptips anzeigen lasse. Dabei beziehe ich mich auf ein Script über GDIP, das Bilder aus dem Arbeitsspeicher verwenden und anzeigen lassen kann.
strobo wrote:
Wenn er leer ist, wird die Variable "VirCache" auf 1 gesetzt, um nachfolgend wieder bei der 1. Zwischenablage zu landen.
Joa, und wenn (cache1 = ""), dann ...
Dann ist die Frage, weshalb cache1 = "" ist, wenn ich eine Grafikdatei aus dem Internet/Browser kopiere.
Cache1 kann ansonsten, sofern man nach Anwendungsstart das erste mal etwas kopiert, eigentlich nicht mehr leer sein.
Last edited by Scrypton on 24 May 2014, 04:40, edited 1 time in total.
strobo
Posts: 125
Joined: 30 Sep 2013, 15:24

Re: Zwei ganz kleine Fragen... :)

24 May 2014, 04:36

Offensichtlich nicht.

Code: Select all

Clipboard := Cache%x%
Also sollten die beiden an besagter Stelle den gleichen Wert haben.
Mag sein, dass clipboard in deiner umgebung buggy ist.
Cache1 kann ansonsten, sofern man nach Anwendungsstart das erste mal etwas kopiert, eigentlich nicht mehr leer sein.

Code: Select all

Cache = 0
;...
OnClipboardChange:
...
if (Cache = 0)
{
    Cache = 1
    Suspend, off
    return
}
Cache1 bleibt beim ersten OnClipboardChange leer.

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 29 guests