windows文件在另一程序打开_windows程序设计第7版

windows文件在另一程序打开_windows程序设计第7版均已打开 记事本(notepad)为例注意:打开其他程序时有的方法不可行,可都使用一遍进行测试1、创建一个新线程打开应用 PROCESS_INFORMATION processInfo; char dir[MAX_PATH] ; char cCmdLine[MAX_PATH]; DWORD dwExitCode; STARTUPINFO si = { sizeof(si) };…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

均已打开 记事本(notepad)为例

注意:打开其他程序时有的方法不可行,可都使用一遍进行测试

1、创建一个新线程打开应用


	PROCESS_INFORMATION processInfo;
	char dir[MAX_PATH] ;
	char cCmdLine[MAX_PATH];
	DWORD dwExitCode;
	STARTUPINFO si = { 
    sizeof(si) };

	// 得到Windows目录 

	GetWindowsDirectory(dir, MAX_PATH);


	//char di[100] = "C:\WINDOWS\system32";
	// 启动 记事本 程序命令行
	CString sCmdLine = CString(dir) + "\\Taskmgr.exe";
	::strcpy(cCmdLine, sCmdLine);

	// 启动 记事本 作为子进程
	if (CreateProcess(NULL, cCmdLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &processInfo))
	{ 
   
		// 等待子进程的退出 
		WaitForSingleObject(processInfo.hProcess, INFINITE);
		// 获取子进程的退出码
		GetExitCodeProcess(processInfo.hProcess, &dwExitCode);
		// 关闭子进程句柄
		CloseHandle(processInfo.hProcess);
	}

2、调用Windows自带函数

WinExec(_T("c:\\windows\\taskmgr.exe"), SW_SHOWDEFAULT);

第二个参数为:窗口的打开风格

参数可选值:
SW_HIDE = 0; {隐藏, 并且任务栏也没有最小化图标}
SW_SHOWNORMAL = 1; {用最近的大小和位置显示, 激活}
SW_NORMAL = 1; {同 SW_SHOWNORMAL}
SW_SHOWMINIMIZED = 2; {最小化, 激活}
SW_SHOWMAXIMIZED = 3; {最大化, 激活}
SW_MAXIMIZE = 3; {同 SW_SHOWMAXIMIZED}
SW_SHOWNOACTIVATE = 4; {用最近的大小和位置显示, 不激活}
SW_SHOW = 5; {同 SW_SHOWNORMAL}
SW_MINIMIZE = 6; {最小化, 不激活}
SW_SHOWMINNOACTIVE = 7; {同 SW_MINIMIZE}
SW_SHOWNA = 8; {同 SW_SHOWNOACTIVATE}
SW_RESTORE = 9; {同 SW_SHOWNORMAL}
SW_SHOWDEFAULT = 10; {同 SW_SHOWNORMAL}
SW_MAX = 10; {同 SW_SHOWNORMAL}

3、使用 ShellExecute 打开文件或执行程序

ShellExecute是一种很好用的方法,也是最常用的。再此进行详细介绍

原型:

HINSTANCE ShellExecute(
  _In_opt_ HWND    hwnd,//父窗口句柄或出错时显示错误父窗口的句柄,可以为 NULL
  _In_opt_ LPCTSTR lpOperation,//操作
  _In_     LPCTSTR lpFile,//要打开的文件名、执行的程序名、浏览的文件夹等。
  _In_opt_ LPCTSTR lpParameters,//可执行程序的参数,否则为 NULL
  _In_opt_ LPCTSTR lpDirectory,//默认目录
  _In_     INT     nShowCmd//显示类型
);

lpOperation 是一个字符串,通常为:

edit 用编辑器打开 lpFile 指定的文档,如果 lpFile 不是文档,则会失败
explore 浏览 lpFile 指定的文件夹
find 搜索 lpDirectory 指定的目录
open 打开 lpFile 文件,lpFile 可以是文件或文件夹
print 打印 lpFile,如果 lpFile 不是文档,则函数失败
properties 显示属性
runas 请求以管理员权限运行,比如以管理员权限运行某个exe
NULL 执行默认”open”动作

nShowCmd 执行操作之后程序显示类型,指定该参数后运行起来的程序不一定能按照指定参数显示,只是通知程序的显示状态。类型如下:

SW_HIDE 隐藏窗口,活动状态给令一个窗口
SW_MINIMIZE 最小化窗口,活动状态给令一个窗口
SW_RESTORE 用原来的大小和位置显示一个窗口,同时令其进入活动状态
SW_SHOW 用当前的大小和位置显示一个窗口,同时令其进入活动状态
SW_SHOWMAXIMIZED 最大化窗口,并将其激活
SW_SHOWMINIMIZED 最小化窗口,并将其激活
SW_SHOWMINNOACTIVE 最小化一个窗口,同时不改变活动窗口
SW_SHOWNA 用当前的大小和位置显示一个窗口,不改变活动窗口
SW_SHOWNOACTIVATE 用最近的大小和位置显示一个窗口,同时不改变活动窗口
SW_SHOWNORMAL 与SW_RESTORE相同

返回值:
返回值为被执行程序的实例句柄。若返回值小于32,则表示出现错误。错误如下:

0 系统内存或资源不足
ERROR_FILE_NOT_FOUND 找不到指定的文件
ERROR_PATH_NOT_FOUND 找不到指定路径
ERROR_BAD_FORMAT .exe文件无效
SE_ERR_ACCESSDENIED 拒绝访问指定文件
SE_ERR_ASSOCINCOMPLETE 文件名关联无效或不完整
SE_ERR_DDEBUSY DDE事务正在处理,DDE事务无法完成
SE_ERR_DDEFAIL DDE事务失败
SE_ERR_DDETIMEOUT 请求超时,无法完成DDE事务请求
SE_ERR_DLLNOTFOUND 未找到指定dll
SE_ERR_FNF 未找到指定文件
SE_ERR_NOASSOC 未找到与给的文件拓展名关联的应用程序,比如打印不可打印的文件等
SE_ERR_OOM 内存不足,无法完成操作
SE_ERR_PNF 未找到指定路径
SE_ERR_SHARE 发生共享冲突

打开网页

假设将FileName參数设置为http:协议格式,那么该函数将打开默认浏览器并链接到指定的URL地址。

若用户机器中安装了多个浏览器,则该函数将依据Windows 9x/NT注冊表中http协议处理程序(Protocols Handler)的设置确定启动哪个浏览器。

如:

ShellExecute(handle,L"open",L" http://www.neu.edu.cn", NULL, NULL, SW_SHOWNORMAL);

ShellExecute()函数在HKEY_CLASSES_ROOT\http\shell\open\command下进行搜索。默认浏览器在注冊表HKEY_CLASSES_ROOT.htm键下的Default设置。

发送EMAIL

假设将FileName參数设置为mailto:协议格式,那么该函数将启动默认邮件客户程序,如Microsoft Outlook(也包含Microsoft Outlook Express)或Netscape Messanger。若用户机器中安装了多个邮件客户程序,则该函数将依据Windows 9x/NT注冊表中mailto协议处理程序的设置确定启动哪个邮件客户程序。mailto:用户账号@邮件server地址?subject=邮件主题&body=邮件正文;

如:

ShellExecute(handle,L"open",L"mailto:who@mail.neu.edu.cn?subject=Hello&Body=This is a test", NULL,NULL, SW_SHOWNORMAL);

打开新邮件窗体,并自己主动填入收件人地址、邮件主题和邮件正文。若邮件正文包含多行文本,则必须在每行文本之间增加换行转义字符%0a。ShellExecute()函数在HKEY_CLASSES_ROOT\mailto\shell\open\command下搜索。

打开一个程序

ShellExecute(NULL,L"open",L"notepad.exe",  L"c:\\MyLog.log", NULL, SW_SHOW );

用系统打印机打印文档

ShellExecute(NULL,L"print", L"c:\\abc.txt",NULL, NULL, SW_HIDE); 

用系统查找功能来查找指定文件

ShellExecute(NULL,L"find",L"d:\\nish",  NULL, NULL, SW_SHOW);

启动一个程序,直到它执行结束

        SHELLEXECUTEINFO ShExecInfo = { 
   0};
        ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
        ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
        ShExecInfo.hwnd = NULL;
        ShExecInfo.lpVerb = NULL;
        ShExecInfo.lpFile =L"c:\\MyProgram.exe";
        ShExecInfo.lpParameters = NULL;
        ShExecInfo.lpDirectory = NULL;
        ShExecInfo.nShow = SW_SHOW;
        ShExecInfo.hInstApp = NULL;
        ShellExecuteEx(&ShExecInfo);
        WaitForSingleObject(ShExecInfo.hProcess,INFINITE);

或:

       PROCESS_INFORMATION ProcessInfo;
       STARTUPINFO StartupInfo; //This is an [in] parameter
       ZeroMemory(&StartupInfo, sizeof(StartupInfo));
       StartupInfo.cb = sizeof StartupInfo ; //Only compulsory field
       if(CreateProcess(L"c:\\winnt\\notepad.exe", NULL, NULL,NULL,FALSE,0,NULL, NULL,&StartupInfo,&ProcessInfo))
       { 
   
             WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
             CloseHandle(ProcessInfo.hThread);
             CloseHandle(ProcessInfo.hProcess);
       }  
       else

             MessageBox(NULL,L"The process could not be started",NULL,NULL);

显示文件或目录的属性

        SHELLEXECUTEINFO ShExecInfo ={ 
   0};
        ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
        ShExecInfo.fMask = SEE_MASK_INVOKEIDLIST ;
        ShExecInfo.hwnd = NULL;
        ShExecInfo.lpVerb = L"properties";
        ShExecInfo.lpFile = L"c:\\"; //can be a file as well
        ShExecInfo.lpParameters = NULL;
        ShExecInfo.lpDirectory = NULL;
        ShExecInfo.nShow = SW_SHOW;
        ShExecInfo.hInstApp = NULL;
        ShellExecuteEx(&ShExecInfo);

使用方法

    int ret = (int)ShellExecute(NULL, _T("open"), _T("Dbgview.exe"), NULL, NULL, SW_NORMAL);//打开exe
    if (ret < 32)//检测是否指定成功
        MessageBox(_T("ERROR"));
    ret = (int)ShellExecute(NULL, _T("open"), _T("help.pdf"), NULL, NULL, SW_NORMAL);//打开指定文件,将调用默认处理的程序打开
    if (ret < 32)
        MessageBox(_T("ERROR"));
    ret = (int)ShellExecute(NULL, _T("open"), _T("https://www.baidu.com"), NULL, NULL, SW_NORMAL);//打开网址
    if (ret < 32)
        MessageBox(_T("ERROR"));
    ret = (int)ShellExecute(NULL, _T("open"), _T("c:\\windows"), NULL, NULL, SW_NORMAL);//打开文件夹
    if (ret < 32)
        MessageBox(_T("ERROR"));
    ret = (int)ShellExecute(NULL, _T("runas"), _T("cmd.exe"), NULL, NULL, SW_NORMAL);//请求管理员权限打开cmd
    if (ret < 32)
        MessageBox(_T("ERROR"));

实例1:

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <shellapi.h>

int main(void)
{ 
   
    test01();
}

int test01()
{ 
   
    HINSTANCE hNewExe = ShellExecuteA(NULL, "open", "calc.exe", NULL, NULL, SW_SHOW);

    if ((DWORD)hNewExe <= 32)
    { 
   
        printf("return value:%d\n", (DWORD)hNewExe);
    }
    else
    { 
   
        printf("successed!\n");
    }

    printf("GetLastError: %d\n", GetLastError());
    system("pause");
    return 1;
}

实例2

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <shellapi.h>

int main(void)
{ 
   
    test02();
}

int test01()
{ 
   
	//打开邮箱
	CString str;
	m_Cemail.GetWindowText(str);
	str = L"mailto:" + str;
	ShellExecute(NULL, L"open", str, NULL, NULL, SW_SHOWNORMAL);
	//打开任务管理器
	ShellExecute(NULL, L"open", L"taskmgr.exe", NULL, NULL, SW_SHOWNORMAL);
    system("pause");
    return 1;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/170945.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 如何用matlab画圆

    如何用matlab画圆用matlab画一个以(40,40)为圆心,以20位半径的圆r=20;%设置半径为20theta=0:pi/100:2*pi;%以pi/100为圆心角画圆x=40+r*cos(theta);…

  • 个人博客网站搭建[通俗易懂]

    个人博客网站搭建[通俗易懂]个人博客网站搭建VuePress介绍本人的个人博客网站,网站地址,是基于VuePress进行搭建。什么是VuePress根据官网:VuePress由两部分组成:第一部分是一个极简静态网站生成

  • 3极管工作原理_通信终端工作原理

    3极管工作原理_通信终端工作原理一、很多初学者都会认为三极管是两个PN结的简单凑合(如图1)。这种想法是错误的,两个二极管的组合不能形成一个三极管。我们以NPN型三极管为例(见图2),两个PN结共用了一个P区——基区,基区做得极薄,只有几微米到几十微米,正是靠着它把两个PN结有机地结合成一个不可分割的整体,它们之间存在着相互联系和相互影响,使三极管完全不同于两个单独的PN结的特性。三极管在外加电压

  • HttpClient4.X发送带参数的Get请求「建议收藏」

    HttpClient4.X发送带参数的Get请求「建议收藏」HttpClient是apache组织下面的一个用于处理HTTP请求和响应的开源工具。所用jar包为httpclient-4.3.6.jar、httpcore-4.3.3.jar、httpmime-4.3.6.jar、commons-codec-1.6.jar。发送Get请求代码如下:packagecom.zkn.newlearn.httpclient;importjava.

  • 网页光栅化_光栅净化

    网页光栅化_光栅净化资料:https://blog.csdn.net/luoshengyang/article/details/51348829总结来说,分块的光栅化过程包含了以下三个主要的步骤:1.根据分块的可见性,将它们划分到不同的Bin中。2.根据内存限制策略,从优先级较高的Bin中选集出需要光栅化的分块。3.为每一个需要光栅化的分块分配光栅化内存…

    2022年10月21日
  • Java MD5 加密工具类[通俗易懂]

    Java MD5 加密工具类[通俗易懂]一、MD5简介MD5消息摘要算法(英语:MD5Message-DigestAlgorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hashvalue),用于确保信息传输完整一致。MD5算法是不可逆的。MD5由美国密码学家罗纳德·李维斯特(RonaldLinnRivest)设计,于1992…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号