Mouscurser Programm

  • Hey alle zusammen,

    $hCursor = DllCall("user32.dll", "ptr", "LoadCursorFromFile(C:\Users\User\Desktop\cursor.anij)", "str", $choose)

    Da ich noch relativ neu auf dem Gebiet bin hab ich keine Ahnung wie ich

    LoadcursorfromFile ersetze?!

    also es geht vorranig darum nicht extra den Cursor auszuwählen :Face::Face:

    wie kann ich das Umsetzen ? bzw. ersetzen

    3 Mal editiert, zuletzt von no_name (21. April 2018 um 16:39)

  • Willkommen im Forum!

    Erst einmal vorab:

    Eine konkrete Problembeschreibung ist die erste Voraussetzung, damit man DIR helfen kann. Ich würde dir empfehlen deine zukünftigen Beiträge folgendermaßen aufzubauen:

    - Beschreibung was für ein Problem du hast

    - Hintergrund Informationen

    > Was möchtest du erreichen

    > Welche Umstände sind gegeben

    > Wie sieht dein Derzeitiges Skript aus

    - Welche Lösungsansätze hast du selber schon versucht

    In welcher Reihenfolge du das beschreibst ist dann eigentlich irrelevant. Hauptsache alles wichtige ist drin...

    Zudem solltest du deine eigenen Beiträge einmal selber durchlesen und überprüfen, ob dieser unmissverständlich formuliert sind. Der Grund warum ich dich darauf hinweise ist, dass ich leider nicht ganz sicher bin ob ich dein Problem / Frage, oder was auch immer, richtig verstanden habe.

    Ein kleines Beispiel wie dein Beitrag meiner Meinung nach aussehen sollte:

    ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

    Hallo Community! :)

    Ich bin noch relativ neu auf den Gebiet und benötige eure Hilfe. Ich möchte den System Cursor per AutoIt Skript ersetzen. Ich habe bisher einen Lösungsansatz wo ich den Cursor, welchen ich ersetzen möchte, über einen Dialog Fenster auswählen lasse. Allerdings würde ich gerne das Dialogfenster komplett weg lassen. Allerdings weiß ich nicht wie das funktioniert. Hier ist mein Code:

    // Hier würde dann der Code stehen den du oben gepostet hast...

    ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

    Ich meine, deine Problembeschreibung konnte ich nach 3x lesen dann verstehen und in etwa erraten was du willst, allerdings macht sich nicht jeder die Mühe wenn du deine Sätze nicht verständlich formulierst. Allerdings fehlt da noch eine Kleinigkeit: Durch was möchtest du denn das Dialogfenster ersetzen?

    Den Code den du da hast sieht sehr danach aus, als ob du den irgendwo aus dem Internet kopiert hast und selber nicht verstehst, was der eigentlich macht. Liege ich mit der Annahme richtig? Ansonsten ist nämlich die Lösung gar nicht so schwierig. Aber beantworte mir erst mal bitte die beiden Fragen bevor ich dir sage, was in deinem Code schief läuft. :P

    €dit:

    Ich sehe gerade dass du hier im Unterforum "Programmieranfragen - Mit Gegenleistung" bist. Wenn du willst dass jemand dir ein Programm schreibt, musst du schon genau beschreiben was du exakt willst. Es sei denn du hast dich im Unterforum geirrt und möchtest eigentlich Hilfe um das selber zu lösen.

    2 Mal editiert, zuletzt von Yjuq (21. April 2018 um 15:08)

  • danke erstmal für die ganzen Tipps Tut mir leid wenn ich da zu ungenau war :(

    ja ich hatte vor das Dialogfenster komplett wegzulassen.:/

    Ich hab schon gegoogelt aber nix dazu gefunden meine Idee war irgendwie

    1) $choose = FileOpenDialog("Waehle einen Cursor", @WindowsDir & "\Cursors", "Cursor und Icon(*.ani;*.cur;*.ico)") mit $choose=C:\Users\User\cursor.cur zu ersetzen

    aber das klappt nicht außerdem weiß ich auch nicht welche Variable da rauskommt.

    2) $hCursor = DllCall("user32.dll", "ptr", "LoadCursorFromFile(C:\Users\User\Desktop\cursor.cur)", "str", $choose)

    Rot = das muss auch ersetzt werden

    Grün = muss das irgendwie so ersetzt werden ?

    bzw muss hier ersetzt werden oder bei 1)

    --> Ja das Script ist aus einem anderen Thread und da verstehe ich eben nicht alles deshalb ja die Frage :S

    aber ich bin halt nicht Gott und brauch Hilfe?(

    Hoffe auf Hilfe :)

  • Aha, jetzt kommen wir der Sache doch näher. :)

    Also, erst einmal ist der Codefetzen den du da hast für dich nicht empfehlenswert, wenn du selber nicht durchblickst was da eigentlich passiert. Ich werde dir eine fertige Lösung am Ende des Beitrages geben. Aber wenn du daran interessiert bist selber was zu lernen, solltest du es mit den Hilfestellungen die ich dir gebe es selber einmal versuchen.

    AutoIt wird mit einer Vielzahl an Funktionen mitgeliefert. Darunter sind auch Standard Bibliotheken die allgemein jeder auf seinen Rechner hat der mit AutoIt arbeitet. Heißt für dich eigentlich konkret, dass du die DllCall() Funktion eigentlich gar nichts brauchst. Zudem hab ich auch nicht den Eindruck, als ob du wüsstest was diese Funktion überhaupt macht. Dazu mal ein wenig Hintergrundwissen:

    Windows selber liefert eine ziemlich umfangreiche Bibliothek mit (eigentlich mehrere) auf die in jeder Programmiersprache zugegriffen werden kann. Sie beinhaltet Funktionen, um im Betriebssystem überhaupt etwas zu machen. Jedes Programm was auf Windows läuft, greift eigentlich auf diese Bibliotheken zu um z.B. Fenster, Konsolenausgaben oder andere Dinge (wie den Systemcursor) zu verändern. Diese Bibliothek nennt sich die WinAPI und ist die Schnittstelle zum Betriebssystem. Um auf diese von AutoIt aus Zugreifen zu können (und auch andere Bibliotheken dieser Art) benutzt man die Funktion DllCall(). Das erst einmal dazu...

    Allerdings hat AutoIt schon eine große Anzahl dieser Funktionen in einfachere zu verwendene Funktionen für die AutoIt Programmierung abgedeckt. Diese Funktionen befinden sich allgemein in der WinAPIEx. Darunter ist auch eine Funktion welches den Systemcursor ersetzt und dein ganzen Code eigentlich auf 1~3 Codezeile reduziert. Diese Funktionen rufen selber nämlich per DllCall() die benötigten Funktionen auf, um das zu machen was du willst. Bedeutet für dich: Du brauchst es nicht selber machen und sparst dir eine Menge Arbeit.

    Die Referenz solltest du eigentlich als Datei auf deinen Rechner haben. Wenn du im Editor (SciTE) einmal F1 drückst, sollte sich die Dokumentation öffnen. Dort kannst du mal nach Funktionen suchen (z.B. mit der Suchen Funktion) welche irgendetwas mit einem Cursor zu tun haben.

    Wenn ich dort als Suchbegriff "cursor" eingebe, bekomme ich 79 Einträge die das Wort Cursor irgendwo beinhalten. Bei "system cursor" sind es nur noch 26 Einträge. Alternativ kannst du auch einfach mal in das Inhaltsverzeichnis gehen und dort unter der User Defined Function Reference und dann unter WinAPIEx nachschauen. Dort kannst du mal versuchen ob du selber auf die entsprechende Funktion kommst die du brauchst. :P

    Ich würde dich bitten einmal selber nach der Funktion zu suchen die du benötigst. Im Prinzip wirst du ständig irgendwas suchen müssen wenn du nicht weißt was du eigentlich suchst. Die AutoIt Hilfe ist da so einfach gestaltet, dass man sich schnell zurecht findet wenn man weiß wie man suchen muss. Das ist das erste was jeder Programmierer lernen sollte, zu lernen eine Dokumentation ordentlich zu benutzen. ^^

    Ansonsten, wenn du nicht weiter weißt findest du hier die notwendigen Funktionen um dein Vorhaben umzusetzen (guck aber bitte nur nach, wenn du wirklich nicht weiter kommst! - PS: Es sind 2 Funktionen die du brauchst):

    Spoiler anzeigen

    _WinAPI_SetSystemCursor() - Die Funktion verändert den Systemcursor. :P

    _WinAPI_LoadCursorFromFile() - Und diese lädt einen Cursor von einer Datei, damit du diesen mit _WinAPI_SetSystemCursor() setzen kannst.

    Die beiden Funktionsnamen klingen einfach, nicht wahr? Die meisten Funktionsnamen sind so aufgebaut, weshalb eine Suche relativ fix funktioniert. ^^

    Nachdem du die Funktionen kennst die du brauchst, versuch einfach mal sie auch zu benutzen. Die Dokumentation erklärt dir eigentlich alles was du dafür wissen musst. Versuch mal selber den Cursor zu laden und dann entsprechend zu setzen. Wenn du nicht weiter kommst hier die Lösung:

    Spoiler anzeigen

    Ansonsten was anderes, warum willst du eigentlich den System Cursor verändern?

    2 Mal editiert, zuletzt von Yjuq (21. April 2018 um 17:57)

  • Hey nochmal,

    vielen Dank Yjuq für deine Hilfe und deine Mühe

    wie lade ich nun den Cursor?


    $sPath = StringReplace(@WindowsDir, "", "" & "C:\Users\User\Desktop\cursors.cur")

    $sPath = StringReplace("C:\Users\User\Desktop\cursors.cur")

    geht nicht

    StringReplace

    Replaces substrings in a string.

    StringReplace ( "string", "searchstring/start", "replacestring" [, occurrence = 0 [, casesense = 0]] )

    Parameters

  • 8|

    Indem du in der Variable $sPath den Pfad zu dem Cursor speicherst...

    StringReplace brauchst du in dem Fall nicht...

    Einmal editiert, zuletzt von Yjuq (21. April 2018 um 20:31)