unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
{32bit ÇÁ·Î±×·¥À» ½ÇÇà½ÃÅ°´Â ¸ðµâÀÔ´Ï´Ù}
function WinExecAndWait32(Path: PChar; Visibility: Word): integer;
var
Msg: TMsg;
lpExitCode : integer;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
with StartupInfo do
begin
cb := SizeOf(TStartupInfo);
dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
wShowWindow := visibility;
end;
if CreateProcess(nil, path, nil, nil, False,
NORMAL_PRIORITY_CLASS OR CREATE_SEPARATE_WOW_VDM,
nil, nil, StartupInfo, ProcessInfo) then
begin
repeat
while PeekMessage(Msg, 0, 0, 0, pm_Remove) do
begin
if Msg.Message = wm_Quit then
Halt(Msg.WParam);
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
GetExitCodeProcess(ProcessInfo.hProcess,lpExitCode);
until (lpExitCode <> Still_Active);
with ProcessInfo do
begin
CloseHandle(hThread);
CloseHandle(hProcess);
end;
Result := 0; {sucess}
end
else
Result := GetLastError; {error occurs during CreateProcess}
end;
function ExecuteDOSCommand(cmdline, logfile:String; hidden: Boolean): integer;
const
flags: array [Boolean] of Integer = (SW_SHOWNORMAL, SW_HIDE);
// array[Boolean] -> array[0..1] ÀÔ´Ï´Ù
// Å×½ºÆ®:
// ShowMessage(IntToStr(Ord(False)));
// ShowMessage(IntToStr(Ord(True)));
var
cmdbuffer: array [0..MAX_PATH] of Char;
cmd: String;
begin
// Windows 95/98ÀÇ È¯°æº¯¼ö COMSPEC´Â command.com ÀÔ´Ï´Ù
GetEnvironmentVariable('COMSPEC', cmdBUffer, Sizeof(cmdBuffer));
// command.comÀÇ /C ÆĶó¹ÌÅÍ´Â ¸í·É ½ÇÇà ÈÄ µÇµ¹¾Æ °¡¶ó´Â ¿É¼ÇÀÔ´Ï´Ù
cmd := cmdbuffer + ' /C ' + cmdline + ' > ' + logfile;
// ½ÇÇàÀÌ Á¾·áµÉ¶§±îÁö ´ë±â
Result := WinExecAndWait32(PChar(cmd), flags[hidden]); // SW_HIDE ·Î ½ÇÇà
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if ExecuteDOSCommand('netstat -a', 'netstat.txt', True) = 0 then
Memo1.Lines.LoadFromFile('netstat.txt');
end;
end. |
|