Nhúng file vào Excel với control BSStreamX trong BSAC - play mp3 (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Nguyễn Duy Tuân

Nghị Hách
Thành viên danh dự
Tham gia
13/6/06
Bài viết
4,854
Được thích
10,345
Giới tính
Nam
Nghề nghiệp
Giáo viên, CEO tại Bluesofts
Nhúng các loại file vào trong file Excel. Ví dụ chạy file nhạc Mp3 mà chỉ duy nhất file Excel. Đây là kỹ thuật lập trình VBA nhúng các loại file vào trong tập tin Excel bằng control BSStreamX của BSAC. Khi mang file Excel này sang máy tính khác không phải mang các file bạn đã nhúng bên trong BSStreamX.

(*) Download excel file with source code: https://drive.google.com/file/d/1-fG014Sfg1i132czPjiQP4PPnxfXI-Si/view?usp=sharing

(*) Download BSAC, Add-in A-Tools: http://bluesofts.net/giai-phap-phan...-thao-va-quan-tri-du-lieu-excel-qua-mang.html
 
Cái này người ta chèn file virut vào thì sao anh, mà chạy trên xls được không anh
 
Cái này người ta chèn file virut vào thì sao anh, mà chạy trên xls được không anh

Nếu trên máy tính không có phần mềm diệt virus thì người ta có thể nhúng các file binary EXE, DLL, OCX,... vào rồi lại bung ra để chạy là được, mọi thứ vẫn chỉ nằm trong file Excel.
Các phần mềm diệt virus hầu hết có cơ chế chặn việc bung binary từ một ứng dụng ra bên ngoài, nó định nghĩa đó là "hành vi" nguy hiểm.
 
Lần chỉnh sửa cuối:
Nếu trên máy tính không có phần mềm diệt virus thì người ta có thể nhúng các fie binary EXE, DLL, OCX,... vào rồi lại bung ra để chạy là được, mọi thứ vẫn chỉ nằm trong file Excel.
Các phần mềm diệt virus hầu hết có cơ chế chặn việc bung binary từ một ứng dụng ra bên ngoài, nó định nghĩa đó là "hành vi" nguy hiểm.
Nếu giải nén file excel thì ta sẽ tìm thấy file đã nhúng hả anh ?
 
1/ Thực ra cài mà xài hoặc Copy File *.OCX đó vào System xài là tốt nhất

2/ nếu nhúng vào files Excel thì nó cỏng thêm cái File đó vào nặng lắm VD: File OCX đó = 3M thì = Excel + 3M = ???
nặng lắm .... chỉ làm biếng thì mới làm vậy thôi ( Vì Mạnh đã thử cách nhúng theo chỉ dẫn của Anh @batman1 trên GPE này ròi )
.....
đường nào cũng xài nên làm theo mục số 1 ấy là tốt nhất
Xem hình sau là biết có mấy chữ mà file to trà bá luôn he

1601434459810.png
 
Lần chỉnh sửa cuối:
Nếu giải nén file excel thì ta sẽ tìm thấy file đã nhúng hả anh ?

Không, nó lưu trong file ở một khu vực gọi là Storage vì thế control này lưu dữ liệu trên tất cả các ứng dụng mà cho phép nhúng nó. Có thể nhúng trong VB6, Delphi, .NET, file Excel định dạng 2003 (không theo cấu trúc 2007 - dạng zip).
 
1/ Thực ra cài mà xài hoặc Copy File *.OCX đó vào System xài là tốt nhất

2/ nếu nhúng vào files Excel thì nó cỏng thêm cái File đó vào nặng lắm VD: File OCX đó = 3M thì = Excel + 3M = ???
nặng lắm .... chỉ làm biếng thì mới làm vậy thôi ( Vì Mạnh đã thử cách nhúng theo chỉ dẫn của Anh @batman1 trên GPE này ròi )
.....
đường nào cũng xài nên làm theo mục số 1 ấy là tốt nhất

OCX hay DLL thì thường người ta phải cài đặt chính thống chứ không ai dám bung từ file khác vì pm diệt virus sẽ chặn ngay và còn vài cơ chế register. Ứng dụng nhúng này để nhứng các tư liệu đi cùng file Excel thiết kế cho tiện (với ý định chúng kiểu gì cũng phải đi cùng nhau) , không phải cõng theo những thứ cồng kềnh bên cạnh file Excel thiết kế chính. BStreamX là control còn là trung gian truyền dữ liệu theo luồng từ nhiều control khác. Đây chỉ là một ví dụ để mọi người biết cách nhúng file. Không khuyến khích nhúng DLL, EXE, OCX.
 
Lần chỉnh sửa cuối:

Moi file Ctls ra rồi thêm đuôi .mp3 là nghe được thôi.

Đọc Hex thấy đúng là audio.

1601435182612.png

--------
Xem code thấy là lưu binary to file rồi mới play.
Vậy có thể lưu chuỗi Hex (hoặc binary...) rồi dùng hàm lưu thành file cũng được, không cần công cụ khác.
 
Mạnh đề xuất thôi nhé
Sao @Nguyễn Duy Tuân ko cho thêm Control TCP/IP vào đó luôn như Winsock.ocx của bill ấy .... sẻ hay đấy
Như vậy Officex32 Or x64 xài được hết và làm bộ hướng dẫn cho họ xài OCX .... biết đâu sẻ có tác dụng quảng bá OCX sâu và rộng đấy ???!!!
 
Mạnh đề xuất thôi nhé
Sao @Nguyễn Duy Tuân ko cho thêm Control TCP/IP vào đó luôn như Winsock.ocx của bill ấy .... sẻ hay đấy
Như vậy Officex32 Or x64 xài được hết và làm bộ hướng dẫn cho họ xài OCX .... biết đâu sẻ có tác dụng quảng bá OCX sâu và rộng đấy ???!!!

Cảm ơn bạn. Mình cũng từng nghĩ đến làm cái như bạn nói nhưng hiện tại chưa được quyết tâm lắm :D. Để sau thư thả hơn mình xem lại ý tưởng này xem thế nào.
 
Nếu trên máy tính không có phần mềm diệt virus thì người ta có thể nhúng các file binary EXE, DLL, OCX,... vào rồi lại bung ra để chạy là được, mọi thứ vẫn chỉ nằm trong file Excel.
Các phần mềm diệt virus hầu hết có cơ chế chặn việc bung binary từ một ứng dụng ra bên ngoài, nó định nghĩa đó là "hành vi" nguy hiểm.
Hihi chèn File còn dễ hơn cái GetSheetName siêu tốc độ của em nữa
 
Kỹ thuật BSStream(X) là lớp đối tượng giao tiếp truyền dữ liệu với các control trong BSAC như BSImage, BSImageList, BSGraphic,... và các giao tiếp stream từ những dịch vụ bên ngoài. Ví dụ trong chủ đề này chỉ là nhúng một hay nhiều file lưu trên worksheet hay Userform chỉ là một ứng dụng nhỏ. Trao đổi khối dữ liệu trong BSStream bản chất là kỹ thuật xử lý memory để đảm bảo tốc độ chạy nhanh.
 
Vâng anh nói đúng
Tại sao em nói chèn nguyên cái File đơn giản hơn cái láy tên. tự vì nguyên cái File mình xác định bộ nhớ lưu từ địa chỉ A đến địa chỉ B. Còn láy 1 đoạn text thì em phải xác định được điểm bắt đầu A và kết thúc B của đoạn text đó trong địa chỉ của bộ nhớ.
 
1/ Thực ra cài mà xài hoặc Copy File *.OCX đó vào System xài là tốt nhất
Mang tập tin Excel đã có nhúng gì đó sang máy nào thì máy ấy phải có đang ký cái thư viện kia thì mới chạy được chứ không thì chạy bằng niềm tin à? Nói là không cần mang gì theo nhưng thực chất không phải hoàn toàn như vậy. Cũng có chút phiền phức.
2/ nếu nhúng vào files Excel thì nó cỏng thêm cái File đó vào nặng lắm VD: File OCX đó = 3M thì = Excel + 3M = ???
nặng lắm .... chỉ làm biếng thì mới làm vậy thôi ( Vì Mạnh đã thử cách nhúng theo chỉ dẫn của Anh @batman1 trên GPE này ròi )
Cái tôi đưa ra 7 - 8 năm trước là do tò mò xem cách "nhúng" mọi tập tin (ảnh, video, nhị phân ...) vào tập tin Excel để khỏi phải "đính kèm" bên ngoài. Tất nhiên ngoài code thì không có cái gì phải đăng ký trong system. Viết chơi thôi, chứ nhúng cả 1 video vd. 200 MB vào tập tin Excel thì dã man quá.
 
Mang tập tin Excel đã có nhúng gì đó sang máy nào thì máy ấy phải có đang ký cái thư viện kia thì mới chạy được chứ không thì chạy bằng niềm tin à? Nói là không cần mang gì theo nhưng thực chất không phải hoàn toàn như vậy. Cũng có chút phiền phức.

Cái tôi đưa ra 7 - 8 năm trước là do tò mò xem cách "nhúng" mọi tập tin (ảnh, video, nhị phân ...) vào tập tin Excel để khỏi phải "đính kèm" bên ngoài. Tất nhiên ngoài code thì không có cái gì phải đăng ký trong system. Viết chơi thôi, chứ nhúng cả 1 video vd. 200 MB vào tập tin Excel thì dã man quá.
Em đoán thôi nhé ... sai thì bỏ qua
1/ khi Excel Load ( Mở lên ) thì nó căng mình lên tính toán mọi thứ trên Cells + Code nếu File quá nhiều Hàm mảng thì nó mở lên cũng rất lâu hay quá nhiều code hình như cũng thế ???!!!

2/ cụ thể là Em có 3 File quản lý bán hàng khác nhau (QLBH)
- File QLBH viết hoàn toàn code ngay trong Excel ( rất nhiều ) nó chạy rất chậm

- Cũng như dòng trên mà code trong viết hết code vào DLL VB6 chỉ làm thử tục keo từ Excel thấy nó chạy nhanh hơn rất nhiều

- cũng như dòng trên Nhưng Code trong DLL API viết = Delphi thấy chạy ngang với VB6

cả 3 File trên điều chung một mục đích y trang nhau vì Em viết trên VBA trước xong cho y trang thế vào VB6 ... sau này biết Delphi thì thêm File thứ 3 Viết DLL Delphi ( chỉ là vừa làm vừa học thôi )

.... Lý do tại sao Em tịt ... chỉ thấy thực tế là thế

Quay lại bài này mà nhúng File khoảng 200M vào Excel xong mở lên ra pha cafe nói dóc đã đời xong vào ngó xem quá ??!!!
 
Lần chỉnh sửa cuối:
Tốc độ mở file phụ thuộc vào data trong file và công thức nhé. Nguyên tắc Excel khi mở ra thì mọi thứ nó có đều phải đọc ra hết. Ứng dụng nhứng là nhúng cái cần thiết chứ không phải cắm đầu nhúng mọi thứ mà loạn :).
 
Em thấy máy cái kỹ thuật này mấy ông h@ rành lắm
 
Em thấy máy cái kỹ thuật này mấy ông h@ rành lắm

BSAC là ActiveX Controls vừa code API, VCL Ole,... để nó nhúng trong các môi trường lập trình, nó không đơn thuần chỉ là code trong môi trường Delphi và chạy độc lập dạng EXE hay DLL.
 
Mạnh thấy mấy trang tây nó nói là nhúng DLL Or OCX trong DLL viết = Delphi được đấy ( Hình như tăng thêm 1 cấp bảo mật DLL thì phải)

Còn Viết DLL trong DLL = Dephi Mạnh cũng đã thử thấy Ok thay Vì Uses Unitx thì khai báo nó như 1 DLL bình thường xong keo kiểu khai báo API là xong
Tuy nhiên cách đó ko biết nó có tác dụng gì thì Ứ có biết là như thế Nào ??????????????!!!!!!!!!!!!! -0-0-0-

VD Form
Mã:
unit MainForm;

interface

uses
  ShellApi, Messages, Windows,
  SysUtils, Classes, Controls, Forms, StdCtrls, Graphics, ExtCtrls;

type
  TMain = class(TForm)
    Image1: TImage;
    Button1: TButton;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);

  private
  public
  end;

var
  Main: TMain;

Procedure VoirMessage; stdcall; external 'ChargerUneDllSansDll.exe';

implementation

{$R *.dfm}
{$R rsrc\billit.res}

procedure TMain.FormCreate(Sender: TObject);
begin
  Position := poScreenCenter;
  Main.BorderIcons := [biSystemMenu] - [biMiniMize] - [biMaximize];
  BorderStyle := bsSingle;
end;

procedure TMain.Button1Click(Sender: TObject);
begin
  VoirMessage;
end;

end.
Trong Unit
Mã:
unit DLL_unit;

interface

uses
  Vcl.Dialogs,
  Windows;

implementation

Procedure VoirMessage;
begin
  // MessageBoxA(0, PChar('coucou'), PChar('Je suis la procedure'), MB_ICONINFORMATION);
  ShowMessage('Call Load DLL In DLL');
end;

Exports VoirMessage;

end.
 
Mạnh thấy mấy trang tây nó nói là nhúng DLL Or OCX trong DLL viết = Delphi được đấy ( Hình như tăng thêm 1 cấp bảo mật DLL thì phải)

Còn Viết DLL trong DLL = Dephi Mạnh cũng đã thử thấy Ok thay Vì Uses Unitx thì khai báo nó như 1 DLL bình thường xong keo kiểu khai báo API là xong
Tuy nhiên cách đó ko biết nó có tác dụng gì thì Ứ có biết là như thế Nào ??????????????!!!!!!!!!!!!! -0-0-0-

VD Form
Mã:
unit MainForm;

interface

uses
  ShellApi, Messages, Windows,
  SysUtils, Classes, Controls, Forms, StdCtrls, Graphics, ExtCtrls;

type
  TMain = class(TForm)
    Image1: TImage;
    Button1: TButton;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);

  private
  public
  end;

var
  Main: TMain;

Procedure VoirMessage; stdcall; external 'ChargerUneDllSansDll.exe';

implementation

{$R *.dfm}
{$R rsrc\billit.res}

procedure TMain.FormCreate(Sender: TObject);
begin
  Position := poScreenCenter;
  Main.BorderIcons := [biSystemMenu] - [biMiniMize] - [biMaximize];
  BorderStyle := bsSingle;
end;

procedure TMain.Button1Click(Sender: TObject);
begin
  VoirMessage;
end;

end.
Trong Unit
Mã:
unit DLL_unit;

interface

uses
  Vcl.Dialogs,
  Windows;

implementation

Procedure VoirMessage;
begin
  // MessageBoxA(0, PChar('coucou'), PChar('Je suis la procedure'), MB_ICONINFORMATION);
  ShowMessage('Call Load DLL In DLL');
end;

Exports VoirMessage;

end.

Ví dụ này là cách viết API mà tôi đã hướng dẫn ngày đầu giới thiệu Delphi trên GPE này chứ có cái gì ghê lạ đâu.Trong video dưới đây có doạn mình hướng dẫn cả khai báo hàm API trong Delphi để chơi chạy file nhạc MP3.
 
Ví dụ này là cách viết API mà tôi đã hướng dẫn ngày đầu giới thiệu Delphi trên GPE này chứ có cái gì ghê lạ đâu.Trong video dưới đây có doạn mình hướng dẫn cả khai báo hàm API trong Delphi để chơi chạy file nhạc MP3.
Mạnh thấy mấy trang tây nó nói là nhúng DLL Or OCX trong DLL viết = Delphi được đấy ( Hình như tăng thêm 1 cấp bảo mật DLL thì phải)

Cho Mạnh hỏi chút dòng trên đoán vậy đúng ko ... chắc nó có tác dụng gì chứ ???!!! đã từng nghe mấy trang mạng keo bộ gõ tiếng việt UniKeyNT.EXE có nhúng DLL ngay trong nó để tăng mức độ bảo mật DLL
 
Mạnh thấy mấy trang tây nó nói là nhúng DLL Or OCX trong DLL viết = Delphi được đấy ( Hình như tăng thêm 1 cấp bảo mật DLL thì phải)

Cho Mạnh hỏi chút dòng trên đoán vậy đúng ko ... chắc nó có tác dụng gì chứ ???!!! đã từng nghe mấy trang mạng keo bộ gõ tiếng việt UniKeyNT.EXE có nhúng DLL ngay trong nó để tăng mức độ bảo mật DLL

Xét ở góc độ che giấu cái gì đó thì cũng có thể tạm là coi bảo mật. Chỉ phù hợp những DLL không phải chạy đăng ký dạng RegSvr32 thì chỉ khai báo lấy hàm API bằng GetAddressProc thì dùng kiểu đó hoàn toàn được. Nhưng với điều kiện là nó link trong bộ nhớ, nếu nó bung save ra file có mã máy thì các pm diệt virus dễ coi là độc hại đấy.
 
BSAC là ActiveX Controls vừa code API, VCL Ole,... để nó nhúng trong các môi trường lập trình, nó không đơn thuần chỉ là code trong môi trường Delphi và chạy độc lập dạng EXE hay DLL.
/-*+/ để em rãnh rỗi mò qua cái ActiveX Controls đợt VB6 em cũng mò được vài cái ActiveX Control made in Thuyyeu99 :type:
 
Không biết ActiveX Control trên Delphi khó không nữa .... khi nào rảnh cũng bắt Trước viết mò viết 1 cái Bốc tông coi .............. -0-0-0-
 
MỚi thử xong cái OCX thì thấy có ròi đấy ... vẻ cũng có trên Form VBA ròi đấy .......................... có điều nó ko giống thằng tây nào cả ... -0-0-0-
 

Bài viết mới nhất

Back
Top Bottom