Inhaltsverzeichnis
Pygames Event-Modul
Ereignistyp
事件处理方法
Tastaturereignisse verarbeiten
Löschtaste (Löschen)
Heim Backend-Entwicklung Python-Tutorial So verwenden Sie das Event-Ereignismodul von Pygame in Python

So verwenden Sie das Event-Ereignismodul von Pygame in Python

May 18, 2023 am 11:58 AM
python pygame event

Pygames Event-Modul

Event ist eines der wichtigen Module von Pygame. Es ist der Kern für die Erstellung des gesamten Spielprogramms, wie z. B. häufig verwendete Mausklicks, Tastatureingaben und Spielfenster. Das Bewegen, die Größenänderung des Fensters, das Auslösen einer bestimmten Handlung, das Verlassen des Spiels usw. können alle als „Ereignisse“ betrachtet werden.

Ereignistyp

Pygame definiert eine Struktur, die speziell zur Verarbeitung von Ereignissen verwendet wird, die Ereigniswarteschlange. Diese Struktur folgt dem Grundprinzip „Wer zuerst kommt, mahlt zuerst“. Mit der Ereigniswarteschlange können wir Benutzervorgänge (auslösende Ereignisse) geordnet und einzeln verarbeiten. Die folgende Tabelle listet häufig verwendete Spielereignisse in Pygame auf:

#🎜🎜 ## 🎜🎜#QUIT
Name Beschreibung
Der Benutzer drückt die Schaltfläche zum Schließen des Fensters QUIT 用户按下窗口的关闭按钮
ATIVEEVENT Pygame被激活或者隐藏
KEYDOWN 键盘按下
KEYUP 键盘放开
MOUSEMOTION 鼠标移动
MOUSEBUTTONDOWN 鼠标按下
MOUSEBUTTONUP 鼠标放开
JOYAXISMOTION 游戏手柄(Joystick or pad) 移动
JOYBALLMOTION  游戏球(Joy ball) 移动
JOYHATMOTION 游戏手柄(Joystick) 移动
JOYBUTTONDOWN 游戏手柄按下
JOYBUTTONUP 游戏手柄放开
VIDEORESIZE Pygame窗口缩放
VIDEOEXPOSE Pygame窗口部分公开(expose)
USEREVENT 触发一个用户事件

注意,当使用 Pygame 做游戏开发时,上述事件并非都会应用的到,因此在学习的过程中,我们要懂得触类旁通、举一反三。

事件处理方法

#🎜 🎜#Pygame ist aktiviert oder ausgeblendet
名称 说明
pygame.event.get() 从事件队列中获取一个事件,并从队列中删除该事件
pygame.event.wait()  阻塞直至事件发生才会继续执行,若没有事件发生将一直处于阻塞状态
pygame.event.set_blocked()  控制哪些事件禁止进入队列,如果参数值为None,则表示禁止所有事件进入
pygame.event.set_allowed()   控制哪些事件允许进入队列
pygame.event.pump()  调用该方法后,Pygame 会自动处理事件队列
pygame.event.poll()  会根据实际情形返回一个真实的事件,或者一个None
pygame.event.peek()   检测某类型事件是否在队列中
pygame.event.clear() 从队列中清除所有的事件
pygame.event.get_blocked()  检测某一类型的事件是否被禁止进入队列
pygame.event.post()   放置一个新的事件到队列中
pygame.event.Event()  ATIVEEVENT
#🎜🎜##🎜🎜#KEYDOWN#🎜🎜##🎜🎜#Tastatur gedrückt#🎜🎜##🎜🎜##🎜🎜##🎜🎜#KEYUP#🎜🎜##🎜🎜#Tastatur losgelassen#🎜🎜 ## 🎜🎜##🎜🎜##🎜🎜#MOUSEMOTION#🎜🎜##🎜🎜#MouseMotion#🎜🎜##🎜🎜##🎜🎜##🎜🎜#MOUSEBUTTONDOWN Code>#🎜🎜##🎜🎜#Maus nach unten#🎜🎜##🎜🎜##🎜🎜##🎜🎜#<code>MOUSEBUTTONUP#🎜🎜##🎜🎜#Maus nach oben Öffnen#🎜🎜 ##🎜🎜##🎜🎜##🎜🎜#JOYAXISMOTION#🎜🎜##🎜🎜#Gamecontroller (Joystick oder Pad) bewegen #🎜🎜##🎜🎜## 🎜🎜## 🎜🎜#JOYBALLMOTION #🎜🎜##🎜🎜#Spielball (Joy Ball) Bewegung #🎜🎜##🎜🎜##🎜🎜##🎜🎜#JOYHATMOTION #🎜🎜##🎜🎜#Gamecontroller (Joystick) mobil#🎜🎜##🎜🎜##🎜🎜##🎜🎜#JOYBUTTONDOWN#🎜🎜##🎜🎜# Drücken Sie den Spielgriff #🎜🎜##🎜🎜##🎜🎜##🎜🎜#JOYBUTTONUP#🎜🎜##🎜🎜# Lassen Sie den Spielgriff los #🎜🎜##🎜🎜##🎜 🎜##🎜 🎜#VIDEORESIZE#🎜🎜##🎜🎜#Pygame-Fensterskalierung#🎜🎜##🎜🎜##🎜🎜##🎜🎜#VIDEOEXPOSE# 🎜🎜## 🎜🎜#Pygame-Fensterteil freigelegt (expose)#🎜🎜##🎜🎜##🎜🎜##🎜🎜#USEREVENT#🎜🎜##🎜🎜# löst ein Benutzerereignis aus #🎜🎜# #🎜🎜##🎜🎜##🎜🎜#
#🎜🎜# Beachten Sie, dass bei der Verwendung von Pygame für die Spieleentwicklung nicht alle oben genannten Ereignisse angewendet werden. Daher müssen wir im Lernprozess wissen, wie es geht Schlussfolgerungen ziehen und Schlussfolgerungen ziehen. #🎜🎜#
#🎜🎜#Ereignisbehandlungsmethode#🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜#Name#🎜🎜##🎜🎜#Beschreibung#🎜🎜## 🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜#pygame.event.get()#🎜🎜##🎜🎜#Ein Ereignis aus der Ereigniswarteschlange abrufen und löschen das Ereignis aus der Warteschlange#🎜🎜##🎜🎜##🎜🎜##🎜🎜#pygame.event.wait() #🎜🎜##🎜🎜#Blockiert, bis das Ereignis eintritt. Ausführung fortsetzen . Wenn kein Ereignis auftritt, bleibt es in einem blockierten Zustand. Wenn der Parameterwert „Keine“ ist, bedeutet dies, dass alle Ereignisse nicht in die Warteschlange gelangen dürfen 🎜##🎜🎜#pygame.event.set_allowed() # 🎜🎜##🎜🎜#Steuern, welche Ereignisse in die Warteschlange gelangen dürfen#🎜🎜##🎜🎜##🎜🎜## 🎜🎜#pygame.event.pump() #🎜🎜##🎜🎜 #Nach dem Aufruf dieser Methode verarbeitet Pygame automatisch die Ereigniswarteschlange#🎜🎜##🎜🎜##🎜🎜## 🎜🎜#pygame.event.poll() #🎜🎜##🎜🎜# Gibt je nach tatsächlicher Situation ein echtes Ereignis oder „Keine“ zurück. #Erkennen Sie, ob ein bestimmter Ereignistyp vorliegt queue#🎜🎜##🎜🎜##🎜🎜##🎜🎜#pygame.event.clear()#🎜🎜##🎜🎜#Aus der Warteschlange Alle Ereignisse löschen#🎜🎜## 🎜🎜##🎜🎜##🎜🎜#pygame.event.get_blocked() #🎜🎜##🎜🎜#Erkennen, ob ein bestimmter Ereignistyp blockiert ist. Eintrag in die Warteschlange deaktivieren#🎜🎜 ##🎜🎜##🎜🎜##🎜🎜#pygame.event.post() #🎜🎜##🎜🎜#Ein neues Ereignis in die Warteschlange stellen# 🎜🎜##🎜🎜# #🎜🎜##🎜🎜#pygame.event.Event() #🎜🎜##🎜🎜#Neues benutzerdefiniertes Ereignis erstellen#🎜🎜## 🎜🎜##🎜🎜## 🎜🎜#

Wenn wir Pygame zur Verarbeitung von Ereignissen verwenden, ist die Logik im Allgemeinen ähnlich. Sie müssen zunächst die Art des Ereignisses bestimmen und dann für jeden Ereignistyp unterschiedliche Spielaktionen durchführen. Daher sind if- und else-Anweisungen für diese Situation ideal. Wie unten gezeigt:

import pygame

while True:
    # 等待事件发生
    event = pygame.event.wait()
    if event.type == pygame.QUIT:
        exit()
    if event.type == pygame.MOUSEBUTTONDOWN:
        print(&#39;鼠标按下&#39;, event.pos)
    if event.type == pygame.MOUSEBUTTONUP:
        print(&#39;鼠标弹起&#39;)
    if event.type == pygame.MOUSEMOTION:
        print(&#39;鼠标移动&#39;)
        # 键盘事件
    if event.type == pygame.KEYDOWN:
        # 打印按键的英文字符
        print(&#39;键盘按下&#39;, chr(event.key))
    if event.type == pygame.KEYUP:
        print(&#39;键盘弹起&#39;)
Nach dem Login kopieren

Tastaturereignisse verarbeiten

Wir können das vom Tastaturereignis bereitgestellte Schlüsselattribut verwenden, um die gedrückte Tastaturtaste abzurufen. Pygame definiert die Buchstabentasten, Zifferntasten, Kombinationstasten und andere Tasten auf der Tastatur in Form von Konstanten. Die folgende Tabelle listet die Konstanten einiger häufig verwendeter Tasten auf:

#🎜🎜 # NameBeschreibungK_BACKSPACE#🎜🎜 # K_TABTab#🎜 🎜#
BackspaceK_BACKSPACE退格键(Backspace)
K_TAB制表键(Tab)
K_CLEAR清除键(Clear)
K_RETURN回车键(Enter)
K_PAUSE暂停键(Pause)
K_ESCAPE退出键(Escape)
K_SPACE空格键(Space)
K_0...K_90…9
K_a...Kza…z
K_DELETE删除键(delete)
K_KP0...K_KP90(小键盘)…9(小键盘)
K_F1...K_F15F1…F15
K_UP向上箭头(up arrow)
K_DOWN向下箭头(down arrow)
K_RIGHT向右箭头(right arrow)
K_LEFT向左箭头(left arrow)
KMOD_ALT
#🎜🎜 #

K_CLEAR

Löschtaste (Löschen)

#🎜🎜 #K_RETURN

Eingabetaste



K_PAUSE#🎜🎜 #

Pause

#🎜🎜 #

K_ESCAPE

Escape#🎜🎜 #

K_SPACE

Leertaste (Leertaste)
#🎜🎜##🎜🎜##🎜🎜# K_0...K_9#🎜🎜##🎜🎜#0&hellip ;9#🎜🎜##🎜🎜##🎜🎜##🎜🎜#K_a...Kz</code >#🎜🎜##🎜🎜#a&hellip;z#🎜🎜##🎜🎜## 🎜🎜##🎜🎜#<code>K_DELETE#🎜🎜##🎜🎜#Löschtaste (löschen)# 🎜🎜##🎜🎜##🎜🎜##🎜🎜#K_KP0.. .K_KP9#🎜🎜##🎜🎜#0 (kleine Tastatur)…9 (kleine Tastatur)#🎜🎜 ##🎜🎜##🎜🎜##🎜🎜#K_F1...K_F15 #🎜🎜##🎜🎜#F1…F15#🎜🎜##🎜🎜##🎜🎜##🎜 🎜#K_UP#🎜🎜##🎜🎜#Pfeil nach oben# 🎜🎜##🎜🎜##🎜🎜##🎜🎜#K_DOWN#🎜 🎜##🎜🎜#Pfeil nach unten#🎜🎜##🎜🎜##🎜🎜##🎜🎜#< code>K_RIGHT#🎜🎜##🎜🎜#Rechtspfeil Pfeil)#🎜🎜##🎜🎜##🎜🎜##🎜🎜#K_LEFT#🎜🎜##🎜🎜 #Pfeil nach links#🎜🎜##🎜🎜## 🎜🎜##🎜🎜#KMOD_ALT#🎜🎜##🎜🎜#Drücken Sie gleichzeitig die Alt-Taste#🎜🎜##🎜🎜##🎜 🎜##🎜🎜##🎜🎜#Geben Sie das folgende Beispiel „Bildbewegung“ weiter, um den Verarbeitungsprozess von Tastaturereignissen zu verstehen, wie unten gezeigt: #🎜🎜#
import pygame
import sys

# 初始化pygame
pygame.init()
# 定义变量
size = width, height = 600, 400
bg = (255, 255, 255)
# 加载logo图
img = pygame.image.load("./python.png")
# 获取图像的位置
position = img.get_rect()
# 创建一个主窗口
screen = pygame.display.set_mode(size)
# 标题
pygame.display.set_caption("Python自学网")
# 创建游戏主循环
while True:
    # 设置初始值
    site = [0, 0]
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        # 图像移动 KEYDOWN 键盘按下事件
        # 通过 key 属性对应按键
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP:
                site[1] -= 8
            if event.key == pygame.K_DOWN:
                site[1] += 8
            if event.key == pygame.K_LEFT:
                site[0] -= 8
            if event.key == pygame.K_RIGHT:
                site[0] += 8
    # 移动图像
    position = position.move(site)
    # 填充背景
    screen.fill(bg)
    # 放置图片
    screen.blit(img, position)
    # 更新显示界面
    pygame.display.flip()
Nach dem Login kopieren
#🎜🎜#Umgang mit Mausereignissen#🎜🎜##🎜🎜# #🎜🎜#Pygame bietet jeweils drei Mausereignisse: Mausbewegung (MOUSEMOTION), Mausdrücken (MOUSEBUTTONDOWN) und Mausfreigabe (MOUSEBUTTONUP). Verschiedene Ereignistypen entsprechen unterschiedlichen Mitgliedsattributen. Wie unten gezeigt: #🎜🎜##🎜🎜#pygame.event.MOUSEMOTION Mausbewegungsereignis#🎜🎜##🎜🎜# event.pos relativ zur oberen linken Ecke des Fensters, der aktuelle Koordinatenwert der Maus (x , y)#🎜🎜 # event.rel Der relative Bewegungsabstand der Maus (X, Y) relativ zum letzten Ereignis #🎜🎜# event.buttons Der Anfangszustand der Maustaste (0,0,0), entsprechend (linke Taste, Riemenscheibe, rechte Taste), Bewegung Klicken Sie während des Vorgangs auf diese Taste, und die entsprechende Position ändert sich in 1#🎜🎜##🎜🎜#pygame.event.MOUSEBUTTONUP Maustastenfreigabeereignis#🎜🎜## 🎜🎜# event.pos relativ zur oberen linken Ecke des Fensters, die aktuellen Koordinaten der Maus. Wert (x, y)#🎜🎜# event.button Nummer der Mausfreigabetaste (Ganzzahl), linke Taste ist 1, Scrollrad 2 wird gedrückt, rechte Taste ist 3#🎜🎜##🎜🎜#pygame.event.MOUSEBUTTONDOWN Maustaste drücken Nächstes Ereignis #🎜🎜##🎜🎜# event.pos Relativ zur oberen linken Ecke des Fensters, der aktuelle Koordinatenwert der Maus (x, y) #🎜🎜# event.button Die Maustastennummer (Ganzzahl), die linke Taste ist 1, Scrollrad 2 drücken, Rechtsklick 3, Rad 4 vorwärts rollen, Rad 5 rückwärts rollen #🎜🎜 ##🎜🎜#
import pygame
from random import randint

# 初始化程序
pygame.init()
screen = pygame.display.set_mode((450, 400))
pygame.display.set_caption("Python自学网")
# 更新显示
pygame.display.flip()
while True:
    # 等待事件发生
    event = pygame.event.wait()
    if event.type == pygame.QUIT:
        exit("成功退出")
    if event.type == pygame.MOUSEBUTTONDOWN:
        # pos 获取鼠标当前位置
        print(&#39;鼠标按下&#39;, event.pos)
        mx, my = event.pos
        # 调用 pygame.draw 模块画圆
        pygame.draw.circle(screen, (255, 255, 0), (mx, my), 50)
        # 处理完,更新显示
        pygame.display.update()
    if event.type == pygame.MOUSEBUTTONUP:
        print(&#39;鼠标弹起&#39;)
        pass
    if event.type == pygame.MOUSEMOTION:
        print(&#39;鼠标移动&#39;)
        mx, my = event.pos
        # 随机生成 RGB 颜色值
        r = randint(0, 255)
        g = randint(0, 255)
        b = randint(0, 255)
        pygame.draw.circle(screen, (r, g, b,), (mx, my), 50)
        # 处理完,更新显示
        pygame.display.update()
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonSo verwenden Sie das Event-Ereignismodul von Pygame in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP und Python: Verschiedene Paradigmen erklärt PHP und Python: Verschiedene Paradigmen erklärt Apr 18, 2025 am 12:26 AM

PHP ist hauptsächlich prozedurale Programmierung, unterstützt aber auch die objektorientierte Programmierung (OOP). Python unterstützt eine Vielzahl von Paradigmen, einschließlich OOP, funktionaler und prozeduraler Programmierung. PHP ist für die Webentwicklung geeignet, und Python eignet sich für eine Vielzahl von Anwendungen wie Datenanalyse und maschinelles Lernen.

Wählen Sie zwischen PHP und Python: Ein Leitfaden Wählen Sie zwischen PHP und Python: Ein Leitfaden Apr 18, 2025 am 12:24 AM

PHP eignet sich für Webentwicklung und schnelles Prototyping, und Python eignet sich für Datenwissenschaft und maschinelles Lernen. 1.PHP wird für die dynamische Webentwicklung verwendet, mit einfacher Syntax und für schnelle Entwicklung geeignet. 2. Python hat eine kurze Syntax, ist für mehrere Felder geeignet und ein starkes Bibliotheksökosystem.

Python vs. JavaScript: Die Lernkurve und Benutzerfreundlichkeit Python vs. JavaScript: Die Lernkurve und Benutzerfreundlichkeit Apr 16, 2025 am 12:12 AM

Python eignet sich besser für Anfänger mit einer reibungslosen Lernkurve und einer kurzen Syntax. JavaScript ist für die Front-End-Entwicklung mit einer steilen Lernkurve und einer flexiblen Syntax geeignet. 1. Python-Syntax ist intuitiv und für die Entwicklung von Datenwissenschaften und Back-End-Entwicklung geeignet. 2. JavaScript ist flexibel und in Front-End- und serverseitiger Programmierung weit verbreitet.

Kann gegen Code in Windows 8 ausgeführt werden Kann gegen Code in Windows 8 ausgeführt werden Apr 15, 2025 pm 07:24 PM

VS -Code kann unter Windows 8 ausgeführt werden, aber die Erfahrung ist möglicherweise nicht großartig. Stellen Sie zunächst sicher, dass das System auf den neuesten Patch aktualisiert wurde, und laden Sie dann das VS -Code -Installationspaket herunter, das der Systemarchitektur entspricht und sie wie aufgefordert installiert. Beachten Sie nach der Installation, dass einige Erweiterungen möglicherweise mit Windows 8 nicht kompatibel sind und nach alternativen Erweiterungen suchen oder neuere Windows -Systeme in einer virtuellen Maschine verwenden müssen. Installieren Sie die erforderlichen Erweiterungen, um zu überprüfen, ob sie ordnungsgemäß funktionieren. Obwohl VS -Code unter Windows 8 möglich ist, wird empfohlen, auf ein neueres Windows -System zu upgraden, um eine bessere Entwicklungserfahrung und Sicherheit zu erzielen.

PHP und Python: Ein tiefes Eintauchen in ihre Geschichte PHP und Python: Ein tiefes Eintauchen in ihre Geschichte Apr 18, 2025 am 12:25 AM

PHP entstand 1994 und wurde von Rasmuslerdorf entwickelt. Es wurde ursprünglich verwendet, um Website-Besucher zu verfolgen und sich nach und nach zu einer serverseitigen Skriptsprache entwickelt und in der Webentwicklung häufig verwendet. Python wurde Ende der 1980er Jahre von Guidovan Rossum entwickelt und erstmals 1991 veröffentlicht. Es betont die Lesbarkeit und Einfachheit der Code und ist für wissenschaftliche Computer, Datenanalysen und andere Bereiche geeignet.

Kann Visual Studio -Code in Python verwendet werden Kann Visual Studio -Code in Python verwendet werden Apr 15, 2025 pm 08:18 PM

VS -Code kann zum Schreiben von Python verwendet werden und bietet viele Funktionen, die es zu einem idealen Werkzeug für die Entwicklung von Python -Anwendungen machen. Sie ermöglichen es Benutzern: Installation von Python -Erweiterungen, um Funktionen wie Code -Abschluss, Syntax -Hervorhebung und Debugging zu erhalten. Verwenden Sie den Debugger, um Code Schritt für Schritt zu verfolgen, Fehler zu finden und zu beheben. Integrieren Sie Git für die Versionskontrolle. Verwenden Sie Tools für die Codeformatierung, um die Codekonsistenz aufrechtzuerhalten. Verwenden Sie das Lining -Tool, um potenzielle Probleme im Voraus zu erkennen.

So führen Sie Programme in der terminalen VSCODE aus So führen Sie Programme in der terminalen VSCODE aus Apr 15, 2025 pm 06:42 PM

Im VS -Code können Sie das Programm im Terminal in den folgenden Schritten ausführen: Erstellen Sie den Code und öffnen Sie das integrierte Terminal, um sicherzustellen, dass das Codeverzeichnis mit dem Terminal Working -Verzeichnis übereinstimmt. Wählen Sie den Befehl aus, den Befehl ausführen, gemäß der Programmiersprache (z. B. Pythons Python your_file_name.py), um zu überprüfen, ob er erfolgreich ausgeführt wird, und Fehler auflösen. Verwenden Sie den Debugger, um die Debugging -Effizienz zu verbessern.

Ist die VSCODE -Erweiterung bösartig? Ist die VSCODE -Erweiterung bösartig? Apr 15, 2025 pm 07:57 PM

VS -Code -Erweiterungen stellen böswillige Risiken dar, wie das Verstecken von böswilligem Code, das Ausbeutetieren von Schwachstellen und das Masturbieren als legitime Erweiterungen. Zu den Methoden zur Identifizierung böswilliger Erweiterungen gehören: Überprüfung von Verlegern, Lesen von Kommentaren, Überprüfung von Code und Installation mit Vorsicht. Zu den Sicherheitsmaßnahmen gehören auch: Sicherheitsbewusstsein, gute Gewohnheiten, regelmäßige Updates und Antivirensoftware.

See all articles