我们都知道在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. 【原创】(十六)Linux内存管理之CMA

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...

  2. 一条SQL注入引出的惊天大案2:无限战争

    前情回顾: 经过黑衣人和老周的合作,终于清除了入侵Linux帝国的网页病毒,并修复了漏洞.不曾想激怒了幕后的黑手,一场新的风雨即将来临. 详情参见:一条SQL注入引出的惊天大案   风云再起 小Q是L ...

  3. 【5min+】 秋名山的竞速。 ValueTask 和 Task

    系列介绍 简介 [五分钟的dotnet]是一个利用您的碎片化时间来学习和丰富.net知识的博文系列.它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的. ...

  4. 输入n个学生,并且输入成绩,判断是否偏科

    H学校的领导主任决定分析一下今年所有N名学生的考试成绩,从中找出偏科的学生,考试成绩包含语文,数学,英语三门课程的分数,已知偏科的定义是:某一门课程的分数大于等于90,并且另外两门的分数小于等于70. ...

  5. ES6的Object.assign()基本用法

    Object.assign方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target). 例如: const target = {a:1}, const source1 ...

  6. Python判断一个字符串是否包含某个指定的字符串

    成员操作符 in str = "string test string test" find1 = "str" find2 = "test" ...

  7. cors中间件

    class MiddlewareMixin(object): def __init__(self, get_response=None): self.get_response = get_respon ...

  8. 异数OS TCP协议栈测试(一)--数据传输篇

    异数OS TCP协议栈测试(一)--数据传输篇 本文来自异数OS社区 github:   异数OS-织梦师(消息中间件)群: 476260389 测试目标 数据传输IO性能测试,主要是建立连接后测试收 ...

  9. nested exception is org.springframework.context.ApplicationContextException: Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.报错解决

    近期在学springboot,学的时候遇到这个错,网上查了好多,改了不行,后来发现自己的配置类没有加@SpringBootApplication注解 Exception encountered dur ...

  10. (转) XSS Attacks – Exploiting XSS Filter

    中文翻译: from wooyun'drops 0x00 前言 这又是一篇来自全职赏金猎人Masato kinugawa的神作.一次双杀,用一篇报告拿下了两个CVE,分别是CVE-2015-6144和 ...