D7myYunxiang/云翔基础资料(BaseInfoYX.dll)/U_openexe.pas
DESKTOP-E401PHE\Administrator 1011cb7292 1
2025-01-20 13:04:03 +08:00

218 lines
5.3 KiB
ObjectPascal
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.