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

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();
}

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

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

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

  1. 一个WinForm记事本程序(包含主/下拉/弹出菜单/打开文件/保存文件/打印/页面设置/字体/颜色对话框/剪切版操作等等控件用法以及记事本菜单事件/按键事件的具体代码)...

    (一).说明 功能类似Windows 操作系统自带的记事本.  一个WinForm记事本程序(包含主/下拉/弹出 菜单/打开保存对话框等控件用法以及记事本菜单事件的具体代码) (二).图片示例 (三) ...

  2. vb屏蔽文本框点右键时的弹出菜单

    ----------以下代码在模块 程序代码: Option Explicit Public Declare Function SetWindowLong Lib "user32" ...

  3. vb在 ListBox 之中点击右键弹出菜单

    '1.API 的声明: Const LB_ITEMFROMPOINT = &H1A9 Private Declare Function SendMessage Lib "user32 ...

  4. DirectUI界面编程(六)实现右键弹出菜单

    本节向大家介绍一下右键弹出菜单是如何实现的.效果如下,在窗口中点击鼠标右键弹出菜单,点击菜单项能够响应菜单点击事件. 使用Duilib库实现的弹出菜单,实际上也是一个Windows窗口,因此我们需要创 ...

  5. wpf 代码获取contextmenu_[C#] 转:在WPF里面获取右键弹出菜单(ContextMenu)的鼠标点击源(Owner)控件...

    WPF的ContextMenu没有类似WinForm里面ContextMenu.SourceControl的概念,但是你可以通过ContextMenuService的GetPlacementTarge ...

  6. 怎样在Delphi中屏蔽Flash控件的右键弹出菜单

    关于如何屏蔽Flash控件的右键菜单的问题有很多人问过,也有很多人回答,基本上都是说拦截 Application消息,或者继承一个新的控件,重载MouseDown消息,第一种解决办法,好象是简单 些, ...

  7. 右键弹出菜单和快捷键的设置

    写MFC,少不了用到菜单和快捷键,此处我用到了右键菜单.我的项目是一个播放器的实现,那么在屏幕中央右键点击,应该会弹出右键菜单,比如播放,暂停等,如我这样: 对应的每一个菜单应该还有相应的快捷键.那么 ...

  8. 梦想CAD控件网页版右键弹出菜单

    用户需要右键弹出菜单,则需要响应鼠标事件,右键按下后,弹出菜单分为在命令下运行及在非命令下运行,具体介绍如下 : 一.新建菜单文件 1.新一个文本文件: mxpoptest.mnu,内容如下(此文件为 ...

  9. 梦想CAD控件com接口界面控制右键弹出菜单

    用户需要右键弹出菜单,则需要响应鼠标事件,右键按下后,弹出菜单分为在命令下运行及在非命令下运行,具体介绍如下(C#语言参考例子:"samples\CSharpRightKeyMenu\CSh ...

最新文章

  1. 完整恢复模式下的备份/恢复
  2. 安装容器编排工具 Docker Compose
  3. 找出性能消耗是第一步,如何解决问题才是关键
  4. lia人是什么意思_69年属鸡人终身灾难是什么意思
  5. 【转】MS-DOS下怎样使用解压缩共具
  6. apachecommon连接mysql_使用Apache Commons的DBUtils工具包中的,QueryRunner查询数据库返回结果错误...
  7. 品运维自动化之cobbler的安装序
  8. php图片添加代码,php图片添加文字水印实现代码_php技巧
  9. lambda表达式python_python lambda表达式用法
  10. 冲突域和广播域的区分
  11. MP3标题重命名以及文本去掉模板尾巴
  12. XMPP即时通讯协议使用(六)——开发Openfire聊天记录插件
  13. Right Backup(云端数据备份软件)v8.1官方版
  14. 公司-摩拜单车:摩拜单车
  15. 氮化硼修饰导热复合物和碳纤维氮化硼涂层|六方氮化硼修饰石墨化氮化碳复合光催化剂|六方氮化硼(h-BN)修饰玻碳电极(GCE-BN) 氮化物
  16. 晶体三极管原理及应用
  17. A ConvNet for the 2020s
  18. VMware 15 上Mac虚拟机不能全屏问题的解决
  19. linux服务器搭建实验4报告,LINUX实验四报告
  20. 为Ubuntu安装Realtek的无线网卡驱动

热门文章

  1. python绘制网络拓扑_python画网络拓扑图
  2. linux系统mysql密码忘记了怎么办_Linux中MySQL密码忘了怎么办
  3. 批量监测手机微博更新内容
  4. 删除用户 userdel
  5. VASP自旋(NM、AM、AFM)
  6. Ant入门教程之常用命令
  7. Android 调试桥
  8. 万国觉醒迁服务器显示该王国还未开放,万国觉醒的定点迁城怎么用?怎么获得定点迁城?...
  9. 基于历史对比学习的时序知识图谱推理
  10. 复现ReDet RTX 3090 pytorch1.8.1