Форум сайта python.su
Здравствуйте! Требуется консультация знающего специалиста!
Python 3.11.0
Windows 11 x64
Я написал внешний модуль “autorun.py”. Вот его код:
import winreg from winreg import * import psutil from tkinter import messagebox import sys error = 0 proc_path = '' proc_name = '' count_proc = 0 def autorun(no_dub = 0): global error global proc_path global proc_name global count_proc autorun = winreg.OpenKeyEx(HKEY_CURRENT_USER, r'Software\Microsoft\Windows\CurrentVersion\Run', 0, KEY_ALL_ACCESS) proc = psutil.Process() try: proc_path = proc.exe() except: error = 1 try: proc_name = proc.name() except: error = 2 if no_dub == 1: for proc in psutil.process_iter(): if proc.name() == proc_name: count_proc += 1 elif no_dub == 0: pass else: messagebox.showinfo("Autorun_error", '"dub" param unrecognized!') return error, no_dub, count_proc, proc_name if proc_name != 'pythonw.exe': if proc_path != '': winreg.SetValueEx(autorun, proc_name, 0, REG_SZ, proc_path) else: if error == 1: messagebox.showinfo("Autorun_error", "Can't detect EXE path") elif error == 2: messagebox.showinfo("Autorun_error", "Can't detect EXE name") if count_proc > 1: try: # try - это на случай, если прога консольная, без tkinter GUI root.destroy() except: pass sys.exit()
from autorun import autorun autorun(no_dub = 1)
if autorun(no_dub = 1)[2] > 2: root.destroy() sys.exit()
Отредактировано Olezhka (Дек. 13, 2022 16:15:33)
Прикреплённый файлы:
Вопрос.zip (2,7 KБ)
Офлайн
count_proc = 0 if count_proc > 1: try: # try - это на случай, если прога консольная, без tkinter GUI root.destroy() except: pass sys.exit()
Офлайн
RodegastВ смысле почему? “if count_proc > 1” - вот почему. И вот почему:
global count_proc if proc.name() == proc_name: count_proc += 1
Отредактировано Olezhka (Дек. 13, 2022 17:46:38)
Офлайн
Открываем учебник лутца - читаем главу “Видимость переменных”
Офлайн
ZerGА можно просто указать на ошибку, если ты ее видишь?
Открываем учебник лутца - читаем главу “Видимость переменных”
Офлайн
Да! Ошибка в видимости переменных
Офлайн
ZerGА можно по-человечески сказать, в чем ошибка?
Да! Ошибка в видимости переменных
Офлайн
> Да! Ошибка в видимости переменных
Нет, ошибка в том что вызов функции autorun происходит после того как был импортирован модуль.
Офлайн
RodegastА разве неправильно, что сперва в ШАПКЕ программы импортируются все модули, а уж потом производится вызов функций из этих модулей и работа с их экземплярами?!
> Да! Ошибка в видимости переменныхНет, ошибка в том что вызов функции autorun происходит после того как был импортирован модуль.
Офлайн
То что находится внутри модуля выполняется в момент импорта, а потом ты вызываешь функция, но уже поздно.
Офлайн