和删除自身的一个模式,都是先把自己在内存中的handle 给exitprocess然后再delete或者 move掉。
具体的函数是不是movefileA,我还不是很确定。
希望对你有用。
procedure movefile;
var hModule: THandle;
szModuleName: array[0MAX_PATH] of char;
hKrnl32: THandle;
pExitProcess, pmovefile, pFreeLibrary, pUnmapViewOfFile: pointer;
ExitCode: UINT;
begin
hModule := GetModuleHandle(nil);
GetModuleFileName(hModule, szModuleName, sizeof(szModuleName));
hKrnl32 := GetModuleHandle('kernel32');
pExitProcess := GetProcAddress(hKrnl32, 'ExitProcess');
pmovefile := GetProcAddress(hKrnl32, 'movefilea');
pFreeLibrary := GetProcAddress(hKrnl32, 'FreeLibrary');
pUnmapViewOfFile := GetProcAddress(hKrnl32, 'UnmapViewOfFile');
ExitCode := systemExitCode;
if ($80000000 and GetVersion()) <> 0 then
// Win95, 98, Me
asm
lea eax, szModuleName
push ExitCode
push 0
push eax
push pExitProcess
push hModule
push pmovefile
push pFreeLibrary
ret
end
else
begin
CloseHandle(THANDLE(4));
asm
lea eax, szModuleName
push ExitCode
push 0
push eax
push pExitProcess
push hModule
push pmovefile
push pUnmapViewOfFile
ret
end
end
end;
#include<stdioh>
#include<stringh>
void main(){
int i;
char str[100]="We will rock you";
for(i=0;i<strlen(str);i++){
if((int)str[i]>=97&&(int)str[i]<=122){
str[i] = (char)((int)str[i]-32); //注意小写字母的ASCII码是在97-122之间,而大写字母的ASCII码是在65-90之间,对应的字母相差32
}
if((int)str[i]!=32){ //空格的ASCII码是32,去掉空格,肯定是不输出空格
printf("%c",str[i]);
}
}
printf("\n");
printf("保留空格,然后小写转大写:");
for(i=0;i<strlen(str);i++){
if((int)str[i]>=97&&(int)str[i]<=122){
str[i] = (char)((int)str[i]-32);
}
printf("%c",str[i]); //转成大写字母后 ,原样输出(字母是大写但是带空格的)
}
printf("\n");
}
以上就是关于如何替换正在运行的程序里的文件(要求不关闭和重启程序)全部的内容,包括:如何替换正在运行的程序里的文件(要求不关闭和重启程序)、c语言中,如何实现程序替换功能、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)