Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

CreateProcess()

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 08.08.2007, 16:42    Titel: CreateProcess() Antworten mit Zitat

Hm.
Das Beispiel für VB im APIGuide nach FB zu übersetzten ist mir leider nicht gelungen. neutral

Kennt jemand ein Beispiel zu CreateProcess() unter FB?
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 08.08.2007, 16:48    Titel: Antworten mit Zitat

Könntest du bitte kurz erläutern, was das für eine Funktion ist?
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 08.08.2007, 17:31    Titel: Antworten mit Zitat

Zitat:
The CreateProcess function creates a new process and its primary thread. The new process executes the specified executable file.

Code:
Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As SECURITY_ATTRIBUTES, lpThreadAttributes As SECURITY_ATTRIBUTES, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long

Die soll eine Anwendung ohne SHELL & Co. starten.
Der VB-Code schaut so aus:
Code:
'This program needs a common dialog box, named CDBox
'  (To add the Common Dialog Box to your tools menu, go to Project->Components (or press CTRL-T)
'   and select Microsoft Common Dialog control)
Const INFINITE = &HFFFF
Const STARTF_USESHOWWINDOW = &H1
Private Enum enSW
    SW_HIDE = 0
    SW_NORMAL = 1
    SW_MAXIMIZE = 3
    SW_MINIMIZE = 6
End Enum
Private Type PROCESS_INFORMATION
    hProcess As Long
    hThread As Long
    dwProcessId As Long
    dwThreadId As Long
End Type
Private Type STARTUPINFO
    cb As Long
    lpReserved As String
    lpDesktop As String
    lpTitle As String
    dwX As Long
    dwY As Long
    dwXSize As Long
    dwYSize As Long
    dwXCountChars As Long
    dwYCountChars As Long
    dwFillAttribute As Long
    dwFlags As Long
    wShowWindow As Integer
    cbReserved2 As Integer
    lpReserved2 As Byte
    hStdInput As Long
    hStdOutput As Long
    hStdError As Long
End Type
Private Type SECURITY_ATTRIBUTES
    nLength As Long
    lpSecurityDescriptor As Long
    bInheritHandle As Long
End Type
Private Enum enPriority_Class
    NORMAL_PRIORITY_CLASS = &H20
    IDLE_PRIORITY_CLASS = &H40
    HIGH_PRIORITY_CLASS = &H80
End Enum
Private Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As SECURITY_ATTRIBUTES, lpThreadAttributes As SECURITY_ATTRIBUTES, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Function SuperShell(ByVal App As String, ByVal WorkDir As String, dwMilliseconds As Long, ByVal start_size As enSW, ByVal Priority_Class As enPriority_Class) As Boolean
    Dim pclass As Long
    Dim sinfo As STARTUPINFO
    Dim pinfo As PROCESS_INFORMATION
    'Not used, but needed
    Dim sec1 As SECURITY_ATTRIBUTES
    Dim sec2 As SECURITY_ATTRIBUTES
    'Set the structure size
    sec1.nLength = Len(sec1)
    sec2.nLength = Len(sec2)
    sinfo.cb = Len(sinfo)
    'Set the flags
    sinfo.dwFlags = STARTF_USESHOWWINDOW
    'Set the window's startup position
    sinfo.wShowWindow = start_size
    'Set the priority class
    pclass = Priority_Class
    'Start the program
    If CreateProcess(vbNullString, App, sec1, sec2, False, pclass, _
    0&, WorkDir, sinfo, pinfo) Then
        'Wait
        WaitForSingleObject pinfo.hProcess, dwMilliseconds
        SuperShell = True
    Else
        SuperShell = False
    End If
End Function
Private Sub Form_Load()
    'KPD-Team 1998
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    'Set the dialog's title
    CDBox.DialogTitle = "Choose an EXEC-File ..."
    'Error when canceled
    CDBox.CancelError = True
    'Set the dialog's filter
    CDBox.Filter = "EXEC-Files (*.exe)|*.exe|All files (*.*)|*.*"
    'Show the 'Open File'-dialog
    CDBox.ShowOpen
    'Execute the program
    SuperShell CDBox.filename, Left$(CDBox.filename, Len(CDBox.filename) - Len(CDBox.FileTitle)), 0, SW_NORMAL, HIGH_PRIORITY_CLASS
    End
End Sub

_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 08.08.2007, 17:41    Titel: Antworten mit Zitat

ich frag mich ja echt, wozu du so ein workaround brauchst, aber zeig mal her, was du bisher hast...
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 08.08.2007, 20:19    Titel: Antworten mit Zitat

Code:
Function processes_SuperShell(ByVal App As String, _
                    ByVal WorkDir As String, _
                    dwMilliseconds As Long, _
                    ByVal start_size As Integer, _
                    ByVal Priority_Class As Integer _
                    ) As Boolean
 
   Dim pclass As Long
   Dim sinfo As STARTUPINFO
   Dim pinfo As PROCESS_INFORMATION
   'Not used, but needed
   Dim sec1 As SECURITY_ATTRIBUTES
   Dim sec2 As SECURITY_ATTRIBUTES
   'Set the structure size
   'sec1.nLength = Len(sec1)
   'sec2.nLength = Len(sec2)
   'sinfo.cb = Len(sinfo)
   'Set the flags
   sinfo.dwFlags = STARTF_USESHOWWINDOW
   'Set the window's startup position
   sinfo.wShowWindow = start_size
   'Set the priority class
   pclass = Priority_Class
   'Start the program
   'If CreateProcess(vbNullString, App, sec1, sec2, False, pclass, _
   '0&, WorkDir, sinfo, pinfo) Then
   If CreateProcess(vbNullString, App, null, sec2, FALSE, pclass, _
   0&, WorkDir, NULL, NULL) then
      'Wait
      WaitForSingleObject pinfo.hProcess, dwMilliseconds
      processes_SuperShell = True
   Else
      processes_SuperShell = False
   End If
End Function

Function


Oder gibt es eine einfachere Möglichkeit ohne shell ein Programm zu starten?

So kommt iwie imme dieses "...hat ein Problem festgestellt..."

Wenn ich bei 3-.Parameter sec1 hinschreibe kommt "Type mismatch" genau wie wenn ich beim 9. Parameter sinfo hinschreibe das gleiche. neutral
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 08.08.2007, 20:35    Titel: Antworten mit Zitat

kann man doch so einfach aus VB übernehmen Zunge rausstrecken
Code:
#include "windows.bi"

Function SuperShell( App As String, _
                 WorkDir As String, _
          dwMilliseconds As DWORD, _
             start_size  As DWORD, _
           PriorityClass As DWORD) As Boolean
  Dim pclass As Integer
  Dim sinfo As STARTUPINFO
  Dim pinfo As PROCESS_INFORMATION
  Dim As SECURITY_ATTRIBUTES sec1, sec2 'Not used, but needed
  sec1.nLength = Sizeof(sec1)           'Set the structure size
  sec2.nLength = Sizeof(sec2)
  sinfo.cb = Sizeof(sinfo)
  sinfo.dwFlags = STARTF_USESHOWWINDOW  'Set the flags
  sinfo.wShowWindow = start_size        'Set the window's startup position
  'CreateProcess (ApplicationName as LPCSTR, CommandLine as LPSTR, _
  'ProcessAttributes as LPSECURITY_ATTRIBUTES, ThreadAttributes as LPSECURITY_ATTRIBUTES, _
  'InheritHandles as BOOL, CreationFlags as DWORD, Environment as PVOID, _
  'CurrentDriectory as LPCSTR, StartupInfo as LPSTARTUPINFOA, _
  'ProcessInformation as LPPROCESS_INFORMATION) as BOOL
  'Start the program
  If CreateProcess(Null, App, @sec1, @sec2, 0, PriorityClass, 0, WorkDir, @sinfo, @pinfo) Then
    WaitForSingleObject pinfo.hProcess, dwMilliseconds  'Wait
    SuperShell = 1
  Else
    SuperShell = 0
  End If
End Function

'Execute the program
SuperShell "progressbar.exe", ".\", 0, SW_NORMAL, NORMAL_PRIORITY_CLASS
End
unten musst du aber dein eigenen Pfad \ Programm eingeben zwinkern
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.


Zuletzt bearbeitet von volta am 08.08.2007, 21:11, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 08.08.2007, 21:10    Titel: Antworten mit Zitat

Danke!
Nur hängt der sich immernoch auf neutral
Code:
processes_SuperShell "ICiv Helper.exe", "C:\ICiv\", 0, SW_NORMAL, NORMAL_PRIORITY_CLASS
Kompilieren tuter ...
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 08.08.2007, 21:17    Titel: Antworten mit Zitat

versuch es nochmal, ich hatte gerade etwas geändert.
Mit FB 0.18 unter ME geht es, ohne R.I.P.
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 08.08.2007, 21:24    Titel: Antworten mit Zitat

verlegen jetzt gehts. Aber wie starte ich damit Progs mit einem Leerzeichen im Namen? Wenn ich:
Code:
system_SuperShell !"ICiv Helper.exe", "C:\ICiv\", 1, SW_NORMAL, NORMAL_PRIORITY_CLASS
Ausführe startet er ICiv neutral
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 08.08.2007, 21:30    Titel: Antworten mit Zitat

versuche
1) den namen in anführungszeichen zu setzen, also """Programm name.exe """ als parameter
2) den namen als 8.3-namen zu übergeben.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 08.08.2007, 21:31    Titel: Antworten mit Zitat

Beides klappt, ok.
Da fällt mir auf Autsch!
Code:
ShellExecute(0, "open", "C:\ICiv\ICiv Helper.exe", "", "", 3)
durchgeknallt
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 08.08.2007, 21:33    Titel: Antworten mit Zitat

Das muss etwas XP spezifisches sein?
Ob mit oder ohne Leerzeichen oder Ausrufezeichen, unter ME geht es immer!
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 08.08.2007, 22:06    Titel: Antworten mit Zitat

csderats hat Folgendes geschrieben:
Beides klappt, ok.
Da fällt mir auf Autsch!
Code:
ShellExecute(0, "open", "C:\ICiv\ICiv Helper.exe", "", "", 3)
durchgeknallt

hättest du gleich gesagt, dass du nur einen shell-ersatz brauchst, hättest du genau diese lösung schon ein paar stündchen früher haben können peinlich
steht sogar auf meiner webseite.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz