如何使自己的应用程序常住内存(100分)

  • 主题发起人 主题发起人 yage
  • 开始时间 开始时间
Y

yage

Unregistered / Unconfirmed
GUEST, unregistred user!
请教各位大虾:
如何使自己的应用程序常住内存,在不启动WINDOWS界面的情况
下,而且不将其放在启动菜单栏或AUTOEXEC。BAT内。
 
"不启动WINDOWS界面",就只能加到autoexec.bat里面,DOS下就只有这个接口了.

或者,如果你会编设备驱动程序(*.sys),可以加到config.sys里面
--- 这和autoexec一样嘛.
 
还可以更改command.com文件, 让它自动运行你的程序:-)
病毒:-(
 
That's easy!
只需
把程序添加入注册表,
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run
或RunOnce,RunOnceEx,RunServicesOnce
(在 internat 等.. 前)
若你想在WINDOWS完全加载之前,驻留内存,只好用cytown大侠的方法了,
具体怎么做,只好问他了^0^
 
我也想知道
 
如果你不进入图形界面、只进入Dos提示符,还要考虑在单任务操作系统下如何编写内
存驻留程序的问题,非常麻烦。
 
Alarm: 内存驻留到不是问题,以前DOS下有大量的经验可以参考.
关键是"内存驻留"程序也必须在autoexec.bat里面加载才行阿.
 
放到:win.ini等中吧
 
加到window的进程中,win2000的组件服务可以
 
呵,你这个问题又把我带回当年Dos编程的时代了。
在硬盘里找了半天,终于找到了我当初编的那个程序。(那时,这可是我在学校机房里
炫的秘密武器)

#include <dos.h>
#include <stdio.h>
#define INTR 0x1C
#define ATTR 0x4e00
#define SHAD 0x1F00
#define BACK 0x1000

#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif

extern unsigned _heaplen = 1024;
extern unsigned _stklen = 512;
void interrupt ( *oldhandler)(__CPPARGS);
typedef unsigned int (far *s_arrayptr);
typedef unsigned char (far *ptr);

void interrupt handler(__CPPARGS);
int main(void)
{

ptr mcb;
mcb = (ptr) MK_FP(_psp-1,8);
mcb[0]='x';
mcb[1]='u';
mcb[2]='m';
mcb[3]='V';
mcb[4]='i';
mcb[5]='r';
mcb[6]='u';
mcb[7]='s';

oldhandler = getvect(INTR);
setvect(INTR, handler);
keep(0, (_SS + (_SP/16) - _psp));
return 0;
}

void interrupt handler(__CPPARGS)
{
s_arrayptr screen[91];
screen[0] = (s_arrayptr) MK_FP(0xB800,0)+34;
screen[0][0] = ' ' + BACK;
screen[0][1] = '-' + ATTR;
screen[0][2] = 'X' + ATTR;
screen[0][3] = ' ' + ATTR;
screen[0][4] = 'U' + ATTR;
screen[0][5] = ' ' + ATTR;
screen[0][6] = 'M' + ATTR;
screen[0][7] = '-' + ATTR;
screen[0][8] = '? + SHAD;
screen[0][9] = ' ' + BACK;
screen[0][10] = ' ' + BACK;

screen[0][80] = ' ' + BACK;
screen[0][81] = ' ' + BACK;
screen[0][82] = '? + SHAD;
screen[0][83] = '? + SHAD;
screen[0][84] = '? + SHAD;
screen[0][85] = '? + SHAD;
screen[0][86] = '? + SHAD;
screen[0][87] = '? + SHAD;
screen[0][88] = '? + SHAD;
screen[0][89] = ' ' + BACK;
screen[0][90] = ' ' + BACK;

oldhandler();
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
执行它,你的屏幕中间会出现我名字的缩写,即使在dir和edit时也一直存在。
更奥妙的是,即使你打mem/c/p也找不到这个执行文件的真实名字。
引导嘛,我有一个又简单,又鲜为人知的好办法:
用Pctools在Command里找Autoexec字符串,(有3个,好像是第二个),你把它改成
你自己的bat文件名,这样一开机就执行你的bat文件了。(不要忘了在你的bat文件
里再去调用autoexec.bat)
真正的病毒引导办法:替换系统的引导程序。(我这里倒真有一个),我就不到处传播了.
 
to Chxn: 问题是人家不能加载windows."加到window的进程中"又有何用?
 
大家不要紧张,这不是病毒,仅仅是想代替EXPLORER 而已。我已经用过AUTOEXEC。BAT,WIN。INI ,和启动栏,但是仍然能看到WINDOWS界面,我希望不看到WINDOWS界面,并不是不启动WINDOWS进程。
 
把代码加入引导扇区?呵呵,搞大了。
记得以前WIN3.X可以用以下命令//WIN.INI
REM SHELL=WINFILE.EXE
就不显示应用程序管理器了,而是直接用文件管理器,关闭文件管理器,就退出WIN了
 
把我搞糊涂了。什么叫不看到Windows界面,却要启支Windows进程?你到底要
干什么?是不是类似Windows NT的Service?Windows似乎没有“常驻内存”应用
程序这种讲法。那是Dos的事情。

我研究过共享内存DLL和Application,而且也在本论坛提过类似的问题,最后是
靠MapFile解决的。
 
我的疑惑和barton一样.
 
yage:
如果你想替换EXPLORE,最简单的方法就是修改WINDOWS目录下的System.Ini文件
把Shell=EXPLORE.EXE替换成你的程序.你可以试试效果.
 
function RegisterServiceProcess(dwProcessId,dwType:dword):
Integer;stdcall;external 'kernel32.dll'
RegisterServiceProcess(GetCurrentProcessID,1)

and add reg:
HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/Run/yourapplicationname
 
多人接受答案了。
 
后退
顶部