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

最新文章

  1. ionic 初入门
  2. 「2014-4-13」Think twice before starting the adventure
  3. [转]oracle学习入门系列之五内存结构、数据库结构、进程
  4. 什么是CPA, CPS, CPT?
  5. 【转】Solr安全设置——对外禁用管理后台
  6. unix文件权限
  7. jq获取元素到底部的距离
  8. WCF 学习总结3 -- 实例模式
  9. Linux下如何查看哪些端口处于监听状态
  10. 对进度条progressbar的调整
  11. Windows下配置Nginx使之支持PHP(转)
  12. css的!important规则对性能有影响吗
  13. F - Free DIY Tour(动态规划,搜索也行)
  14. Java、PHP训练场地选择成都传祺播客
  15. Ubuntu下的终端多标签切换快捷键
  16. FFMPEG 实现 YUV,RGB各种图像原始数据之间的转换(swscale)
  17. Linux目录架构详解
  18. .NET平台常用的开发组件(csdn)
  19. python--文件流读写
  20. DES加解密 cbc模式 的简单讲解 &amp;&amp; C++用openssl库来实现的注意事项

热门文章

  1. $CH5104\ I-country$ 线性$DP$
  2. model流程
  3. FTP服务器虚拟用户配置
  4. POJ 2318 TOYS(叉积+二分)
  5. 【转】在NetBeans上搭建Android SDK环境
  6. Java 中级 学习笔记 2 JVM GC 垃圾回收与算法
  7. mac-air上安装 rabbitmq 并简单使用
  8. C++Primer第五版 3.5.1节练习
  9. python列表(数组)
  10. 树上主席树 - 查询树链上第K大