zoukankan      html  css  js  c++  java
  • 实现当前目录下开启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


    Keep it simple!
    作者:N3verL4nd
    知识共享,欢迎转载。
  • 相关阅读:
    gateway调用Fegin失败问题解决
    JVM调试命令简介
    oracle10g登录em后,提示“java.lang.Exception: Exception in sending Request :: null”
    vs2019中让ashx 文件中折叠收起代码
    oracle多表视图不自动更新,手动刷新视图获得基本表的数据
    可以对表单中的隐藏字段进行操纵 问题参数 __VIEWSTATEGENERATOR
    SQL Server 检测到基于一致性的逻辑 I/O 错误 页撕裂
    WIN2016和WIN10关闭同步主机服务,节省磁盘频繁读取,并关闭自动维护
    IIS网站应用程序配置不继承网站.net框架版本
    c#web错误码CS0227,不安全代码只会在使用/unsafe编译情况下出现
  • 原文地址:https://www.cnblogs.com/lgh1992314/p/5834693.html
Copyright © 2011-2022 走看看