我们都知道在WIN7下,可以按shift+鼠标右键->在此处打开命令窗口

或者在

输入cmd,回车

那么,怎样去实现这样的功能呢?

//当前目录下开启CMD#include <stdio.h>
#include <windows.h>int main()
{TCHAR  pathString[100] = { 0 };TCHAR  batString[150] = { 0 };TCHAR   regString[200];DWORD    dwSize;HWND hwnd = NULL;HKEY   hkey;lstrcpy(batString, TEXT("/c start /d \""));hwnd = FindWindowEx(NULL, NULL, TEXT("CabinetWClass"), NULL);if (hwnd == NULL){// 读取注册表获取桌面路径dwSize = sizeof(regString);RegOpenKey(HKEY_CURRENT_USER,TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders"),&hkey);RegQueryValueEx(hkey, TEXT("Desktop"), NULL, NULL, (LPBYTE)regString, &dwSize);wsprintf(pathString, TEXT("%s"), regString);}else{HWND hToolBar;hwnd = FindWindowEx(NULL, NULL, TEXT("CabinetWClass"), NULL);hwnd = FindWindowEx(hwnd, NULL, TEXT("WorkerW"), NULL);hwnd = FindWindowEx(hwnd, NULL, TEXT("ReBarWindow32"), NULL);hwnd = FindWindowEx(hwnd, NULL, TEXT("Address Band Root"), NULL);hwnd = FindWindowEx(hwnd, NULL, TEXT("msctls_progress32"), NULL);hToolBar = FindWindowEx(hwnd, NULL, TEXT("ToolbarWindow32"), NULL);SendMessage(hToolBar, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(0, 0));SendMessage(hToolBar, WM_LBUTTONUP, MK_LBUTTON, MAKELONG(0, 0));SendMessage(hToolBar, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(0, 0));SendMessage(hToolBar, WM_LBUTTONUP, MK_LBUTTON, MAKELONG(0, 0));hwnd = FindWindowEx(hwnd, NULL, TEXT("ComboBoxEx32"), NULL);hwnd = FindWindowEx(hwnd, NULL, TEXT("ComboBox"), NULL);hwnd = FindWindowEx(hwnd, NULL, TEXT("Edit"), NULL);SendMessage(hwnd, WM_GETTEXT, 100, (LPARAM)pathString);}lstrcat(batString, pathString);lstrcat(batString, TEXT("\""));//MessageBox(NULL, batString, TEXT("Caption"), 0);ShellExecute(NULL, NULL, TEXT("cmd.exe"), batString, NULL, SW_SHOW);return 0;
}

在网络、回收站、控制面板这些窗口下是不能开启cmd的,该程序没有判断这些情况。

当然简单的做法是:

//当前目录下开启CMD#include <stdio.h>
#include <windows.h>int main()
{TCHAR  pathString[100] = { 0 };TCHAR  batString[150] = { 0 };TCHAR   regString[200];DWORD    dwSize;HWND hwnd = NULL;HKEY   hkey;lstrcpy(batString, TEXT("/c start /d \""));hwnd = FindWindowEx(NULL, NULL, TEXT("CabinetWClass"), NULL);if (hwnd == NULL){// 读取注册表获取桌面路径dwSize = sizeof(regString);RegOpenKey(HKEY_CURRENT_USER,TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders"),&hkey);RegQueryValueEx(hkey, TEXT("Desktop"), NULL, NULL, (LPBYTE)regString, &dwSize);wsprintf(pathString, TEXT("%s"), regString);}else{hwnd = FindWindowEx(NULL, NULL, TEXT("CabinetWClass"), NULL);hwnd = FindWindowEx(hwnd, NULL, TEXT("WorkerW"), NULL);hwnd = FindWindowEx(hwnd, NULL, TEXT("ReBarWindow32"), NULL);hwnd = FindWindowEx(hwnd, NULL, TEXT("Address Band Root"), NULL);hwnd = FindWindowEx(hwnd, NULL, TEXT("msctls_progress32"), NULL);hwnd = FindWindowEx(hwnd, NULL, TEXT("Breadcrumb Parent"), NULL);hwnd = FindWindowEx(hwnd, NULL, TEXT("ToolbarWindow32"), NULL);SendMessage(hwnd, WM_GETTEXT, 100, (LPARAM)pathString);lstrcpy(pathString, pathString + 4);}lstrcat(batString, pathString);lstrcat(batString, TEXT("\""));//MessageBox(NULL, batString, TEXT("Caption"), 0);//wprintf(TEXT("%s"), batString);ShellExecute(NULL, NULL, TEXT("cmd.exe"), batString, NULL, SW_SHOW);return 0;
}

简单点做法是:

在标题栏显示完整路径

则可以直接使用GetWindowText

转载于:https://www.cnblogs.com/lgh1992314/p/5834693.html

实现当前目录下开启CMD相关推荐

  1. windows系统中,在当前目录下打开cmd命令行的两种方法

    windows系统中,在当前目录下打开cmd命令行的两种方法 1.在当前路径地址栏中直接输入'cmd',然后回车. 2.在当前路径下,按住'shift'键同时点击鼠标右键,点击"在此处打开P ...

  2. 三种方法在当前目录下打开cmd命令窗口

    概述 总结了三种在当前目录下直接打开cmd窗口的方法,供以后开发时参考,相信对其他人也有用. 方法一 在当前目录上面的路径显示框中输入CMD,然后回车即可. 方法二 在当前目录按住shift再右键. ...

  3. Cmd下开启3389

    1.2000系统 简要说一下如何进行DNS溢出***.我用的溢出利用程序是dns.exe,在CMD下运行它可以看到它的使用参数等信息.执行"dns -s IP"命令检测目标IP是否 ...

  4. cmd远程打开服务器,CMD下开启远程桌面服务

    <CMD下开启远程桌面服务>由会员分享,可在线阅读,更多相关<CMD下开启远程桌面服务(9页珍藏版)>请在人人文库网上搜索. 1.CMD下开启远程桌面服务CMD下开启近程桌里办 ...

  5. windows下的cmd命令(全面)

    2019独角兽企业重金招聘Python工程师标准>>> 命令提示符是在操作系统中,提示进行命令输入的一种工作提示符.在不同的操作系统环境下,命令提示符各不相同. 在windows环境 ...

  6. c语言基础学习02_windows系统下的cmd命令

    ============================================================================= 注意:cmd的命令很多,需要用的时候可以查询 ...

  7. 在批处理脚本所在目录下打开cmd

    @cd /d %~dp0 @cmd cd 命令是不会修改当前的drive的. cd /d 切换盘符和切换路径二合一了.相当于c:和cd c:/temp两个命令. %~dp0 可以理解为批处理脚本所在的 ...

  8. sql server 2005下开启xp_cmdshell的办法

    sql server 2005下开启xp_cmdshell的办法 2009年05月09日 星期六 下午 06:06 sql server 2005下开启xp_cmdshell的办法 EXEC sp_c ...

  9. win7下的cmd窗口可以全屏显示吗

    以前鄙人写了<在windows上运行linux命令>一文,以在windows上运行一些类linux的bash命令,文中只是罗列了一些命令,没有任何说明. 一些网友和我的同事表示喜欢这个工具 ...

最新文章

  1. log_bin.index not found 启动报错解决
  2. Nat.Commun. | DeepAccNet:基于深度学习的准确性估计改善蛋白质结构优化
  3. 堪比Focal Loss!解决目标检测中样本不平衡的无采样方法
  4. Spring.NET的AOP怎么玩
  5. re Python正则
  6. 面向对象,面向过程编程
  7. 电源完整性仿真让电路板更完美
  8. 那些你踩过的币圈投资陷阱(下)
  9. 搜索引擎设计实用教程(2)-以百度为例
  10. 模拟退火算法(代码可直接运行)
  11. PAT1036.跟奥巴马一起编程
  12. 各种数值积分方法总结(从梯形积分、辛普森积分到龙贝格积分、自适应积分、高斯积分等)
  13. 苹果cms播放器html,解决苹果cmsv10版本ckplayer播放器高度自适应兼容问题
  14. otsu阈值分割算法原理_OpenCV学习30--阈值分割的OTSU算法
  15. 【010Editor】010Editor使用技巧汇总(不断更新中)
  16. defer和async的区别
  17. 李开复就中国移动开发者大会的演讲总结
  18. xkcd 单线程下载图片
  19. 第一篇什么都没写的博客
  20. java mysql 订单表设计

热门文章

  1. FPGrowth算法总结复习
  2. Front End Developer Questions 前端开发人员问题(三)JavaScript部分
  3. 基础 - jQuery选项卡
  4. log4cxx编译过程–linux
  5. Python参考手册----第一章: Python简介(四)
  6. Android中解析XML---数据存储
  7. 2月28日云栖精选夜读 | 阿里云率先达成国家绿色数据中心标准,平均PUE低于1.3...
  8. Duilib嵌入CEF出现窗口显示不正常
  9. Java泛型通用常量类案例
  10. 多线程-Thread、Runnable、Callbale、Future