Absoluter Neuling braucht kleine Hilfe

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Kakihara
User
Beiträge: 5
Registriert: Samstag 17. Mai 2008, 15:06

Samstag 17. Mai 2008, 15:15

hallo pythons,
ich bin absolut neu bei python (wenn auch nicht bei programmiersprachen) und will ein kleines hilfsprogramm für die maus schreiben. dabei soll bei betätigung des mausrades der zeiger an ein feste stelle springen und die linke maustaste "betätigt" werden. das springen an die stelle kann ich schon :)

leider find ich aber nirgends den befehl, mit dem man das drehen des mausrades abfragt. wäre nett, wenn den jemand kurz schreiben könnte.
danke im voraus!

p.s: bitte nicht bloß einen link zu einem tutorial o.ä. posten. die find ich selber.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Samstag 17. Mai 2008, 15:24

Willkommen im Forum!

Geht es um Tkinter? Dann sollte das helfen:

http://www.python-forum.de/topic-14300.html
Kakihara
User
Beiträge: 5
Registriert: Samstag 17. Mai 2008, 15:06

Samstag 17. Mai 2008, 15:33

jupp, den thread hatte ich auch schon gefunden. um zu wissen, ob es um tkinter geht, müsst ich erstmal genau wissen, was das ist. wenn ichs richtig verstanden hab, ist das so ne art "grafikerweiterung" von python. an sich soll mein programm aber nichts grafisches machen, es soll wirklich AUSSCHLIEßLICH den cursor bewegen und "linksklick" machen.

also: nein, es geht nicht (genuin) um tkinter.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Samstag 17. Mai 2008, 16:23

Okay, du stehst noch sehr am Anfang. Fangen wir mal anders an:

Auf welche Weise hast du denn dein Python-Programm geschrieben?
Welche "Hilfsprogramme" hast du dazu verwendet? Wie rufst du es/sie auf?
Kakihara
User
Beiträge: 5
Registriert: Samstag 17. Mai 2008, 15:06

Samstag 17. Mai 2008, 16:31

ohje ohje. vielleicht ist python doch nicht das richtige werkzeug für mein vorhaben.
also geschrieben hab ich bisher noch gar nix, ab er es kann doch nicht so schwer sein, ein kleines script zu machen, das besagt: "wenn mousewheel nach unten, springe zu x,y und mach linksklick". oder?
mehr soll das wirklich nicht können!
hilfsprogramme? wozu?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Samstag 17. Mai 2008, 16:42

Hehe ... so schwer ist das auch nicht - aber ohne die geringste Ahnung von Python dennoch unmöglich ;-)

Woher weißt Du denn, dass Du den Mauszeiger bewegen kannst, wenn Du noch nichts gecoded hast?

Prinzipiell ist Python dafür schon genau richtig - aber es bedarf eben dennoch etwas Einarbeitungszeit und viel Lesen von Doku und Beispielscripts!
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Samstag 17. Mai 2008, 16:49

Dann fang ich mal noch anders an:

Du schreibst, du bist nicht neu "bei programmiersprachen".
Wie und womit hast du denn bis jetzt programmiert?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Samstag 17. Mai 2008, 17:09

Kakihara hat geschrieben:es kann doch nicht so schwer sein, ein kleines script zu machen, das besagt: "wenn mousewheel nach unten, springe zu x,y und mach linksklick". oder?
Hallo Kakihara!

Das ist es aber. Es ist sehr einfach, Events abzufangen, wenn sie in das eigene Fenster übermittelt werden. Aber global? Da müsste man den Event-Fluss des Betriebssystems unterbrechen.

So funktioniert es, die Events des Mausrades eines wxPython-Fensters zu empfangen.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-

import wx

wx.SetDefaultPyEncoding("iso-8859-15")


def on_mousewheel(event):
    print "x"


app = wx.PySimpleApp()
f = wx.Frame(None)
f.Bind(wx.EVT_MOUSEWHEEL, on_mousewheel)
f.Center()
f.Show()
app.MainLoop()
Ich glaube (bis ich eines besseren belehrt werde), dass das globale Abhorchen des Mausrades zum Scheitern verurteilt ist. Überhaupt für einen Anfänger.

Aber um nicht ganz abzuschweifen: Die Windows API-Funktion "CallWindowProc" ist dafür zuständig, Nachrichten abzufangen.

Links dazu:
- http://aspn.activestate.com/ASPN/Cookbo ... ipe/355593
- http://www.python-forum.de/post-88021.html#88021

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Samstag 17. Mai 2008, 17:33

Hallo!

Um die Sache zu ergänzen...

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-

import wx
import win32gui
import win32con
import win32api


class TestFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None)
        self.hwnd = self.GetHandle()
        
        self.oldWndProc = win32gui.SetWindowLong(
            self.hwnd, win32con.GWL_WNDPROC, self.MyWndProc
        )


    def MyWndProc(self, hWnd, msg, wParam, lParam):
        if msg == win32con.WM_MOUSEWHEEL:
            f = file("J:\\Ablage\\mousewheel.txt", "a")
            f.write("mousewheel\n")
            f.close()
        elif msg == win32con.WM_DESTROY:
            win32api.SetWindowLong(
                self.hwnd, win32con.GWL_WNDPROC, self.oldWndProc
            )
       
        return win32gui.CallWindowProc(
            self.oldWndProc, hWnd, msg, wParam, lParam
        )


app   = wx.PySimpleApp()
frame = TestFrame()
frame.Show()
app.MainLoop()
Ich weiß nur nicht, wie man im Windows die Events für ALLE Programme abfängt. SPY++ gibt bei einem Versuch, diese Events abzuhorchen eine Fehlermeldung aus, die besagt, dass Windows das nicht zulässt.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Kakihara
User
Beiträge: 5
Registriert: Samstag 17. Mai 2008, 15:06

Samstag 17. Mai 2008, 18:21

hehe ich sollte mich doch nach was anderem umsehen, glaube ich. es gibt jedenfalls de facto programme, die das mousewheel global abfragen können.

@pütone: programmiert hab ich schon in allem möglichen, unter anderem in Qbasic, Turbo Pascal, C++, Delphi, VB, LabVIEW, Ada... you name it. allerdings nie besonders lange in einer davon und auch nie wirklich ernsthaft.
wollte auch nur damit andeuten, dass ich keine erklärung brauch, was ne schleife oder ne variable ist oder so :)

@hyperion: onkel google hat mit den worten mouse move python als erstes ergebnis das hier zutage befördert:
>>> from ctypes import *
>>> windll.user32.SetCursorPos(100, 100)
(und das funzt auch)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Samstag 17. Mai 2008, 19:08

Kakihara hat geschrieben:hehe ich sollte mich doch nach was anderem umsehen, glaube ich. es gibt jedenfalls de facto programme, die das mousewheel global abfragen können.
Wie kannst du dir anmaßen, auch nur anzunehmen, dass man das mit Python nicht machen kann! Dass ich nicht weiß, ohne Google zu verwenden, wie so etwas funktioniert, heißt noch lange nicht, dass es nicht machbar ist.

Ich klinke mich aus dieser Diskussion aus. Es ärgert mich, wenn jemand Python nicht kennt und trotzdem schon in den ersten paar Beiträgen hier im Forum auf Python herumreitet. Wenn es mit anderen Sprachen geht, dann geht es mit Python auch. Merke dir das.

mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Samstag 17. Mai 2008, 20:44

hui, da ist jemand aber sauer ^^ (möp, offtopic, ich weiß ^^ )

EDIT: Und um noch n bissl was konstruktiveres zu bringen... Was du da gefunden hast, spricht die Windows-API an. Es ist schonmal gut zu wissen, dass du das unter Windows machen willst. Unter Linux wird diese Variante mit hundertprozentiger Sicherheit nicht funktionieren!

Dein Ansatz fuehrt vermutlich sehr schnell zu einer Loesung, wenn du dir die Windows-API-Docs mal durchschaust und nach einer entsprechenden Methode in der User32.dll suchst, die einen Klick ausloest. Vorausgesetzt es gibt diese in der Form.
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Samstag 17. Mai 2008, 21:44

nkoehring hat geschrieben:hui, da ist jemand aber sauer ^^ (möp, offtopic, ich weiß ^^ )
Und das zu Recht! :evil:
Gerold hat sich dankenswerter Weise 'ne Menge Arbeit damit gemacht,
was man von dem, der um Rat gefragt hat, nicht gerade behaupten kann.
Hätte er sich von Anbeginn an klarer ausgedrückt (Betriebssystem, verwendete Software/Hilfsmittel, was genau ist das Ziel etc.), wäre die Sache einfacher gewesen.
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Samstag 17. Mai 2008, 21:49

Das lernt er schon noch. Jeder macht mal Fehler... und wenn er es nicht lernt, dann haben wir wenigstens Hilfsbereitschaft gezeigt.
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Samstag 17. Mai 2008, 22:05

Hmmm! :roll:
Ich war da schon ein wenig hart, denn ich habe mich ein paar Beiträge vorher nicht richtig ausgedrückt.
Gerold hat geschrieben:Ich glaube (bis ich eines besseren belehrt werde), dass das globale Abhorchen des Mausrades zum Scheitern verurteilt ist. Überhaupt für einen Anfänger.
Damit meinte ich eigentlich zwei Sachen:

1.) Eine harte Nuss für einen Anfänger

2.) Es steckt ziemlich viel GUI-Logik hinter dem Mausrad. Das Mausrad-Event wird an das Fenster weitergeleitet, welches sich **unter** dem Mauscursor befindet. Es kann aber auch an das Steuerelement weitergeleitet werden, welches sich unter dem Mauscursor befindet. Zumindest dann, wenn das der installierte Treiber (z.B. IntelliMaus) so vorsieht. Ohne Treiber oder mit einem anderen Treiber sieht die Sache schon wieder ganz anders aus. Wenn man global einfach das Mausrad-Event abfangen kann, dann würde wahrscheinlich einiges durcheinander kommen. Soll heißen: Was an einem Computer mit der Maus X funktioniert kann an einem anderen Computer mit der Maus Y schon zum Eventchaos führen.

Was ich damit zuerst sagen wollte: Es würde mich wundern, wenn es funktioniert. Da es aber anscheinend funktioniert, wundert es mich, dass es funktioniert. Aber wenn es machbar ist, dann kann man es auch mit Python machen.

mfg
Gerold
:-)

PS: Ich sollte wohl besser schlafen gehen. ;-)
.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten