Skip to content

Instantly share code, notes, and snippets.

@alfonsrv
Last active April 3, 2023 08:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alfonsrv/d613988f31f37ee1462c711cdf721238 to your computer and use it in GitHub Desktop.
Save alfonsrv/d613988f31f37ee1462c711cdf721238 to your computer and use it in GitHub Desktop.
DATEV Belegtransfer Auto-Login nach 30 Tagen Inaktivität
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# Rau Systemberatung GmbH (rausys.de)
# Licensed under the GNU General Public License, Version 3
import subprocess
from typing import List
from pywinauto import Application
def datev_autologin():
""" Logs in Belegtransfer after the session timed out after 30 days """
try:
app = Application(backend='uia').connect(path='BTTMain.exe')
window = app.top_window()
window.child_window(
auto_id='AutomaticLogoutAlert'
).child_window(
title='Anmelden', control_type='Button'
).click()
except Exception:
return # nothing to do
app = Application(backend='uia').connect(path='iexplore.exe')
for process_id in process_pids(process_name='iexplore'):
try:
app = Application(backend='uia').connect(process=process_id)
window = app.top_window()
except RuntimeError:
pass
window['DATEV SmartCard / DATEV mIDentity'].click()
window['Weiter'].click()
def process_pids(*, process_name: str) -> List[str]:
stdout = subprocess.check_output(['wmic', 'process', 'get', 'description,processid'])
processes = [process.split() for process in stdout.decode().split('\n')]
processes = [process for process in processes if process]
return [process[1] for process in processes if process[0] == process_name]
if __name__ == '__main__':
datev_autologin()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment