Seite 1 von 1

RunDll32

Verfasst: 06.11.2005 21:01
von Programie
Ich hab heute mal ein "kleines" Programm geschrieben.
Das Programm hat kein Fenster (Openwindow(...)).

Es läuft mit einem Systrayicon.

Naja hier ist der PB Code:

Code: Alles auswählen

OpenFile(0,"System.txt"):CloseFile(0); Wird nur benutzt, damit die Datei erstellt wird, wenn sie nicht erstellt wurde. Wird der Editor benutzt, braucht man diese Zeile nicht (Ich habe es durch RunProgram("Preferences.xe") ersetzt).
OpenPreferences("System.txt"); Die Datei muss jeder selbst bearbeiten oder den Einstellungseditor benützen (siehe unten)
 Image$ =ReadPreferenceString("Icon","")
 System$=ReadPreferenceString("Systempath","")
 Font$  =ReadPreferenceString("Font","D")
ClosePreferences()
If ReadFile(0,Image$)
 CloseFile(0)
Else
 MessageRequester("Fehler","Systrayicon wurde nicht gefunden!"+Chr(13)+"> "+Image$+" <",0):End
EndIf

If Font$="D"
Prog$="RunDll"
EndIf
If Font$="L"
Prog$="rundll"
EndIf
If Font$="U"
Prog$="RUNDLL"
EndIf

Run$=System$+Prog$+"32.exe"
If OpenWindow(0,0,0,0,0,#PB_Window_Invisible,Prog$,0)
  If CreatePopupMenu(0)
   OpenSubMenu("Power")
    MenuItem( 0,"Abmelden")
    MenuItem( 1,"Benutzer wechseln")
    MenuItem( 2,"Herunterfahren")
    MenuItem( 3,"Neustarten")
    MenuItem( 4,"Ruhezustand")
    MenuItem( 5,"Standby")
   CloseSubMenu()
   OpenSubMenu("Steuerung")
    MenuItem( 6,"Systemsteuerung öffnen")
    MenuBar()
    MenuItem( 7,"Maus")
    MenuItem( 8,"Tastatur")
    MenuItem( 9,"Drucker")
    MenuItem(10,"Schriftarten")
    MenuItem(11,"Energie")
   CloseSubMenu()
   OpenSubMenu("Eingabehilfen")
    MenuItem(12,"Tastatur")
    MenuItem(13,"Sound")
    MenuItem(14,"Anzeige")
    MenuItem(15,"Maus")
    MenuItem(16,"Allgemein")
   CloseSubMenu()
   OpenSubMenu("Software")
    MenuItem(17,"Hinzufügen")
    MenuItem(18,"Entfernen")
    MenuBar()
    MenuItem(19,"Setup")
   CloseSubMenu()
   OpenSubMenu("Anzeige")
    MenuItem(20,"Hintergrund")
    MenuItem(21,"Bildschirmschoner")
    MenuItem(22,"Darstellung")
   CloseSubMenu()
   OpenSubMenu("Eigenschaften")
    MenuItem(23,"Maus")
    MenuItem(24,"Tastatur")
   CloseSubMenu()
   OpenSubMenu("Netzwerk")
    MenuItem(25,"Laufwerk verbinden")
    MenuItem(26,"Laufwerk trennen")
   CloseSubMenu()
   OpenSubMenu("Hardware")
    MenuItem(27,"Hardware entfernen")
   CloseSubMenu()
    MenuItem(28,"Information")
    MenuBar()
    MenuItem(29,"Beenden")
  EndIf
   AddSysTrayIcon(0,WindowID(),LoadImage(0,Image$))
   SysTrayIconToolTip(0,Prog$)
 Repeat
  Event=WaitWindowEvent()
   If Event=#PB_Event_SysTray
    If EventType()=#PB_EventType_RightClick
     DisplayPopupMenu(0,WindowID())
    EndIf
   EndIf
   If Event=#PB_Event_Menu
    Select EventMenuID()
     Case 0
      RunProgram(System$+"Logoff.exe")
     Case 1
      RunProgram(Run$,"user32.dll,LockWorkStation","",0)
     Case 2
      RunProgram(Run$,"Shell32.dll,SHExitWindowsEx 1","",0)
     Case 3
      RunProgram(Run$,"Shell32.dll,SHExitWindowsEx 2","",0)
     Case 4
      RunProgram(Run$,"Shell32.dll,SHExitWindowsEx 3","",0)
     Case 5
      RunProgram(Run$,"Shell32.dll,SHExitWindowsEx 5","",0)
     Case 6
      RunProgram(Run$,"Shell32.dll,Control_RunDLL","",0)
     Case 7
      RunProgram(Run$,"Shell32.dll,Control_RunDLL main.cpl,@0","",0)
     Case 8
      RunProgram(Run$,"Shell32.dll,Control_RunDLL main.cpl,@1","",0)
     Case 9
      RunProgram(Run$,"Shell32.dll,Control_RunDLL main.cpl,@2","",0)
     Case 10
      RunProgram(Run$,"Shell32.dll,Control_RunDLL main.cpl,@3","",0)
     Case 11
      RunProgram(Run$,"Shell32.dll,Control_RunDLL main.cpl,@4","",0)
     Case 12
      RunProgram(Run$,"shell32.dll,Control_RunDLL access.cpl,,1","",0)
     Case 13
      RunProgram(Run$,"shell32.dll,Control_RunDLL access.cpl,,2","",0)
     Case 14
      RunProgram(Run$,"shell32.dll,Control_RunDLL access.cpl,,3","",0)
     Case 15
      RunProgram(Run$,"shell32.dll,Control_RunDLL access.cpl,,4","",0)
     Case 16
      RunProgram(Run$,"shell32.dll,Control_RunDLL access.cpl,,5","",0)
     Case 17
      RunProgram(Run$,"shell32.dll,Control_RunDLL appwiz.cpl,,1","",0)
     Case 18
      RunProgram(Run$,"shell32.dll,Control_RunDLL appwiz.cpl,,0","",0)
     Case 19
      RunProgram(Run$,"shell32.dll,Control_RunDLL appwiz.cpl,,2","",0)
     Case 20
      RunProgram(Run$,"shell32.dll,Control_RunDLL desk.cpl,,0","",0)
     Case 21
      RunProgram(Run$,"shell32.dll,Control_RunDLL desk.cpl,,1","",0)
     Case 22
      RunProgram(Run$,"shell32.dll,Control_RunDLL desk.cpl,,2","",0)
     Case 23
      RunProgram(Run$,"shell32.dll,Control_RunDLL main.cpl @0","",0)
     Case 24
      RunProgram(Run$,"shell32.dll,Control_RunDLL main.cpl @1","",0)
     Case 25
      RunProgram(Run$,"shell32.dll,SHHelpShortcuts_RunDLL Connect","",0)
     Case 26
      RunProgram(Run$,"shell32.dll,SHHelpShortcuts_RunDLL Disconnect","",0)
     Case 27
      RunProgram(Run$,"shell32.dll,Control_RunDLL hotplug.dll","",0)
     Case 28
      RunProgram(Run$,"Shell32.dll,ShellAboutA","",0)
     Case 29
      Quit=MessageRequester(Prog$,"Soll das Systrayicon jetzt etfernt werden?",#PB_MessageRequester_YesNo)
       If Quit=6
        End
       EndIf
    EndSelect
   EndIf
 Until Event=#PB_Event_CloseWindow
EndIf
Und hier ist der Einstellungseditorcode:

Code: Alles auswählen

New:
Icon$=OpenFileRequester("Systrayicon suchen",Icon$,"Icon (*.ico)|*.ico",0)
Sys$ =PathRequester("System32pfad suchen",Sys$)
Font$=InputRequester("Schriftart wählen","D=Normal (Aa) L=Klein (aa) U=Groß (AA)",Font$)
If Font$="L"
FontText$="LowerCase"
ElseIf Font$="U"
FontText$="UpperCase"
Else
FontText$="Default"
EndIf
OpenConsole()
ConsoleLocate(10,10)
Print("Systrayicon: "+Icon$)
ConsoleLocate(10,11)
Print("System32pfad: "+Sys$)
ConsoleLocate(10,12)
Print("Schriftart: "+FontText$)
ConsoleLocate(10,15)
Print("OK?")
ConsoleLocate(10,16)
Print("A=Abbrechen  J=Ja  N=Nein")
ConsoleLocate(10,20)
In$=Input()
Print(In$)
If In$="A"
CloseConsole()
End
EndIf
If In$="J"
ConsoleLocate(10,30)
Print("Erstelle Einstellungsdatei")
CreatePreferences("System.txt")
Print("Schreibe Icon in die Datei")
WritePreferenceString("Icon",Icon$)
Print("Schreibe Systemverzeichnis in die Datei")
WritePreferenceString("Systempath",Sys$)
Print("Schreibe Schriftart in die Datei")
WritePreferenceString("Font",Font$)
Print("Schließe Datei")
ClosePreferences()
Print("Fertig")
Delay(1000)
CloseConsole()
EndIf
If In$="N"
ConsoleLocate(10,30)
Print("Es werden nun die Einstellungen neugestartet...")
Delay(3000)
CloseConsole()
Goto New:
EndIf
; Bei diesem Code hatte ich lust auf eine Konsolenanwendung.

Verfasst: 06.11.2005 21:37
von ts-soft
Naja, *hust
hab meine Systemsteuerung so eingestellt, das sie autom. aufklappt, ist immer Vollständig und bedarf keines extra Programmes im systray, also total überflüssig.
Aber als Einsteiger hab ich früher auch solche, bzw. ähnliche Programme erstellt und man lernt eigentlich immer dazu. Mach also einfach weiter, wird im Laufe der Zeit schon besser. Wirklich nützliche Programme zu Schreiben ist sowieso nicht so einfach, das meiste gibt es schon. Bis Du da was gefunden hast, einfach weiter Üben :allright:

Verfasst: 08.11.2005 17:09
von Agent
Also, ich würde ihn jetzt nicht so runterziehen. Über die art des codens und die Fehlerabfragen sehen wir mal hinweg. Grundsätzlich ist das mini-Tool "brauchbar" - wenn man davon ausgeht, dass es EDV-Leute gibt, die vielleicht öfters an verschiedenen Systemen arbeiten (müssen) und ständig was an der konfig ändern müssen. Die ersparen sich da vielleicht Zeit. Ich selbst brauch es ebenfalls nicht.

Außerdem solltest du "universeller" denken. Mich stört, das im ganzen Programm nahezu null Fehlerabfragen laufen. Habs so wie es ist gestartet. passiert nix (sichtbares). Er hat das Icon und die Pref nicht gefunden und meckert nicht. Der System-Pfad muss automatisch ermittelt werden (nutz die Suche vom Forum). Die Schreibweise der dll spielt keine Rolle, kannste weglassen usw...

Aber in einem hat TS-Soft auf jeden Fall recht: üben, üben, üben. Gilt für mich auch. Ich hab den Code in mein Archiv gepackt, vielleicht brauch ich ja mal solche aufrufe ;)

Verfasst: 08.11.2005 17:25
von ts-soft
Ich habe ihn oder sein Programm ja nicht heruntergezogen, das wurde dann verkehrt verstanden. Habe lediglich darauf hingewiesen, das es nicht allzu nützlich ist. Ich denke solche Dinge möchte er ja auch erfahren, wenn er so eine Umfrage startet :wink: . Bin doch auf den Programmierstil diesmal garnicht eingegangen :roll: