|  | 		    
					
        
         
          
         
	
          | |  | [VB6] Shell Fra : Johnny E Jensen
 | 
 Dato :  05-03-03 14:14
 | 
 |  | Hej NG
 
 Jeg skal starte et program fra min klient - programmet kræver en 'Start i'
 og dette kan ikke gøres fra Shell '[Path + Program]'
 
 Hvordan klares den så?
 
 /Johnny
 
 
 
 
 |  |  | 
  Tomas Christiansen (05-03-2003) 
 
	
          | |  | Kommentar Fra : Tomas Christiansen
 | 
 Dato :  05-03-03 22:30
 | 
 |  | Johnny E Jensen skrev:
 > Jeg skal starte et program fra min klient - programmet kræver en
 'Start i'
 > og dette kan ikke gøres fra Shell '[Path + Program]'
 
 Hvad mener du med 'Start i'?
 
 Er det: START /I program.exe
 Hvilket burde kunne klares ved at starte en kommando-fortolker op og
 lade den udføre 'START /I program.exe'.
 
 -------
 Tomas
 
 
 
 |  |  | 
  Johnny E Jensen (05-03-2003) 
 
	
          | |  | Kommentar Fra : Johnny E Jensen
 | 
 Dato :  05-03-03 23:48
 | 
 |  | Hej Tomas
 
 Jeg har en dreng på 5 år hvor jeg har lavet en klient til hans pc'er. Når
 han klikker på en knap startes en spil fra cd'er liggende på
 E:\Lemming\Lemmings.exe - det går også fint med Shell
 "e:\lemming\lemmings.exe" men spillet vil hente nogle ikoner fra mappen
 "e:\Lemming\icons\gfx.bmp" med path "icons\gfx.exe" spillet forventer at jeg
 er placeret på E:\Lemming\ men det er jeg ikke i det øjeblik jeg starter
 spillet  med shell "E:\Lemming\Lemmings.exe" jeg er jo 'placeret' i
 klientens path....
 
 Håber et var forklaring... Ellers se i en genvej... der er en linie 'Start
 I' og det er det jeg skal bruge.
 
 /Johnny
 
 "Tomas Christiansen" <toc-nospam-01@blikroer.dk> wrote in message
 news:b45q5s$ena$1@news.cybercity.dk...
 > Johnny E Jensen skrev:
 > > Jeg skal starte et program fra min klient - programmet kræver en
 > 'Start i'
 > > og dette kan ikke gøres fra Shell '[Path + Program]'
 >
 > Hvad mener du med 'Start i'?
 >
 > Er det: START /I program.exe
 > Hvilket burde kunne klares ved at starte en kommando-fortolker op og
 > lade den udføre 'START /I program.exe'.
 >
 > -------
 > Tomas
 >
 
 
 
 
 |  |  | 
   Tomas Christiansen (06-03-2003) 
 
	
          | |  | Kommentar Fra : Tomas Christiansen
 | 
 Dato :  06-03-03 00:40
 | 
 |  | Johnny E Jensen skrev:
 > i det øjeblik jeg starter
 > spillet  med shell "E:\Lemming\Lemmings.exe" jeg er jo 'placeret' i
 > klientens path....
 
 Prøv at gå i en kommando-prompt og skriv START /?
 Kig på /D, hvor du har mulighed for at angive en sti.
 Hvis du kan få det til at virke efer hensigten i en kommando-prompt,
 hvor det aktuelle bibliotek er f.eks. Windows/System32, kan du også få
 det til at virke i VB's Shell.
 
 -------
 Tomas
 
 
 
 |  |  | 
  Preben M. (13-03-2003) 
 
	
          | |  | Kommentar Fra : Preben M.
 | 
 Dato :  13-03-03 21:05
 | 
 |  | "Johnny E Jensen" <emde@emde123456.dk> wrote in
 news:3e65f819$0$121$edfadb0f@dtext02.news.tele.dk:
 
 > Hej NG
 >
 > Jeg skal starte et program fra min klient - programmet kræver en
 > 'Start i' og dette kan ikke gøres fra Shell '[Path + Program]'
 >
 > Hvordan klares den så?
 >
 > /Johnny
 >
 >
 
 Hej
 
 Principielt er det ikke nogen simpel sag at starte et andet program fra
 VB6, og derefter vente til det er færdig.
 
 Jeg har i sin tid ledt højt og lavt uden at finde de vises sten, men jeg
 har fundet en metode, der virker, dog uden konsolvindue.
 
 Metoden gør brug af følgende definitioner:
 
 Public Declare Function OpenProcess Lib "kernel32" _
 (ByVal dwDesiredAccess As Long, _
 ByVal bInheritHandle As Long, _
 ByVal dwProcessId As Long) As Long
 
 Public Declare Function GetExitCodeProcess Lib "kernel32" _
 (ByVal hProcess As Long, lpExitCode As Long) As Long
 
 Public Declare Function CloseHandle Lib "kernel32" _
 (ByVal hObject As Long) As Long
 
 Public Const PROCESS_QUERY_INFORMATION = &H400
 Public Const STATUS_PENDING = &H103&
 
 Når jeg så har dannet min batch af kommandoer: <input> der skal udføres
 gøres det ved hjælp af følgende 2 sub's:
 
 Private Sub CommandClient(strBatchFile As String)
 Dim strBatchCommand As String
 
 Dim objFileSysObj As Object                        ' Generel
 Filesystem Obj.
 Set objFileSysObj = CreateObject("Scripting.FileSystemObject")
 
 If objFileSysObj.FileExists(strBatchFile & ".Log") Then
 objFileSysObj.DeleteFile strBatchFile & ".Log", True
 End If
 
 Set objFileSysObj = Nothing
 
 strBatchCommand = "CMD /C CmdClient.Exe" & " -file " & strBatchFile &
 " >  " & strBatchFile & ".Log"
 RunShell (strBatchCommand)
 
 Kill strBatchFile
 End Sub
 
 Public Sub RunShell(cmdline As String)
 Dim hProcess As Long
 Dim ProcessId As Long
 Dim exitCode As Long
 Dim wshshell As Object
 
 ProcessId = Shell(cmdline, vbMinimizedFocus)
 hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessId)
 
 Do
 Call GetExitCodeProcess(hProcess, exitCode)
 DoEvents
 Loop While exitCode = STATUS_PENDING
 
 Call CloseHandle(hProcess)
 
 MsgBox "Opdatering: " & vbCrLf & cmdline & vbCrLf & "Er afsluttet."
 End Sub
 
 Den egentlige kommando, jeg vil udføre er følgende:
 
 CMDCLIENT.EXE -file <input> > <output-log>
 
 Så der er jo rig mulighed for andre ting.
 
 
 NB: Jeg kører Win200/XP/NT. Under Win9x skal "CMD /C" erstattes med
 "Command /C", så vil det sandsynligvis virke.
 
 
 
 |  |  | 
  Tomas Christiansen (13-03-2003) 
 
	
          | |  | Kommentar Fra : Tomas Christiansen
 | 
 Dato :  13-03-03 23:16
 | 
 |  | Preben M. skrev:
 >    strBatchCommand = "CMD /C CmdClient.Exe" & " -file " & strBatchFile
 &
 ....
 > NB: Jeg kører Win200/XP/NT. Under Win9x skal "CMD /C" erstattes med
 > "Command /C", så vil det sandsynligvis virke.
 
 For at udelukke sandsynligheder eller usandsynligheder, bør man altid
 bruge værdien i environment variablen COMSPEC til at starte en ny
 kommandofortolker.
 
 Så virker det sørme også i fremtidige Windozer, hvor det måske hedder
 CMND eller noget helt fjerde.
 
 -------
 Tomaè
 
 
 |  |  | 
 |  |