Sachen im Hintergrund machen

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.
Antworten
INFACT
User
Beiträge: 385
Registriert: Freitag 5. Dezember 2008, 16:08

Sonntag 4. Januar 2009, 20:11

Hallo,
ich möchte etwas im Hintergrund machen, das heißt ich will meinen Mauszeiger (in Windows) in "3dgmove.cur" ändern.
Das script, wenn man es sieht sieht so aus:

Code: Alles auswählen

import win32api
from SendKeys import SendKeys

def click(button="left", double=False, button_down=True, button_up=True):
    """Peform a click action using SendInput    """

    events = []
    if button.lower() == "left":
        if button_down:
            events.append(win32defines.MOUSEEVENTF_LEFTDOWN)
        if button_up:
            events.append(win32defines.MOUSEEVENTF_LEFTUP)
    elif button.lower() == "right":
        if button_down:
            events.append(win32defines.MOUSEEVENTF_RIGHTDOWN)
        if button_up:
            events.append(win32defines.MOUSEEVENTF_RIGHTUP)
    elif button.lower() == "middle":
        if button_down:
            events.append(win32defines.MOUSEEVENTF_MIDDLEDOWN)
        if button_up:
            events.append(win32defines.MOUSEEVENTF_MIDDLEUP)

    if double and button_down and button_up:
        events *= 2

    inp_struct = win32structures.INPUT()
    inp_struct.type = win32defines.INPUT_MOUSE

    for event in events:
        inp_struct._.mi.dwFlags = event
        inp_struct._.mi.mouseData = 0
        win32functions.SendInput(
            1,
            ctypes.pointer(inp_struct),
            ctypes.sizeof(inp_struct))
# (Der Teil ist nicht von mir) 


win32api.SetCursorPos((32, 799))
click()
win32api.SetCursorPos((42, 781))
click()
win32api.SetCursorPos((409, 261))
click()
SendKeys("m{ENTER}")
win32api.SetCursorPos((102.77))
click()
win32api.SetCursorPos((372,444))
click()
SendKeys("3dgmove.cur")
win32api.SetCursorPos((540, 453))
click()
Ich habe leider keine Ahnung wie ich das machen soll, dass man es nicht sieht, oder dass es im Hintergrund gemacht wird. :roll: :oops: :lol:

Ich hoffe auf Antworten 8) :roll:
[b][i]ein kleines game für die die lust haben http://konaminut.mybrute.com[/i][/b]
;-)
INFACT
User
Beiträge: 385
Registriert: Freitag 5. Dezember 2008, 16:08

Sonntag 4. Januar 2009, 20:44

Es muss ja nicht das obere Beispiel sein.
Es kann auch ein anderes sein, falls das obere nicht geht.
Ich weiß das nicht
[b][i]ein kleines game für die die lust haben http://konaminut.mybrute.com[/i][/b]
;-)
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 5. Januar 2009, 01:36

Die Idee ist ja dass du ein Minimalbeispiel machst, bei dem so wenig wie möglich vorrausgesetzt wird. So wie es jetzt ist, hast du allen Leuten die nicht Windows nutzen (und das sind schon durchaus einige) den Weg verbaut, dir mit geringem Aufwand eine Antwort zu geben.

Edit: Eek ist in dem Kontext natürlich quatsch. Ist wohl heute echt nicht mein Tag. :?
Zuletzt geändert von Leonidas am Montag 5. Januar 2009, 12:43, insgesamt 1-mal geändert.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
INFACT
User
Beiträge: 385
Registriert: Freitag 5. Dezember 2008, 16:08

Montag 5. Januar 2009, 12:08

Ok ich würde ja ein "inter-Pc-nales" Beispiel nehmen, leider weiß ich nicht was auf andern Rechenern möglich ist, da ich nur einmal kurz mit Linux kontakt hatte, mehr aber auch nicht. :cry:

Vieleicht könnt ihr ja selbst ein Beispiel machen, das zum Beispiel in eine Dialogbox einträgt, einen radioButton drückt und dann auf Ok drückt. Oder so was in der Art.

:arrow: :arrow: :arrow: Danke
[b][i]ein kleines game für die die lust haben http://konaminut.mybrute.com[/i][/b]
;-)
Benutzeravatar
bwbg
User
Beiträge: 379
Registriert: Mittwoch 23. Januar 2008, 13:35

Montag 5. Januar 2009, 12:55

Dein Code frei interpretiert:

Code: Alles auswählen

win32api.SetCursorPos((32, 799))
click()
win32api.SetCursorPos((42, 781))
click()
win32api.SetCursorPos((409, 261))
click()
SendKeys("m{ENTER}")
win32api.SetCursorPos((102.77))
click()
win32api.SetCursorPos((372,444))
click()
SendKeys("3dgmove.cur")
win32api.SetCursorPos((540, 453))
click()
Klick auf "Start" -> "Systemsteuerung" -> klick auf irgendwas -> dieses Etwas mit Enter bestätigen -> wieder irgendwo einen Klick -> ein Eingabefeld mittels Anklicken den Fokus verpassen -> wieder irgendwo hinklicken.

Die Koordinaten hast du sicherlich irgendwo aufgezeichnet oder abgeschrieben. In der Form wird es nicht nur nicht auf anderen Plattformen (win32api legt einen ja ohnehin schon auf Win32 fest) noch auf anderen Windowsrechnern funktionieren, die nicht zufällig deine Auflösung/Themeneinstellungen/wasauchimmer teilen (800x600 Bildpunkte .. nutzt das überhaupt noch jemand?). Des weiteren läufst du so Gefahr, dass es selbst bei dir nach Änderungen der Einstellungen nicht mehr funktioniert.

Zurück zur Lösung des Problems:

1. Löse dich gedanklich von dem Zwang, alles anklicken zu müssen!

2. Suche nach Möglichkeiten (Funktionsaufruf) der Win32-API, die Cursor-Einstellungen zu ändern!

3. Sie nach, ob das Pythonmodul win32api diese Funktion abbildet und rufe diese entsprechend der Dokumentation (lesen!) auf!

Ohne mich damit näher beschäftigt zu haben, wird das in wenigen Zeilen erledigt sein.

Grüße... Heiko
INFACT
User
Beiträge: 385
Registriert: Freitag 5. Dezember 2008, 16:08

Montag 5. Januar 2009, 13:21

Es gibt keine vernünftige Doc zu win32api ausser zu C :cry:
Aber :
Ich will ja auch nicht den Cursor verändern, dass ist nur ein Beispiel.
Ich glaube ich nehme eher ein anderes:

Code: Alles auswählen

import os
os.startfile("EinbeispielProgramm.exe")
#in diesen programm befinden sich ein line edit und ein radio button
#Wie kann ich es nun hinbekommen, dass man den dialog nicht sieht und #trotzdem die eingaben gemacht werden?
Es soll etwas so darstellen wie simplemail. Bloß mit anderen Programmen anstatt mit Email.

(wenn das nicht verständlich war bitte melden)
[b][i]ein kleines game für die die lust haben http://konaminut.mybrute.com[/i][/b]
;-)
Benutzeravatar
snafu
User
Beiträge: 5496
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Montag 5. Januar 2009, 18:58

Vielleicht kannst du das Programm ja auch mittels COM über eine Schnittstelle ansprechen. Für mehr Infos: http://msdn.microsoft.com/de-de/library ... us%29.aspx

Übrigens regelt Simplemail seine Funktionalität meines Wissens mit Python-Boardmitteln. Da wird kein externes Programm benötigt.
shcol (Repo | Doc | PyPi)
Antworten