mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-06-03 15:15:32 +00:00
trunk contents moved to root
This commit is contained in:
451
libsrc/FlashPlayer/uMain.pas
Normal file
451
libsrc/FlashPlayer/uMain.pas
Normal file
@@ -0,0 +1,451 @@
|
||||
unit uMain;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
||||
Dialogs, OleCtrls, ShockwaveFlashObjects_TLB, StdCtrls, ExtCtrls;
|
||||
|
||||
type
|
||||
TfrmMain = class(TForm)
|
||||
tmrWatchDog: TTimer;
|
||||
|
||||
procedure FormActivate(Sender: TObject);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure FormDestroy(Sender: TObject);
|
||||
procedure tmrWatchDogTimer(Sender: TObject);
|
||||
private
|
||||
{ Private declarations }
|
||||
public
|
||||
{ Public declarations }
|
||||
end;
|
||||
|
||||
type
|
||||
TMySWF = class(TShockwaveFlash)
|
||||
public
|
||||
procedure CreateWnd; override;
|
||||
end;
|
||||
|
||||
type
|
||||
TPipeThread = class(TThread)
|
||||
protected
|
||||
flashFile: string;
|
||||
w: integer;
|
||||
h: integer;
|
||||
bgColor: TColor;
|
||||
procedure Execute; override;
|
||||
procedure displaySWF;
|
||||
procedure freeSWF;
|
||||
procedure setPos;
|
||||
procedure setBGColor;
|
||||
end;
|
||||
|
||||
TBuf = array[0..255] of byte;
|
||||
|
||||
var
|
||||
frmMain: TfrmMain;
|
||||
k: string;
|
||||
t: TPipeThread;
|
||||
flaPreview: TMySWF;
|
||||
target: HWND = 0;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.dfm}
|
||||
|
||||
|
||||
|
||||
procedure TMySWF.CreateWnd;
|
||||
begin
|
||||
inherited;
|
||||
end;
|
||||
|
||||
function arrToStr(k: TBuf; len: integer): string;
|
||||
var
|
||||
s: string;
|
||||
i: integer;
|
||||
begin
|
||||
s := '';
|
||||
for i := 0 to len - 1 do
|
||||
begin
|
||||
if k[i] = 0 then
|
||||
break;
|
||||
s := s + '' + chr(k[i]);
|
||||
end;
|
||||
Result := s;
|
||||
end;
|
||||
|
||||
procedure ReadPipe(pipe: cardinal; var buffer: TBuf; bytesToRead: cardinal);
|
||||
var
|
||||
numBytesRead: DWORD;
|
||||
readResult: longbool;
|
||||
begin
|
||||
numBytesRead := 0;
|
||||
readResult := ReadFile(pipe, buffer, bytesToRead, numBytesRead, nil);
|
||||
if (not readResult) or (numBytesRead <> bytesToRead) then
|
||||
begin
|
||||
Application.Terminate;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure WritePipe(pipe: cardinal; var buffer: TBuf; bytesToWrite: cardinal);
|
||||
var
|
||||
written: cardinal;
|
||||
writeResult: longbool;
|
||||
begin
|
||||
written := 0;
|
||||
writeResult := WriteFile(pipe, buffer, bytesToWrite, written, nil);
|
||||
if (not writeResult) or (written <> bytesToWrite) then
|
||||
begin
|
||||
Application.Terminate;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TPipeThread.freeSWF();
|
||||
begin
|
||||
if Assigned(flaPreview) then
|
||||
begin
|
||||
try
|
||||
flaPreview.Stop;
|
||||
flaPreview.Movie := '';
|
||||
flaPreview.Free;
|
||||
flaPreview := nil;
|
||||
except
|
||||
on E: Exception do
|
||||
begin
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TPipeThread.displaySWF();
|
||||
begin
|
||||
Windows.SetParent(frmMain.Handle, target);
|
||||
freeSWF();
|
||||
flaPreview := TMySWF.Create(frmMain);
|
||||
flaPreview.Left := 0;
|
||||
flaPreview.Top := 0;
|
||||
flaPreview.Width := self.w;
|
||||
flaPreview.Height := self.h;
|
||||
frmMain.Caption := 'set movie:' + flashFile;
|
||||
flaPreview.Parent := frmMain;
|
||||
flaPreview.Movie := flashFile;
|
||||
flaPreview.SetFocus;
|
||||
end;
|
||||
|
||||
procedure TPipeThread.setBGColor();
|
||||
begin
|
||||
frmMain.Color := self.bgColor;
|
||||
end;
|
||||
|
||||
|
||||
procedure TPipeThread.setPos();
|
||||
begin
|
||||
SetWindowPos(frmMain.Handle, 0, 0, 0, self.w, self.h, SWP_SHOWWINDOW);
|
||||
flaPreview.Left := 0;
|
||||
flaPreview.Top := 0;
|
||||
flaPreview.Width := self.w;
|
||||
flaPreview.Height := self.h;
|
||||
flaPreview.CreateWnd;
|
||||
//displaySWF();
|
||||
end;
|
||||
|
||||
procedure TPipeThread.Execute();
|
||||
var
|
||||
pipe: cardinal;
|
||||
buffer: TBuf;
|
||||
pipename: PAnsiChar;
|
||||
len: integer;
|
||||
cmd: integer;
|
||||
val: cardinal;
|
||||
vals: string;
|
||||
vars: string;
|
||||
|
||||
const
|
||||
CMD_PLAY = 1;
|
||||
CMD_RESIZE = 2;
|
||||
CMD_BGCOLOR = 3;
|
||||
CMD_CURRENT_FRAME = 4;
|
||||
CMD_TOTAL_FRAMES = 5;
|
||||
CMD_PAUSE = 6;
|
||||
CMD_RESUME = 7;
|
||||
CMD_PLAYING = 8;
|
||||
CMD_REWIND = 9;
|
||||
CMD_GOTO = 10;
|
||||
CMD_CALL = 11;
|
||||
CMD_GETVARIABLE = 12;
|
||||
CMD_SETVARIABLE = 13;
|
||||
begin
|
||||
|
||||
try
|
||||
pipename := PAnsiChar('\\.\\pipe\ffdec_flashplayer_' + ParamStr(1));
|
||||
begin
|
||||
pipe := CreateFile(pipename, GENERIC_READ or GENERIC_WRITE,
|
||||
FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
|
||||
|
||||
repeat
|
||||
try
|
||||
ReadPipe(pipe, buffer, 1);
|
||||
cmd := buffer[0];
|
||||
case cmd of
|
||||
CMD_PLAY:
|
||||
begin
|
||||
ReadPipe(pipe, buffer, 1);
|
||||
len := buffer[0];
|
||||
ReadPipe(pipe, buffer, len);
|
||||
self.flashFile := arrToStr(buffer, len);
|
||||
try
|
||||
Synchronize(displaySWF);
|
||||
except
|
||||
on E: Exception do
|
||||
begin
|
||||
freeSWF();
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
CMD_RESIZE:
|
||||
begin
|
||||
ReadPipe(pipe, buffer, 4);
|
||||
self.w := buffer[0] * 256 + buffer[1];
|
||||
self.h := buffer[2] * 256 + buffer[3];
|
||||
Synchronize(setPos);
|
||||
end;
|
||||
CMD_BGCOLOR:
|
||||
begin
|
||||
ReadPipe(pipe, buffer, 3);
|
||||
self.bgColor := RGB(buffer[0], buffer[1], buffer[2]);
|
||||
Synchronize(setBGColor);
|
||||
end;
|
||||
CMD_CURRENT_FRAME:
|
||||
begin
|
||||
val := 0;
|
||||
try
|
||||
if flaPreview.ReadyState = 4 then
|
||||
val := flaPreview.CurrentFrame
|
||||
except
|
||||
on E: Exception do
|
||||
begin
|
||||
freeSWF();
|
||||
end;
|
||||
end;
|
||||
buffer[0] := (val shr 8) mod 256;
|
||||
buffer[1] := val mod 256;
|
||||
WritePipe(pipe, buffer, 2);
|
||||
end;
|
||||
CMD_TOTAL_FRAMES:
|
||||
begin
|
||||
val := 0;
|
||||
try
|
||||
if flaPreview.ReadyState = 4 then
|
||||
val := flaPreview.TotalFrames
|
||||
except
|
||||
on E: Exception do
|
||||
begin
|
||||
freeSWF();
|
||||
end;
|
||||
end;
|
||||
buffer[0] := (val shr 8) mod 256;
|
||||
buffer[1] := val mod 256;
|
||||
WritePipe(pipe, buffer, 2);
|
||||
end;
|
||||
CMD_PAUSE:
|
||||
begin
|
||||
try
|
||||
flaPreview.Stop;
|
||||
except
|
||||
on E: Exception do
|
||||
begin
|
||||
freeSWF();
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
CMD_RESUME:
|
||||
begin
|
||||
try
|
||||
flaPreview.Play;
|
||||
except
|
||||
on E: Exception do
|
||||
begin
|
||||
freeSWF();
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
CMD_PLAYING:
|
||||
begin
|
||||
buffer[0] := 0;
|
||||
try
|
||||
if flaPreview.ReadyState = 4 then
|
||||
if flaPreview.IsPlaying then
|
||||
buffer[0] := 1;
|
||||
except
|
||||
on E: Exception do
|
||||
begin
|
||||
freeSWF();
|
||||
end;
|
||||
end;
|
||||
|
||||
WritePipe(pipe, buffer, 1);
|
||||
end;
|
||||
CMD_REWIND:
|
||||
begin
|
||||
try
|
||||
flaPreview.Rewind;
|
||||
except
|
||||
on E: Exception do
|
||||
begin
|
||||
freeSWF();
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
CMD_GOTO:
|
||||
begin
|
||||
ReadPipe(pipe, buffer, 2);
|
||||
val := (buffer[0] shl 8) + buffer[1];
|
||||
try
|
||||
flaPreview.GotoFrame(val);
|
||||
except
|
||||
on E: Exception do
|
||||
begin
|
||||
freeSWF();
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
CMD_CALL:
|
||||
begin
|
||||
ReadPipe(pipe, buffer, 2);
|
||||
val := (buffer[0] shl 8) + buffer[1];
|
||||
ReadPipe(pipe, buffer, val);
|
||||
SetString(vals, PChar(Addr(buffer)), val);
|
||||
try
|
||||
vals := flaPreview.CallFunction(vals);
|
||||
except
|
||||
on E: Exception do
|
||||
begin
|
||||
vals := '';
|
||||
freeSWF();
|
||||
end;
|
||||
end;
|
||||
val := length(vals);
|
||||
buffer[0] := (val shr 8) mod 256;
|
||||
buffer[1] := val mod 256;
|
||||
WritePipe(pipe, buffer, 2);
|
||||
Move(vals[1], buffer, val);
|
||||
WritePipe(pipe, buffer, val);
|
||||
end;
|
||||
CMD_GETVARIABLE:
|
||||
begin
|
||||
ReadPipe(pipe, buffer, 2);
|
||||
val := (buffer[0] shl 8) + buffer[1];
|
||||
ReadPipe(pipe, buffer, val);
|
||||
SetString(vals, PChar(Addr(buffer)), val);
|
||||
try
|
||||
vals := flaPreview.GetVariable(vals);
|
||||
except
|
||||
on E: Exception do
|
||||
begin
|
||||
vals := '';
|
||||
freeSWF();
|
||||
end;
|
||||
end;
|
||||
val := length(vals);
|
||||
buffer[0] := (val shr 8) mod 256;
|
||||
buffer[1] := val mod 256;
|
||||
WritePipe(pipe, buffer, 2);
|
||||
Move(vals[1], buffer, val);
|
||||
WritePipe(pipe, buffer, val);
|
||||
end;
|
||||
CMD_SETVARIABLE:
|
||||
begin
|
||||
ReadPipe(pipe, buffer, 2);
|
||||
val := (buffer[0] shl 8) + buffer[1];
|
||||
ReadPipe(pipe, buffer, val);
|
||||
SetString(vars, PChar(Addr(buffer)), val);
|
||||
|
||||
ReadPipe(pipe, buffer, 2);
|
||||
val := (buffer[0] shl 8) + buffer[1];
|
||||
ReadPipe(pipe, buffer, val);
|
||||
SetString(vals, PChar(Addr(buffer)), val);
|
||||
|
||||
try
|
||||
flaPreview.SetVariable(vars, vals);
|
||||
except
|
||||
on E: Exception do
|
||||
begin
|
||||
freeSWF();
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
except
|
||||
on E: Exception do
|
||||
begin
|
||||
freeSWF();
|
||||
end;
|
||||
end;
|
||||
until False;
|
||||
|
||||
CloseHandle(pipe);
|
||||
end;
|
||||
except
|
||||
on E: Exception do
|
||||
begin
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TfrmMain.FormActivate(Sender: TObject);
|
||||
begin
|
||||
|
||||
if (ParamCount >= 2) then
|
||||
begin
|
||||
flaPreview.Parent := frmMain;
|
||||
|
||||
ShowWindow(Application.Handle, SW_HIDE);
|
||||
SetWindowLong(Application.Handle, GWL_EXSTYLE,
|
||||
getWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
|
||||
ShowWindow(Application.Handle, SW_SHOW);
|
||||
|
||||
SetForegroundWindow(HWND(StrToInt(ParamStr(2))));
|
||||
frmMain.Caption := 'FlashPlayerWindow_' + ParamStr(2);
|
||||
Application.Title := 'FlashPlayerWindow_' + ParamStr(2);
|
||||
target := HWND(StrToInt(ParamStr(1)));
|
||||
|
||||
SetWindowLong(frmMain.Handle, GWL_STYLE, 0);
|
||||
ShowWindow(frmMain.Handle, SW_SHOW);
|
||||
|
||||
frmMain.Left := 0;
|
||||
frmMain.Top := 0;
|
||||
Windows.SetParent(frmMain.Handle, target);
|
||||
|
||||
t := TPipeThread.Create(True);
|
||||
t.Resume;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TfrmMain.FormCreate(Sender: TObject);
|
||||
begin
|
||||
if (ParamCount >= 2) then
|
||||
begin
|
||||
flaPreview := TMySWF.Create(frmMain);
|
||||
flaPreview.AllowScriptAccess := 'always';
|
||||
flaPreview.BackgroundColor := -1;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TfrmMain.FormDestroy(Sender: TObject);
|
||||
begin
|
||||
t.Free;
|
||||
end;
|
||||
|
||||
procedure TfrmMain.tmrWatchDogTimer(Sender: TObject);
|
||||
begin
|
||||
if target <> 0 then
|
||||
begin
|
||||
if not IsWindow(target) then
|
||||
begin
|
||||
Application.Terminate;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
end.
|
||||
Reference in New Issue
Block a user