Gedankenfurz

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.
Benutzeravatar
__blackjack__
User
Beiträge: 3899
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Dienstag 26. Februar 2019, 18:13

@Perlchamp: Ja das ist eine Art Sandbox.
“There's also a certain pleasure in actually getting things to work in Java, somewhat like the pleasure, I imagine, of building ships in bottles.”
— David Cook in c.l.p
Benutzeravatar
Perlchamp
User
Beiträge: 151
Registriert: Samstag 15. April 2017, 17:58

Mittwoch 27. Februar 2019, 21:58

ahoi !
ich bin bereits einen Tag am Suchen, finde aber leider nichts.

Code: Alles auswählen

SYSTEM_PATH = 'c:/windows/system32/'

def btn_snip_clicked():
   shell = win32com.client.Dispatch("WScript.Shell")
   app_snip = shell.Run(f'{SYSTEM_PATH}SnippingTool.exe')
   win32api.Sleep(300)
   shell.AppActivate(f'{SYSTEM_PATH}SnippingTool.exe')
   win32api.Sleep(300)
   shell.SendKeys("^n")
   win32api.Sleep(300)
Wie kann ich SnippingTool.exe wieder beenden ?
Bishereige Versuche u.a.:
app_snip.kill()
app_snip.terminate()
shell.kill()
shell.terminate()
wer lesen kann ist klar im Vorteil ;-)
es gibt keine Probleme, sondern nur Lösungen !
Bildung ist die Freude auf mich selbst !
Benutzeravatar
Perlchamp
User
Beiträge: 151
Registriert: Samstag 15. April 2017, 17:58

Samstag 16. März 2019, 10:16

salve,
ich hänge fest. Jemand eine Idee für mich ?
Im Voraus besten Dank !
wer lesen kann ist klar im Vorteil ;-)
es gibt keine Probleme, sondern nur Lösungen !
Bildung ist die Freude auf mich selbst !
Sirius3
User
Beiträge: 10245
Registriert: Sonntag 21. Oktober 2012, 17:20

Samstag 16. März 2019, 11:34

Programmieren ist halt nicht raten. Hast Du geschaut, was der Rückgabewert von Run ist?
Dann ist ziemlich schnell klar, dass `app_snip` weder eine kill noch eine terminate Methode hat (was auch die Fehlermeldung sagen würde).

Warum benutzt Du überhaupt direkt Windows-Funktionen, wenn auch einfache Pythonvarianten gibt, wie time.sleep oder subprocess.Popen?
Benutzeravatar
Perlchamp
User
Beiträge: 151
Registriert: Samstag 15. April 2017, 17:58

Samstag 16. März 2019, 12:25

@ Sirius3:
danke für deine schnelle Antwort :-)
1.
Natürlich habe ich festgestellt (durch die Fehlermeldungen - ich kann ja lesen), dass *app_snip* diese Methoden nicht kennt. Ich hatte meine *Versuche* deswegen aufgeführt, dass ihr nicht denkt, ich würde hier 'Däumchen drehen' und darauf warten, bis mir jemand eine Lösung präsentiert ... und im Netz habe ich bisher keine Lösung gefunden, und bin noch am lesen/recherchieren ...
2.
time_sleep und subprocess bringen mich insofern nicht weiter, weil ich bisher keine Lösung des eigentlichen Problems gefunden habe:
zeitweise automatische Steuerung von Programmen via Tastatur (Übergabe von Tastendruck-Events) und Maus (MouseDown, MouseUp, rechte, linke Taste, etc.)
ich habe was gefunden, das mich mit der Maus weiterbringt, guckst du:

Code: Alles auswählen

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

'''detecting_mouseclicks_in_windows_using_python.py:
Code to check if left or right mouse buttons were pressed
  '''

__author__ = 'Markacho'
__date__ = '30.01.2017'


import win32api
import time

state_left = win32api.GetKeyState(0x01)  # Left button down = 0 or 1. Button up = -127 or -128
state_right = win32api.GetKeyState(0x02)  # Right button down = 0 or 1. Button up = -127 or -128

while True:
    a = win32api.GetKeyState(0x01)
    b = win32api.GetKeyState(0x02)

    if a != state_left:  # Button state changed
        state_left = a
        print(a)
        if a < 0:
            print('Left Button Pressed')
        else:
            print('Left Button Released')
            break

    if b != state_right:  # Button state changed
        state_right = b
        print(b)
        if b < 0:
            print('Right Button Pressed')
        else:
            print('Right Button Released')
            break

    time.sleep(0.001)
die *break*s habe ich gesetzt, weil ich nur einen Durchgang der Schleife haben möchte (dann brauche ich auch time.sleep nicht, ich weiß) ...
wenn das auch nur mit Python-Mitteln geht, wäre ich der letzte, der dies ablehnen würde, da es dann nicht windows-proprietär wäre ...
wer lesen kann ist klar im Vorteil ;-)
es gibt keine Probleme, sondern nur Lösungen !
Bildung ist die Freude auf mich selbst !
Antworten