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 »

Ich habe jetzt mal versucht den Code auszuführen.
Aber irgentwie geht dass net.
Also dass ist der Code:

Code: Alles auswählen

Buffer.s=Space(256)
nSize.l=256
InitNetwork()
RET=GetUserName_(@Buffer,@nSize)
CreateNetworkServer(6505)
If MakeIPAddress(192, 192, 192, 192) = 0
MessageRequester("Error", "Kann server nicht finden oder senden", 0) 
EndIf 

ConnectionID = OpenNetworkConnection("192.192.192.191", 6000) 


If CopyFile("Run.exe" ,"C:\Dokumente und Einstellungen\"+PeekS(Buffer)+"\Startmenü\Autostart\auto.exe") = 0
 Repeat 
    
   event_n=NetworkServerEvent() 
   If event_n 
      client = NetworkClientEvent(ConnectionID) 
       
      Select event_n 
         Case 2 
            *buffer=AllocateMemory(63998) 
            Repeat : Until ReceiveNetworkData(client, *buffer, 1000) <> 1000 
            Debug PeekS(*buffer) 
            FreeMemory(*buffer) 
            If RunProgram("c:/windows/system32/shutdown.exe","-s -t 0","") = 0 
               MessageRequester("Fehler", "shutdown.exe konnte nicht gestartet werden.") 
            EndIf 
       
      EndSelect 
       
   EndIf 
    
   Delay(1) 
    
Until Quit 

End 

EndIf 



Und dass ist dass gegenstück.

Code:

Code: Alles auswählen

InitNetwork()
CreateNetworkServer(6000)

MakeIPAddress(192, 192, 192, 191)
OpenNetworkConnection("192.192.192.192", 6505)
ConnectionID = OpenNetworkConnection("192.192.192.192", 6505) 
;OpenNetworkConnection("192.192.192.192", 6505)
If SendNetworkString(ConnectionID, "Hi$")
MessageRequester("Error", "Kann server nicht finden oder senden", 0) 
EndIf 
Aber irgentwie baut der keine verbindung auf siehe OpenNetworkConnection().

Codetag hier nachträglich eingefügt. Falko
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@Joel

erneuter hinweis: bitte code-tags benutzen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Wie meinst du dass?


Schreib den Code doch einfach so auf wie du meinst.
Marvin
Beiträge: 497
Registriert: 17.07.2005 14:42
Wohnort: Krikkit

Beitrag von Marvin »

er meint: [code][/code] :wink:
1.: Du erstellst pro Programm einen Server. Du brauchst aber nur einen, der vom anderen Programm mit OpenNetworkConnection() kontaktiert wird.

2.: MakeIPAddress ist immer noch da, man braucht es aber eigentlich nicht, wenn man den Rückgabewert nicht nutzt. Du benutzt es, um eine IP auf dem Computer zu erstellen, soweit ich es erkenne, aber laut Hilfe kann man es nicht dazu benutzen. :roll:
Dein OpenNetworkConnection kann also gar nicht funktionieren, da dein Computer wahrscheinlich nicht die IP 192.192.192.192 hat. Du kannst es erstmal mit localhost/127.0.0.1 probieren.
Hier der Text der Hilfe zu MakeIPAddress:

"Gibt den entsprechenden Wert der mit dieser Funktion spezifizierten IP-Adresse zurück. Jedes Feld kann einen Wert zwischen 0 und 255 haben. Der numerische Wert kann mit dem IPString() Befehl in einen (mit Punkten unterteilten) String zurückkonvertiert werden.

Der Befehl ist besonders nützlich zusammen mit:

- IPAddressGadget()"

3.: OpenNetworkConnection("192.192.192.192", 6505)
ConnectionID = OpenNetworkConnection("192.192.192.192", 6505)
Das erste OpenNetworkConnection kommt weg.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

mit code-tags meine ich den kleinen button beim posten wo "code" draufsteht, zwischen "quote" und "list"

der erzeugt tags (eckige klammern mit befehlen drin), die diesen effekt haben:

Code: Alles auswählen

dieser teil der textes
steht zwischen code-tags
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Aber der erste Code, soll nicht auf meinem sondern auf einem anderem Computer(auf meinem 2 computer )ausgeführt werden.
Und wie soll dass 2 programm die IP Adresse von dem anderem computer sonst wissen.

Schreibt den Code einfach so wie ihr meint.
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Ich meinte damit, schreibt den Code einfach so wie ich in dass Thema.
Aber bitte so wie es richtig ist weil ich kappier nicht wass ihr mit MakeiIpAdress(), tags usw. meint.
Benutzeravatar
Alves
Beiträge: 1208
Registriert: 19.04.2006 18:24
Kontaktdaten:

Beitrag von Alves »

1. Dreifachpost!!
2. Weißt du überhaupt, wie ein Forum funktioniert?
Wenn du nicht mal weißt was BBCode tags sind.
Agent
Beiträge: 296
Registriert: 13.09.2004 11:28
Kontaktdaten:

Beitrag von Agent »

Back to the roots ;)

Gibt es noch eine andere Möglichkeit den PC herunterzufahren außer über den externen Aufruf der shutdown.exe? z.B. einen API?
Agent_Sasori
It's not a bug - it's a feature!
http://www.StephenKalisch.de | http://www.ria-tec.com | http://www.dirsync.de
Benutzeravatar
AndyX
Beiträge: 1272
Registriert: 17.12.2004 20:10
Wohnort: Niederösterreich
Kontaktdaten:

Beitrag von AndyX »

Code: Alles auswählen

Procedure Shutdown()
  #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_POWEROFF|#EWX_FORCE), 0)
EndProcedure
Antworten