Bei empfangenem String Computer Herunterfahren

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Ah ok es klappt schonmal. Aber wo geb ich denn ein ob ich zb. Neustarten will oder Herunterfahren will?
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

Joel hat geschrieben:Ah ok es klappt schonmal. Aber wo geb ich denn ein ob ich zb. Neustarten will oder Herunterfahren will?
...nicht nur Copy-Paste, sondern verstehen:

Win 98:

Code: Alles auswählen

    #EWX_FORCE=4
    #EWX_LOGOFF=0
    #EWX_REBOOT=2
    #EWX_SHUTDOWN=1
WinXP:

Code: Alles auswählen

    #EWX_LOGOFF = 0
    #EWX_SHUTDOWN = 1
    #EWX_REBOOT = 2
    #EWX_FORCE = 4
    #EWX_POWEROFF = 8 
Versuch dir den Code doch mal zu Gemüte zu führen :allright:

Gr33tz
Tafkadasom2k5

Edit:
Habe gerade gesehen, dass Falo nen eigenen "Endmode" in seinem Code benutzt, also musst du (zumindest wies vom Übefliegen her aussieht) eine "3" eingeben ;)

Oder du nimmst einfach seine Funktionen und Strukturen, und setzt an den entsprechenden Stellen diese Konstanten ein...
Das nächste Mal werde ich erst genauer lesen, und dann 'meckern' :wink:
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Ich versteh nicht was du meinst, wo soll ich das eigenben?

Da gibt es so viele stellen wo man das eisetzen kann.
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

Du kopierst seinen Cource und gibst in die Funktion
ShutdownWIN()
einmal "0", einmal "1" und "2" ein.

Seine QuelltextKommentare sind doch eigentlich recht aussagekräftig.

Gr33tz
Tafkadasom2k5
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Ich hab was im Archiv gefunden dass klappt (mit Privilegen :) )

Code: Alles auswählen

#EWX_LOGOFF = 0 
#EWX_SHUTDOWN = 1 
#EWX_REBOOT = 2 
#EWX_FORCE = 4 
#EWX_POWEROFF = 8 
#TOKEN_ADJUST_PRIVILEGES = 32    
#TOKEN_QUERY = 8                
#SE_PRIVILEGE_ENABLED = 2      
#ANYSIZE_ARRAY = 1 
#VER_PLATFORM_WIN32_NT = 2 
#SE_SHUTDOWN_NAME = "SeShutdownPrivilege" 

Structure MyLUID 
LowPart.l 
HighPart.l 
Attributes.l 
EndStructure 

Structure MyTOKEN 
PrivilegeCount.l 
LowPart.l 
HighPart.l 
Attributes.l 
EndStructure 

Global hdlProcessHandle.l 
Global hdlTokenHandle.l 
Global tmpLuid.MyLUID 
Global tkp.MyToken 
Global tkpNewButIgnored.MyToken 
Global lBufferNeeded.l 

hdlProcessHandle = GetCurrentProcess_() 

OpenProcessToken_(hdlProcessHandle, #TOKEN_ADJUST_PRIVILEGES | #TOKEN_QUERY, @hdlTokenHandle) 

; Get the LUID for shutdown privilege 
SysName.s = "" + Chr(0) 
Name.s = "SeShutdownPrivilege" + Chr(0) 
Erg.l = LookupPrivilegeValue_(SysName, Name, @tmpLuid) 

tmpLuid\Attributes = #SE_PRIVILEGE_ENABLED 
tkp\PrivilegeCount = 1 
tkp\LowPart = tmpLuid\LowPart 
tkp\HighPart = tmpLuid\HighPart 
tkp\Attributes = tmpLuid\Attributes 

; Enable the shutdown privilege in the access token of this process 
Erg.l = AdjustTokenPrivileges_(hdlTokenHandle, 0, @tkp, SizeOf(MyTOKEN), @tkpNewButIgnored, @lblBufferNeeded) 
Erg.l = ExitWindowsEx_((#EWX_LOGOFF), 0) 
Zuletzt geändert von Joel am 16.08.2006 19:22, insgesamt 1-mal geändert.
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Edit: Ich möchte dass der Server einen Code nur dann ausführt wenn er den String: "test" gesendet bekommt. Wie finde ich heraus ob der "test" heißt?
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
kiki
Beiträge: 155
Registriert: 06.05.2006 17:54

Beitrag von kiki »

Ich hab nach den ersten Versuchen auch nichts hinbekommen /:-> aber vielleicht finden andere eine lösung, wie man das rausfindet.
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Beitrag von Blackskyliner »

Gib doch mal deinen letzten Source vom Server, damit man auch mit aktuellen Sachen arbeiten kann und nicht suchen muss...

Achja und ein paar Stichworte: ReceiveNetworkData, PeekS
Keine meiner Antworten ist endgültig, es kann passieren, dass ich den so eben geposteten Beitrag noch mehrmals ändere, um Doppelposts zu umgehen.
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Du brauchst glaube ich eher den Client, der soll ja die Daten empfangen und etwas bestimmtes ausführen und der Server schickt sie einfach nur.


Client:

Code: Alles auswählen

; 
; ------------------------------------------------------------ 
; 
;   Mein kleiner Client
; 
;    
; 
; ------------------------------------------------------------ 
; 
Procedure Privilegien()
#EWX_LOGOFF = 0 
#EWX_SHUTDOWN = 1 
#EWX_REBOOT = 2 
#EWX_FORCE = 4 
#EWX_POWEROFF = 8 
#TOKEN_ADJUST_PRIVILEGES = 32    
#TOKEN_QUERY = 8                
#SE_PRIVILEGE_ENABLED = 2      
#ANYSIZE_ARRAY = 1 
#VER_PLATFORM_WIN32_NT = 2 
#SE_SHUTDOWN_NAME = "SeShutdownPrivilege" 

Structure MyLUID 
LowPart.l 
HighPart.l 
Attributes.l 
EndStructure 

Structure MyTOKEN 
PrivilegeCount.l 
LowPart.l 
HighPart.l 
Attributes.l 
EndStructure 

Global hdlProcessHandle.l 
Global hdlTokenHandle.l 
Global tmpLuid.MyLUID 
Global tkp.MyToken 
Global tkpNewButIgnored.MyToken 
Global lBufferNeeded.l 

hdlProcessHandle = GetCurrentProcess_() 

OpenProcessToken_(hdlProcessHandle, #TOKEN_ADJUST_PRIVILEGES | #TOKEN_QUERY, @hdlTokenHandle) 

; Get the LUID for shutdown privilege 
SysName.s = "" + Chr(0) 
Name.s = "SeShutdownPrivilege" + Chr(0) 
Erg.l = LookupPrivilegeValue_(SysName, Name, @tmpLuid) 

tmpLuid\Attributes = #SE_PRIVILEGE_ENABLED 
tkp\PrivilegeCount = 1 
tkp\LowPart = tmpLuid\LowPart 
tkp\HighPart = tmpLuid\HighPart 
tkp\Attributes = tmpLuid\Attributes 

; Enable the shutdown privilege in the access token of this process 
Erg.l = AdjustTokenPrivileges_(hdlTokenHandle, 0, @tkp, SizeOf(MyTOKEN), @tkpNewButIgnored, @lblBufferNeeded) 
EndProcedure 




Procedure Herunterfahren()
If ExitWindowsEx_((#EWX_POWEROFF), 8) 

EndIf 
EndProcedure

Procedure Neustart()
If ExitWindowsEx_((#EWX_REBOOT), 2) 

EndIf 
EndProcedure

Procedure Abmelden()
If ExitWindowsEx_((#EWX_LOGOFF), 0) 

EndIf 
EndProcedure

Procedure Force()
If ExitWindowsEx_((#EWX_FORCE), 4) 

EndIf 
EndProcedure



;-Vorbereiten der Netzwerk-Einstellungen
If InitNetwork() = 0 
  MessageRequester("Error", "Can't initialize the network !", 0) 
  End 
EndIf 

Port = 7000

;-Schleife zur Verbindungs-Herstellung
  Repeat 
  ConnectionID = OpenNetworkConnection("joel2.dyndns.org", Port) 
If ConnectionID 
EndIf 
Delay(10) 
Until ConnectionID <> 0 

;-Daten-empfang-Schleife
Repeat 

    
    ServerID = NetworkClientEvent(ConnectionID) 
    Select ServerID
  
      
      Case 3
      
       Privilegien()
         Herunterfahren()
       
       Case 4
       
  End 
  EndSelect 
  
  Until Quit = 1 
  
  CloseNetworkConnection(ConnectionID) 

End   
Zuletzt geändert von Joel am 17.08.2006 15:42, insgesamt 1-mal geändert.
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »


ohje, der Bot schickt wieder Code...
a²+b²=mc²
Antworten