实现 Rundll.exe 的功能,代码很简单:
#include "stdafx.h"
#include <tchar.h>
#include <windows.h>
#include <iostream.h>
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
HMODULE hModule;
LPVOID lpvfn;
if (argc < 3)
{
cout << "Not enough parameters passed." << endl;
return -1;
}
hModule = ::LoadLibrary(argv[1]);
if (hModule == NULL)
{
cout << "Load DLL \"" << argv[1] << "\" failed!" << endl;
return (int)GetLastError();
}
lpvfn = ::GetProcAddress(hModule, argv[2]);
if (lpvfn == NULL)
{
cout << "Can't found specific function \"" << argv[2] << "\"!" << endl;
return (int)GetLastError();
}
int iRetCode;
int arg = argc - 1;
TCHAR* szArg;
__asm push esp // save current 'esp'
while (arg > 2)
{
szArg = argv[arg];
bool bstring = false;
while(*szArg != _T('\0'))
{
if (!_istdigit(*szArg))
{
bstring = true;
break;
}
szArg ++;
}
if (bstring)
{
szArg = argv[arg];
__asm push szArg
}
else
{
long argl = _ttol(argv[arg]);
__asm push argl
}
arg --;
}
__asm call lpvfn
__asm pop esp
__asm mov iRetCode, eax
::FreeLibrary(hModule);
return iRetCode;
}
只支持 LONG 和 String 两种参数而且 String 中间不能有空格(不然会被认为是两个参数),如果要写的好一点应该自己判断参数类型及转换参数。
我测试的参数如下:
test.exe user32.dll MessageBoxA 0 This'sOK Caption 0
相当于调用:MessageBoxA(NULL, "This'sOK", "Caption", MB_OK);
分享到:
相关推荐
例如,它可以方便地启动某些系统功能,如重启计算机,只需一行简单的命令`Shell "rundll32.exe user.exe,restartwindows"`即可完成,无需编写复杂的VB代码。 总的来说,理解Rundll32.exe的工作原理和它在系统中的...
以上命令行调用是Windows系统中实现特定功能的快捷方式,它们使得用户或程序员可以通过简单的命令行参数来访问系统功能,而无需编写复杂的代码或通过图形用户界面操作。这对于自动化任务、脚本编写以及系统维护来说...
下面列举了一些RUNDLL32.EXE的常见应用场景示例,这些示例展示了如何通过RUNDLL32.EXE来调用不同的DLL函数来实现特定的功能: 1. **控制面板项目** - `rundll32.exeshell32.dll, Control_RunDLL access.cpl,,1`:...
在编程中,尤其是VB(Visual Basic)中,可以结合RUNDLL32.EXE和Shell指令,使得程序执行一些通常需要API声明的功能变得更简单。例如,传统上要在VB中实现重启计算机,需要定义WinAPI,而现在仅需一行命令: `Shell ...
`rundll32`提供了一种简单的方式,使得不直接启动可执行文件的情况下,能够运行DLL中的特定功能。这个接口规范在Windows系统中扮演着重要的角色,尤其对于应用程序开发人员来说,理解和掌握它的使用方法至关重要。 ...
标题中的“vb写的关机程序,调用Rundll32.dll”指的是使用Visual Basic (VB)编程语言编写的程序,该程序利用Windows系统内置的Rundll32动态链接库来实现计算机的关机功能。Rundll32是一个实用工具,允许你通过DLL...
39. **RunDll32.exe**:动态链接库(DLL)启动程序,用于启动DLL中的线程。 40. **ScandSkw.exe**:磁盘扫描工具,用于检查并修复文件系统错误。 41. **SmartDrv.exe**:智能驱动程序,用于提高DOS程序的性能。 42. ...
这段代码通过调用`rundll.exe`来触发`user.exe`中的`exitwindowsexec`函数,从而实现重启操作。需要注意的是,`vbHide`参数用于隐藏命令行窗口,使操作更加流畅。 ##### 2. 打开文件或目录 除了重启系统之外,我们...
在Windows系统中,拨号通常通过调用操作系统的内置拨号程序`rundll32.exe`来实现。 1. **使用`rundll32.exe`启动拨号程序** - `rundll32.exe`是一个Windows核心组件,可以加载并执行DLL(动态链接库)中的函数。 ...
例如,在代码示例中,通过先创建一个临时`.lnk`文件,再调用`Rundll32.exe`和`AppWiz.Cpl`组件来创建新的链接,实现自动化创建快捷方式的功能。 2. **系统控制面板访问:** 可以利用`Shell`函数直接打开控制面板的...
在AddComService类中实现接口方法,例如这里是一个简单的加法方法`iadd(int a, int b)`。 6. 注册COM组件: 注册DLL有多种方法,这里列举两种: - 使用RegAsm命令行工具,位于.NET Framework安装目录下,如`C:\...
`rundll32.exe` - **功能**:加载并执行DLL文件中的函数。 - **使用场景**:执行动态链接库中的代码。 ##### 40. `scandskw.exe` - **功能**:磁盘扫描工具。 - **使用场景**:修复文件系统错误。 ##### 41. `...
在这个文件中,通常会包含一条或者多条命令,用于调用系统的`rundll32.exe`工具来执行DLL的注销操作。`rundll32.exe`是一个系统级别的实用程序,它可以用来加载和执行DLL文件中的函数。注销DLL的操作通常涉及到`...
在这段代码中,首先通过`Shell`函数调用`rundll32.exe`启动拨号网络连接“Hinet”,然后通过`SendKeys`函数模拟按下回车键来确认拨号操作。需要注意的是,在实际使用时,可能还需要处理错误情况和其他细节问题。 ##...
7. **示例和测试**: 提供的样例代码可以帮助开发者快速理解如何使用Qt库来实现各种功能。 在开发Qt应用时,开发者可以使用Qt Designer来可视化地设计GUI界面,然后通过Qt的MOC(Meta-Object Compiler)处理UI文件...
这段代码启动了一个系统控制面板,通过`rundll32.exe`这个工具调用了`shell32.dll`中的`Control_RunDLL`函数,打开了`control.exe`,即控制面板程序。 除了`WinExec`,易语言还提供了其他API函数来实现系统功能...
`rundll32.exe`是Windows操作系统中的一个重要组件,主要功能是运行动态链接库(DLL)文件中的函数。当执行`rundll32.exe powrprof.dll,SetSuspendState`时,系统会加载`powrprof.dll`并执行其中的`SetSuspendState`...
这段代码的主要作用是启动`rundll32.exe`,并指定其运行`shell32.dll`中的`SHHelpShortcuts_RunDLLAddPrinter`函数,从而弹出“添加打印机”对话框。 #### 3.2 进一步扩展 为了更好地理解上述代码的作用,可以...
在本例中,通过调用`rundll32.exe`并传入`naui.dll`和`RnaDial`函数名,实现了启动拨号网络连接的功能。 #### 2.2 `naui.dll`与`RnaDial`函数 `naui.dll`是Windows操作系统的一部分,其中包含了拨号网络用户界面的...
`Run`方法用于运行`rundll32.exe`,这是一个Windows内置的动态链接库加载器,它可以调用其他DLL文件中的函数。这里的参数`inetcpl.cpl`是控制面板项,用于打开Internet选项。`ClearMyTracksByProcess 8`则是调用...