我们都知道在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

实现当前目录下开启CMD的更多相关文章

  1. 如何在当前目录下快速打开cmd(或者以管理员的身份打开)

    1.在当前目录下,按住shift键+点击右键,选择在此处打开命令窗口 很多时候我们需要打开命令行然后进入到相应目录进行一些操作. 常规的做法是: D:\foo\bar", 然后输入cd 再把 ...

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

    概述 运行npm的时候,每次都要cd到目录,很麻烦,所以总结了三种在当前目录下直接打开cmd窗口的方法,供以后开发时参考,相信对其他人也有用. 方法一 在当前目录按住shift再右键. 会看到右键菜单 ...

  3. (转载)如何在当前目录下快速打开cmd

    很多时候我们需要打开命令行然后进入到相应目录进行一些操作. 常规的做法是: Win+R打开运行窗口 输入"cmd"回车打开命令行窗口 假如我们要进入的是D盘foo文件夹下的一个ba ...

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

    1.在当前路径地址栏中直接输入‘cmd’,然后回车. 2.在当前路径下,按住‘shift’键同时点击鼠标右键,点击“在此处打开Powershell”. 其实你会发现,两个命令行有很大的区别. cmd: ...

  5. win10 在当前目录下 打开cmd

    windows7 : 按住 shift 键 , 右键 就有该选项. windows10 : 运行下面的 注册表文件: 该注册表文件内容如下: Windows Registry Editor Versi ...

  6. CMD:在当前文件夹下打开cmd命令

    对于电脑老鸟而言,在使用windows系统的过程中,经常需要在cmd窗口中输入一些命令进行操作.但是如果每一次都是在cmd窗口中用CD命令进行相应的文件夹目录,实在不便,尤其是在文件夹层次比较多而且带 ...

  7. windows,cmd中查看当前目录下的文件及文件夹

    需求描述: 在使用cmd的过程中,有的时候需要查看当前目录下有哪些文件或者文件夹,类似linux下的ls命令 操作过程: 1.通过dir命令查看当前目录下有哪些的文件及文件夹 备注:通过dir命令,就 ...

  8. 如何在当前目录下打开Windows cmd?

    在当前目录下,按Alt + D (全选当前目录),然后输入 cmd 再按回车 Enter .

  9. windows cmd下列出当前目录下的所有文件

    使用的命令是dir 如,列出当前目录下的目录及文件名到1.txt: dir /b >1.txt 只列出某类文件 dir *.txt  /b >1.txt

随机推荐

  1. HDU3652 B-number 题解 数位DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3652 题目大意: 求区间 \([1, n]\) 范围内包含连续的数位"13"并且能 ...

  2. 改变 windows ruby 的默认版本

    这个操作比较简单,就是调整 windows 环境变量 Path 子项的先后顺序. 原理就是:cmd 在运行命令时,先搜索当前目录,再按先后顺序搜索环境变量里边的目录. 因此,如果我们不想修改环境变量, ...

  3. day2(使用list和tuple)

    list list是一种有序的集合 >>>aaa = ['abc','bob','tracy'] >>>aaa ['abc','bob','tracy'] len( ...

  4. JUC 中的 Atomic 原子类总结

    1 Atomic 原子类介绍 Atomic 翻译成中文是原子的意思.在化学上,我们知道原子是构成一般物质的最小单位,在化学反应中是不可分割的.在我们这里 Atomic 是指一个操作是不可中断的.即使是 ...

  5. Hyperledger Fabric1.4 安装

    Hyperledger Fabric 依赖的软件版本查看官方 github 地址 https://github.com/hyperledger/fabric 下文件 /docs/source/prer ...

  6. 《工具》centos 7.x 下安装 JDK,超详细总结一看就会

    第一步 检查 JDK 查看JDK版本,在命令行输入:java -version [root@test ~]# java -version bash: java: command not found 如 ...

  7. Eclipse自动添加注释模板

    Eclipse使用自动注释:在Eclipse工具的Window\preferences\JAVA\Code Style\Code templates\Comments下设置以下模版 文件(Files) ...

  8. ubuntu pycharm、idea创建快捷方式

    编辑/usr/share/application/pycharm.desktop [Desktop Entry] Type=Application Name=Pycharm GenericName=P ...

  9. 自己动手搭环境—unit 1.1、Struts2环境搭建

    在手动配置action的基础上引入struts2-convention-plugin-2.x.x.jar以支持action的注解支持 修改的地方主要在struts.xml中 <?xml vers ...

  10. Nginx作为web静态资源服务器——防盗链

    ​ 基于http_refer防盗链配置模块 Syntax:valid_referers none | blocked | server_names | string ...; Default:—— C ...