Programma Base per aprire due file nella stessa finestra

« Older   Newer »
  Share  
Dragon[ITA]
CAT_IMG Posted on 1/1/2012, 22:57     +1   -1




il programma non fa nulla di che, semplicemente se gli trascini spora un file ne legge i bytes.

la cosa interessante è che se poi ci trascini sopra un altro file non si apre un altra istanza del programma ma il file si apre nella stessa finestra.

dopo un po' di travaglio sono riuscito a far stare la soluzione nello stesso file .au3 :P

(ps perchè funga bisogna compilarlo :\)

CODICE
#cs ----------------------------------------------------------------------------

AutoIt Version: 3.3.6.1
Author:         Dragon[ITA]

Script Function:
       Template AutoIt script.

#ce ----------------------------------------------------------------------------
#include <SendMessage.au3>

;NO DOUBLE PROCESS
$t_1 = ProcessList(@ScriptName)
If $t_1[0][0] >= 2 Then
       FileWrite(@TempDir&"\File_74681.tmpfile",$CmdLine[1])
       Sleep(100)
       _SendMessage(WinGetHandle("Editor"),0xAAAA,0,0)
       Exit
EndIf

#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Editor = GUICreate("Editor", 372, 270, 192, 124)
$Edit = GUICtrlCreateEdit("", 0, 0, 369, 265)
GUISetState(@SW_SHOW)
Global $Data = ""
Global $hFile

GUIRegisterMsg(0xAAAA,"WM_NEWFILE")

If $CmdLine[0] > 0 Then
       If FileExists($CmdLine[1]) Then
               $hFile = FileOpen($CmdLine[1],16)
               $Data = FileRead($hFile)
               FileClose($hFile)
               GUICtrlSetData($Edit,$Data)
       EndIf
EndIf

While 1
       $nMsg = GUIGetMsg()
       Switch $nMsg
               Case $GUI_EVENT_CLOSE
                       Exit

       EndSwitch
WEnd

Func WM_NEWFILE($hwnd, $msgID, $wParam, $lParam)
       $hFile = FileRead(@TempDir&"\File_74681.tmpfile")
       Sleep(100)
       FileDelete(@TempDir&"\File_74681.tmpfile")
       $hFile = FileOpen($hFile,16)
       $Data = FileRead($hFile)
       FileClose($hFile)
       GUICtrlSetData($Edit,$Data)
EndFunc
 
Top
LoGiX
CAT_IMG Posted on 1/1/2012, 23:46     +1   -1




Bravo anche se io avrei fatto in modo leggermente diverso :asd:
Ma bel metodo anche il tuo!
 
Top
antospaty
CAT_IMG Posted on 2/1/2012, 13:53     +1   -1




bel codice...
 
Top
CAT_IMG Posted on 2/1/2012, 14:01     +1   -1

So implementare gli object

Group:
Admin
Posts:
1,215
Reputazione:
+150

Status:


CITAZIONE
perchè funga bisogna compilarlo :\

Per un linguaggio di Scripting non è una buona cosa... Discutibile la scelta del nome del file temporaneo, il nome dovrebbe essere descrittivo più che scelto a caso e hard-programmed.

A parte quei punti da migliorare, l'idea resta buona :)

EDIT:
CODICE
$hFile = FileRead(@TempDir&"\File_74681.tmpfile")
      Sleep(100)
      FileDelete(@TempDir&"\File_74681.tmpfile")
      $hFile = FileOpen($hFile,16)
      $Data = FileRead($hFile)
      FileClose($hFile)
      GUICtrlSetData($Edit,$Data)


Penso che ci sia qualcosa che non va. Stai leggendo il contenuto di un file, poi lo stai cancellando, poi lo stai aprendo (ti ricordo che l'hai cancellato, come fai ad aprire un file che non esiste?), poi lo stai leggendo (continua a non esistere) e poi stai chiudendo un handle non valido (dato che, ripeto, il file non esiste).
Non sarebbe meglio fare così?
CODICE
$Data = FileRead(@TempDir&"\File_74681.tmpfile")
FileDelete(@TempDir&"\File_74681.tmpfile")
GUICtrlSetData($Edit,$Data)


:)

EDIT2: ho riguardato il codice e l'idea è davvero interessante! Posso provare a reimplementare tutto da capo "a modo mio"?
 
Top
FrontBack
CAT_IMG Posted on 2/1/2012, 14:45     +1   -1




CITAZIONE (‡ (dd) @ 2/1/2012, 14:01) 
CITAZIONE
perchè funga bisogna compilarlo :\

Per un linguaggio di Scripting non è una buona cosa... Discutibile la scelta del nome del file temporaneo, il nome dovrebbe essere descrittivo più che scelto a caso e hard-programmed.

A parte quei punti da migliorare, l'idea resta buona :)

EDIT:
CODICE
$hFile = FileRead(@TempDir&"\File_74681.tmpfile")
      Sleep(100)
      FileDelete(@TempDir&"\File_74681.tmpfile")
      $hFile = FileOpen($hFile,16)
      $Data = FileRead($hFile)
      FileClose($hFile)
      GUICtrlSetData($Edit,$Data)


Penso che ci sia qualcosa che non va. Stai leggendo il contenuto di un file, poi lo stai cancellando, poi lo stai aprendo (ti ricordo che l'hai cancellato, come fai ad aprire un file che non esiste?), poi lo stai leggendo (continua a non esistere) e poi stai chiudendo un handle non valido (dato che, ripeto, il file non esiste).
Non sarebbe meglio fare così?
CODICE
$Data = FileRead(@TempDir&"\File_74681.tmpfile")
FileDelete(@TempDir&"\File_74681.tmpfile")
GUICtrlSetData($Edit,$Data)


:)

EDIT2: ho riguardato il codice e l'idea è davvero interessante! Posso provare a reimplementare tutto da capo "a modo mio"?

Oppure prima fai FileOpen, lo leggi, lo chiudi e poi lo cancelli, altrimenti, come ha detto dd non avrebbe senso...

@dd: e comunque se non metti FileOpen rischi che alcuni byte non vengano letti, quel 16 in FileOpen corrisponde alla lettura binaria, che non è impostata di default.
 
Top
CAT_IMG Posted on 2/1/2012, 15:02     +1   -1

So implementare gli object

Group:
Admin
Posts:
1,215
Reputazione:
+150

Status:


CITAZIONE (FrontBack @ 2/1/2012, 14:45) 
@dd: e comunque se non metti FileOpen rischi che alcuni byte non vengano letti, quel 16 in FileOpen corrisponde alla lettura binaria, che non è impostata di default.

Si hai ragione, pensavo a Unix dove la lettura binaria non esiste, che se ci pensi ha anche più senso dato che ogni file è binario :D :D
Comunque resta il fatto che nel codice ci deve essere un problema, sta cancellando il file e poi lo sta aprendo ancora...
 
Top
Dragon[ITA]
CAT_IMG Posted on 2/1/2012, 16:44     +1   -1




CITAZIONE
Penso che ci sia qualcosa che non va. Stai leggendo il contenuto di un file, poi lo stai cancellando, poi lo stai aprendo (ti ricordo che l'hai cancellato, come fai ad aprire un file che non esiste?), poi lo stai leggendo (continua a non esistere) e poi stai chiudendo un handle non valido (dato che, ripeto, il file non esiste).
Non sarebbe meglio fare così?

nono, guarda che la variabile è la stessa.
CODICE
/* File_74681.tempfile */
/* C:\blabla\blabla\file.txt */

$hFile = FileRead(File_74681.tempfile) //-- >C:\blabla\blabla\file.txt
poi
$hFile = FileOpen($hFile) //--> diventa l'handle di file.txt
...

CITAZIONE
EDIT2: ho riguardato il codice e l'idea è davvero interessante! Posso provare a reimplementare tutto da capo "a modo mio"?

certamente :P

EDIT: invece di passare nel file temporaneo una copia del file (che magari potrebbe essere anche 1 Gb e perderebbe del tempo) gli passo il percorso al file :D
 
Top
CAT_IMG Posted on 2/1/2012, 17:31     +1   -1

So implementare gli object

Group:
Admin
Posts:
1,215
Reputazione:
+150

Status:


Lo so, ma io discutevo sul nome del file temporaneo. Perché "File_74681.tempfile" e non ad esempio "NomeApplicazione"?

Comunque grazie del permesso per reimpementare :P
 
Top
Aaly
CAT_IMG Posted on 5/1/2012, 01:03     +1   -1




CITAZIONE (Dragon[ITA] @ 2/1/2012, 16:44) 
EDIT: invece di passare nel file temporaneo una copia del file (che magari potrebbe essere anche 1 Gb e perderebbe del tempo) gli passo il percorso al file :D

Se la dimensione del file è 97mb funziona, già a 131mb va in
"Error: allocating memory", per risolvere dovresti usare

CODICE
_MemGlobalAlloc(1073741824)

(1073741824 byte sono 1gb.)
 
Top
CAT_IMG Posted on 5/1/2012, 02:26     +1   -1

So implementare gli object

Group:
Admin
Posts:
1,215
Reputazione:
+150

Status:


Allocare 1GB di memoria per aprire un file? Alcuni viaggiano ancora con mezzo giga di RAM...
 
Top
Aaly
CAT_IMG Posted on 5/1/2012, 02:46     +1   -1




Lui parlava di file da 1gb, potrebbe anche allocare la dimensione del file stesso.

CODICE
_MemGlobalAlloc(FileGetSize(file))
 
Top
Dragon[ITA]
CAT_IMG Posted on 7/1/2012, 15:19     +1   -1




si ma il punto è che è solo la struttura per fare un programma che apra un file nella stessa finestra...

poi la roba intorno ce la metti te :D
 
Top
CAT_IMG Posted on 7/1/2012, 20:04     +1   -1

So implementare gli object

Group:
Admin
Posts:
1,215
Reputazione:
+150

Status:


CITAZIONE (Aaly @ 5/1/2012, 02:46) 
Lui parlava di file da 1gb, potrebbe anche allocare la dimensione del file stesso.

CODICE
_MemGlobalAlloc(FileGetSize(file))

Il problema persiste.
 
Top
12 replies since 1/1/2012, 22:57   240 views
  Share