| 
				
					|  | 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, 15: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, 15: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, 16: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, 16: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, 19: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, 19:35    Titel: |   |  
				| 
 |  
				| kann man doch so einfach aus VB übernehmen   
 unten musst du aber dein eigenen Pfad \ Programm eingeben 	  | 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
 | 
  _________________
 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, 20: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, 20: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, 20:24    Titel: |   |  
				| 
 |  
				|  jetzt gehts. Aber wie starte ich damit Progs mit einem Leerzeichen im Namen? Wenn ich: 
 Ausführe startet er ICiv 	  | Code: |  	  | system_SuperShell !"ICiv Helper.exe", "C:\ICiv\", 1, SW_NORMAL, NORMAL_PRIORITY_CLASS | 
  _________________
 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, 20: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, 20: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, 21: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.
 
 |  |