📄 rundll32mainformu.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "RunDll32MainFormU.h"
#include "InfoFrm.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TRunDll32MainForm *RunDll32MainForm;
/*
{
RunDLL32.EXE shell32.dll,Control_FillCache_RunDLL
RunDLL32.EXE shell32.dll,Control_RunDLL
RunDLL32.EXE shell32.dll,Control_RunDLL access.cpl,,1
RunDLL32.EXE shell32.dll,Control_RunDLL access.cpl,,2
RunDLL32.EXE shell32.dll,Control_RunDLL access.cpl,,3
RunDLL32.EXE shell32.dll,Control_RunDLL access.cpl,,4
RunDLL32.EXE shell32.dll,Control_RunDLL access.cpl,,5
RunDLL32.EXE shell32.dll,Control_RunDLL ports.cpl
RunDLL32.EXE shell32.dll,Control_RunDLL appwiz.cpl,,1
RunDLL32.EXE shell32.dll,Control_RunDLL appwiz.cpl,,2
RunDLL32.EXE shell32.dll,Control_RunDLL appwiz.cpl,,3
RunDLL32.EXE shell32.dll,Control_RunDLL desk.cpl,,-1
RunDLL32.EXE shell32.dll,Control_RunDLL desk.cpl,,0
RunDLL32.EXE shell32.dll,Control_RunDLL desk.cpl,,1
RunDLL32.EXE shell32.dll,Control_RunDLL desk.cpl,,2
RunDLL32.EXE shell32.dll,Control_RunDLL desk.cpl,,3
RunDLL32.EXE SysDM.cpl,InstallDevice_RunDLL Image
RunDLL32.EXE SysDM.cpl,InstallDevice_RunDLL Infrared
RunDLL32.EXE shell32.dll,Control_RunDLL odbccp32.cpl
RunDLL32.EXE shell32.dll,Control_RunDLL joy.cpl
RunDLL32.EXE shell32.dll,Control_RunDLL sysdm.cpl @1
RunDLL32.EXE shell32.dll,Control_RunDLL findfast.cpl
RunDLL32.EXE SysDM.cpl,InstallDevice_RunDLL <DeviceID>
RunDLL32.EXE SysDM.cpl,InstallDevice_RunDLL,,0
RunDLL32.EXE devmgr.dll DeviceManager_Execute
RunDLL32.EXE SHELL32.DLL,OpenAs_RunDLL <FileName>
RunDLL32.EXE SHELL32.DLL,SHHelpShortcuts_RunDLL <FontsFolder>
RunDLL32.EXE shell32.dll,Control_RunDLL main.cpl @3
RunDLL32.EXE SYNCUI.DLL,Briefcase_Create
RunDLL32.EXE syncui.dll,Briefcase_Intro
RunDLL32.EXE USER.DLL,cascadechildwindows
RunDLL32.EXE USER.DLL,tilechildwindows
RunDLL32.EXE RNAUI.DLL,RnaWizard
RunDLL32.EXE RNAUI.DLL,RnaWizard @ 1
RunDLL32.EXE Rnaui.dll,RnaDial <ConnectionName>
RunDLL32.EXE DISKCOPY.DLL,DiskCopyRunDll
RunDLL32.EXE SHELL32.DLL,SHFormatDrive
RunDLL32.EXE USER.DLL,repaintscreen
}
*/
//---------------------------------------------------------------------------
__fastcall TRunDll32MainForm::TRunDll32MainForm(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
AnsiString TRunDll32MainForm::GetWinSysDir(void)
{
AnsiString stResult;
char buf[MAX_PATH+1];
GetSystemDirectory((LPTSTR )buf, MAX_PATH);
stResult.sprintf("%s",buf);
return stResult;
}
//---------------------------------------------------------------------------
AnsiString TRunDll32MainForm::GetExpandedSysFilePath(const AnsiString S)
{
AnsiString stResult;
if( ExtractFilePath(S) == "" )
{
stResult = IncludeTrailingPathDelimiter(GetWinSysDir()) + S;
}
else
{
stResult = S;
}
return stResult;
}
//---------------------------------------------------------------------------
bool TRunDll32MainForm::PipeToFile(AnsiString FileName, AnsiString Cmd, bool Append)
{
TStartupInfo SI;
TProcessInformation PI;
char buf[MAX_PATH+1];
bool flRes;
String Appnd;
String ComSpec;
// procedure GetComSpec;
memset(&buf,0,MAX_PATH+1);
if( GetEnvironmentVariable("COMSPEC",(LPTSTR)&buf, MAX_PATH) == 0 )
{
ComSpec = "C:\command.com"; // best guess ?
}
else
{
ComSpec.sprintf("%s",buf);
}
// end of GetComSpec;
SI.cb = sizeof(TStartupInfo);
GetStartupInfo(&SI);
SI.wShowWindow = SW_HIDE;
if( Append )
{
Appnd = " >>";
}
else
{
Appnd = " >";
}
Cmd = ComSpec + " /C " + Cmd + Appnd + FileName;
flRes = CreateProcess(NULL, Cmd.c_str(), NULL, NULL, false, 0, NULL, NULL, &SI, &PI);
try
{
if( flRes )
{
WaitForInputIdle(PI.hProcess, INFINITE);
flRes = (WaitForSingleObject(PI.hProcess, INFINITE) != WAIT_FAILED);
}
}
__finally
{
CloseHandle(PI.hThread);
CloseHandle(PI.hProcess);
}
if(!flRes)
{
RaiseLastOSError();
}
return flRes;
}
//---------------------------------------------------------------------------
void __fastcall TRunDll32MainForm::Label1Click(TObject *Sender)
{
OpenObject("http://www.dx21.com/scripting/rundll32/");
}
//---------------------------------------------------------------------------
void __fastcall TRunDll32MainForm::btnRunClick(TObject *Sender)
{
if(!RunDLL32(edModule->Text, edFunc->Text, edCmdLine->Text, chkWait->Checked))
{
RaiseLastOSError();
}
}
//---------------------------------------------------------------------------
void __fastcall TRunDll32MainForm::edModuleChange(TObject *Sender)
{
btnInfo->Enabled = FileExists(GetExpandedSysFilePath(edModule->Text));
}
//---------------------------------------------------------------------------
void __fastcall TRunDll32MainForm::btnInternalClick(TObject *Sender)
{
HWND H;
if( chkWait->Checked )
{
H = Handle;
}
else
{
H = GetDesktopWindow();
}
RunDll32Internal(reinterpret_cast<unsigned int >(H),edModule->Text,edFunc->Text,edCmdLine->Text,SW_SHOWDEFAULT);
}
//---------------------------------------------------------------------------
void __fastcall TRunDll32MainForm::btnBrowseClick(TObject *Sender)
{
TOpenDialog *pOD;
pOD = new TOpenDialog(NULL);
try
{
pOD->Filter = "Modules|*.exe;*.dll;*.ocx;|All files|*.*";
pOD->FileName = edModule->Text;
if( ExtractFilePath(pOD->FileName) == "" )
{
pOD->InitialDir = GetWinSysDir();
}
else
{
pOD->InitialDir = ExtractFilePath(pOD->FileName);
}
if( pOD->Execute() )
{
edModule->Text = pOD->FileName;
}
}
__finally
{
delete pOD;
}
}
//---------------------------------------------------------------------------
void __fastcall TRunDll32MainForm::btnInfoClick(TObject *Sender)
{
String tmp;
tmp = ChangeFileExt(Application->ExeName, ".dmp");
// NOTE: this requires the $(DELPHI)\bin folder and the tdump.exe utility in the PATH to work!!!
PipeToFile(tmp, Format("tdump.exe -ee -q %s", OPENARRAY(TVarRec, (GetExpandedSysFilePath(edModule->Text) ) ) ), false);
TfrmInfo_View(tmp, ExtractFileName(edModule->Text));
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -