[VisualBasic] Problem mit einem programm das in der CMD Eingaben machen soll

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von fanello, 2. November 2007 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 2. November 2007
    Problem mit einem programm das in der CMD Eingaben machen soll

    Hi,

    ich möchte ein Programm schreiben, welches den Computer herunterfährt. Es gibt aber ein paar Fehler. Der Befehl klappt zwar, aber es öffnet sich die Eingabekonsole 3 Mal und in einer wird der Befehl ausgeführ, eine ist leer und in der anderen stehen nur ein paar Buchstaben des Befehls. Es ist immer anders, einmal funkoniert es und einmal nicht. Der Befehl um das ganze abzubrechen, funktioniert gar nicht, und dieser ist ja eigenltich das gleiche. Wenn cih einen befehl schreibe um Help in der cmd auszuführen, öffnet es nur die cmd.

    Der Befehl zum Herunterfahren sieht so aus:

    Dim ShutdownNow As Double
    ShutdownNow = Shell("cmd.exe", vbNormalFocus)
    SendKeys "Shutdown -s" & "{Enter}", True

    Ich hoffe jemand findet meinen Fehler und kann mir sagen wie es funktioniert.

    Gruß
    fanello
     
  2. 2. November 2007
    AW: Problem mit einem programm das in der CMD Eingaben machen soll

    Über die ShellApi kannst du doch auch Parameter übergeben. Dieses SendKeys ist doch müll. Schau die mal ShellExecute oder besser noch CreateProcess an.
     
  3. 2. November 2007
    AW: Problem mit einem programm das in der CMD Eingaben machen soll

    sowaas umständliches hab ich auch noch selten gesehen. wenn überhaupt, warum rufste die shutdown.exe nicht gleich direkt ab. btw:

    Code:
    Option Explicit
    
    '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    'Api
    '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, BufferLength As Any, PreviousState As Any, ReturnLength As Any) As Long
     
    Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
    
    Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
    
    Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
    
    Private Declare Function GetCurrentProcess Lib "kernel32.dll" () As Long
    
    Private Const SE_SHUTDOWN_NAME As String = "SeShutdownPrivilege"
    Private Const TOKEN_ADJUST_PRIVILEGES As Long = &H20
    Private Const SE_PRIVILEGE_ENABLED As Long = &H2
    
    Private Type LUID
     lowpart As Long
     highpart As Long
    End Type
    
    Private Type LUID_AND_ATTRIBUTES
     pLuid As LUID
     Attributes As Long
    End Type
    
    Private Type TOKEN_PRIVILEGES
     PrivilegeCount As Long
     Privileges As LUID_AND_ATTRIBUTES
    End Type
    
    
    '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    'Funktionen
    '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    '+++++++++++++++++++++++++++++++++++++++++++++
    'Machine_Shutdown
    '+++++++++++++++++++++++++++++++++++++++++++++
    Public Sub Machine_Shutdown(ByRef Method As Long)
     Dim a As Long
     Dim Temp1 As LUID
     Dim Temp2 As TOKEN_PRIVILEGES
     Dim Handle As Long
    
     Handle = OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, a)
     If Handle = 0 Then
     Exit Sub
     End If
     
     Handle = LookupPrivilegeValue(vbNullString, SE_SHUTDOWN_NAME, Temp1)
     If Handle = 0 Then
     Exit Sub
     End If
     
     Temp2.PrivilegeCount = 1
     Temp2.Privileges.Attributes = SE_PRIVILEGE_ENABLED
     Temp2.Privileges.pLuid.highpart = Temp1.highpart
     Temp2.Privileges.pLuid.lowpart = Temp1.lowpart
    
     Handle = AdjustTokenPrivileges(a, 0, Temp2, ByVal CLng(0), ByVal CLng(0), ByVal CLng(0))
     If Handle = 0 Then
     Exit Sub
     End If
     
     Handle = ExitWindowsEx(Method, 0&)
    End Sub
     
  4. 2. November 2007
    AW: Problem mit einem programm das in der CMD Eingaben machen soll

    Zu erstmal vielen dank für eure Antworten. Ich verstehe leider noch nicht seh viel vom Programmieren und steige durch eure Codes leider nicht durch. Könntet ihr mir diese vllt näher erleutern, oder mir den Befehl shellexecute näher bringen?

    Gruß
    fanello
     
  5. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.