 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 08.08.2007, 16:42 Titel: CreateProcess() |
|
|
Hm.
Das Beispiel für VB im APIGuide nach FB zu übersetzten ist mir leider nicht gelungen.
Kennt jemand ein Beispiel zu CreateProcess() unter FB? _________________ If hilfreicher_Beitrag then klick(location.here)
Klick |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 08.08.2007, 16:48 Titel: |
|
|
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 |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 08.08.2007, 17:31 Titel: |
|
|
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 08.08.2007, 17:41 Titel: |
|
|
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 |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 08.08.2007, 20:19 Titel: |
|
|
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.  _________________ If hilfreicher_Beitrag then klick(location.here)
Klick |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 08.08.2007, 20:35 Titel: |
|
|
kann man doch so einfach aus VB übernehmen
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  _________________ 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 |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 08.08.2007, 21:17 Titel: |
|
|
versuch es nochmal, ich hatte gerade etwas geändert.
Mit FB 0.18 unter ME geht es, ohne  _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 08.08.2007, 21:24 Titel: |
|
|
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  _________________ If hilfreicher_Beitrag then klick(location.here)
Klick |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 08.08.2007, 21:30 Titel: |
|
|
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 |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 08.08.2007, 21:33 Titel: |
|
|
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 08.08.2007, 22:06 Titel: |
|
|
csderats hat Folgendes geschrieben: | Beides klappt, ok.
Da fällt mir auf
Code: | ShellExecute(0, "open", "C:\ICiv\ICiv Helper.exe", "", "", 3) |  |
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
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 |
|
 |
|
|
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.
|
|