|
[ MojeKorisnickoIme @ 29.08.2012. 00:59 ] @
| imam problem
imam 2 aplikacije koje rade na isti port
i sad ako ukljucim prvo prvu onda kad startujem drugu izbaci mi eror port alrady open.
sad ja sam dosao do zakljucka da napravim jos jednu aplikaciju tj aplikaciju koja ce da vrsi obe funkicije
Primer
AplikacijaAAA
AplikacijaBBB
AplikacijaAAABBB
i sad ako startujem
AplikacijuAAA i posle pokusam da upalim AplikacijuBBB izbacice mi error
Ja sam mislo da odradim ovako nesto da u AplikacijiBBB dodam kod tipa
IF aplikacijaAAA is runing then close aplikacijaAAA and open apllikacijaAAABBB
I isto tako if aplikacijaBBB is runing then close aplikacijaBBB and run aplikacijaAAABBB
Sad ne znam kako to da izvedem posto nemam pojma VB poceo sam da cackam zadnja 2 dana pa sam mislio ako bi neko bio faca pa mi sastavio osnovu
|
[ Marko_L @ 29.08.2012. 14:08 ] @
Bilo bi dobro da daš malo više detalja o tome šta pokušavaš da napraviš. Ovako, kako si ti opisao, deluje mi da se radi o lošoj arhitekturi sistema. Evo o čemu se radi. Ako već imaš aplikaciju AAABBB koja vrši obe funkcije, ne vidim zašto ti trebaju odvojene AAA i BBB aplikacije. Ako te aplikacije ipak treba da budu odvojene iz nekog razloga, onda treba da koriste i različite portove, jer taj server (ili uređaj, šta god) sa kojim komuniciraju upravo tako i zna kojoj aplikaciji, odnosno kom portu treba da vrati informaciju. Ali ti u tom slučaju ne treba nikakava AAABBB aplikacija.
Mislim, daleko od toga da to što si zamislio ne može da se izvede. Može na više načina, recimo tako što pronađeš proces u listi i zatvoriš ga. Ukucaj u google pretragu "kill process VB6" i naći ćeš gomilu jednostavnih primera, ali imaj u vidu da ovo nikako nije dobra praksa i može nastati gomila problema. Recimo, šta ako je aplikacija AAA u sred neke komunikacije ili u tom trenutku izvršava neku akciju, a ti pokreneš aplikaciju BBB, ili AAABBB nebitno ? Pa desiće se da aplikacija AAA ne obavi svoj zadatak do kraja što može dovesti do raznih grešaka na sistemu.
Dakle, daj malo više detalja o tome šta koja aplikacija treba da uradi, sa čim treba da komunicira (tvoj server, tuđ server, neki online servis...), pa ćemo da smislimo neko rešenje.
[ MojeKorisnickoIme @ 29.08.2012. 14:38 ] @
Citat: Marko_L: Bilo bi dobro da daš malo više detalja o tome šta pokušavaš da napraviš. Ovako, kako si ti opisao, deluje mi da se radi o lošoj arhitekturi sistema. Evo o čemu se radi. Ako već imaš aplikaciju AAABBB koja vrši obe funkcije, ne vidim zašto ti trebaju odvojene AAA i BBB aplikacije. Ako te aplikacije ipak treba da budu odvojene iz nekog razloga, onda treba da koriste i različite portove, jer taj server (ili uređaj, šta god) sa kojim komuniciraju upravo tako i zna kojoj aplikaciji, odnosno kom portu treba da vrati informaciju. Ali ti u tom slučaju ne treba nikakava AAABBB aplikacija.
Mislim, daleko od toga da to što si zamislio ne može da se izvede. Može na više načina, recimo tako što pronađeš proces u listi i zatvoriš ga. Ukucaj u google pretragu "kill process VB6" i naći ćeš gomilu jednostavnih primera, ali imaj u vidu da ovo nikako nije dobra praksa i može nastati gomila problema. Recimo, šta ako je aplikacija AAA u sred neke komunikacije ili u tom trenutku izvršava neku akciju, a ti pokreneš aplikaciju BBB, ili AAABBB nebitno ? Pa desiće se da aplikacija AAA ne obavi svoj zadatak do kraja što može dovesti do raznih grešaka na sistemu.
Dakle, daj malo više detalja o tome šta koja aplikacija treba da uradi, sa čim treba da komunicira (tvoj server, tuđ server, neki online servis...), pa ćemo da smislimo neko rešenje.
U mom slucaju se nevrsi komunikacija tj ja samo aktiviram DTR i RTS pinove na COM1 porutu posto sam nabudzio plocicu sa relejima.
Trebaju mi odvojeni exe fajlovi zbog toga sto hocu da to ukombinujem sa SAPIjem pa da na glasovnu komandu Svetlo upalim sijalicu u sobi koja je recimo DTR.
a ovo za kill proces ima temu ispod ove sto sam nasao i neradi mi pa sam i za to trazio pomoc a meni je porblem sto ne znam kako da objasnim kompu IF AKO JE APLIKACJA UKLJUCENA THEN ...
[ Marko_L @ 29.08.2012. 15:28 ] @
Probaj ovo
http://www.andreavb.com/tip020021.html
Ne moraš uopšte da proveravaš da li je proces aktivan. Ako jeste ugasiće se, ako nije, nema šta da se gasi.
[ MojeKorisnickoIme @ 29.08.2012. 15:54 ] @
[ MojeKorisnickoIme @ 29.08.2012. 16:22 ] @
Au ovo komplikovano pogotovu ze mene koji do pre 2 dana nije znao sta je VB
Ja sam nasao ovo prostije ali mi neradi tj izbacuje Compail erorr: Sub or Funcion not defined markira mi Private Sub Komanda_Click()
Private sAppName As String, sAppPath As String
Private Sub Form_Load()
sAppName = "RTSukljucen"
sAppPath = "C:\Trokanalni\RTSukljucen.exe"
End Sub
Private Sub Komanda_Click()
Call EndTask(sAppName)
End Sub
Inace aj mi odradis ovo sto ja ocu tebi je to 5min posla uplaticu ti 200 din kredita ako oces?
ovo je ceo moj program
Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.InputLen = 0
MSComm1.RTSEnable = True - OVO JE KOMAND ON OFF ZA RELEJ TRUE I FALSE
MSComm1.PortOpen = True
MSComm1.DTREnable = False - OVO JE KOMAND ON OFF ZA RELEJ TRUE I FALSE
End Sub
I moras da dodas projects\ coponents\ microsoft comm control 6 ili ti Ctrl + T i microsoft comm control 6
Tako da bi exe za RTSukljucen(tako sam ga ja krstio na mom kompu) bio
Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.InputLen = 0
MSComm1.RTSEnable = True
MSComm1.PortOpen = True
MSComm1.DTREnable = False
End Sub
Za DTRukljucen bi bio
Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.InputLen = 0
MSComm1.RTSEnable = False
MSComm1.PortOpen = True
MSComm1.DTREnable = True
End Sub
A za RTSDTRukljuceni
Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.InputLen = 0
MSComm1.RTSEnable = True
MSComm1.PortOpen = True
MSComm1.DTREnable = True
End Sub
I ja sam ih stavio da budu nevidlljivi dok Visible False
[ Marko_L @ 29.08.2012. 20:20 ] @
Izbacuje ti grešku zato što u VB6 ne postoji ugrađena funkcija EndTask, već je to neka user-defined funkcija koju ti nisi prekopirao. Dakle, ti zapravo obavljaš poziv funkcije koja ne postoji i koju moraš da napraviš. Ne znam sa kog sajta si skidao taj kod, ali verovatno si propustio da skineš i tu funkciju koja je verovatn manje više slična onom primeru koji sam ti dao. Jednostavnije od toga ne može, barem ne u VB6. Ako bi koristio VB.NET, tamo već imaš klasu Process preko koje možeš da uradiš šta hoćeš sa procesom. U VB6 to mora preko API-ja i zato deluje malo komplikovanije, ali i nije. Sve što treba je da kreiraš modul i ubaciš u njega dati kod.
Modul kreiraš tako što odeš na Project > Add Module
Onda otvoriš taj modul i iskopiraš sledeći kod
Code: Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szexeFile As String * 260
End Type
Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, _
ByVal blnheritHandle As Long, ByVal dwAppProcessId As Long) As Long
Declare Function ProcessFirst Lib "kernel32.dll" Alias "Process32First" (ByVal hSnapshot As Long, _
uProcess As PROCESSENTRY32) As Long
Declare Function ProcessNext Lib "kernel32.dll" Alias "Process32Next" (ByVal hSnapshot As Long, _
uProcess As PROCESSENTRY32) As Long
Declare Function CreateToolhelpSnapshot Lib "kernel32.dll" Alias "CreateToolhelp32Snapshot" ( _
ByVal lFlags As Long, lProcessID As Long) As Long
Declare Function TerminateProcess Lib "kernel32.dll" (ByVal ApphProcess As Long, _
ByVal uExitCode As Long) As Long
Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
Public Sub KillProcess(NameProcess As String)
Const PROCESS_ALL_ACCESS = &H1F0FFF
Const TH32CS_SNAPPROCESS As Long = 2&
Dim uProcess As PROCESSENTRY32
Dim RProcessFound As Long
Dim hSnapshot As Long
Dim SzExename As String
Dim ExitCode As Long
Dim MyProcess As Long
Dim AppKill As Boolean
Dim AppCount As Integer
Dim i As Integer
Dim WinDirEnv As String
If NameProcess <> "" Then
AppCount = 0
uProcess.dwSize = Len(uProcess)
hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)
RProcessFound = ProcessFirst(hSnapshot, uProcess)
Do
i = InStr(1, uProcess.szexeFile, Chr(0))
SzExename = LCase$(Left$(uProcess.szexeFile, i - 1))
WinDirEnv = Environ("Windir") + "\"
WinDirEnv = LCase$(WinDirEnv)
If Right$(SzExename, Len(NameProcess)) = LCase$(NameProcess) Then
AppCount = AppCount + 1
MyProcess = OpenProcess(PROCESS_ALL_ACCESS, False, uProcess.th32ProcessID)
AppKill = TerminateProcess(MyProcess, ExitCode)
Call CloseHandle(MyProcess)
End If
RProcessFound = ProcessNext(hSnapshot, uProcess)
Loop While RProcessFound
Call CloseHandle(hSnapshot)
End If
End Sub
Time si kreirao javnu proceduru KillProcess koju onda pozivaš iz bilo kog mesta u kodu. Recimo u tvoj slučaju bi umesto EndTask trebao da staviš KillProcess i to je to. Dakle, ovako
Code: Private Sub Komanda_Click()
Call EndTask(sAppName)
End Sub
i to je to.
P.S. - Ne treba kredit :)
[ MojeKorisnickoIme @ 30.08.2012. 12:50 ] @
evo probao sam i nikakave eror mi nije izbacio radi sve samo sto mi nezatvara program :(
Cak sam dva puta proveravao da li sam sve ukucao ok
Imam i screenshoow svega
Uploaded with ImageShack.us
[ Marko_L @ 30.08.2012. 16:22 ] @
Promeni
Code: sAppName = "RTSukljucen"
u
Code: sAppName = "RTSukljucen.exe"
[ MojeKorisnickoIme @ 30.08.2012. 18:08 ] @
Citat: Marko_L: Promeni
Code: sAppName = "RTSukljucen"
u
Code: sAppName = "RTSukljucen.exe"
LOL vidi stvarno promaklo mi
Nema veze iskombinovao sam ove exe fajlove od VB 6 sa VB.net Tako da mi sad radi i ako nekome bude trebalo evo osnove
Inace Marko Zahvaljujem na pomoci
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim RTSon As Boolean
Dim RTSradi() As Process = System.Diagnostics.Process.GetProcessesByName("RTSukljucen")
If RTSradi.Count <> 0 Then
RTSon = True
Else
RTSon = False
End If
If RTSon = True Then
For Each Program As Process In RTSradi
Program.Kill()
System.Threading.Thread.CurrentThread.Sleep(55)
Next
System.Diagnostics.Process.Start("C:\Trokanalni\RTSDTRukljuceni.exe")
End If
If RTSon = False Then
System.Diagnostics.Process.Start("C:\Trokanalni\RTSukljucen.exe")
End If
End Sub
End Class
[ Genie_1984 @ 04.09.2012. 12:54 ] @
Da probaš i u jednoj i u drugoj aplikaciji otvariš port,pošalješ podatke i zatvoriš port.... Tako će port uvek biti slobodan kad se ne koristi. Možeš i da staviš petlju da u slučaju da je port otvoren,sačeka da bude zatvoren pa onda otvara i šalje svoje podatke. U tom slučaju npr aplikacija B neće "ubiti" aplikaciju A u sred nekog procesa (tj u sred slanja podataka na port)
Pozdrav
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|