218 lines
5.3 KiB
ObjectPascal
218 lines
5.3 KiB
ObjectPascal
|
|
unit U_openexe;
|
|||
|
|
|
|||
|
|
interface
|
|||
|
|
|
|||
|
|
uses
|
|||
|
|
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
|||
|
|
Dialogs, ExtCtrls, StdCtrls,ShellAPI,jpeg, cxControls, cxContainer,
|
|||
|
|
cxEdit, cxGroupBox;
|
|||
|
|
|
|||
|
|
type
|
|||
|
|
PProcessWindow = ^TProcessWindow;
|
|||
|
|
TProcessWindow = record
|
|||
|
|
TargetProcessID: Cardinal;
|
|||
|
|
FoundWindow: hWnd;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
Tfrmopenexe = class(TForm)
|
|||
|
|
Button1: TButton;
|
|||
|
|
Splitter1: TSplitter;
|
|||
|
|
Panel1: TPanel;
|
|||
|
|
Button2: TButton;
|
|||
|
|
Button3: TButton;
|
|||
|
|
ODPat: TOpenDialog;
|
|||
|
|
ScrollBox1: TScrollBox;
|
|||
|
|
Image1: TImage;
|
|||
|
|
Button4: TButton;
|
|||
|
|
procedure FormDestroy(Sender: TObject);
|
|||
|
|
procedure FormClose(Sender: TObject; var Action: TCloseAction);
|
|||
|
|
procedure Button2Click(Sender: TObject);
|
|||
|
|
procedure Button3Click(Sender: TObject);
|
|||
|
|
procedure Image1DblClick(Sender: TObject);
|
|||
|
|
procedure Button4Click(Sender: TObject);
|
|||
|
|
private
|
|||
|
|
{ Private declarations }
|
|||
|
|
public
|
|||
|
|
{ Public declarations }
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
var
|
|||
|
|
frmopenexe: Tfrmopenexe;
|
|||
|
|
hWin: HWND = 0;
|
|||
|
|
|
|||
|
|
implementation
|
|||
|
|
|
|||
|
|
{$R *.dfm}
|
|||
|
|
function EnumWindowsProc(Wnd: hWnd; ProcWndInfo: PProcessWindow): BOOL; stdcall;
|
|||
|
|
var
|
|||
|
|
WndProcessID: Cardinal;
|
|||
|
|
begin
|
|||
|
|
GetWindowThreadProcessId(Wnd, @WndProcessID);
|
|||
|
|
if WndProcessID = ProcWndInfo^.TargetProcessID then begin
|
|||
|
|
ProcWndInfo^.FoundWindow := Wnd;
|
|||
|
|
Result := False; // This tells EnumWindows to stop enumerating since we've already found a window.
|
|||
|
|
end else Result := True; // Keep searching
|
|||
|
|
end;
|
|||
|
|
function GetProcessWindow(TargetProcessID: Cardinal): hWnd;
|
|||
|
|
var
|
|||
|
|
ProcWndInfo: TProcessWindow;
|
|||
|
|
begin
|
|||
|
|
ProcWndInfo.TargetProcessID := TargetProcessID;
|
|||
|
|
ProcWndInfo.FoundWindow := 0;
|
|||
|
|
EnumWindows(@EnumWindowsProc, Integer(@ProcWndInfo));
|
|||
|
|
Result := ProcWndInfo.FoundWindow;
|
|||
|
|
end;
|
|||
|
|
function RunAppInPanel(const AppName: string; PanelHandle: HWND): boolean;
|
|||
|
|
var
|
|||
|
|
si: STARTUPINFO;
|
|||
|
|
pi: TProcessInformation;
|
|||
|
|
begin
|
|||
|
|
FillChar(si, SizeOf(si), 0);
|
|||
|
|
si.cb := SizeOf(si);
|
|||
|
|
si.wShowWindow := SW_SHOW;
|
|||
|
|
result := CreateProcess(nil, PChar(AppName), nil,
|
|||
|
|
nil, true, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, si, pi);
|
|||
|
|
if not result then exit;
|
|||
|
|
WaitForInputIdle(pi.hProcess, 10000); // let process start!
|
|||
|
|
hWin := GetProcessWindow(pi.dwProcessID);
|
|||
|
|
ShowMessage(IntToStr(hWin));
|
|||
|
|
if hWin > 0 then begin
|
|||
|
|
Windows.SetParent(hWin, PanelHandle);
|
|||
|
|
SetWindowPos(hWin, 0, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOZORDER);
|
|||
|
|
result := true;
|
|||
|
|
end;
|
|||
|
|
// we don't need the handles so we close them
|
|||
|
|
CloseHandle(pi.hProcess);
|
|||
|
|
CloseHandle(pi.hThread);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure Tfrmopenexe.FormDestroy(Sender: TObject);
|
|||
|
|
begin
|
|||
|
|
frmopenexe:=nil;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
procedure Tfrmopenexe.FormClose(Sender: TObject; var Action: TCloseAction);
|
|||
|
|
begin
|
|||
|
|
if hWin > 0 then
|
|||
|
|
PostMessage(hWin, WM_CLOSE, 0, 0);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure Tfrmopenexe.Button2Click(Sender: TObject);
|
|||
|
|
var t : TResourceStream;
|
|||
|
|
|
|||
|
|
begin
|
|||
|
|
|
|||
|
|
if FileExists('float.exe') then
|
|||
|
|
|
|||
|
|
WinExec('float.exe',Sw_normal)
|
|||
|
|
|
|||
|
|
else
|
|||
|
|
|
|||
|
|
begin
|
|||
|
|
|
|||
|
|
try
|
|||
|
|
|
|||
|
|
t := TResourceStream.Create(HInstance,'AEXE','EXEFILE'); //<2F><><EFBFBD><EFBFBD>HInstanceΪһ<CEAA><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>rwwwΪ<77><CEAA>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>exefileΪ<65><CEAA>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
t.SaveToFile('float.exe');
|
|||
|
|
|
|||
|
|
finally
|
|||
|
|
|
|||
|
|
t.free;
|
|||
|
|
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
WinExec('float.exe',Sw_normal);
|
|||
|
|
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure Tfrmopenexe.Button3Click(Sender: TObject);
|
|||
|
|
var
|
|||
|
|
AJpeg:TJPEGImage;
|
|||
|
|
TPWidth,TPHeight:Integer;
|
|||
|
|
Bitmap: TBitmap;
|
|||
|
|
Ratio: Double;
|
|||
|
|
ARect: TRect;
|
|||
|
|
AHeight, AHeightOffset: Integer;
|
|||
|
|
AWidth, AWidthOffset: Integer;
|
|||
|
|
FReal:Double;
|
|||
|
|
begin
|
|||
|
|
|
|||
|
|
if ODPat.Execute=False then Exit;
|
|||
|
|
AJpeg:=TJpegImage.Create();
|
|||
|
|
AJpeg.LoadFromFile(ExtractFileName(ODPat.FileName));
|
|||
|
|
TPWidth:=AJpeg.Width;
|
|||
|
|
TPHeight:=AJpeg.Height;
|
|||
|
|
Bitmap := TBitmap.Create;
|
|||
|
|
Bitmap.Width :=Image1.Width;
|
|||
|
|
Bitmap.Height :=Round(Image1.Width/TPWidth*TPHeight);
|
|||
|
|
if Bitmap.Height>400 then
|
|||
|
|
begin
|
|||
|
|
Bitmap.Height:=400;
|
|||
|
|
Bitmap.Width :=Round(400/TPHeight*TPWidth);
|
|||
|
|
end;
|
|||
|
|
Bitmap.Canvas.FillRect(Rect(0, 0, Bitmap.Width, Bitmap.Height));
|
|||
|
|
ARect := Rect(0, 0, Bitmap.Width, Bitmap.Height);
|
|||
|
|
Bitmap.Canvas.StretchDraw(ARect, AJPeg);
|
|||
|
|
Image1.Height:=Bitmap.Height;
|
|||
|
|
Image1.Width:=Bitmap.Width;
|
|||
|
|
Image1.Picture.Assign(BitMap);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
|
|||
|
|
procedure Tfrmopenexe.Image1DblClick(Sender: TObject);
|
|||
|
|
var
|
|||
|
|
AJpeg:TJPEGImage;
|
|||
|
|
TPWidth,TPHeight:Integer;
|
|||
|
|
Bitmap: TBitmap;
|
|||
|
|
Ratio: Double;
|
|||
|
|
ARect: TRect;
|
|||
|
|
AHeight, AHeightOffset: Integer;
|
|||
|
|
AWidth, AWidthOffset: Integer;
|
|||
|
|
FReal:Double;
|
|||
|
|
begin
|
|||
|
|
AJpeg:=TJpegImage.Create();
|
|||
|
|
AJpeg.Assign(Image1.Picture.Graphic);
|
|||
|
|
Bitmap := TBitmap.Create;
|
|||
|
|
Bitmap.Width :=Round(Image1.Width*1.5);
|
|||
|
|
Bitmap.Height :=Round(Image1.Height*1.5);
|
|||
|
|
Bitmap.Canvas.FillRect(Rect(0, 0, Bitmap.Width, Bitmap.Height));
|
|||
|
|
ARect := Rect(0, 0, Bitmap.Width, Bitmap.Height);
|
|||
|
|
Bitmap.Canvas.StretchDraw(ARect, AJPeg);
|
|||
|
|
Image1.Height:=Bitmap.Height;
|
|||
|
|
Image1.Width:=Bitmap.Width;
|
|||
|
|
Image1.Picture.Assign(BitMap);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
procedure Tfrmopenexe.Button4Click(Sender: TObject);
|
|||
|
|
|
|||
|
|
var
|
|||
|
|
AJpeg:TJPEGImage;
|
|||
|
|
TPWidth,TPHeight:Integer;
|
|||
|
|
Bitmap: TBitmap;
|
|||
|
|
Ratio: Double;
|
|||
|
|
ARect: TRect;
|
|||
|
|
AHeight, AHeightOffset: Integer;
|
|||
|
|
AWidth, AWidthOffset: Integer;
|
|||
|
|
FReal:Double;
|
|||
|
|
begin
|
|||
|
|
AJpeg:=TJpegImage.Create();
|
|||
|
|
AJpeg.Assign(Image1.Picture.Graphic);
|
|||
|
|
Bitmap := TBitmap.Create;
|
|||
|
|
Bitmap.Width :=Round(Image1.Width/1.5);
|
|||
|
|
Bitmap.Height :=Round(Image1.Height/1.5);
|
|||
|
|
Bitmap.Canvas.FillRect(Rect(0, 0, Bitmap.Width, Bitmap.Height));
|
|||
|
|
ARect := Rect(0, 0, Bitmap.Width, Bitmap.Height);
|
|||
|
|
Bitmap.Canvas.StretchDraw(ARect, AJPeg);
|
|||
|
|
Image1.Height:=Bitmap.Height;
|
|||
|
|
Image1.Width:=Bitmap.Width;
|
|||
|
|
Image1.Picture.Assign(BitMap);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
|
|||
|
|
end.
|