Paules-PC-Forum.de Anzeige:

Microsoft Windows Intune: PC-Verwaltung und -Sicherheit in der Cloud: Updateverwaltung, Anti-Virus und vieles mehr!


Zurück   Paules-PC-Forum.de > Programmierung > XProfan > Anregungen & Bugreports

Anregungen & Bugreports Für Vorschläge an den Autor Roland und neue XProfan-Versionen

EM-Tippspiel

Paule bei Facebook


Paule bei Twitter


Letzte Forenthemen
Gehe zum ersten neuen Beitrag TabCtrl
Aufrufe: 108, Antworten: 10
Gehe zum ersten neuen Beitrag Von Live CD Windowspfad...
Aufrufe: 43, Antworten: 3
Gehe zum ersten neuen Beitrag PPF - Shoppingwahn
Aufrufe: 50823, Antworten: 1388
Gehe zum ersten neuen Beitrag Dateien lassen sich nicht...
Aufrufe: 8, Antworten: 2
Gehe zum ersten neuen Beitrag Suche Programm um Werbung zu...
Aufrufe: 39, Antworten: 2
Gehe zum ersten neuen Beitrag McAfee AVERT Stinger...
Aufrufe: 2, Antworten: 0
Gehe zum ersten neuen Beitrag Sticky Password 6.0.2...
Aufrufe: 3, Antworten: 0
Gehe zum ersten neuen Beitrag Sicher Löschen 3.19 (Windows)
Aufrufe: 2, Antworten: 0
Gehe zum ersten neuen Beitrag Cleaning Suite 2.1 (Windows)
Aufrufe: 2, Antworten: 0
Gehe zum ersten neuen Beitrag GoodSync 9.2.0.0 (Windows,...
Aufrufe: 2, Antworten: 0
Zeige:





Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 23.12.2010, 16:56   #1 (Direktlink)
Super-Moderator
 
Benutzerbild von Jac de Lad
 
Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
Standard Mehrere Suchvorgänge

Vielleicht wäre es noch möglich mehrere Suchvorgänge gleichzeitig zu ermöglichen, also FindFirst$() und FindNext$() mit einem optionalen Parameter auszustatten.

Jac
__________________
XProfan-Profi (XProfan X2+XPIA)
http://jacdelad.bplaced.net
http://jacdelad.square7.ch
Jac de Lad ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 24.12.2010, 11:44   #2 (Direktlink)
Unregistriert
Gast
 
Beiträge: n/a
Standard

Hi Jac,

geht doch schon

Code:
Proc Callback1
  Var addi$ = ""
  Parameters hwnd&,l&,Find$
  addi$ = FindFirst$(Find$)
  If addi$ <> ""
    Addstring(l&,addi$)
  EndIf
  WhileNot %IOResult
    addi$ = FindNext$(Find$)
    If addi$ <> ""
      Addstring(l&,addi$)
    EndIf
  EndWhile
  End
EndProc

window 600,600
Var ende% = 0
Var Liste& = Create("Listbox",%hwnd,0,10,10,300,300)
Var h1&=PExec("|Callback1",%Hwnd,Liste&,"*.prf")
Var h2&=PExec("|Callback1",%Hwnd,Liste&,"*.txt")
WhileNot ende%
  Waitinput
  ende% = 1
EndWhile
End
  Mit Zitat antworten
Alt 24.12.2010, 13:47   #3 (Direktlink)
Super-Moderator
 
Benutzerbild von Jac de Lad
 
Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
Standard

Hallo Unregistriert.

Nein, das ist nicht das was ich meine, da dir Funktionen gleichzeitig ablaufen und nicht miteinander kommunizieren. FindNext$() hat keine Parameter. Und ich meinte, dass ich in zum Beispiel in einer Schleife mit FindFirst$() starte und dann in dieser Schleife zum Beispiel eine neue Schleife aufmache und mit dem Ergebnis der ersten FindFirst$()/FindNext$() ein neues FindFirst$()/FindNext$() starte, welches nach Beendigung dieses Suchlaufs wieder mit dem ersten weitermacht. Deshalb auch ein optoinaler Parameter mit einem Zähler (erster Suchlauf=0, zweiter Suchlauf=1).

Hier mal ein Beispiel wie ich mir das vorstelle:
Code:
Proc Suchlauf
declare p$,q$
p$=FindFirst$("C:\\*.*",0)
whilenot p$=""
if DirExists(p$)
q$=FindFirst$(p$+"\\*.*",1)
whilenot q$=""
if FileExists(q$)
AddString(variable&,q$)
endif
q$=FindNext$(1)
endwhile
endif
p$=FindNext$(0)
endwhile
endproc
Der Code ist wie gesagt nur ein Beispiel. Er sucht alle Dateien in der zweiten Ebene von "C:\". Man könnte ihn jetzt noch so gestalten, dass der alle Dateien in allen Unterordnern findet, dazu brauch man nur 2 Funktionen zu schreiben, wo der Zähler in einer Variable verwaltet wird. Aber das Prinzip des von mir gewünschten Zählers sollte jetzt klar sein.

Jac
__________________
XProfan-Profi (XProfan X2+XPIA)
http://jacdelad.bplaced.net
http://jacdelad.square7.ch
Jac de Lad ist offline   Mit Zitat antworten
Alt 24.12.2010, 16:48   #4 (Direktlink)
Unregistriert
Gast
 
Beiträge: n/a
Standard

Hallo Jac,

geht auch.


Code:
Proc Callback1
  Var addi$ = ""
  Parameters hwnd&,l&,Find$
  addi$ = FindFirst$(Find$)
  If addi$ <> ""
    Addstring(l&,addi$)
  EndIf
  WhileNot %IOResult
    addi$ = FindNext$(Find$)
    If addi$ <> ""
      Addstring(l&,addi$)
    EndIf
  EndWhile
  End
EndProc

Proc Suchlauf
  Parameters Find$,Find1$,Liste&
  Var h1& = 0
  Var p$ = FindFirst$(Find$)
  p$=Translate$(Translate$(p$,"[",""),"]","")
  Find$=left$(Find$,3)
  whilenot p$=""
    p$=Translate$(Translate$(p$,"[",""),"]","")
    if DirExists(find$+p$)
      h1&=PExec("|Callback1",%Hwnd,Liste&,find$+p$+find1$)
    endif
    p$=FindNext$()
  endwhile
EndProc

window 600,600
Var ende% = 0
Var Liste& = Create("Listbox",%hwnd,0,10,10,300,300)
Suchlauf("D:\\*.*","\\*.Hallihallo",Liste&)
WhileNot ende%
  Waitinput
  ende% = 1
EndWhile
End
  Mit Zitat antworten
Alt 24.12.2010, 22:58   #5 (Direktlink)
Super-Moderator
 
Benutzerbild von Frabbing
 
Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.090
Standard

Mit einem Handle oder einer Nummer wäre es aber einfacher und viel unkomplizierter. Zusätzlich optional würde Einsteiger auch nicht überfordern.
__________________
Gruß, Frank


Webpage http://frabbing.bplaced.net
mit Freeware - Tools, Spiele und Grafiken.
Frabbing ist gerade online   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 25.12.2010, 10:57   #6 (Direktlink)
Super-Moderator
 
Benutzerbild von Jac de Lad
 
Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
Standard

Hallo Unregistriert.

Klar geht das, ich kann auch auf das Callback warten. Aber es ist meines Erachtens nicht sinnvoll sowas auszulagern und gleich einen neuen Prozess aufzumachen. Das ist etwas umständlich.

Eine andere Möglichkeit ohne optionalen Zähler wäre noch erst zu suchen, das Ergebnis zu speichern und dann erst auszuwerten.

Jac
__________________
XProfan-Profi (XProfan X2+XPIA)
http://jacdelad.bplaced.net
http://jacdelad.square7.ch
Jac de Lad ist offline   Mit Zitat antworten
Alt 25.12.2010, 11:29   #7 (Direktlink)
Stammuser
 
Benutzerbild von Andreas Miethe
 
Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
Standard

Zitat:
Zitat von Jac de Lad Beitrag anzeigen
Hallo Unregistriert.

Klar geht das, ich kann auch auf das Callback warten. Aber es ist meines Erachtens nicht sinnvoll sowas auszulagern und gleich einen neuen Prozess aufzumachen. Das ist etwas umständlich.

Jac
So,bin wieder registriert

Hallo Jac,

und ob das sinnvoll ist sowas auszulagern.
So eine Suche kann unter Umständen lange dauern, und genau so lange ist Dein Programm blockiert.

Sieh mal hier.
Du kannst während der Suche durch die Liste scrollen. Versuch das mal ohne Auslagerung.

Code:
'##############################
'Rekursive Suche nach Dateien
'Andreas Miethe 2010
'##############################

$H Windows.ph
$H Messages.ph

Proc GetFilesInDir
  'Rekursive oder einfache Suche nach Dateien
  Parameters Directory$,Maske$,Liste&,Rekursiv%,Text&,Gefunden&

  Struct FILETIME = dwLowDateTime&,\
  dwHighDateTime&

  Struct WIN32_FIND_DATA  = dwFileAttributes&,\
  ftCreationTime.FILETIME!,\
  ftLastAccessTime.FILETIME!,\
  ftLastWriteTime.FILETIME!,\
  nFileSizeHigh&,\
  nFileSizeLow&,\
  dwReserved0&,\
  dwReserved1&,\
  cFileName$(~MAX_PATH),\
  cAlternateFileName$(14)

  Proc Suche
    Parameters Directory$,Maske$,Liste&,Rekursiv%,Text&,Gefunden&
    Var WFD# = New(WIN32_FIND_DATA)
    Var Find1$ = ""
    Var hFind& = 0
    If (Directory$ <> "")  and (Right$(Directory$,1) <> "\\")
      Directory$ = Directory$+"\\"
    EndIf
    Var Find$ = Directory$+Maske$

    hFind& = ~FindFirstFile(Find$,WFD#)
    If hFind& <> 0
      Settext Text&,Directory$
      Repeat
        If (Trim$(WFD#.cFileName$) <> ".") and (Trim$(WFD#.cFileName$) <> "..") and ((WFD#.dwFileAttributes& & ~FILE_ATTRIBUTE_DIRECTORY) <> ~FILE_ATTRIBUTE_DIRECTORY)
          If Trim$(WFD#.cFileName$) <> ""
            AddString(Liste&,Directory$+Trim$(WFD#.cFileName$))
            Settext Gefunden&,Str$(GetCount(Liste&))
          EndIf
        EndIf
      Until ~FindNextFile(hFind&,WFD#) = 0
      ~FindClose(hFind&)
    Else
    EndIf

    If Rekursiv% = 1
      Find1$ = Directory$+"*.*"
      hFind& = ~FindFirstFile(Find1$,WFD#)
      Repeat
        If (Trim$(WFD#.cFileName$) <> ".") and (Trim$(WFD#.cFileName$) <> "..") and ((WFD#.dwFileAttributes& & ~FILE_ATTRIBUTE_DIRECTORY) = ~FILE_ATTRIBUTE_DIRECTORY)
          '#########################################
          'Hier ruft sich die Procedur selbst auf !!
          '#########################################
          Suche(Directory$+Trim$(WFD#.cFileName$),Maske$,Liste&,1,Text&,Gefunden&)
        EndIf
      Until ~FindNextFile(hFind&,WFD#) = 0
      ~FindClose(hFind&)
      Dispose WFD#
    EndIf

  EndProc

  Var Ende& = 0
  WhileNot ende&
    Suche(Directory$,Maske$,Liste&,Rekursiv%,Text&,Gefunden&)
    Ende& = 1
  EndWhile
  Settext Gefunden&,"Suche beendet :" + Str$(GetCount(Liste&)) + " Dateien gefunden die dem Suchkriterium entsprechen"
  End
EndProc


Declare Ende&
Windowstyle 512+24
window %maxx,%maxy
CLS ~GetSysColor(~Color_BTNFACE)
WindowTitle "Rekursion"
SetDialogFont ~GetStockObject(~DEFAULT_GUI_FONT)
Var Text& = Create("TEXT",%hwnd,"",0,0,width(%hwnd),24)
Var Gefunden& = Create("TEXT",%hwnd,"",0,28,width(%hwnd),24)
Var Liste& = Create("Listbox",%hwnd,0,0,100,width(%hwnd),height(%hwnd)-100)
Var P& = 0
Var IsOpen& = 1
Var h1&=PExec("|GetFilesInDir","C:\\","*.prf",Liste&,1,text&,Gefunden&)',%Hwnd,Liste&,find$+p$+find1$,2)

WhileNot Ende&
  Waitinput
  If %key = 2
    process("Kill", h1&,0)
    Ende& = 1
  EndIf
EndWhile
End
__________________
Gruss
Andreas

______________________
http://www.ampsoft.eu

Profan 3.3 - XProfanX2
Windows 95,98,ME,2000,XP
Vista - Windows 7 32 / 64 Bit

ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher
Andreas Miethe ist offline   Mit Zitat antworten
Alt 25.12.2010, 13:15   #8 (Direktlink)
Dauergast
 
Benutzerbild von p. specht
 
Registriert seit: 06.02.2009
Ort: Wien, Österreich
Beiträge: 1.078
Standard

Issja wie Weihnachten! Danke!
__________________
Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,XPSE,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB2:USB3
p. specht ist offline   Mit Zitat antworten
Alt 25.12.2010, 15:33   #9 (Direktlink)
Super-Moderator
 
Benutzerbild von Jac de Lad
 
Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
Standard

Ah danke, so gehts natürlich auch. Allerdings will ich nicht immer, dass man währenddessen in der Liste scrollen kann, aber das kann man natürlich sehr einfach blockieren.

Jac
__________________
XProfan-Profi (XProfan X2+XPIA)
http://jacdelad.bplaced.net
http://jacdelad.square7.ch
Jac de Lad ist offline   Mit Zitat antworten
Antwort

  Paules-PC-Forum.de > Programmierung > XProfan > Anregungen & Bugreports

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Mehrere News-Fenster - wie realisieren? Mehrere Weblogs einbinden? Stetti Homepagegestaltung 3 26.02.2010 12:12
Mehrere BS? Der_kleine_Hobbit Windows XP 3 20.12.2008 12:42
Mehrere USB Hubs columbo1979 Hardware - Problemlösungen 4 15.11.2007 17:04
DVD auf mehrere CD`s phan Software - Allgemein 8 27.09.2006 19:15
mehrere Downloads mit IE Amiga Office-Anwendungen 1 02.08.2004 11:01



Alle Zeitangaben in WEZ +2. Es ist jetzt 22:22 Uhr.


Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Powered by vBCMS® 2.7.0 ©2002 - 2012 vbdesigns.de
(c) Paules-PC-Forum.de

::: Impressum :::

Search Engine Optimization by vBSEO 3.3.2