|
| [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è
| |
|
|