Witzprogramm : Haben Sie Langeweile???

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Olaf
Beiträge: 117
Registriert: 20.04.2006 14:51
Wohnort: 66606 St.Wendel (Niederlinxweiler, Dr.Albert-Schweitzer-Str.9)
Kontaktdaten:

Witzprogramm : Haben Sie Langeweile???

Beitrag von Olaf »

:mrgreen:
Also hier kommt ein kleines, aber sehr effizientes Witzprogramm, um andere Leute zu ärgern (aber ohne Schaden anzurichten):
Es erscheint ein MessageRequester und fragt, ob man Langeweile hat.
Falls nein, endet das Programm, andernfalls öffnen sich 100 Fenster mit der Nachfrage, ob man immer noch Langeweile hat. Beantwortet man diese
mit nein, schließt sich das betroffene Fenster, die anderen bleiben erhalten.
Beantwortet man die frage jedoch mit Ja, so öffnen sich 100 weitere Fenster :twisted: .

Der Clue:
-Die Fenster reagieren nicht auf Alt+F4 und nicht auf "Gruppe schließen"
-Auf jedem Fenster wird aktualisiert, wie viele Fenster noch zu schließen sind

Um das Killen des Prozesses durch den Taskmanager zu verhindern, einfach
das fertige Executable wie einen Systemprozess benennen
(z.B. "lsass.exe","winlogon.exe",etc. schaut am besten mal im Taskmanager nach bei Prozessen, die als Benutzer SYSTEM haben)

Der Code soll zeigen, wie man veränderliche Variablen als Identifier für Fenster und Gadgets verwendet und wie man die Events dann abfragt.

Code: Alles auswählen

#Alt_F4=0
Select MessageRequester("Langeweile","Haben Sie Langeweile ?",#PB_MessageRequester_YesNo)
	Case #PB_MessageRequester_Yes
		Goto Begin
	Case #PB_MessageRequester_No
		MessageRequester("Langeweile","Schade !")
		End
EndSelect
Begin:
ExamineDesktops()
For x=1 To 100
	OpenWindow(ID,Random(DesktopWidth(0)-200),Random(DesktopHeight(0)-90),200,90,"Langeweile",#PB_Window_TitleBar)
	AddKeyboardShortcut(ID,#PB_Shortcut_Alt|#PB_Shortcut_F4,#Alt_F4)
	Anz+1
	Max+1
	CreateGadgetList(WindowID(ID)):ID+1
		TextGadget(ID,10,10,180,20,"Haben Sie immer noch Langeweile ?",#PB_Text_Center):ID+1
		TextGadget(ID,10,30,180,20,"",#PB_Text_Center):ID+1
		ButtonGadget(ID,10,50,90,20,"Nein, nicht mehr"):ID+1
		ButtonGadget(ID,100,50,90,20,"Ja, immer noch"):ID+1
Next x
For Window=0 To Max
	WID=5*Window
	If IsWindow(WID)
		SetGadgetText(WID+2,"(noch "+Str(Anz)+" Fenster)")
	EndIf
Next Window

Repeat
	event=WaitWindowEvent()
		Select event
			Case #PB_Event_Menu
				Select EventMenu()
					Case #Alt_F4
						MessageRequester("Langeweile","Tut mir Leid..."+Chr(10)+Chr(10)+"...aber Alt + F4 funktioniert nicht."+Chr(10)+Chr(10)+"                    :-)")
				EndSelect
			Case #PB_Event_Gadget
				WID=EventGadget()
				If	WID % 5 = 3
					CloseWindow(EventWindow())
					Anz-1
					For Window=0 To Max
						WID=5*Window
						If IsWindow(WID)
							SetGadgetText(WID+2,"(noch "+Str(Anz)+" Fenster)")
						EndIf
					Next Window
				ElseIf WID % 5 = 4
					Goto Begin
				EndIf
		EndSelect
Until Anz<=0
tranquil
Beiträge: 117
Registriert: 22.09.2004 22:07
Kontaktdaten:

Beitrag von tranquil »

Lustig. Habe ich gleich mal meiner Chefin als Mailanhang geschickt. Die klickt eh auf JEDEN Anhang. :D
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

lol, echt...
Habe schon einen Schock gekriegt, weil mein 550er hier zwei Momente lang wie eingefroren wiorkte, als deine Fenster aufsprangen.
Gut gelungen! :allright:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Ground0
Beiträge: 318
Registriert: 05.02.2005 02:09
Wohnort: Stilli, Schweiz
Kontaktdaten:

Beitrag von Ground0 »

Hehe bringt sogar nen P4 2.4GHz in die Knie :D

Must es mal wenn alle Fenster Offen sind und noch ein paar mal auf Ja Immer noch geklikt hast mit PureBASIC Killen das geht ne wewikeit :)

Gruss G0
lmon Monitoring Service inkl. Clients
lweb Multi-Threaded Webserver
lbup-server Backup Server applikation
lmanager ERP Applikation.
Benutzeravatar
Olaf
Beiträge: 117
Registriert: 20.04.2006 14:51
Wohnort: 66606 St.Wendel (Niederlinxweiler, Dr.Albert-Schweitzer-Str.9)
Kontaktdaten:

Beitrag von Olaf »

Das gibt nen echten Performance-Einbruch:
In der For-Schleife, die die Fenster erzeugt mal "100" gegen "1000"
austauschen :mrgreen: !!!

Momentan schreib' ich ne Routine, die verhindert, dass der Taskmanager
gestartet werden kann... :twisted:
Da sag ich nur "viel Spaß", wenn's als EXE gestartet wird. :bluescreen:
PB 4.xx (Windows & Linux & Mac OS X)
Treffen sich 2 Kurven in der Unendlichkeit. Sagt die eine zur anderen: "Hau ab aus meinem Definitionsbereich oder ich leite dich ab!"
Darauf die andere: "Mach nur! Ich bin die e-Funktion." :lol:
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Dann bleibt mir immer noch die Möglichkeit, eine Verknüpfung zu erstellen, die man unter XP ja per Shortcut aufrufen kann. Dann lass ich nämlich

taskkill.exe /f /im %EXECUTABLE

ausführen, wobei %EXECUTABLE ja eine Art Umgebungsvariable von PB ist und den EXE-Namen der Datei meint. :twisted:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Olaf
Beiträge: 117
Registriert: 20.04.2006 14:51
Wohnort: 66606 St.Wendel (Niederlinxweiler, Dr.Albert-Schweitzer-Str.9)
Kontaktdaten:

Beitrag von Olaf »

@AND51
Ja klar, aber die meisten User, die ich kenne wissen nicht mal, wie man den
Explorer aufruft, geschweige denn, was der Taskmanager überhaupt ist.
Und dass die auf die Idee mit taskkill.exe kommen....?
PB 4.xx (Windows & Linux & Mac OS X)
Treffen sich 2 Kurven in der Unendlichkeit. Sagt die eine zur anderen: "Hau ab aus meinem Definitionsbereich oder ich leite dich ab!"
Darauf die andere: "Mach nur! Ich bin die e-Funktion." :lol:
Jilocasin
Beiträge: 665
Registriert: 13.05.2006 16:04
Kontaktdaten:

Beitrag von Jilocasin »

Hihi.. hab auch mal so was gemacht::lol: :lol:
Ist zwar nicht ganz so gut, aber egal..

Code: Alles auswählen


#IDOK = 1
#IDCANCEL = 2
#IDABORT = 3
#IDRETRY = 4
#IDIGNORE = 5
#IDYES = 6
#IDNO = 7
#IDPROMPT = $FFFF

Global hHook
Global mbtitle$, mbmsg$, mbopt1$


Procedure MsgBoxHookProc (uMsg, wParam, lParam)
   If uMsg = #HCBT_ACTIVATE
      SetWindowText_ (wParam, mbtitle$)
      SetDlgItemText_ (wParam, #IDOK, mbopt1$)
      SetDlgItemText_ (wParam, #IDPROMPT, mbmsg$)
      UnhookWindowsHookEx_ (hHook)
   EndIf
   ProcedureReturn #False
EndProcedure

Procedure MessageBoxH ( message$, button1$,Length)
   mbtitle$ = "Info"
   mbmsg$ = message$
   mbopt1$ = button1$
   hInstance = GetModuleHandle_(0)
   hThreadId = GetCurrentThreadId_()
   hHook = SetWindowsHookEx_(#WH_CBT, @MsgBoxHookProc(), hInstance, hThreadId)
   ProcedureReturn MessageBox_(parentWindow, Space(Length),Space(Length),#MB_OK | #MB_ICONINFORMATION)
EndProcedure

MessageBoxH("Sie haben sich soeben entschieden ihren Bildschirm zu zerstören.", "Richtig",90)

MessageBoxH("Dabei wird auch ihre Grafikkarte zerstört, wussten Sie das?", "Ja",80)

MessageBoxH("Nun gut, wenn Sie es gewusst haben, sind sie damit sicher auch einverstanden, oder?", "Natürlich",120)

MessageBoxH("Dann kann es ja losgehen!", "Ja, bitte",60)

MessageBoxH("Jetzt mit der Zerstörung beginnen?", "Einverstanden",60)

MessageBoxH("Wollen Sie es sich nicht noch einmal anders überlegen?", "Nein",80)

MessageBoxH("OK, Sie haben das Programm nicht abgebrochen also...", "Weiter",80)

MessageBoxH("WARNUNG! BITTE WÄHREND DES VORGANGS NICHTS ANFASSEN, SONST WIRD WINDOOF GLEICH MITZERSTÖRT", "Jaa, OK",150)



#SC_MONITORPOWER = $F170

SendMessage_(#HWND_BROADCAST, #WM_SYSCOMMAND, #SC_MONITORPOWER, 2)
Delay(1000)

SendMessage_(#HWND_BROADCAST, #WM_SYSCOMMAND, #SC_MONITORPOWER, 1)
Delay(15000)


SendMessage_(#HWND_BROADCAST, #WM_SYSCOMMAND, #SC_MONITORPOWER, -1)



MessageRequester("Und?","Hattest du Schiss?",#PB_MessageRequester_YesNo)


Man darf leider nur nicht die Maus bewegen .. :(
Bild
Benutzeravatar
Olaf
Beiträge: 117
Registriert: 20.04.2006 14:51
Wohnort: 66606 St.Wendel (Niederlinxweiler, Dr.Albert-Schweitzer-Str.9)
Kontaktdaten:

Beitrag von Olaf »

Soo...hm...ich war jetzt schon ne halbe Ewigkeit nicht mehr im Forum tätig gewesen. Das war nämlich zwischenzeitlich durch Schule
und einige Großprojekte völlig in Vergessenheit geraten :oops: . Hab nun grade mal wieder kurz Zeit gefunden,
mich doch nochmal 'n bisschen hier wieder umzuschauen. Da ist mir gerade mal wieder ein Uralter Code von mir aufgefallen.
Weil ich gerade nichts besseres zu tun hatte, habe ich ihn grade mal wieder überarbeitet.

Nun ja, ich weiß, dass der Code nichts besonderes ist, aber ein bisschen witzig ist er schon.
Ich glaube, ich werde die nächsten paar Tage mal wieder 'n bisschen was für's Forum machen. :wink:

Code: Alles auswählen

hDesktop.l=FindWindow_("Progman","Program Manager") ;Handle des Dektops.
;Wird später als ParentWindow für die anderen Fenster benutzt.
;Diese werden dadurch dann nicht in der Taskleiste sichtbar.

Procedure NoControlProgramsThread() ;Thread zum vermeiden von Taskmanager & Co.
  Repeat ;Wir wollen ja schließlich eine ständige Überwachung...
    hTaskManager.l=FindWindow_("#32770","Windows Task-Manager") ;Handle des Taskmanager-Fensters
    If hTaskManager ;Wenn der Task-Manager geöffnet ist...
      SendMessage_(hTaskManager,#WM_CLOSE,0,0) ;...schließen
      MessageRequester("Langeweile - ERROR","Das Öffnen des "+Chr(34)+"Windows Task-Managers"+Chr(34)+Chr(10)+"wurde unterbunden.",#MB_ICONSTOP)
    EndIf
    hAusfuehren.l=FindWindow_("#32770","Ausführen") ;Handle des "Ausführen"-Dialogs
    If hAusfuehren ;Wenn der Dialog geöffnet ist...
      SendMessage_(hAusfuehren,#WM_CLOSE,0,0) ;...schließen
      MessageRequester("Langeweile - ERROR","Das Öffnen des Dialogs "+Chr(34)+"Ausführen"+Chr(34)+Chr(10)+" wurde unterbunden.",#MB_ICONSTOP)
    EndIf
    hCMD.l=FindWindow_("ConsoleWindowClass","Eingabeaufforderung") ;Handle der Eingabeaufforderung
    If hCMD ;Wenn die Eingabeaufforderung geöffnet ist...
      SendMessage_(hCMD,#WM_CLOSE,0,0);...schließen
      MessageRequester("Langeweile - ERROR","Das Öffnen der "+Chr(34)+"Eingabeaufforderung"+Chr(34)+Chr(10)+" wurde unterbunden.",#MB_ICONSTOP)
    EndIf
    Delay(10) ;Wir wolen ja nicht die ganze CPU-Zeit beanspruchen...
  ForEver
EndProcedure

CreateThread(@NoControlProgramsThread(),0) ;Überwachungsthread aktivieren

Enumeration 0 ;Konstanten müssen wegen des Verfahrens der Eventüberprüfung
                ;via Modulo bei 0 beginnen
  #Text
  #Info
  #No_
  #Yes
  ;Nach allen Gadgets erhält #MAX_GADGETS den Wert des letzten Gadgets+1, also die
  ;Anzahl der Gadgets und somit die Konstante, die später bei Modulo verwendet werden muss.
  ;Daher muss #MAX_GADGETS immer nach allen Konstanten stehen.
  #MAX_GADGETS
EndEnumeration

If MessageRequester("Langeweile","Haben Sie Langeweile?",#PB_MessageRequester_YesNo|#MB_ICONQUESTION)=#PB_MessageRequester_No
  MessageRequester("Langeweile - ERROR","Leider ist ein Fehler unterlaufen"+Chr(10)+"und das Programm startet dennoch.",#MB_ICONSTOP)
EndIf

NB.l
Wdh.l=100 ;Anzahl der neu zu öffnenden Fenster
SX.l=GetSystemMetrics_(#SM_CXSCREEN) ;Bildschirmbreite
SY.l=GetSystemMetrics_(#SM_CYSCREEN) ;Bildschirmhöhe
Anz.l=0
Max.l=0
WX.l=200
WY.l= 90

New:

For NB=1 To Wdh
  hWnd=OpenWindow(Max,Random(SX-WX),Random(SY-WY-30),WX,WY,"Langeweile",#PB_Window_TitleBar,hDesktop) ;Öffnen eines neuen Fensters mit Desktopals ParentWindow
    CreateGadgetList(hWnd)
      TextGadget(Max*#MAX_GADGETS+#Text,  10,10,180,20,"Haben Sie immer noch Langeweile?",#PB_Text_Center)
      TextGadget(Max*#MAX_GADGETS+#Info,  10,30,180,20,"",#PB_Text_Center)
      ButtonGadget(Max*#MAX_GADGETS+#No_, 10,50, 85,20,"Nein, nicht mehr")
      ButtonGadget(Max*#MAX_GADGETS+#Yes,105,50, 85,20,"Ja, immer noch")
  Anz+1 ;Realanzahl der geöffneten Fenster um 1 erhöhen
  Max+1 ;höchste WindowID um 1 erhöhen
Next NB

For WID=0 To Max ;Für alle Fenster...
  If IsWindow(WID) ;...falls sie existieren...
    SetGadgetText(WID*#MAX_GADGETS+#Info,"(noch "+Str(Anz)+" Fenster)") ;die Anzahl der noch offenen Fenster aktualisieren.
  EndIf
Next WID

Repeat
  event=WaitWindowEvent()
  Select event
    Case #PB_Event_Gadget
      Select EventGadget()%#MAX_GADGETS
        Case #No_ ;Keine Langeweile mehr...
          CloseWindow(EventWindow()) ;...na dann können wir ja gnadenhalber 1 Fenster schließen xD
          Anz-1 ;Realanzahl der noch geöffneten Fenster verringert sich natürlich dann um 1
          For WID=0 To Max ;Für alle Fenster Anzeige aktualisieren
            If IsWindow(WID)
              SetGadgetText(WID*#MAX_GADGETS+#Info,"(noch "+Str(Anz)+" Fenster)")
            EndIf
          Next WID
        Case #Yes ;Unser User hat noch Langeweile...
          Goto New ;...na dann geben wir Ihm halt noch mehr Arbeit xD
      EndSelect
    Case #PB_Event_CloseWindow ;Naja...für schnelles schließen könnte er ja Alt+F4 verwenden...bei mir nich...
      MessageRequester("Langeweile - ERROR","Die Funktion "+Chr(34)+"Alt+F4"+Chr(34)+" zum Schließen"+Chr(10)+"von Fenstern funktioniert nicht.",#MB_ICONSTOP)
  EndSelect
Until Anz<=0

If MessageRequester("Langeweile","Nun dürfte Ihnen wohl kaum noch langweilig sein."+Chr(10)+"Möchten Sie das Programm dennoch erneut starten?",#PB_MessageRequester_YesNo|#MB_ICONINFORMATION)=#PB_MessageRequester_Yes
  Goto New
EndIf
PB 4.xx (Windows & Linux & Mac OS X)
Treffen sich 2 Kurven in der Unendlichkeit. Sagt die eine zur anderen: "Hau ab aus meinem Definitionsbereich oder ich leite dich ab!"
Darauf die andere: "Mach nur! Ich bin die e-Funktion." :lol:
Antworten