实现当前目录下开启CMD
生活随笔
收集整理的這篇文章主要介紹了
实现当前目录下开启CMD
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
我們都知道在WIN7下,可以按shift+鼠標(biāo)右鍵->在此處打開命令窗口
或者在
輸入cmd,回車
那么,怎樣去實(shí)現(xiàn)這樣的功能呢?
//當(dāng)前目錄下開啟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){// 讀取注冊(cè)表獲取桌面路徑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; }在網(wǎng)絡(luò)、回收站、控制面板這些窗口下是不能開啟cmd的,該程序沒有判斷這些情況。
當(dāng)然簡(jiǎn)單的做法是:
//當(dāng)前目錄下開啟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){// 讀取注冊(cè)表獲取桌面路徑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; }簡(jiǎn)單點(diǎn)做法是:
在標(biāo)題欄顯示完整路徑
則可以直接使用GetWindowText
轉(zhuǎn)載于:https://www.cnblogs.com/lgh1992314/p/5834693.html
總結(jié)
以上是生活随笔為你收集整理的实现当前目录下开启CMD的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 14.5.5 Creating a Fi
- 下一篇: Linux0.11内核--加载可执行二进