Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Pascal - Exec per file jpg o altri
Forum - Pascal - Exec per file jpg o altri

Avatar
mirco95 (Normal User)
Newbie


Messaggi: 13
Iscritto: 27/01/2012

Segnala al moderatore
Postato alle 13:55
Domenica, 11/03/2012
Ciao oggi ho studiato il comando exec e finche voglio avviare file eseguibili(.exe) non ho nessuno problema.

Adesso ho due domande:

Se il file eseguibile non è un file che tutti i pc hanno, cosa devo fare per farlo avviare anche in altri pc. Mi spiego se il file .exe l'ho creato io e quindi un secondo pc non ha questo file, cosa devo fare ? Devo aggiungerlo io?

Seconda domanda:
Per avviare file non .exe , quindi ad esempio file jpg che comando devo fare? Potreste farmi un esempio.
Grazie mille

PM Quote
Avatar
Phi (Member)
Expert


Messaggi: 241
Iscritto: 30/12/2009

Segnala al moderatore
Postato alle 16:08
Domenica, 11/03/2012
Testo quotato


Mi spiego se il file .exe l'ho creato io e quindi un secondo pc non ha questo file, cosa devo fare ? Devo aggiungerlo io?



Esatto. La procedura exec ti permette di avviare l'esecuzione di un eseguibile.
Il file eseguito può deve, ovviamente, essere un file accessibile del computer (quindi, in pratica deve essere presente sul disco del computer, e su sistemi Linux devi avere anche i permessi di esecuzione).
Quindi se vuoi distribuire un programma in internet e vuoi fare eseguire da questo un secondo programma devi per forza fornire questo secondo eseguibile assieme al primo e devi passare alla procedura il suo percorso come primo argomento.

Testo quotato


Per avviare file non .exe , quindi ad esempio file jpg che comando devo fare? Potreste farmi un esempio.



Qui non ho capito bene che intendi.

Se stai chiedendo "posso eseguire, come processo file non .exe" la risposta è sì, basta che il file che tenti di avviare sia un file che contenga un processo.
Esempio: Se io creassi un file mioprogramma.exe e lo rinominassi con nome mioprogramma.png potrei chiamare
Codice sorgente - presumibilmente Plain Text

  1. exec('mioprogramma.png', '');

e ciò avviere il mio programma.
Pensa che windows prevede anche eseguibili che non hanno esensione .exe, ad esempio .com o .msi o anche altri.

Se invece mi stai chiedendo come fare a aprire un file ".jpg", cioè come "simulare un doppio clic sopra", allora il discorso è diverso.
Puoi "simulare un Apri" utilizzando le API dei vari sistemi operativi.

PM Quote
Avatar
mirco95 (Normal User)
Newbie


Messaggi: 13
Iscritto: 27/01/2012

Segnala al moderatore
Postato alle 16:36
Domenica, 11/03/2012
Ciao grazie mille per la risposta.
No io mi riferivo se era possibile far partire un'immagine o qualcosa che non sia eseguibile. In questo programma che sto creato dovrei far partire una foto in jpg.. Come potrei fare..
Grazie ancora.


Edit
Ho trovato il modo *_*. spiego a tutti coloro che non sanno il modo. Il comando per una immagine è il seguente

Exec('C:\Windows\system32\mspaint.exe','C:\Coldblur.jpg');

Quindi se è un immagine dobbiamo prima mettere un programma che permette di visualizzare l'immagine.. potremmo usare anche un altro Visualizzatore . E nel secondo codice mettere invece l'indirizzo del file immagine. Stessa cosa ad esempio per un Mp3. Mettiamo cosi:

Codice sorgente - presumibilmente Plain Text

  1. Exec('C:\%ProgramFiles(x86)%\Windows Media Player\wmplayer.exe','C:\musica.mp3');



Spero di essere stato chiaro

Ultima modifica effettuata da mirco95 il 11/03/2012 alle 16:48
PM Quote
Avatar
Phi (Member)
Expert


Messaggi: 241
Iscritto: 30/12/2009

Segnala al moderatore
Postato alle 19:59
Lunedì, 12/03/2012
Se vuoi c'è il comando

Codice sorgente - presumibilmente Pascal

  1. ShellExecute(Handledelllafinestra, 'open','immagine.png',nil,nil, SW_SHOWNORMAL);



ShellExecute in questo caso(dato che il secondo parametro è 'open') apri il file immagine.png con la applicazione predefinita di sistema.
La descrizione dettagliata la trovi qui : http://msdn.microsoft.com/en-us/library/windows/desktop/bb ...
E' inclusa nella unit shellapi e forse anche nella unit windows.
Non sto usando windows e non ho voglia di riavviare per controllare.


Se vuoi usare exec però potresti anche non usare MS Paint ma il visualizzatore di immagini di windows.
Il comando dovrebbe essere
Codice sorgente - presumibilmente Plain Text

  1. %windir%\system32\rundll32.exe c:\windows\system32\shimgvw.dll,ImageView_Fullscreen Nome_immagine


PM Quote
Avatar
mirco95 (Normal User)
Newbie


Messaggi: 13
Iscritto: 27/01/2012

Segnala al moderatore
Postato alle 12:30
Venerdì, 16/03/2012
Ciao e quest'ultima libreria da dove la prendo?Io usao Dev-Pascal e non l'ho . Un altra cosa ... per avere la libreria BMP dove posso trovarla?

PM Quote
Avatar
Phi (Member)
Expert


Messaggi: 241
Iscritto: 30/12/2009

Segnala al moderatore
Postato alle 13:19
Venerdì, 16/03/2012
ShellApi mi pareva fosse una libreria standard del FreePascal Compiler. E dev-pascal dovrebbe essere basato su fpc.
Controlla nella configurazione del compilatore che cerchi le units anche in <directory del compilatore/<versione del compilatore>/units/i386-win32/winunits.
La unit windows invece non dovrebbe darti problema. Mi ricordo di averla usata quando ho provato dev-pascal.

Non so se il pascal standard metta a disposizione delle funzioni per i file bmp. Io le ho trovate. Ad ogni modo puoi usare le API windows che la unit windows ti mette a disposizione.
Provo a scrivere un programmino di esempio.

A te interessa un programma che visualizzi un'immagine ?

Ultima modifica effettuata da Phi il 16/03/2012 alle 13:40
PM Quote
Avatar
mirco95 (Normal User)
Newbie


Messaggi: 13
Iscritto: 27/01/2012

Segnala al moderatore
Postato alle 20:17
Venerdì, 16/03/2012
Ciao io vorrei che l'immagine si visualizza senza nessun'altra cosa. Mi spiego:
Se io la faccio aprire con Paint mi si visualizza questa parte (quarda il file che ho allegato).Quindi a me intresserebbe far visualizzare SOLO l'immagine. Ciao e grazie ancora


mirco95 ha allegato un file: Senza titolo-2 copia.jpg (764649 bytes)
Clicca qui per guardare l'immagine
PM Quote
Avatar
Phi (Member)
Expert


Messaggi: 241
Iscritto: 30/12/2009

Segnala al moderatore
Postato alle 20:27
Venerdì, 16/03/2012
Certo, perché esegui il programma.
Io ti consiglio di creare una tua finestra. Puoi usare la unit suppwingraph di Saladino(la trovia qui sul sito) oppure potresti modificare questo programma:

Codice sorgente - presumibilmente Delphi

  1. program mostrabitmap;
  2.  
  3. uses Windows;
  4.  
  5. const
  6. nomeclasse = 'MostraBmpClass';
  7. nomefile:pchar='< nome della tua immagine >';
  8.  
  9. procedure disegnaimmagine(var dc : hdc; larghezza, altezza : longint);
  10. var
  11. hbmp : hbitmap;
  12. tempdc:hdc;
  13. begin
  14.   hbmp := LoadImage(0, nomefile, IMAGE_BITMAP,0,0, LR_LOADFROMFILE);
  15.   tempdc:=createcompatibledc(0);
  16.   selectobject(tempdc,hbmp);
  17.   BitBlt(dc, 0, 0, larghezza, altezza, tempdc, 0, 0, SRCCOPY);
  18.        //potresti modificare le coordinate qui sopra per centrare l'immagine
  19.   deleteobject(hbmp);
  20.   deletedc(tempdc);
  21. end;
  22.  
  23. function ShowBMPProc(Window: HWnd; AMessage, WP, LP: Longint):Longint; stdcall;
  24. var ps:paintstruct;
  25.     dc : hdc;
  26.     dimensioni:trect;
  27. begin
  28.  ShowBMPProc := 0;
  29.  case AMessage of
  30.   wm_Destroy : begin
  31.    PostQuitMessage(0);
  32.    exit;
  33.   end;
  34.   wm_paint: begin
  35.    dc:=beginpaint(window,@ps);
  36.    GetClientRect(Window,@dimensioni);
  37.    disegnaimmagine(dc,dimensioni.right-dimensioni.left,  dimensioni.bottom-dimensioni.top);
  38.    EndPaint(window,ps);
  39.   end;
  40.   end;
  41.   ShowBMPProc := DefWindowProc(Window, AMessage, WP, LP);
  42. end;
  43.  
  44. function RegistraWndClass: Boolean;
  45. var WindowClass: WndClass;
  46. begin
  47. with windowclass do begin
  48.   Style := cs_hRedraw or cs_vRedraw;
  49.   lpfnWndProc := WndProc(@ShowBMPProc);
  50.   cbClsExtra := 0;
  51.   cbWndExtra := 0;
  52.   hInstance := system.MainInstance;
  53.   hIcon := LoadIcon(0, idi_Application);
  54.   hCursor := LoadCursor(0, idc_Arrow);
  55.   hbrBackground := GetStockObject(black_brush);
  56.   lpszClassName := nomeclasse;
  57. end;
  58.   RegistraWndClass := RegisterClass(WindowClass) <> 0;
  59. end;
  60.  
  61. function CreaFinestra: HWnd;
  62. begin
  63.   CreaFinestra := CreateWindow(nomeclasse, 'Mostra BMP',
  64.          ws_OverlappedWindow, cw_UseDefault, cw_UseDefault,
  65.          200, 150, 0, 0, system.MainInstance, nil);
  66.   if CreaFinestra <> 0 then begin
  67.      ShowWindow(CreaFinestra, CmdShow);
  68.      UpdateWindow(CreaFinestra);
  69.   end;
  70. end;
  71.  
  72. var
  73. AMessage: Msg;
  74. hfinestra: HWnd;
  75. error:boolean;
  76.  
  77. BEGIN
  78.   error:=not(RegistraWndClass);
  79.   if not error then hfinestra := creafinestra;
  80.   error := error or (hfinestra=0);
  81.   if error then messagebox(0,'Si e'' verificato un''errore nella creazione della finestra', '', 0)
  82.   else begin
  83.      while GetMessage(@AMessage, 0, 0, 0) do begin
  84.        TranslateMessage(AMessage);
  85.        DispatchMessage(AMessage);
  86.      end;
  87.   end;
  88. END.



Ma così non è molto semplice.
Il tuo obiettivo sarebbe quello di creare uno splash screen ?

Ultima modifica effettuata da Phi il 16/03/2012 alle 20:35
PM Quote