Link an einer bestimmten Desktop-Position erstellen Topic is solved
Moderator: jNizM
Link an einer bestimmten Desktop-Position erstellen
Hallo zusammen,
unter Windows habe ich mir eine universelle Verlinkungssystematik gebaut. Ich kann nun ein beliebiges Element mit WIN-l als Link aufnehmen und mit STRG+e,h an einer beliebigen Stelle einfügen kann. Das Ganze funktioniert gut und ich habe es mit der Zeit weitestgehend perfektioniert, so dass ich neben Internetseiten, Dateien, Verzeichnissen auch auf Outlook-Elemente, einzelne Seiten einer pdf-Datei und Textstellen verlinken kann.
Die Links entstehen je nach Kontext innerhalb einer Office-Datei, eines Outlook-Elements oder in einer Dateiverzeichnis. Falls jemand ähnliches vorhat, kann ich gern helfen.
Als Perfektionist bräuchte ich an einem Punkt aber selber Hilfe:
Wenn ich in einem Dateiverzeichnis einen Hyperlink einfüge, kann ich das ganz gut mit FileCreateShortcut. Dabei kann ich z. B. auch ein Icon für die entstehende Linkdatei angeben.
Nun erzeuge ich häufig auch Links auf meinem Desktop. Hier allerdings sollen die dort entstehen, wo gerade die Maus ist (da ich ich bei den beiden großen Bildschirmen, die den Desktop bilden, sonst lange suchen muss). Um das zu realisieren, erzeuge ich hier eine Verknüpfung mit Send - Befehlen (imitiere also das "rechte Maustaste - neu - Verknüpfung"). Auch das funktioniert, ist aber nicht so hübsch, da ich dabei kein Icon auswählen kann.
Wenn ich FileCreateShortcut verwende, kann ich zwar ein Icon auswählen, aber nicht die Position.
Die Frage ist also: Habt Ihr eine Idee, wie man auf dem Windows-Desktop direkt unter der aktuellen Mausposition einen neuen Link erstellen und ihm ein spezielles Symbol zuweisen kann (ohne das er die Position verändert).
Viele Grüße, Halweg
unter Windows habe ich mir eine universelle Verlinkungssystematik gebaut. Ich kann nun ein beliebiges Element mit WIN-l als Link aufnehmen und mit STRG+e,h an einer beliebigen Stelle einfügen kann. Das Ganze funktioniert gut und ich habe es mit der Zeit weitestgehend perfektioniert, so dass ich neben Internetseiten, Dateien, Verzeichnissen auch auf Outlook-Elemente, einzelne Seiten einer pdf-Datei und Textstellen verlinken kann.
Die Links entstehen je nach Kontext innerhalb einer Office-Datei, eines Outlook-Elements oder in einer Dateiverzeichnis. Falls jemand ähnliches vorhat, kann ich gern helfen.
Als Perfektionist bräuchte ich an einem Punkt aber selber Hilfe:
Wenn ich in einem Dateiverzeichnis einen Hyperlink einfüge, kann ich das ganz gut mit FileCreateShortcut. Dabei kann ich z. B. auch ein Icon für die entstehende Linkdatei angeben.
Nun erzeuge ich häufig auch Links auf meinem Desktop. Hier allerdings sollen die dort entstehen, wo gerade die Maus ist (da ich ich bei den beiden großen Bildschirmen, die den Desktop bilden, sonst lange suchen muss). Um das zu realisieren, erzeuge ich hier eine Verknüpfung mit Send - Befehlen (imitiere also das "rechte Maustaste - neu - Verknüpfung"). Auch das funktioniert, ist aber nicht so hübsch, da ich dabei kein Icon auswählen kann.
Wenn ich FileCreateShortcut verwende, kann ich zwar ein Icon auswählen, aber nicht die Position.
Die Frage ist also: Habt Ihr eine Idee, wie man auf dem Windows-Desktop direkt unter der aktuellen Mausposition einen neuen Link erstellen und ihm ein spezielles Symbol zuweisen kann (ohne das er die Position verändert).
Viele Grüße, Halweg
Re: Link an einer bestimmten Desktop-Position erstellen
Hallo Halweg,
Teil eins deines Projektes hast du ja schon mit FileCreateShortcut umgesetzt. Um die Position des neuen Shortcuts zu ändern, schau dir mal Folgendes an. Funktioniert bei mir prima.
https://www.autohotkey.com/boards/viewtopic.php?f=6&t=3529
Teil eins deines Projektes hast du ja schon mit FileCreateShortcut umgesetzt. Um die Position des neuen Shortcuts zu ändern, schau dir mal Folgendes an. Funktioniert bei mir prima.
https://www.autohotkey.com/boards/viewtopic.php?f=6&t=3529
Re: Link an einer bestimmten Desktop-Position erstellen
In grauer Vorzeit hatte ich mir mal einen Satz Hotkeys gesetzt, welche abhängig von der jeweiligen Dateiendung, die Dateiattribute von auszublendenden Dateien auf 'hidden' gesetzt haben. So hatte ich auf Knopfdruck wahlweise PDFs, docs, xls, TXT, ... ein- bzw. ausgeblendet.
Wenn du alle Dateien am Desktop ausblendest bis auf den dir bekannten/zu suchenden Link, dürfte das Auffinden nicht allzu schwer sein, auch ohne umpositionieren.
Re: Link an einer bestimmten Desktop-Position erstellen
Danke für Eure wie immer sehr schnellen Rückmeldungen.
@BoBo: Das mit dem Ausblenden ist eine gute Idee, um die Arbeit im Explorer effizienter zu gestalten. Hier nützt mir das aber wenig, denn, die Hyperlinks entstehen ja aus der Arbeit mit verschiedenen Anwendungen (meist gleichzeitig) heraus. Entsprechend ist vom Desktop meist nur eine Ecke sichtbar. Oder ich schiebe mir den Bereich, wo der Hyperlink hingehört (mein Desktop hat "Zonen") kurzfristig frei. Für das Auffinden eines neues Elementes müsste ich den ganzen Desktop sehen und dafür müsste ich alle Fenster minimieren, was in meiner Arbeitsweise fast einem Neustart gleichkommt.
@fredchf: Ja,das geht in die Richtung, die ich mir vorstellte. Allerdings ist das durch die Zugriffe auf das Windows Objekt- und Messagemodell für mich doch recht schwer zu verstehen. Insbesondere kann ich im Moment noch nicht die Stelle finden, wo ich für ein konkretes Symbol (Wie erkennen?) eine konkrete Position mit x- und y-Koordinaten angeben könnte.
Viele Grüße, Halweg
@BoBo: Das mit dem Ausblenden ist eine gute Idee, um die Arbeit im Explorer effizienter zu gestalten. Hier nützt mir das aber wenig, denn, die Hyperlinks entstehen ja aus der Arbeit mit verschiedenen Anwendungen (meist gleichzeitig) heraus. Entsprechend ist vom Desktop meist nur eine Ecke sichtbar. Oder ich schiebe mir den Bereich, wo der Hyperlink hingehört (mein Desktop hat "Zonen") kurzfristig frei. Für das Auffinden eines neues Elementes müsste ich den ganzen Desktop sehen und dafür müsste ich alle Fenster minimieren, was in meiner Arbeitsweise fast einem Neustart gleichkommt.
@fredchf: Ja,das geht in die Richtung, die ich mir vorstellte. Allerdings ist das durch die Zugriffe auf das Windows Objekt- und Messagemodell für mich doch recht schwer zu verstehen. Insbesondere kann ich im Moment noch nicht die Stelle finden, wo ich für ein konkretes Symbol (Wie erkennen?) eine konkrete Position mit x- und y-Koordinaten angeben könnte.
Viele Grüße, Halweg
Re: Link an einer bestimmten Desktop-Position erstellen
Hallo Halweg, das ist wirklich einfach (auch ohne Objekt-Kenntnisse).
Rufe die Funktion mal ohne Parameter auf, dann siehst du wie die Symbole und ihre Koordinaten zurückgegeben werden. Auf gleiche Art und Weise musst du deine Neuen mit Koordinaten übergeben.
Rufe die Funktion mal ohne Parameter auf, dann siehst du wie die Symbole und ihre Koordinaten zurückgegeben werden. Auf gleiche Art und Weise musst du deine Neuen mit Koordinaten übergeben.
Code: Select all
MsgBox, % DeskIcons() ; gibt die Koordinaten aller Desktopsymbole zurück
MsgBox, % DeskIcons("Papierkorb:131105") ; Papierkorb nach links oben
ExitApp
Re: Link an einer bestimmten Desktop-Position erstellen
Als kleine Ergänzung:
Wenn Du konkrete X/Y-Koordinaten übergeben willst, ist
Wenn Du konkrete X/Y-Koordinaten übergeben willst, ist
Code: Select all
XY := ((Y << 16) | (X & 0xFFFF)
Re: Link an einer bestimmten Desktop-Position erstellen
Danke!
Mir ging es eigentlich darum, den verlinkten Code auf das zu reduzieren,was ich für die Einstellung einer konkreten Icon-Position benötige. Evtl. habe ich dazu nun alles, bin mir aber nicht sicher.
Bezieht sich das auf das Beispiel von fredchf?
Kombinierst du hier binär zwei 16 Bit Werte?
Muss ich bei X und Y meine Wunschkoordinaten eintragen?
Fehlt da eine Klammer?
Mir ging es eigentlich darum, den verlinkten Code auf das zu reduzieren,was ich für die Einstellung einer konkreten Icon-Position benötige. Evtl. habe ich dazu nun alles, bin mir aber nicht sicher.
Sorry, aber das verstehe ich nicht.just me wrote: ↑04 Dec 2020, 11:51Wenn Du konkrete X/Y-Koordinaten übergeben willst, istCode: Select all
XY := ((Y << 16) | (X & 0xFFFF)
Bezieht sich das auf das Beispiel von fredchf?
Kombinierst du hier binär zwei 16 Bit Werte?
Muss ich bei X und Y meine Wunschkoordinaten eintragen?
Fehlt da eine Klammer?
Re: Link an einer bestimmten Desktop-Position erstellen
Hallo nochmal!
Was Just me da geschrieb nhat, verstehe ich leider auch nicht. Wie du die zu übergebenen Koordinaten errechnen kannst in folgendem Script (heiße Nadel).
Was Just me da geschrieb nhat, verstehe ich leider auch nicht. Wie du die zu übergebenen Koordinaten errechnen kannst in folgendem Script (heiße Nadel).
Code: Select all
xkoord := 1173
ykoord := 537
;~ MsgBox, % auffuellen_links(dez2z_sys(ykoord, "0123456789ABCDEF"), 0, 4) auffuellen_links(dez2z_sys(xkoord, "0123456789ABCDEF"), 0, 4)
MsgBox, % z_sys2dez(auffuellen_links(dez2z_sys(ykoord, "0123456789ABCDEF"), 0, 4) auffuellen_links(dez2z_sys(xkoord, "0123456789ABCDEF"), 0, 4),"0123456789ABCDEF")
; -----------------------------MEC's Funktion---------------------------------------------
z_sys2dez(st,za) ; übergabe Wert Zahlensystem(st) und der zeichen des zahlensystems(za)
{
stringsplit, st,st
PF:=0
Loop, parse, za
{
PB_%A_LoopField% := A_index -1
PF++
}
Loop, %st0%
{
PBW:=st%A_index%
PW+= (PF**(st0-A_index))* PB_%PBW%
}
Return PW
}
; ------------------------Funktion------------------------------------------------------
dez2z_sys(st,za=01) ; übergabe dezimaler zahl(st) und der zeichen des zahlensystems(za)
{
if st is not Integer
Return
z = 0
Loop, Parse, za
{
ID%z% := A_LoopField
zz := A_Index
z++
}
While st
{
rest := Mod(st, zz)
st := st // zz
st2 := ID%rest% st2
}
Return st2
}
; --------------------------------------------------------
auffuellen_links(s, mit = 0, stellen = 4)
{
if StrLen(s) >= stellen
return s
r := anzahl_zeichen(mit, (stellen - StrLen(s))) s
;~ MsgBox, % r
return r
}
; --------------------------------------------------------
anzahl_zeichen(zeichen, anzahl)
{
Loop, % anzahl
d := d zeichen
return d
}
Re: Link an einer bestimmten Desktop-Position erstellen
Ach du Sch...just me wrote: ↑04 Dec 2020, 11:51Als kleine Ergänzung:
Wenn Du konkrete X/Y-Koordinaten übergeben willst, istCode: Select all
XY := ((Y << 16) | (X & 0xFFFF)
So einfach geht Das? Das gleiche Ergebnis wie mein (Monster) Script.
Code: Select all
X = 1173
Y = 537
XY := ((Y << 16) | (X & 0xFFFF))
MsgBox, % XY
Re: Link an einer bestimmten Desktop-Position erstellen
Moin!
Viel Spaß noch und schöne Feiertage!
Ja.halweg wrote:Bezieht sich das auf das Beispiel von fredchf?
Ja.Kombinierst du hier binär zwei 16 Bit Werte?
Ja.Muss ich bei X und Y meine Wunschkoordinaten eintragen?
Nein. Beim Entschlacken einer etwas anderen Version ist links eine überflüssige Klammer stehen geblieben.Fehlt da eine Klammer?
Code: Select all
(Y << 16) schiebt Y um 16 Bit nach links und macht damit Patz für den X Wert (0xYYYY0000).
(X & 0xFFFF) greift sich die 16 rechten Bits von X (0x0000XXXX).
| mit der binären Oder-Verknüpfung werden beide Werte kombiniert (0xYYYYXXXX).
Viel Spaß noch und schöne Feiertage!
Re: Link an einer bestimmten Desktop-Position erstellen
Besten Dank noch mal, ich glaube, jetzt habe ich das notwendige Rüstzeug für die perfekte Linkerstellung. Werd ich nächste Woche angehen.
Re: Link an einer bestimmten Desktop-Position erstellen
So, Lockdown (hier in Sachsen zur Zeit ganz schlimm) hat mir die nötige Zeit verschafft, das Ganze näher zu betrachten.
Ich habe das verlinkte Skript weitestgehend reduziert, damit ausschließlich das zuletzt hinzugefügte Icon an eine bestimmte Position geschoben wird. Das sieht dann so aus:
Vielleicht könnte Ihr mir noch Tipps zur weiteren Vereinfachung geben?
Aber auch wenn ich hier schon alle Optimierungen ausgeschöpft habe: Ich freue mich, das es funktioniert und ich nun meine neuen Verknüpfungen auf dem Desktop anhand eines Skripts, das ich halbwegs verstehe, immer direkt bei der Maus positionieren kann.
Vielen Dank also noch mal für Eure Hilfe.
Ich habe das verlinkte Skript weitestgehend reduziert, damit ausschließlich das zuletzt hinzugefügte Icon an eine bestimmte Position geschoben wird. Das sieht dann so aus:
Code: Select all
Setze_Neuiconpos(1850,1000)
RETURN
Setze_Neuiconpos(x,y)
{
CONTROLGET, hWindow, HWND,,SysListView321, AHK_CLASS Progman
IFWINEXIST AHK_ID %hWindow% ; für die SENDMESSAGE unten muss wohl irgendwie das Handle des ListViews des Programmmanagers als Last Found Window gesetzt werden
{
CONTROLGET, liste, list,COL1 ; Das würde auch ohne Last Found WIndow funktionieren
LOOP, PARSE, liste, `n ; Es gibt wohl keinen einfacheren Weg, um an die Iconzahl des Desktops zu kommen
max_index := A_INDEX -1
SENDMESSAGE, 0x0000100F, %max_index%, % (y << 16) | (x & 0xFFFF) ; 0x0000100F = LVM_SETITEMPOSITION
SENDMESSAGE, 0x000B,1,0 ; 0x000B = WM_SETREDRAW
}
}
Aber auch wenn ich hier schon alle Optimierungen ausgeschöpft habe: Ich freue mich, das es funktioniert und ich nun meine neuen Verknüpfungen auf dem Desktop anhand eines Skripts, das ich halbwegs verstehe, immer direkt bei der Maus positionieren kann.
Vielen Dank also noch mal für Eure Hilfe.
Re: Link an einer bestimmten Desktop-Position erstellen
Moin,
Das gaube ich eher nicht, aber das Folgende tut's:
Für die Anzahl der Icons:
Code: Select all
CONTROLGET, liste, list,COL1 ; Das würde auch ohne Last Found WIndow funktionieren
Code: Select all
CONTROLGET, liste,list,COL1,, AHK_ID %hWindow% ; Das würde auch ohne Last Found WIndow funktionieren
Für die Anzahl der Icons:
Code: Select all
CONTROLGET, Anzahl, list, COUNT
SENDMESSAGE, 0x0000100F, % (Anzahl - 1), % (y << 16) | (x & 0xFFFF) ; 0x0000100F = LVM_SETITEMPOSITION
Re: Link an einer bestimmten Desktop-Position erstellen Topic is solved
Danke noch mal just me. Ich habe deine Tipps mit ein paar eigenen Erkenntnissen kombiniert. So konnte ich dann doch auf das Last Found Window verzichten und auch das REDRAW ist anscheinend nicht erforderlich. Insgesamt konnte ich so den Code auf 3 Zeilen reduzieren:
Ich glaube, schlanker geht nicht. Aber in Anbetracht meiner Erkenntnisse könnte man sicher auch den Code des Originalskripts verschlanken.
Code: Select all
; Testaufruf
Setze_Neuiconpos(1850,1100)
SLEEP, 1000
Setze_Neuiconpos(1550,1100)
RETURN
; Einstellen der Position des zuletzt dem Desktop hinzugefügten Symbols
Setze_Neuiconpos(x,y)
{
CONTROLGET, hWindow, HWND,,SysListView321, AHK_CLASS Progman ; Handle des Desktop-Anzeige Controls ermitteln
CONTROLGET, nr,list,COUNT,,AHK_ID %hWindow% ; Ermittelt die Nummer des zuletzt hinzugefügten Desktopsymbols
SENDMESSAGE, 0x0000100F, % nr-1, % (y << 16) | (x & 0xFFFF),,AHK_ID %hWindow% ; verschiebt das Symbol (0x0000100F = LVM_SETITEMPOSITION)
}