webForumDet fria alternativet

Exekvera annan exe fil

.NET

18 svar · 379 visningar · startad av Erik Juhlin

Medlem sedan maj 200010 687 inlägg
Frågan#1

Hur gör man för att exekvera andra filer? Finns det något objekt man kan använda för detta?

Så man kan skriva typ obj.Execute("C:\Sierra\Counter-Strike\cstrike.exe -console +connect klanwf.com")...

Medlem sedan maj 2003924 inlägg
#2

Option Explicit
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

i declarations

sen i

Private Sub Command1_Click()
Call ShellExecute(hWnd, "Open", "C:\Sierra\Counter-Strike\cstrike.exe -console +connect klanwf.com", "", "", 1)

End Sub

Medlem sedan maj 200010 687 inlägg
#3

Ah, tack! :)

Medlem sedan maj 200010 687 inlägg
#4

hWnd, vad ska den innehålla?

Medlem sedan maj 2003924 inlägg
#5

ingen ting...

Medlem sedan maj 200010 687 inlägg
#6

Ok, ska bara deklarera den då?

Medlem sedan maj 2003924 inlägg
#7

om du skriver
Call ShellExecute sen skriver du ( så kommer det upp en ruta som förklarar vad det ska vara mellan alla , komman...

Medlem sedan maj 200010 687 inlägg
#8

Jo, det förstår jag... :)
IpDirectory = Start in?
ShowCmd, ska inte det vara 0?
IpOperation, vad finns mer än Open?
IpParameters, ska jag slänga in mina parametrar där som t.ex. -console..?

Medlem sedan maj 2003924 inlägg
#9

showcmd brukar jag ha som 1 men 0 kanske e bättre.
har inte testat själv att lägga in parametrar.
om jag behöver parametrar så brukar jag bara lägga in det där exekver filen är...
men testa lite du så kan du ju medela här vad som verkar bäst...

Medlem sedan maj 200010 687 inlägg
#10

Detta funkar fint. :)

Sub LaunchCS(Optional ByVal sServerAddress As String, _
    Optional ByVal sPassword As String, _
    Optional ByVal sOtherCommand As String)
    
    Dim sCSFolder As String, sCSExecutable As String, sCSParameters As String, hWnd As Long
    
    sCSFolder = "C:\Sierra\Counter-Strike"
    sCSExecutable = "cstrike.exe"
    sCSParameters = "-console"
    
    If Len(sPassword) Then
        sCSParameters = sCSParameters & " +password " & sPassword
    End If
    If Len(sServerAddress) Then
        If Not InStr(sServerAddress, ":") Then sServerAddress = sServerAddress & ":27015"
        sCSParameters = sCSParameters & " +connect " & sServerAddress
    End If
    If Len(sOtherCommand) Then
        sCSParameters = sCSParameters & " " & sOtherCommand
    End If
    
    'MsgBox sCSParameters
    ShellExecute hWnd, "Open", sCSFolder & "\" & sCSExecutable, sCSParameters, sCSFolder, 1
    
End Sub
Medlem sedan maj 2003924 inlägg
#11

så att lägga in -console i parametrar funkade bra lltså...

så bra...

Medlem sedan okt. 20023 030 inlägg
#12

Men om du bara ska starta exe-filer så räcker det väl med Shell?

Call Shell("C:\Sierra\Counter-Strike\cstrike.exe -console +connect klanwf.com", vbNormalFocus)
Medlem sedan maj 200010 687 inlägg
#13

Men skärp er, Call är en gammal Basic kvarleva! x(

Medlem sedan okt. 20023 030 inlägg
#14

Jag använder den endast ibland för att om man inte har Call så får bara subbarna ha 1 st inparameter om man fort ska få ha parenteser.

T.ex.

Call MsgBox("Meddelande")  ' Är giltig
MsgBox("Meddelande")       ' Är giltig
MsgBox "Meddelande"        ' Är giltig

MsgBox("Meddelande", vbInformation)       ' Inte giltig
MsgBox "Meddelande", vbInformation        ' Är giltig

och har man en funktion så måste man ha parenteser om man ger ett värde restultatet. T.ex. result = MsgBox("Meddelande"). Så för att inte blanda ihop när man får använda och när man inte får så använder en del programmerare Call.

Medlem sedan maj 200010 687 inlägg
#15

Jag anser att skriva MsgBox ("Meddelande) är precis samma sak som att skriva MsgBox ("Meddelande"), (vbInformation). Ful kod...
I VB använder man inte paranteser när man inte returnerar något.

Medlem sedan juni 20022 599 inlägg
#16

I VB använder man inte paranteser när man inte returnerar något.

Tycke och smak ..

Parenteser minskar ju iaf aldrig läsbarheten, snarare tvärtom. Jämför:

    Call myFunc1(AddressOf myFunc2)

med:

    myFunc1 AddressOf myFunc2

Den andra varianten är antagligen helt obegriplig för folk som inte kan VB (förmodligen en anledning till att parenteser är obligatoriskt i VB.NET).

I övrigt tror jag inte Nexus86s första inlägg handlade om Call utan om Shell?

Medlem sedan maj 200010 687 inlägg
#17

Jag kan hålla med om att det är vettigare att paranteser är obligatoriska i ett språk. Men i VB anropar man en subrutin utan paranteser.

Medlem sedan okt. 20023 030 inlägg
#18

Om man vill. Om jag ska skriva en lång anropning till en sub så tar jag med call och parenteser för jag tycker det blir lättare att läsa. Ska man bara ta en kort rad med kanske en inparameter så kan man ju hoppa över det.

Medlem sedan juni 20022 599 inlägg
#19

Erik Juhlin skrev:

Men i VB anropar man en subrutin utan paranteser.

Om du menar att man alltid måste göra så, så får du gärna källhänvisa till den auktoritet som en gång för alla bestämt det. Microsoft själva verkar inte lägga några större moraliska aspekter på saken: Call.

Om du menar att man i praktiken alltid gör så, så har du så klart rätt. 99 gånger av 100 så väljer man att spara 7 tangenttryckningar. Den 100:ade gången väljer man kanske att prioritera läsbarheten (se exemplet ovan).

254 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)