shellexecuteex参数(MFC使用什么函数能让程序重启)

:暂无数据 2026-07-11 14:00:01 :2

shellexecuteex参数(MFC使用什么函数能让程序重启)

大家好,关于shellexecuteex参数很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于MFC使用什么函数能让程序重启的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

本文目录

MFC使用什么函数能让程序重启

用ShellExecuteEx启动另外一个程序,传递一个reboot参数,然后在新启动的程序中接收这个参数,来判断自身是“重启”的结果,然后寻找之前的窗体,最后TerminateProcess
之前的进程。

Delphi深度探索之外壳执行操作记录器

记录外壳的活动

  记录外壳活动有很多好处 比如当需要监控用户的行为 回溯系统崩溃前的过程 实现这一功能的关键工具相当简单 它就是接口IShellExecuteHook 编写一个实现了这一接口的对象后 再在系统中注册 就可以容易地控制并影响Windows外壳的运行 Windows 和Windows 都支持IShellExecuteHook外壳扩展 而在Windows 和Windows NT 上则必须安装活动桌面扩展后才支持(也就是说必须安装IE )

  一个实现了IShellExecuteHook接口的对象可以截获所有对ShellExecute和ShellExecuteEx函数的调用 ShellExecute和ShellExecuteEx函数主要用于执行应用程序 它们可以接收一个文件名并能自动获得同文件名相关的可执行文件名 此外 它们还支持系统安全认证 如果在NT上设定了用户的可执行权限 ShellExecute和ShellExecuteEx函数将会在创建新的进程前检查权限(CreateProcess和WinExec函数则没有这项功能) 函数调用的流程如下

  ( )获得将要运行的可执行文件名

  ( )根据程序名检查用户执行权限

  ( )激活全部已注册的IshellExecuteHook扩展

  ( )当所有扩展和权限都同意执行 创建新的进程并返回

  Windows外壳大量调用ShellExecute和ShellExecuteEx函数来执行几乎是所有的资源管理器的操作 比如双击目录 浏览文件夹内容 打印文档 查看文件属性 选择文档的上下文相关菜单等等 此外 开始菜单的运行对话框和DOS方式下的Start exe也使用ShellExecuteEx函数来执行程序 简单地说几乎用户的所有外壳操作都可以被扩展截获 包括其他应用程序对ShellExecute和ShellExecteEx的调用

编写外壳活动记录器

  首先需要创建一个进程内对象 选菜单命令New | ActiveX Library 然后点击菜单New|Com Object 创建对象框架 按图 填充对话框的内容 然后点击OK按钮 Delphi就会自动生成框架文件 并保存生成的文件

  IShellExecuteHook的接口定义在shlobj pas单元中 添加shlobj到单元uses部分 然后添加IShellExecuteHooko方法原型到对象声明部分 声明部分代码如下

unit ShellExecuteHookObj;

interface

uses

Windows ActiveX ComObj ShlObj ShellAPI;

type

TTShellExecuteHook = class (TComObject IShellExecuteHook)

protected

function Execute(var ShellExecuteInfo: TShellExecuteInfo): HResult; stdcall;

end;

const

Class_TShellExecuteHook: TGUID = { FA D D B E B AE BE } ;

  下面就是用来截获并记录外壳操作的实现部分 一旦外壳扩展被注册后 每次ShellExecute 和ShellExecuteEx函数运行时都会调用对象的Execute函数 我们的核心代码就是通过Execute方法实现的 方法定义如下

function TTShellExecuteHook Execute(var ShellExecuteInfo: TShellExecuteInfo): HResult;

  Execute方法会从外壳获得一个类型为TshellExecuteInfo的参数 参数定义如下

_SHELLEXECUTEINFOA = record

cbSize: DWORD;

fMask: ULONG;

Wnd: HWND;

lpVerb: PAnsiChar;

lpFile: PAnsiChar;

lpParameters: PAnsiChar;

lpDirectory: PAnsiChar;

nShow: Integer;

hInstApp: HINST;

{ Optional fields }

lpIDList: Pointer;

lpClass: PAnsiChar;

eyClass: HKEY;

dwHotKey: DWORD;

hIcon: THandle;

hProcess: THandle;

end;

  这个记录结构中的lpFile包含了要运行的文件名 而lpVerb则表明执行的动作 动作由一些标准的字符串代表 比如 open(打开) print(打印) edit() explore(浏览) properties(属性) find(查找)和其他上下文菜单的命令名 有时 lpFile并不包含可执行文件名 这是因为ShellExecute接到的运行参数是一个文档名 比如当我们在资源管理器中双击文本文件时 Windows用文本文件名作为参数调用ShellExecute函数 而ShellExecute函数则获得同文本文件相关联的可执行文件名 然后执行

  TShellExecuteInfo结构中还记录了要运行程序的很多信息 然而这里我们只能在Execute方法中修改nCmdShow参数 nCmdShow参数定义了窗口在运行后的显示状态 包括最大化 最小化 正常等选项 对于其他参数的修改都会被外壳忽略 除此之外 在Execute方法中可以根据情况允许外壳继续缺省的任务或通知外壳取消执行 这可以通过Execute函数的返回值来实现

  如果Execute的返回值为S_FALSE 外壳就继续缺省的任务 如果返回S_OK 则外壳认为扩展已经成功 就不再继续执行了 另外如果返回一个错误代码或系统无法识别的值 则外壳会弹出错误信息 这给了我们一个控制程序运行的机会 比如可以限制任何对记事本的调用 代码如下

function TTShellExecuteHook Execute(var ShellExecuteInfo: TShellExecuteInfo): HResult;

var

FileName: String;

begin

Result := S_FALSE;

with ShellExecuteInfo do

begin

FileName := UpperCase(ExtractFileName(lpFile));

if Pos( NOTEPAD FileName) = then

begin

Result := S_OK;

hInstApp := ;

MessageBox(Wnd 不允许记事本运行! 错误 MB_OK or MB_ICONERROR);

end;

end;

end;

  进一步 我们甚至可以利用这点实现一个自定义的安全认证机制 根据用户要求限制运行的程序 有兴趣的朋友可以试验一下 一定很有意思

  有一点要注意的是 在Execute方法下不能调用ShellExecute和ShellExecuteEx函数外部程序 如果是这样的话 我们的Execute方法又会被新的ShellExecute调用 这样系统就会进入死循环 如果我们确实想在Execute方法中调用外部程序的话 可以使用CreateProcess或WinExec函数来替代 这两个函数不会被ShellExecuteHook截获

  对于外壳动作记录器来说 只要在Execute方法中记录程序信息到日志文件中就可以了 代码非常简单 因为所有需要的信息都在TShellExecuteInfo记录中包含了 这里只记录运行的动作 文件名和时间 需要记录其他信息的话 大家可自行修改 代码示意如下

function TTShellExecuteHook Execute(var ShellExecuteInfo: TShellExecuteInfo): HResult;

var

FileStream: TFileStream;

a:TStringList;

S:string;

begin

Result := S_FALSE;

with ShellExecuteInfo do

begin

FileStream:=TFileStream Create( c:\shellexecutehook txt fmopenwrite);

S:=string(lpVerb)+ : +string(lpFile)+DateTimeToStr(Now)+# # ;

FileStream Seek(FileStream Size soFromBeginning);

FileStream Write(PChar(S)^ Length(S));

FileStream Free;

end;

end;

注册ShellExecuteHook

  要想使对象被外壳加载 需要在注册表中注册一些信息 在下面这个子键中添加类的GUID及描述字符串后就可以了(描述字符串可以不赋值 但不妨给一个以便于识别)

HKEY_LOCAL_MACHINE

SOFARE

Microsoft

Windows

CurrentVersion

Explorer

ShellExecuteHooks

{CLSID}= 描述字符串

  修改注册表可以通过重载的类工厂的UpdateRegistry方法来实现 代码示意如下

implementation

uses ComServ SysUtils;

resourcestring

sCreateRegKeyError = 创建注册表项失败 ;

type

TShellExComObjectFactory = class(TComObjectFactory)

public

procedure UpdateRegistry(Register: Boolean); override;

end;

{ TShellExComObjectFactory }

procedure TShellExComObjectFactory UpdateRegistry(Register: Boolean);

const

hellExecuteHooksKey= SOFARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks ;

var

Handle: HKey;

Status Disposition: Integer;

ClassID: String;

begin

ClassID := GUIDToString(Class_TShellExecuteHook);

if Register then

begin

Status := RegCreateKeyEx(HKEY_LOCAL_MACHINE PChar(ShellExecuteHooksKey) REG_OPTION_NON_VOLATILE KEY_READ or KEY_WRITE nil Handle @Disposition);

if Status = then

begin

Status := RegSetValueEx(Handle PChar(ClassID) REG_SZ

PChar(Description) Length(Description) + );

RegCloseKey(Handle);

end;

end else

begin

Status := RegOpenKeyEx(HKEY_LOCAL_MACHINE PChar(ShellExecuteHooksKey)

KEY_READ or KEY_WRITE Handle);

if Status = then

begin

Status := RegDeleteValue(Handle PChar(ClassID));

RegCloseKey(Handle);

end;

end;

if Status 《》 then raise EOleError Create(sCreateRegKeyError);

inherited UpdateRegistry(Register);

end;

initialization

TShellExComObjectFactory Create(ComServer TTShellExecuteHook Class_TShellExecuteHook TShellExecuteHook ShellExecute hook sample ciMultiInstance tmApartment);

end   如果系统中有多个ShellExecuteHook的话 外壳会按照ShellExecuteHook的安装顺序进行调用 如果要想使某个外壳扩展优先运行 可先删除其他扩展然后添加优先扩展 原来的扩展依次放在后面 不过这样做也可能意义不大 因为别人也会这么干 最后 程序运行的结果

  记住ShellExecuteHook并不是一个完善的用于监视系统运行的扩展 它只能监视ShellExecute和ShellExecuteEx的运行 它不能保证记录系统所有的行为 特别是很多情况下外壳并不使用ShellExecute来进行一些常用的操作 比如我们在资源管理器中选择一个文件 然后调用右键菜单的属性命令后 记录器没有记录这个动作 但如果直接调用ShellExecute(如下示)的话 ShellExecuteHook却会正确执行

ShellExecute(nil properties foo txt nil nil SW_SHOW);

lishixinzhi/Article/program/Delphi/201311/24787

如何在C++调用外部程序时传值

Windows 的话, ShellExecuteEx 可以调用外部程序并附加参数, Linux 不知
另外貌似也可以直接用 System() 直接跑命令行来实现
***隐藏网址***

exe文件如何加参数运行

1、首先进入exe文件位置,右键单击文件。

2、将exe文件的快捷方式发送到桌面快捷方式。

3、右键单击此快捷方式--属性。

4、在快捷方式属性界面,点击目标后面的链接。

5、在用于steam联机优化,后面先打一个空格然后输入 -nofriendsui,然后点击确定按钮。

6、最后空格添加 -tcp即可加参数运行。

c#如何调用dll中的shellexecuteex函数来打开exe文件

首先那个shellexecuteex 修饰符应该是public的

这是调用:

//加载程序集(dll文件地址),使用Assembly类   
            Assembly assembly = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + "Bin/App_Code.dll");
            //获取类型,参数(名称空间+类)   
            Type type = assembly.GetType("NiHao.Test");
            //创建该对象的实例,object类型,参数(名称空间+类)   
            object instance = assembly.CreateInstance("NiHao.Test");
            //设置SayHello方法中的参数类型,Type类型;如有多个参数可以追加多个   
            Type;
            params_type = Type.GetType("System.String");
            //设置SayHello方法中的参数值;如有多个参数可以追加多个   
            Object;
            params_obj = "jiaopeng";
            //执行SayHello方法   
            object value = type.GetMethod("SayHello", params_type).Invoke(instance, params_obj);

 这是dll中的类:

namespace NiHao
{
    public class Test
    {
        public string SayHello(string str)
        {
            if (string.IsNullOrEmpty(str))
                return "你没有传参数进来";
            else
                return str+"你好";
        }
    }
}

vc中通过ShellExecuteEx()调用外部exe文件,并传递给exe文件五个整形参数,怎么写代码

先定义一个SHELLEXECUTEINFO变量,然后用ShellExecuteEx(LPSHELLEXECUTEINFO lpExecInfo);
***隐藏网址***

以上就是我们为大家找到的有关“shellexecuteex参数(MFC使用什么函数能让程序重启)”的所有内容了,希望可以帮助到你。如果对我们网站的其他内容感兴趣请持续关注本站。

shellexecuteex参数(MFC使用什么函数能让程序重启)

本文编辑:admin

本文相关文章:


lseek和fseek(read pread write pwrite fseek lseek是同一类函数吗)

lseek和fseek(read pread write pwrite fseek lseek是同一类函数吗)

其实lseek和fseek的问题并不复杂,但是又很多的朋友都不太了解read pread write pwrite fseek lseek是同一类函数吗,因此呢,今天小编就来为大家分享lseek和fseek的一些知识,希望可以帮助到大家,下

2026年11月3日 08:30

interpl(MATLAB中插值函数interpl怎么定义)

interpl(MATLAB中插值函数interpl怎么定义)

各位老铁们,大家好,今天由我来为大家分享interpl,以及MATLAB中插值函数interpl怎么定义的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

2026年11月2日 23:30

matlab画含参数函数(怎样用matlab画图带有参数的函数已经知道函数表达式,在线等)

matlab画含参数函数(怎样用matlab画图带有参数的函数已经知道函数表达式,在线等)

大家好,matlab画含参数函数相信很多的网友都不是很明白,包括怎样用matlab画图带有参数的函数已经知道函数表达式,在线等也是一样,不过没有关系,接下来就来为大家分享关于matlab画含参数函数和怎样用matlab画图带有参数的函数已经

2026年10月30日 09:40

易语言在线手册(易语言在哪里可以快速查看所有函数名称)

易语言在线手册(易语言在哪里可以快速查看所有函数名称)

这篇文章给大家聊聊关于易语言在线手册,以及易语言在哪里可以快速查看所有函数名称对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

2026年10月26日 12:10

反比例函数图像平移(反比例函数平移后图像怎么画如3-2x/x-2的图像)

反比例函数图像平移(反比例函数平移后图像怎么画如3-2x/x-2的图像)

大家好,今天小编来为大家解答以下的问题,关于反比例函数图像平移,反比例函数平移后图像怎么画如3-2x/x-2的图像这个很多人还不知道,现在让我们一起来看看吧!

2026年10月14日 17:30

excel常用函数公式表乘法(在excel中的乘法函数是哪个)

excel常用函数公式表乘法(在excel中的乘法函数是哪个)

本篇文章给大家谈谈excel常用函数公式表乘法,以及在excel中的乘法函数是哪个对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年10月10日 06:00

open函数(Excel 请问open函数的语法)

open函数(Excel 请问open函数的语法)

今天给各位分享Excel 请问open函数的语法的知识,其中也会对Excel 请问open函数的语法进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年10月2日 15:00

scanf函数怎么解除(C语言scanf函数的停止)

scanf函数怎么解除(C语言scanf函数的停止)

其实scanf函数怎么解除的问题并不复杂,但是又很多的朋友都不太了解C语言scanf函数的停止,因此呢,今天小编就来为大家分享scanf函数怎么解除的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年9月30日 19:20

placeholder函数(angular2失去焦点函数怎么写)

placeholder函数(angular2失去焦点函数怎么写)

大家好,如果您还对placeholder函数不太了解,没有关系,今天就由本站为大家分享placeholder函数的知识,包括angular2失去焦点函数怎么写的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年9月25日 11:20

rank函数怎么用不重复(怎样使Excel函数RANK排列不出现重号)

rank函数怎么用不重复(怎样使Excel函数RANK排列不出现重号)

本篇文章给大家谈谈rank函数怎么用不重复,以及怎样使Excel函数RANK排列不出现重号对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年9月24日 06:20

更多文章:


sqlite格式的视频怎么打开(.sqlite是什么文件,用什么工具打开)

sqlite格式的视频怎么打开(.sqlite是什么文件,用什么工具打开)

大家好,今天小编来为大家解答以下的问题,关于sqlite格式的视频怎么打开,.sqlite是什么文件,用什么工具打开这个很多人还不知道,现在让我们一起来看看吧!

2026年11月7日 05:30

element ui面试题(用element-ui ELDialog和ELTable遇见的坑)

element ui面试题(用element-ui ELDialog和ELTable遇见的坑)

各位老铁们好,相信很多人对element ui面试题都不是特别的了解,因此呢,今天就来为大家分享下关于element ui面试题以及用element-ui ELDialog和ELTable遇见的坑的问题知识,还望可以帮助大家,解决大家的一些

2026年11月7日 04:40

blob视频下载器(blob链接的图片如何调用下载)

blob视频下载器(blob链接的图片如何调用下载)

各位老铁们,大家好,今天由我来为大家分享blob视频下载器,以及blob链接的图片如何调用下载的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

2026年11月7日 03:30

中文自动翻译成英语的输入法(有没有一种输入法能将打出来的中文自动变成英文)

中文自动翻译成英语的输入法(有没有一种输入法能将打出来的中文自动变成英文)

各位老铁们,大家好,今天由我来为大家分享中文自动翻译成英语的输入法,以及有没有一种输入法能将打出来的中文自动变成英文的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们

2026年11月7日 02:10

equals to(为什么有些英文句子要用的是“equals to that of” 这个that和of之间还可以加名词吗)

equals to(为什么有些英文句子要用的是“equals to that of” 这个that和of之间还可以加名词吗)

其实equals to的问题并不复杂,但是又很多的朋友都不太了解为什么有些英文句子要用的是“equals to that of” 这个that和of之间还可以加名词吗,因此呢,今天小编就来为大家分享equals to的一些知识,希望可以帮助

2026年11月7日 01:50

default values(电脑开机后出现all settings was reset to default values.)

default values(电脑开机后出现all settings was reset to default values.)

其实default values的问题并不复杂,但是又很多的朋友都不太了解电脑开机后出现all settings was reset to default values.,因此呢,今天小编就来为大家分享default values的一些知识

2026年11月7日 01:20

structured reviewing翻译(软件测试的英文翻译)

structured reviewing翻译(软件测试的英文翻译)

大家好,关于structured reviewing翻译很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于软件测试的英文翻译的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位

2026年11月7日 00:50

网站模板下载好以后(动态网站模板下载后怎么用)

网站模板下载好以后(动态网站模板下载后怎么用)

“网站模板下载好以后”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看网站模板下载好以后(动态网站模板下载后怎么用)!

2026年11月6日 22:50

选项卡的作用(excel中的“数字”选项卡的功能)

选项卡的作用(excel中的“数字”选项卡的功能)

本篇文章给大家谈谈选项卡的作用,以及excel中的“数字”选项卡的功能对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年11月6日 22:20

vb手机版下载(有谁可以告诉我vb在哪里下载)

vb手机版下载(有谁可以告诉我vb在哪里下载)

“vb手机版下载”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看vb手机版下载(有谁可以告诉我vb在哪里下载)!

2026年11月6日 21:50

最近更新

红米4x尺寸(红米4x参数)
2026-11-07 04:50:20 浏览:0
热门文章

新站如何通过网站维护提升SEO排名
2026-10-13 20:56:21 浏览:6
标签列表