700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 右键文件或文件夹或空白处弹出菜单包含自己软件快捷方式

右键文件或文件夹或空白处弹出菜单包含自己软件快捷方式

时间:2018-12-30 21:45:50

相关推荐

右键文件或文件夹或空白处弹出菜单包含自己软件快捷方式

做一个软件向服务器传递文件,想在选中文件或者文件夹的时候,通过右键菜单就可以打开传递软件,并且把选中的文件或者文件夹地址传递给软件。这样就不需要每次都执行“打开软件->打开文件夹->选择文件”步骤了。

Windows下通过修改注册表的形式,把软件注册到右键菜单文件里的,对应的注册表位置如下:

右键空白处: \\HKEY_CLASSES_ROOT\\Directory\\Background\\shell

右键文件夹: \\HKEY_CLASSES_ROOT\\Directory\\shel

右键文件: \\HKEY_CLASSES_ROOT\\*\\shell

下面是程序按钮槽函数,头文件包含<QSetting>

//===注册表里注册,在桌面右键可以显示当前软件//===如果直接编译时就能修改注册表的话,使用管理员身份运行Qt Creator,后面在注册表中:查看->刷新,就能看到注册表的内容变化了void MainWindow::on_pushButton_zhuce_clicked(){QString appRunningPath =QDir::toNativeSeparators(QCoreApplication::applicationDirPath()); //===获取当前运行路径,并转成\\形式qDebug()<<appRunningPath<<endl;//===空白处右键QSettings settings("\\HKEY_CLASSES_ROOT\\Directory\\Background\\shell\\fileManagement",QSettings::NativeFormat);settings.setValue(".","打开测试数据上传软件");QSettings settings2("HKEY_CLASSES_ROOT\\Directory\\Background\\shell\\fileManagement\\command",QSettings::NativeFormat);settings2.setValue(".",appRunningPath+"\\fileManagement.exe");//===文件夹右键QSettings settingWJJ("\\HKEY_CLASSES_ROOT\\Directory\\shell\\fileManagement",QSettings::NativeFormat);settingWJJ.setValue(".","打开测试数据上传软件");QSettings settingWJJ2("HKEY_CLASSES_ROOT\\Directory\\shell\\fileManagement\\command",QSettings::NativeFormat);settingWJJ2.setValue(".",appRunningPath+"\\fileManagement.exe %1"); //===%1会在程序执行的时候文件夹的路径传递过来//===文件右键QSettings settingWJ("\\HKEY_CLASSES_ROOT\\*\\shell\\fileManagement",QSettings::NativeFormat);settingWJ.setValue(".","打开测试数据上传软件");QSettings settingWJ2("HKEY_CLASSES_ROOT\\*\\shell\\fileManagement\\command",QSettings::NativeFormat);settingWJ2.setValue(".",appRunningPath+"\\fileManagement.exe %1"); //===%1会在右键时,传递其选中文件的路径qDebug()<<"Exit Setting";}//===从注册表里删除void MainWindow::on_pushButton_shanchu_clicked(){//===删除filemanagement注册表信息QSettings settings("HKEY_CLASSES_ROOT\\Directory\\Background\\shell\\fileManagement",QSettings::NativeFormat);settings.clear();//===删除文件夹右键注册表QSettings settingWJJ("HKEY_CLASSES_ROOT\\Directory\\shell\\fileManagement",QSettings::NativeFormat);settingWJJ.clear();//===删除问价右键注册表QSettings settingWJ("HKEY_CLASSES_ROOT\\*\\shell\\fileManagement",QSettings::NativeFormat);settingWJ.clear();}

上面在settingWJ.setValue (".","打开测试数据上传软件");是设置右键菜单里显示的名字,如下图中红色框内的信息。

settingWJ2.setValue(".",appRunningPath+"\\fileManagement.exe %1");这个是设置右键菜单选择打开的程序的路径。注:路径要使用’\\’方式来表示;%1则会在右键时,将传递选中文件的路径。

如果要使这些信息写入注册表,运行程序的时候要用管理员身份运行。这样才能写入注册表里。

右键文件或文件夹时,如何将当前的路径信息传递到程序里?路径信息会从主程序的argc和argv中传递进来,argc=0时,传递进来的argv[0]则是本程序的路径,比如我的是fileManagement.exe的路径;当argc为1时,则argv[1]传进来的就是当前的文件或者文件夹的路径。我这里通过isDir()和isFile()来判断是文件还是文件夹,然后通过MainWindow构建相应的函数getFileName()和getFolderName(),就可以把文件或者文件名传递到MainWindow里进行上传等操作。

具体的代码如下:

int main(int argc, char *argv[]){QApplication a(argc, argv);MainWindow w;w.show();//===第0个参数为当前exe的路径 如果有第1个参数,则是选择文件或者文件夹的路径if(argc>1){QString appRunningPath =QDir::toNativeSeparators(QCoreApplication::applicationDirPath())+"\\fileManagement.exe";QString str(argv[1]);if(QString::compare(str,appRunningPath)==0){//w.getFileName("名字相同");}else{QFileInfo fi(str);if(fi.isDir()){w.getFileName(str);}else if(fi.isFile()){w.getFolderName(str);}}}return a.exec();}

创作不易,如有意见建议欢迎留言!

如果有帮助,望不吝点赞和赞赏!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。