搜索
查看: 4387|回复: 5

求助:请将VB代码转换为aardio代码。谢谢。

[复制链接]

10

主题

38

帖子

232

积分

二级会员

Rank: 3Rank: 3

积分
232
发表于 2014-12-6 10:54:13 | 显示全部楼层 |阅读模式
Public Declare Function RtlAdjustPrivilege Lib "ntdll" (ByVal Privilege As Long, ByVal NewValue As Long, ByVal NewThread As Long, OldValue As Long) As Long
Public Declare Function NtShutdownSystem Lib "ntdll" (ByVal ShutdownAction As Long) As Long
Public Const SE_SHUTDOWN_PRIVILEGE As Long = 19
Public Const SHUTDOWN As Long = 0
Public Const RESTART As Long = 1
Public Const POWEROFF As Long = 2

Sub Main()


Call RtlAdjustPrivilege(SE_SHUTDOWN_PRIVILEGE, 1, 0, 0)
NtShutdownSystem POWEROFF
End Sub


那个api不晓得如何弄。代码的作用是快速关机,配合开机还原使用。
回复

使用道具 举报

10

主题

307

帖子

1784

积分

荣誉会员

Rank: 8Rank: 8

积分
1784
发表于 2014-12-6 12:21:48 | 显示全部楼层

关机用标准库的函数就可以了: [align=left][font=新宋体][quote][color=#0000ff]import[/color][color

关机用标准库的函数就可以了:
import sys;
sys.shutdown();
RtlAdjustPrivilege 看 sys源码里面这样写:setprivilege("SeShutdownPrivilege",true)

回复

使用道具 举报

10

主题

307

帖子

1784

积分

荣誉会员

Rank: 8Rank: 8

积分
1784
发表于 2014-12-6 12:25:43 | 显示全部楼层

直接调用API这样写 [code]ntdll = raw.loadDll("ntdll"); ntdll.RtlAdjustPrivilege(19/*SE_

直接调用API这样写
  1. ntdll = raw.loadDll("ntdll");
  2. ntdll.RtlAdjustPrivilege(19/*SE_SHUTDOWN_PRIVILEGE*/,true,false,{ bool enabled})
  3. ntdll.NtShutdownSystem(2/*POWEROFF*/);
复制代码


如果要先声明API,这样写
  1. var dll = ..raw.loadDll("Ntdll")
  2. RtlAdjustPrivilege = dll.api("RtlAdjustPrivilege","void(INT privilege,bool enavle,bool currentThread,bool & enabled")   
  3. NtShutdownSystem = dll.api("NtShutdownSystem","void(INT action)")
复制代码


回复

使用道具 举报

10

主题

38

帖子

232

积分

二级会员

Rank: 3Rank: 3

积分
232
 楼主| 发表于 2014-12-8 09:06:49 | 显示全部楼层

测试通过,非常好用。

测试通过,非常好用。
回复

使用道具 举报

0

主题

2

帖子

11

积分

新手入门

Rank: 1

积分
11
发表于 2015-9-2 09:46:02 | 显示全部楼层

{:victory:}

回复

使用道具 举报

0

主题

1

帖子

16

积分

新手入门

Rank: 1

积分
16
发表于 2015-9-8 15:39:23 | 显示全部楼层

Vbs脚本实现图标缓存的重建功能,求aardio实现方法? On Error Resume Next Set FSO = CreateObject("Scr

Vbs脚本实现图标缓存的重建功能,求aardio实现方法?
On Error Resume Next
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.DeleteFile(FSO.GetSpecialFolder(0) & "\shelliconcache")
Set FSO = Nothing
Set Pros = GetObject("winmgmts:\\.\root\cimv2").ExecQuery ("Select * from Win32_Process Where Name = 'explorer.exe'")
For Each Pro in Pros
Pro.Terminate
Next
Set Pros = Nothing
回复

使用道具 举报

30

主题

699

帖子

4198

积分

超级版主

Rank: 8Rank: 8

积分
4198
发表于 2015-9-9 15:34:31 | 显示全部楼层

[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=69984&ptid=12649][c

富九城 发表于 2015-9-8 15:39
Vbs脚本实现图标缓存的重建功能,求aardio实现方法?
On Error Resume Next
Set FSO = CreateObject("Scri ...

刷新图标缓存可以用下面的代码:
::Shell32 := ..raw.loadDll("Shell32.dll")
::Shell32.SHChangeNotify(0x8000000,0,0,0);  

至于你VBS里的删除ShellIconCache目录,用aardio可以这样写:
import fsys;
fsys.delete( fsys.getSpecial(0,
"\ShellIconCache") )
但问题是这是Win98中才有的目录,WIN XP开始就没有了,这些东西可以自己先搜索一下。


至于杀explorer.exe进程这种方法还是不建议使用的,你的VBS代码用aardio实现大概就是这样:
import process
process.kill(
"explorer.exe")
写复杂一点就是这样:
import process;
for processEntry in process.each( "explorer.exe") {     
    process( processEntry.th32ProcessID,1).terminate()
}


象VBS那样调用FSO,WMI来写就是这样,其实aardio范例里都有这些示例:
import com;
var objWMIService = com.GetObject("winmgmts:\\.\root\cimv2")
var explorePrcs = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = 'explorer.exe'")

for index,prcs in com.each(explorePrcs) {
    prcs.Terminate()
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-1-24 05:33 , Processed in 0.062500 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表