Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


tabort en fil efter den har packats upp.

Postades av 2003-10-22 18:12:22 - Daniel Hermansson, i forum visual basic - allmänt, Tråden har 9 Kommentarer och lästs av 493 personer

Jag försöker att tabort en fil efter det att den har packats upp.

Jag har tänkte lite och så här borde det gå att göra men jag har inte tillräkligt med kunskap att få det att funka.


<code>
Dim lngHandle as long


'kom inte ihåg exakt hur denna rad såg ut men spelar mindre roll
lngHandle = ShelExecute (me.hwnd, app.path & "\rar.exe" , "x -o+ " & app.path & "\filer.rar", "något??" , SW_HIDE

Do

'sleep(5000) eller doevents eller vad som är bäst att använda???

' här vill jag kolla om lnghandle är fortfarande aktiv om den inte är det så ska filen filer.rar tas bort

'En annan lösning som jag tror går att göra är att kolla om att kill filer.rar funkar att utföra och då avsluta loopen

loop while(något)

</code>

eller det kanske finns någon helt annan lösning?


Svara

Sv: tabort en fil efter den har packats upp.

Postades av 2003-10-22 18:34:39 - Sven Åke Persson

Du kan inte använda Sleep då sover hela programmet , inget händer
Shell lämnar ProcessId inte Handle , spelar ingen roll men ändå.

Dim lngProcId As Long
lngProcId = 0 'försäkra att lngProcId verligen är 0 (nolll) när du börjar

'kör ditt
lngProcId = Shell(App.Path & "\rar.exe x -o+ " & App.Path & "\filen.rar", vbHide)

Do Until lngProcId <> 0
DoEvents
Loop

Kill App.Path & "\filen.rar"


Svara

Sv: tabort en fil efter den har packats upp.

Postades av 2003-10-23 12:07:11 - Daniel Hermansson

Tackar det ser ut som det ska funka. Ska hem och testa det i kväll.


Svara

Sv: tabort en fil efter den har packats upp.

Postades av 2003-10-23 18:00:39 - Daniel Hermansson

Jag har testat det nu och det funkar inte. När jag tänker efter så kommer lngProcId aldrig att ändra värde. Men det borde finnas någon function som kollar om lngProcId är igång.

shellexecute och shell verkar returnera olika sort värden(handle?, pid?). Men jag vet inte vilket av värdena som lättast går att kolla om de är aktiva??


Jag har kollat bland api kommandona och jag tror kanske jag kan sy ihop en lösning.

Jag har en funktion som kan omvandla shell returvärdet till ett längre värde (vet inte vad det kallas?). Och jag har en annan funktion(använder bla enumwindows) som verkar gå igenom alla processer (med samma sorts värden som jag fick från första funktionen) som är igång.

Men den lösningen känns det som jag överarbetar det? Men om ingen annan kan komma med en bättre lösning så får jag testa få ihop den.


Svara

Sv: tabort en fil efter den har packats upp.

Postades av 2003-10-24 20:53:28 - Daniel Hermansson

Jag fixat en lösning nu men jag tycker fortfarande att det borde finnas enklare lösningar. Så jag kommer inte att markera den som löst.




Private Sub Command1_Click()

Dim lngPid As Long, i&

lngPid = 0

lngPid = Shell(App.Path & "\rar.exe x -o+ " & App.Path & "\mer2.rar " & App.Path & "\nya_filer\", vbHide)

'detta gör jag för att "mwnd = instan..." raden ska funka
For i = 0 To 15
DoEvents
Next

mWnd = InstanceToWnd(lngPid)

Do
lngKlar = 1
EnumWindows AddressOf EnumWindowsProc, ByVal 0&

DoEvents
Loop Until (lngKlar = 1)

Kill App.Path & "\mer2.rar"

End Sub



'Modulen ser ut så här

Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Long, ByVal lpWindowName As Long) As Long
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long


Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Boolean


Const GW_HWNDNEXT = 2
Public mWnd As Long
Public lngKlar As Long


Function InstanceToWnd(ByVal target_pid As Long) As Long
Dim test_hwnd As Long, test_pid As Long, test_thread_id As Long
'Find the first window
test_hwnd = FindWindow(ByVal 0&, ByVal 0&)
Do While test_hwnd <> 0
'Check if the window isn't a child
If GetParent(test_hwnd) = 0 Then
'Get the window's thread
test_thread_id = GetWindowThreadProcessId(test_hwnd, test_pid)
If test_pid = target_pid Then
InstanceToWnd = test_hwnd
Exit Do
End If
End If
'retrieve the next window
test_hwnd = GetWindow(test_hwnd, GW_HWNDNEXT)
Loop
End Function

Public Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Boolean

If Str$(hwnd) = mWnd Then
lngKlar = 0
' EnumWindowsProc = False
' Exit Function
End If
'continue enumeration
EnumWindowsProc = True
End Function


Svara

Sv: tabort en fil efter den har packats upp.

Postades av 2003-10-27 18:03:50 - Daniel Hermansson

Det känndes inte riktigt bra så jag sökte lite mer i "api-guiden" och hittade något jag är nöjd med.



Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long

Const SYNCHRONIZE = &H100000
Const INFINITE = &HFFFF


Private Sub Form_Load()

Dim strStr$

strStr = App.Path & "\rar.exe" & " x -o+ """ & App.Path & "\" & f1.Name & """ """ & App.Path & "\nya_filer\"""


WaitForSingleObject OpenProcess(SYNCHRONIZE, 0, Shell(strStr, vbHide)), INFINITE


Kill App.Path & "\" & f1.name


End Sub


Svara

Sv: tabort en fil efter den har packats upp.

Postades av 2003-10-28 00:18:51 - Sven Åke Persson

Om du bortser från Do Loopen Fråga , Packade Shell upp rar filen ?

I så fall kunde du köra en Do Loop som testade FileExists på den uppackade filen.


Svara

Sv: tabort en fil efter den har packats upp.

Postades av 2003-10-28 10:41:17 - Daniel Hermansson

Ja shell packade upp filerna.
Men jag kan inte kör fileexists för att det kommer att vara olika filer som ska behandlas.

Men det borde funka med att fånga upp felmedelande från kill filen.rar och när det inte blev felmedelande gå vidare. Men jag känner mig nöjd med lösningen ovan.


Svara

Sv: tabort en fil efter den har packats upp.

Postades av 2003-10-28 14:21:52 - Oskar Johansson

Fördelen med att fånga felmeddelandet är att programmet nödvändigtsvis inte måste hänga sig under uppackninge! ;)


Svara

Sv: tabort en fil efter den har packats upp.

Postades av 2003-10-30 10:28:31 - Daniel Hermansson

Du har rätt att den lösningen fryser programmet. Men resten av system funkar (iallafall i win2000 ;)). Men jag ska köra det vid programstart så programmet syns inte under tiden eller möjligtvis lägger jag en splash bild så det spelar mindre roll att det blir så.

Och så måste jag nog säga att det går att använda fileexists. Jag tänkte att man skulle använda det på filerna man packat upp när jag svarade.
Men man kan säkert använda det på filen man ska tabort. Om har med raden 'on error resume next'.


Svara

Nyligen

  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak
  • 16:14 Vem anlitar man egentligen när tak
  • 16:13 Vem anlitar man egentligen när tak
  • 11:52 Noen erfaring med uttak hos Mostbe
  • 11:51 Noen erfaring med uttak hos Mostbe
  • 20:22 Spel
  • 17:07 Snabb och trevlig webbplats utan l

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 121
27 958
271 737
634
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies