无法获取控件的窗口句柄和不支持无窗口的 ActiveX 控件

在win7 下面调用 ActiveX  出现如题错误。xp下测试正常。
编译环境: VS2008 
编程语言:CSharp 
系统版本:Windows7 
OCX控件:无窗口的OCX控件
根据微软官方的说法,导致这个错误是由于Windows的保护机制,在编译后的exe的PE头部,有一个DEP(Data Execution Prevention)的功能。需要将这个功能关闭,就能正常运行了,试了试成功了。

 下面是如何打开 DEP 的方法:

关闭Wind XP/Vista/Win7的DEP数据执行保护汇总

数据执行保护 (DEP) 是一种Windows安全机制,从Windows版本顺序上看是从Windows XP SP2开始引入,通过监视程序以确保它们使用的系统内存是安全的,帮助防止操作系统受到病毒和其他安全威胁的破坏。这个功能从设计上来讲是非常不错的,可以保护系统安全,但同时也可能会影响某些程序甚至整个系统的正常运行。甚至在日常的操作中带来很大麻烦,因为很多用户根本不知道如何取舍或关闭。看来DEP功能还是有诸多的完善工作需要完成,天缘本文就来综合一下DEP在常见几种操作系统下的开启和关闭方法做个汇总。

一、Windows XP下开始/关闭数据执行保护(DEP)的方法

XP模式下开启和关闭DEP有两种方法,一种是部分开启/关闭,另一种是长期开启/关闭。

第一种方法是为了方便于用户倾向于使用DEP功能,但又不想整体关闭,由于DEP功能上的欠缺可能会引起某些程序的非正常运行甚至崩溃现象时,可以通过以下方法进行设置:在桌面“我的电脑”点击鼠标左键——属性——高级——性能设置选项,即可看到下图:

针对某些程序关闭DEP保护,只需要点击上图中的“为下列程序之外的所有程序启动DEP”,然后点击添加按钮,找到您所信任的程序执行文件,添加即可,然后重启计算机即可生效。

第二种方法,全部关闭DEP保护功能,可以在上图中,点击关闭DEP(不推荐),然后重新启动计算机即可。也可以通过直接修改Boot.ini文件达到彻底关闭数据执行保护的目的,在 WinXP SP2/SP3系统目录下找到Boot.ini文件。有这么一行(其他驱动器类似):

......="Microsoft Windows XP Professional"=OPTIN /FASTDETECT /USEPMTIMER /noexecute

修改NoExecute参数为NoExecute=AlwaysOff,然后保存即可,相当关闭DEP功能和EVP和EDB。实际上,在上述第一种方法中如何修改关闭DEP选项,系统会自动修改boot.ini文件的启动项,实现结果相同。

二、Windows Vista下开始/关闭数据执行保护(DEP)的方法

在Vista下关闭DEP方法也很简单,只需要按照以下步骤操作即可:

1、新建一个文本文件mod.txt,然后输入:

bcdedit.exe/set {current} nx AlwaysOff

pause

2、保存后,再重命名为bat文件mod.bat;

3、然后在文件上鼠标右键以管理员身份运行即可,看到运行结果。

4、关闭该命令运行窗口,然后重新启动计算机即可生效

另外,对于没有管理员权限的用户执行修改DEP数据保护设置可能会出现下图提示:

避免方法,请提权后或采用本文描述方法执行。

三、Windows 7下开始/关闭数据执行保护(DEP)的方法

方法同Vista的修改方法。

补充:

1、该方法同样适用于Windows Server 2008,操作方法相同。

2、如果要开启DEP数据保护,只需要把AlwaysOff改成AlwaysOn即可

名词解释:

DEP——为微软的软件上层协调模块,协助CPU执行数据保护,为Data Excute Protection缩写

EVP——AMD CPU的防病毒技术,为Ehanced Virus Protection缩写

EDB——Intel CPU的防病毒技术,为Excute Disable Bit缩写

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在LabVIEW中,使用API函数来获取前面板句柄,可以通过以下步骤实现: 首先,在LabVIEW中打开.vi文件,在函数面板上选择"工具"->"创建ActiveX DLL函数"。然后,选择"获取前面板句柄"的函数。这将在控制面板上添加一个名为"GetFrontPanelHWND"的DLL函数。 接下来,构建具有此函数的DLL,并将其注册到操作系统中。将生成的DLL文件放置在您制定的位置,然后通过命令提示符运行以下命令进行注册:regsvr32 path\to\your\DLL\file.dll。 然后,在LabVIEW中创建一个新的.vi文件,并打开"函数面板"中的ActiveX Palette。将"ActiveX 基元"控件拖放到面板上。 接下来,双击"ActiveX 基元"图标,在弹出的对话框中,选择"操作"->"ActiveX方法"。然后,从"原始路径"下拉菜单中选择您之前注册的DLL,并选择功能为"GetFrontPanelHWND"。将返回的句柄输出连接到ActiveX 基元的输入。 最后,在LabVIEW中添加其它需要使用前面板句柄的功能,并使用返回的句柄作为输入参数。您可以使用此句柄来实现与操作前面板对象和控件的交互。 请注意,这只是获取前面板句柄的一种方法。实际上,还有其他的方法可以实现相同的目的,这取决于您的需求和LabVIEW的版本。以上是一种常见且简洁的方法,适用于大多数情况。 ### 回答2: 在LabVIEW中,可以使用API函数获取前面板句柄。前面板句柄是一个唯一标识符,用于引用和操作特定的前面板。 要获取前面板句柄,可以使用以下步骤: 1. 在LabVIEW的Block Diagram中,创建一个VI。 2. 在VI的Block Diagram中,将一个Call Library Function Node拖动到Block Diagram上。该节点用于调用外部的API函数。 3. 双击Call Library Function Node,在弹出的对话框中,选择需要调用的API函数。API函数名称可能因操作系统和LabVIEW版本而异,通常会包含关键词"Get Front Panel Handle"或者"GetFPHandle"。 4. 在输入参数中,输入当前VI的实例句柄。可以使用VI Server节点获取当前VI的实例句柄,在Block Diagram中右键点击空白处,选择"VI Server",然后选择"Get VI Ref"函数。 5. 在Call Library Function Node的输出参数中,添加一个适当的类型来存储前面板句柄值。可以选择一个指针类型或整数类型。 6. 运行VI,将前面板句柄值传递到后续的操作中。 通过以上步骤,就可以成功获取到前面板句柄。可以使用前面板句柄进行一系列的操作,比如更新前面板的控件属性,触发前面板事件等。 需要注意的是,使用API函数需要确保正确调用了对应的函数及其参数,并且了解相关的编程概念和原理。在使用API函数时,建议查阅相关的文档和资源,以确保正确使用函数并处理可能的错误情况。 ### 回答3: 在LabVIEW中,要获取前面板句柄可以使用API函数`GetPanelHandle`。该函数的作用是获取指定VI的前面板窗口句柄。 使用API函数获取前面板句柄的步骤如下: 1. 打开LabVIEW开发环境,创建一个新的VI。 2. 在Block Diagram中添加一个API函数调用节点。可以在搜索框中输入"Call Library Function Node"来快速找到该节点。 3. 右键单击API函数调用节点,选择"Select a Function"。 4. 在弹出的函数选择对话框中,选择"vi.lib\user.lib"路径,并选择"`user32.dll`"。 5. 在函数选择对话框中,选择`GetPanelHandle`函数。 6. 在API函数调用节点的输入终端上,输入需要获取前面板句柄的VI的路径。可以使用`VI Path`函数来获取当前VI的路径。 7. 在API函数调用节点的输出终端上,添加一个表示前面板句柄的变量。 8. 将API函数调用节点和前面板句柄变量连接起来。 完成上述步骤后,即可在LabVIEW中获取到特定VI前面板的句柄。 在获取到前面板句柄后,可以在代码中使用该句柄来进行一些操作。例如,可以使用`SetPanelAttribute`函数来设置前面板的属性,使用`SetControlValue`函数来设置控件的值等等。 需要注意的是,获取前面板句柄涉及到操作系统API函数的调用,需要确保代码的正确性,避免因使用不当而导致的错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值