XProfan X5

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Unsere Datenschutzerklärung wurde aktualisiert. Mit der Nutzung unseres Forums akzeptierst Du unsere Datenschutzerklärung. Du bestätigst zudem, dass Du mindestens 16 Jahre alt bist.

    • Neu

      Probiere ich alles mal am Montag Abend aus. Da kann ich auch mal einen Test laufen lassen um zu ermitteln wie groß die Maps nach meiner Methode sein müssen. Mit Message und dann punktgenau allokieren ist natürlich viel eleganter.
      XProfan-Semiprofi (XProfan X4a+XPIA+LemonEd)
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/90TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
      TerraMaster F4-420 mit 16TB
      XBox Classic/360S/One S/One X Scorpio Edition/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84)
      OnePlus 6 8GB/256GB
      jacdelad.bplaced.net
    • Neu

      Geiler Scheiß. Nur leider lässt sich das nur sehr schwer eine allgemeine Funktion basteln:

      Quellcode

      1. proc FindFiles
      2. Parameters handle&,folder$,mask$
      3. declare strg$,map$,b#,map&
      4. windowstyle 2048
      5. cls
      6. ChDir folder$
      7. AddFiles mask$,1
      8. strg$=Move("ListToStr","|")
      9. UserMessages $1001
      10. sendmessage(handle&,$1000,%hWnd,Len(strg$))
      11. while 1
      12. waitinput
      13. if %UMessage=$1001
      14. map&=FileMap("Open","FindFileMap")
      15. dim b#,Len(strg$)+1
      16. b#=FileMap("Map",map&)
      17. String b#,0=strg$
      18. Dispose b#
      19. FileMap("Close",map&)
      20. sendmessage(handle&,$1002,0,0)
      21. Break
      22. endif
      23. endwhile
      24. endproc
      25. declare size&,liste&,liste2&,map&,q#,isopen%
      26. cls
      27. liste&=Create("Listbox",%hWnd,0,0,0,Width(%hWnd,0),Height(%hwnd,0)-80)
      28. liste2&=Create("Listbox",%hWnd,0,0,Height(%hWnd,0)-80,Width(%hWnd,0),80)
      29. UserMessages $1000,$1002
      30. PExec("|FindFiles",%hWnd,"D:\\XProfan\\XProfan","*.*")
      31. PExec("|FindFiles",%hWnd,"D:\\XProfan\\Projekte\\OSU-Tool","*.*")
      32. PExec("|FindFiles",%hWnd,"D:\\XProfan\\Projekte\\CloudSync","*.*")
      33. PExec("|FindFiles",%hWnd,"D:\\XProfan\\Projekte\\Gamsav","*.*")
      34. while 1
      35. if GetCount(liste2&) and Not(isopen%)
      36. size&=Val(SubStr$(GetString$(liste2&,0),1,"|"))+1
      37. map&=Create("FileMap","FindFileMap",Val(SubStr$(GetString$(liste2&,0),1,"|"))+1)
      38. sendmessage(Val(SubStr$(GetString$(liste2&,0),2,"|")),$1001,0,0)
      39. Inc isopen%
      40. endif
      41. waitinput
      42. select %UMessage
      43. caseof $1000
      44. AddString(liste2&,Str$(&ULPARAM)+"|"+Str$(&UWParam))
      45. caseof $1002
      46. dim q#,size&
      47. q#=FileMap("Map",map&)
      48. sendmessage(liste&,$B,0,0)
      49. Clearlist
      50. Move("StrToList",String$(q#,0),"|")
      51. Move("ListToHandle",liste&)
      52. sendmessage(liste&,$B,1,0)
      53. FileMap("Close",map&)
      54. Dispose q#
      55. DeleteString(liste2&,0)
      56. Clear isopen%
      57. endselect
      58. endwhile
      Alles anzeigen
      XProfan-Semiprofi (XProfan X4a+XPIA+LemonEd)
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/90TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
      TerraMaster F4-420 mit 16TB
      XBox Classic/360S/One S/One X Scorpio Edition/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84)
      OnePlus 6 8GB/256GB
      jacdelad.bplaced.net

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Jac de Lad ()

    • Neu

      Dein Code muß ich mir mal anschauen.
      Auf den ersten Blick :

      Quellcode

      1. sendmessage(Val(SubStr$(GetString$(liste2&,0),2,"|")),$1001,0,0)

      SendMessage ist dazu gedacht, Messages an ein Fenster oder bestimmtes Control
      (Buttons, Editboxen, Listboxen usw.) zu senden. Controls sind in Windows auch
      Fenster.
      Und NICHT an eine Zeile, bzw. Teil eines Strings, die/der mit GetString$ ermittelt wurde.
      Erwartet also unbedingt ein HANDLE. Da kommt natürlich auch kein Fehler. Der Aufruf
      verhallt in den Weiten des Computerspeichers, weil Windows kein Handle findet.

      Also, nochmals Code durchsehen.

      Wie man jetzt einem Prozess eine Message schicken kann, weiß ich nicht.
      Das Fenster, das du im Prozess verwendest, ist ja dem Hauptprogramm
      nicht bekannt (ungefähr das gleiche, wie eine lokale Variable in einer PROC).

      Ich kenne es jetzt nur anders rum. Der Prozess sendet dem Fenster, dessen Handle
      man per pExec mitgibt, eine Message.
      Mal schauen, ob es da eine Möglichkeit, außer Map, gibt.

      Mit Map + FindWindow hätte ich da was :
      Die Übergabe geht natürlich auch mit einem Editfeld. Das könnte man ja
      bei Bedarf auch mit ShowWindow ausblenden.

      Quellcode

      1. $H Messages.PH
      2. Declare h&,hd&,hd1&,ende&,wert&,wert1&,b_send&,text$,tadr&, hFileMap&
      3. declare pointer#
      4. Declare String myArray[]
      5. Declare Handle ZielFenster, edit1&
      6. Struct Daten = w&, w1&, zk$(256)
      7. dim pointer#,Daten
      8. myArray[0] = "Klaus hat Äpfel gekauft !"
      9. myArray[1] = "Rosi hat Rosinen gekauft !"
      10. myArray[2] = "Kai hat Pflaumen gekauft !"
      11. Proc Prozess
      12. parameters win&, hd&,hd1&, edit&
      13. Declare pointer#, edit2&
      14. declare w&,w1&,ende&, hFileMap&
      15. Struct Daten = w&, w1&, zk$(256)
      16. dim pointer#, Daten
      17. windowtitle "empfang"
      18. window 10,10 - 350, 200
      19. edit2& = Create("Edit", %HWnd, "", 100, 10,80, 25)
      20. ende& = 0
      21. UserMessages $1000
      22. whilenot ende&
      23. Case GetText$(win&) = "" : ende& = 1
      24. sleep 1
      25. GetMessage
      26. If %UMessage = $1000
      27. hFileMap& = FileMap("Open", "Test")
      28. If hFileMap&
      29. pointer# = FileMap("Map", hFileMap&)
      30. locate 3,1
      31. print " " + str$(pointer#.w&) + " "
      32. setText hd&, str$(pointer#.w&)
      33. locate 5,1
      34. print " " + str$(pointer#.w1&) + " "
      35. setText hd1&, str$(pointer#.w1&)
      36. Locate 7, 2
      37. Print " "
      38. Locate 7, 2
      39. Print " " + pointer#.zk$
      40. FileMap("Close", hFileMap&)
      41. EndIf
      42. SetText edit2&, GetText$(edit&)
      43. EndIf
      44. endwhile
      45. Dispose pointer#
      46. endproc
      47. windowtitle "send"
      48. window 10,300-200,200
      49. hd& = create("Text", %hWnd, "", 20, 10, 60, 20)
      50. hd1& = create("Text", %hWnd, "", 20, 35, 60, 20)
      51. edit1& = Create("Edit", %HWnd, "", 100, 20, 80, 25)
      52. b_send& = Create("Button",%hWnd,"send", 10, 65, 80, 24)
      53. hFileMap& = Create("FileMap", "Test", SizeOf(pointer#))
      54. h&=pExec("|Prozess",%HWnd, hd&,hd1&, edit1&)
      55. sleep 500
      56. ZielFenster = FindWindow("empfang")
      57. ende& = 0
      58. Randomize
      59. UserMessages $1000
      60. whilenot ende&
      61. waitinput
      62. If Clicked(b_send&)
      63. hFileMap& = FileMap("Open", "Test")
      64. If hFileMap&
      65. pointer# = FileMap("Map", hFileMap&)
      66. wert&=wert&+1
      67. wert1&=wert1&+5
      68. pointer#.w& = wert&
      69. pointer#.w1& = wert1&
      70. pointer#.zk$ = myArray[Rnd(3)]
      71. FileMap("Close", hFileMap&)
      72. SetText edit1&, pointer#.zk$
      73. PostMessage(ZielFenster, $1000, 0, 0)
      74. EndIf
      75. endif
      76. endwhile
      77. Dispose pointer#
      78. end
      Alles anzeigen

      Vielleicht kannst du ja daraus was machen, indem du dir den Namen der Filemap per Editfeld holst.

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von H.Brill ()

    • Neu

      Heinz, jetzt bin ich sauer. Hast du den Code mal ausprobiert? Natürlich mit angepassten Suchpfaden?

      Message $1000 sendet das Zielfenster und die benötigte Größe. Die werden in der Liste gespeichert, weil die nächste Message auch eine $1000 sein kann und die nicht verloren gehen kann. Dann wird die Liste nacheinander abgearbeitet. Message $1001 geht zurück an den Client, deshalb das Handle wieder mit GetString auslesen. Kein Murks und keine Zauberei. Message $1002 vom Clienten zeigt den Host, dass er den String übertragen hat.

      Message an Prozess funktioniert nicht, das habe ich probiert. Bei mir funktioniert mein Programm einwandfrei, egal wie viele Suchvorgänge ich simultan starte.
      XProfan-Semiprofi (XProfan X4a+XPIA+LemonEd)
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/90TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
      TerraMaster F4-420 mit 16TB
      XBox Classic/360S/One S/One X Scorpio Edition/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84)
      OnePlus 6 8GB/256GB
      jacdelad.bplaced.net
    • Neu

      Bin immer noch wütend! :-D
      XProfan-Semiprofi (XProfan X4a+XPIA+LemonEd)
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/90TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
      TerraMaster F4-420 mit 16TB
      XBox Classic/360S/One S/One X Scorpio Edition/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84)
      OnePlus 6 8GB/256GB
      jacdelad.bplaced.net
    • Neu

      Ich hab mich mehr geärgert, dass du den Code kritisierst ohne ihn probiert zu haben. Aber das Thema ist durch, auf zum nächsten.

      Neue Proc "AddFilesASync". Sie funktioniert wie "AddFiles" inklusive Modus. Mehrere Aufrufe werden mit dem Listentrennzeichen getrennt. Die Proc achtet auch darauf, dass eventuell schon vergebene UserMessages wiederhergestellt werden. Das Programm hält nicht an während die Suchvorgänge durchgeführt werden, aber die Proc selbst übernimmt die Kontrolle bis alle Vorgänge beendet sind. Eine wirklich asynchrone Funktion muss man dann selbst anpassen und tief ins Programm einbinden. Für Verbesserungsvorschläge bin ich natürlich offen.

      Quellcode

      1. proc FindFiles
      2. Parameters handle&,folder$,mask$,modus%
      3. declare strg$,map$,b#,map&
      4. ifnot DirExists(folder$)
      5. sendmessage(handle&,$1000,0,0)
      6. end
      7. endif
      8. windowstyle 2048
      9. cls
      10. ChDir folder$
      11. AddFiles mask$,modus%
      12. if GetCount(0)=0
      13. sendmessage(handle&,$1000,0,0)
      14. end
      15. endif
      16. strg$=Move("ListToStr","|")
      17. UserMessages $1001
      18. sendmessage(handle&,$1000,%hWnd,Len(strg$))
      19. while 1
      20. waitinput
      21. if %UMessage=$1001
      22. map&=FileMap("Open","FindFileMap")
      23. dim b#,Len(strg$)+1
      24. b#=FileMap("Map",map&)
      25. String b#,0=strg$
      26. Dispose b#
      27. FileMap("Close",map&)
      28. sendmessage(handle&,$1002,0,0)
      29. Break
      30. endif
      31. endwhile
      32. endproc
      33. Proc AddFilesASync
      34. Parameters maske$,modus%
      35. declare messages$,ld$,liste&,temp$,count%,isopen%,size&,map&,q#
      36. messages$=","
      37. whileloop $1000,$1002
      38. if IsUserMessage(Str$(&loop))
      39. messages$=messages$+Str$(&Loop)+","
      40. else
      41. UserMessages &Loop
      42. endif
      43. endwhile
      44. liste&=Create("List",0)
      45. ld$=Get("ListDel")
      46. whileloop Len(maske$,ld$)
      47. temp$=SubStr$(maske$,&loop,ld$)
      48. PExec("|FindFiles",%hWnd,Left$(temp$,Len(temp$)-Len(SubStr$(temp$,-1,"\\"))),SubStr$(temp$,-1,"\\"),modus%)
      49. Inc count%
      50. endwhile
      51. while 1
      52. if GetCount(liste&) and Not(isopen%)
      53. size&=Val(SubStr$(GetString$(liste&,0),1,"|"))+1
      54. if size&=1
      55. DeleteString(liste&,0)
      56. Dec count%
      57. else
      58. map&=Create("FileMap","FindFileMap",Val(SubStr$(GetString$(liste&,0),1,"|"))+1)
      59. sendmessage(Val(SubStr$(GetString$(liste&,0),2,"|")),$1001,0,0)
      60. Inc isopen%
      61. endif
      62. endif
      63. case count%=0:Break
      64. waitinput
      65. select %UMessage
      66. caseof $1000
      67. AddString(liste&,Str$(&ULPARAM)+"|"+Str$(&UWParam))
      68. caseof $1002
      69. dim q#,size&
      70. q#=FileMap("Map",map&)
      71. sendmessage(liste&,$B,0,0)
      72. Move("StrToList",String$(q#,0),"|")
      73. sendmessage(liste&,$B,1,0)
      74. FileMap("Close",map&)
      75. Dispose q#
      76. DeleteString(liste&,0)
      77. Clear isopen%
      78. Dec count%
      79. endselect
      80. endwhile
      81. whileloop $1000,$1002
      82. casenot InStr(","+Str$(&Loop)+",",messages$):Usermessages -1*&Loop
      83. endwhile
      84. DestroyWindow(liste&)
      85. endproc
      86. declare liste&
      87. cls
      88. liste&=Create("Listbox",%hWnd,0,0,0,Width(%hWnd,0),Height(%hwnd,0))
      89. AddFilesASync "D:\\XProfan\\Projekte\\OSU-Tool\\*.prf|D:\\XProfan\\Projekte\\CloudSync\\*.prf|D:\\XProfan\\Projekte\\Gamsav\\*.prf",1
      90. Move("ListToHandle",liste&)
      91. SetText %hWnd,"Fertig"
      92. while 1
      93. waitinput
      94. endwhile
      Alles anzeigen
      XProfan-Semiprofi (XProfan X4a+XPIA+LemonEd)
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/90TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
      TerraMaster F4-420 mit 16TB
      XBox Classic/360S/One S/One X Scorpio Edition/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84)
      OnePlus 6 8GB/256GB
      jacdelad.bplaced.net

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Jac de Lad ()

    • Neu

      Mir ist gerade noch ein Fehler aufgefallen, die Zeilen

      Quellcode

      1. sendmessage(liste&,$B,0,0)
      und

      Quellcode

      1. sendmessage(liste&,$B,1,0)
      müssen raus bzw. vor/nach

      Quellcode

      1. Move("ListToHandle",Liste&)
      rein. Vielleicht kann das ein Moderator ändern.

      Ein weiterer Schwachpunkt ist, dass die Anzahl der Ergebnisse nicht über 252144 liegen darf. Gegebenfalls muss man den Code weiter anpassen.

      Anmerkung: Ich habe den Code gerade etwas modifiziert und auf Arbeit ausprobiert. Ich habe an 7 Orten im Netzwerk insgsamt 603423 Dateien finden lassen. Der Originalcode mit aufeinanderfolgenden Suchen braucht etwa 57 Sekunden. Mit parallelen Suchen waren es nur noch etwa 21 Sekunden. Natürliche ist Reihenfolge der gefundenen Dateien dann anders. Da ist jeder selbst dafür verantwortlich den Code anzupassen. Ich stelle morgen eine finale Version mit optionalem dritten Parameter hier rein, der ein Grid oder eine GridBox sein kann, damit der Überlauf bei Element 252145 nicht stattfinden kann.
      XProfan-Semiprofi (XProfan X4a+XPIA+LemonEd)
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/90TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
      TerraMaster F4-420 mit 16TB
      XBox Classic/360S/One S/One X Scorpio Edition/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84)
      OnePlus 6 8GB/256GB
      jacdelad.bplaced.net

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Jac de Lad ()

    • Neu

      Quellcode

      1. proc FindFiles
      2. Parameters handle&,folder$,mask$,modus%
      3. declare strg$,map$,b#,map&
      4. ifnot DirExists(folder$)
      5. sendmessage(handle&,$1000,0,0)
      6. end
      7. endif
      8. windowstyle 2048
      9. cls
      10. ChDir folder$
      11. AddFiles mask$,modus%
      12. if GetCount(0)=0
      13. sendmessage(handle&,$1000,0,0)
      14. end
      15. endif
      16. strg$=Move("ListToStr","|")
      17. UserMessages $1001
      18. sendmessage(handle&,$1000,%hWnd,Len(strg$))
      19. while 1
      20. waitinput
      21. if %UMessage=$1001
      22. map&=FileMap("Open","FindFileMap")
      23. dim b#,Len(strg$)+1
      24. b#=FileMap("Map",map&)
      25. String b#,0=strg$
      26. Dispose b#
      27. FileMap("Close",map&)
      28. sendmessage(handle&,$1002,0,0)
      29. Break
      30. endif
      31. endwhile
      32. endproc
      33. Proc AddFilesASync'Flags&: 1=Neuzeichnen nicht verändern, 2=Stringrückgabe (handle&=0)
      34. Select %PCount
      35. CaseOf 4
      36. Parameters maske$,modus%,handle&,flags&
      37. CaseNot TestBit(flags&,0):SendMessage(handle&,$B,0,0)
      38. CaseOf 3
      39. Parameters maske$,modus%,handle&
      40. SendMessage(handle&,$B,0,0)
      41. var flags&=0
      42. CaseOf 2
      43. Parameters maske$,modus%
      44. var handle&=0
      45. var flag&=0
      46. OtherWise
      47. Return -1
      48. EndSelect
      49. declare messages$,ld$,liste&,temp$,count%,isopen%,size&,map&,q#,return$
      50. messages$=","
      51. whileloop $1000,$1002
      52. if IsUserMessage(Str$(&loop))
      53. messages$=messages$+Str$(&Loop)+","
      54. else
      55. UserMessages &Loop
      56. endif
      57. endwhile
      58. liste&=Create("List",0)
      59. ld$=Get("ListDel")
      60. whileloop Len(maske$,ld$)
      61. temp$=SubStr$(maske$,&loop,ld$)
      62. PExec("|FindFiles",%hWnd,Left$(temp$,Len(temp$)-Len(SubStr$(temp$,-1,"\\"))),SubStr$(temp$,-1,"\\"),modus%)
      63. Inc count%
      64. endwhile
      65. while 1
      66. if GetCount(liste&) and Not(isopen%)
      67. size&=Val(SubStr$(GetString$(liste&,0),1,"|"))+1
      68. if size&=1
      69. DeleteString(liste&,0)
      70. Dec count%
      71. else
      72. map&=Create("FileMap","FindFileMap",Val(SubStr$(GetString$(liste&,0),1,"|"))+1)
      73. sendmessage(Val(SubStr$(GetString$(liste&,0),2,"|")),$1001,0,0)
      74. Inc isopen%
      75. endif
      76. endif
      77. case count%<1:Break
      78. waitinput
      79. select %UMessage
      80. caseof $1000
      81. AddString(liste&,Str$(&ULPARAM)+"|"+Str$(&UWParam))
      82. caseof $1002
      83. dim q#,size&
      84. q#=FileMap("Map",map&)
      85. If TestBit(flags&,1)
      86. Return$=Return$+"|"+String$(q#,0)
      87. ElseIf handle&=0
      88. Move("StrToList",String$(q#,0),"|")
      89. Else
      90. Clearlist 0
      91. Move("StrToList",String$(q#,0),"|")
      92. Move("ListToHandle",handle&)
      93. EndIf
      94. FileMap("Close",map&)
      95. Dispose q#
      96. DeleteString(liste&,0)
      97. Clear isopen%
      98. Dec count%
      99. endselect
      100. endwhile
      101. whileloop $1000,$1002
      102. casenot InStr(","+Str$(&Loop)+",",messages$):Usermessages -1*&Loop
      103. endwhile
      104. DestroyWindow(liste&)
      105. Case TestBit(flags&,1):Return Del$(Return$,1,1)
      106. Case (handle&<>0) And Not(TestBit(flags&,0)):SendMessage(handle&,$B,1,0)
      107. endproc
      Alles anzeigen
      Aufruf:
      AddFilesASync S,N1[,N2[,N3]]

      Entweder mit 2 Parametern wie bei AddFiles, oder mit einem dritten Parameter als Handle einer Gridbox/ListBox etc., die die Ergebnisse aufnimmt. Es ist auch ein dritter Parameter möglich (0=kein Einfluss, 1=Neuzeichnen des Handles von N2 nicht verändern, 2=Rückgabe der Ergebnisse als String (dann wird N2 ignoriert)).
      XProfan-Semiprofi (XProfan X4a+XPIA+LemonEd)
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/90TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
      TerraMaster F4-420 mit 16TB
      XBox Classic/360S/One S/One X Scorpio Edition/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84)
      OnePlus 6 8GB/256GB
      jacdelad.bplaced.net