这个啊!!!
用一般的对话框没法模拟的
用VXD却很简单system.ini里面有一句
trick.vxd
你自己写一个trick.vxd将其替换了就可以了。
试想一下,要在系统登陆前模拟登陆对话框,“开始”菜单的“启动”项里的程序以及注册表RUN中的启动程序此时都还不能获得控制权呢,所以,这只能通过VXD实现。
用一般的对话框没法模拟的
用VXD却很简单system.ini里面有一句
trick.vxd
你自己写一个trick.vxd将其替换了就可以了。
试想一下,要在系统登陆前模拟登陆对话框,“开始”菜单的“启动”项里的程序以及注册表RUN中的启动程序此时都还不能获得控制权呢,所以,这只能通过VXD实现。
利用了VTOOSD和VC++6.0
没有EDIT框供输入密码,这个想来可以利用SHELL调用
权当参考!// TRICK.h - include file for VxD TRICK#include <vtoolscp.h>#define DEVICE_CLASS TrickDevice
#define TRICK_DeviceID UNDEFINED_DEVICE_ID
#define TRICK_Init_Order UNDEFINED_INIT_ORDER
#define TRICK_Major 1
#define TRICK_Minor 0class TrickDevice : public VDevice
{
public:
virtual BOOL OnDeviceInit(VMHANDLE hSysVM, PCHAR pszCmdTail);
};class TrickVM : public VVirtualMachine
{
public:
TrickVM(VMHANDLE hVM);
};class TrickThread : public VThread
{
public:
TrickThread(THREADHANDLE hThread);
};
// TRICK.cpp - main module for VxD TRICK#define DEVICE_MAIN
#include "trick.h"
Declare_Virtual_Device(TRICK)
#undef DEVICE_MAINchar* msg="网络登陆";
char* cap="请输入你的帐号和密码:";SHELLMessage_THUNK thunk;TrickVM::TrickVM(VMHANDLE hVM) : VVirtualMachine(hVM) {}TrickThread::TrickThread(THREADHANDLE hThread) : VThread(hThread) {}
void _cdecl shell_exe (PVOID p,DWORD flags)
{
struct
{
WORD nCmdShow;
DWORD lpCmdLine;
}winex; winex.nCmdShow=3;
winex.lpCmdLine=SHELL_LocalAllocEx(LMEM_STRING,0,"Explorer.exe",&p);
SHELL_CallDll("KERNEL","WINEXEC",sizeof(winex),&winex);
SHELL_LocalFree(winex.lpCmdLine);
}void _stdcall msgcall(DWORD resid,PVOID refdata)
{
SHELL_CallAtAppyTime(&shell_exe,0,0,0);
}
void _cdecl tricker(PVOID p,DWORD flags)
{
SHELL_Message((VMHANDLE)p,MB_OK,msg,cap,msgcall,0,&thunk);
}BOOL TrickDevice::OnDeviceInit(VMHANDLE hSysVM, PCHAR pszCmdTail)
{
return SHELL_CallAtAppyTime(&tricker,hSysVM,0,0);
}