实现当前目录下开启CMD
我们都知道在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的更多相关文章
- 如何在当前目录下快速打开cmd(或者以管理员的身份打开)
		
1.在当前目录下,按住shift键+点击右键,选择在此处打开命令窗口 很多时候我们需要打开命令行然后进入到相应目录进行一些操作. 常规的做法是: D:\foo\bar", 然后输入cd 再把 ...
 - 三种方法在当前目录下打开cmd命令窗口
		
概述 运行npm的时候,每次都要cd到目录,很麻烦,所以总结了三种在当前目录下直接打开cmd窗口的方法,供以后开发时参考,相信对其他人也有用. 方法一 在当前目录按住shift再右键. 会看到右键菜单 ...
 - (转载)如何在当前目录下快速打开cmd
		
很多时候我们需要打开命令行然后进入到相应目录进行一些操作. 常规的做法是: Win+R打开运行窗口 输入"cmd"回车打开命令行窗口 假如我们要进入的是D盘foo文件夹下的一个ba ...
 - windows系统中,在当前目录下打开cmd命令行的两种方法
		
1.在当前路径地址栏中直接输入‘cmd’,然后回车. 2.在当前路径下,按住‘shift’键同时点击鼠标右键,点击“在此处打开Powershell”. 其实你会发现,两个命令行有很大的区别. cmd: ...
 - win10 在当前目录下 打开cmd
		
windows7 : 按住 shift 键 , 右键 就有该选项. windows10 : 运行下面的 注册表文件: 该注册表文件内容如下: Windows Registry Editor Versi ...
 - CMD:在当前文件夹下打开cmd命令
		
对于电脑老鸟而言,在使用windows系统的过程中,经常需要在cmd窗口中输入一些命令进行操作.但是如果每一次都是在cmd窗口中用CD命令进行相应的文件夹目录,实在不便,尤其是在文件夹层次比较多而且带 ...
 - windows,cmd中查看当前目录下的文件及文件夹
		
需求描述: 在使用cmd的过程中,有的时候需要查看当前目录下有哪些文件或者文件夹,类似linux下的ls命令 操作过程: 1.通过dir命令查看当前目录下有哪些的文件及文件夹 备注:通过dir命令,就 ...
 - 如何在当前目录下打开Windows cmd?
		
在当前目录下,按Alt + D (全选当前目录),然后输入 cmd 再按回车 Enter .
 - windows cmd下列出当前目录下的所有文件
		
使用的命令是dir 如,列出当前目录下的目录及文件名到1.txt: dir /b >1.txt 只列出某类文件 dir *.txt /b >1.txt
 
随机推荐
- 机器学习实战笔记(一)- 使用SciKit-Learn做回归分析
			
一.简介 这次学习的书籍主要是Hands-on Machine Learning with Scikit-Learn and TensorFlow(豆瓣:https://book.douban.com ...
 - 网络爬虫简单介绍(python)
			
一.简介 爬虫就是利用代码大量的将网页前端代码下载下来使用的一种程序,一般来说常见的目的为下: 1.商业分析使用:很多大数据公司都会从利用爬虫来进行数据分析与处理,比如说要了解广州当地二手房的均价走势 ...
 - nginx优势,依赖,启动
			
Nginx Nginx优势1.nginx将网络,磁盘及定时器等异步事件的驱动都做了非常好的封装,基于它开发将可以忽略这些事件处理的细节.2.Nginx封装了许多平台无关的接口,容器,适用于跨平台开 ...
 - 从头学pytorch(十五):AlexNet
			
AlexNet AlexNet是2012年提出的一个模型,并且赢得了ImageNet图像识别挑战赛的冠军.首次证明了由计算机自动学习到的特征可以超越手工设计的特征,对计算机视觉的研究有着极其重要的意义 ...
 - Go 每日一库之 flag
			
缘起 我一直在想,有什么方式可以让人比较轻易地保持每日学习,持续输出的状态.写博客是一种方式,但不是每天都有想写的,值得写的东西. 有时候一个技术比较复杂,写博客的时候经常会写着写着发现自己的理解有偏 ...
 - 字符串转hash进阶版
			
#include<bits/stdc++.h> using namespace std; ,mod=; vector<unsigned> H[mod]; void Add(un ...
 - Spring-cloud微服务实战【三】:eureka注册中心(中)
			
回忆一下,在上一篇文章中,我们创建了两个springboot项目,并且在consumer项目中通过restTemplate进行HTTP通信,成功访问到了producer提供的接口,思考一下这样的实 ...
 - NPOI导出Excel生成多个sheet
			
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
 - Unable to open debugger port (127.0.0.1:57046): java.net.SocketException "so
			
原因分析: 出现这个报错的原因是因为端口被占用导致的. 解决方法: 解决方法主要两种:修改端口配置(推荐).关闭占用端口的进程(不推荐). 方式一:修改端口配置(推荐) 被占用的端口可能是本地端口,也 ...
 - Jenkins Job构建
			
Jenkins job介绍  Jenkins Freestyle与Pipeline Job区别   Jenkins Job构建配置 一 .环境准备 1.配置Jenkins server本地Git ...