搜索
查看: 3922|回复: 5

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

[复制链接]

3

主题

7

帖子

60

积分

一级会员

Rank: 2

积分
60
发表于 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不晓得如何弄。代码的作用是快速关机,配合开机还原使用。
回复

使用道具 举报

17

主题

321

帖子

1847

积分

荣誉会员

Rank: 8Rank: 8

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

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

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

回复

使用道具 举报

17

主题

321

帖子

1847

积分

荣誉会员

Rank: 8Rank: 8

积分
1847
发表于 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)")
复制代码


回复

使用道具 举报

3

主题

7

帖子

60

积分

一级会员

Rank: 2

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

测试通过,非常好用。

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

使用道具 举报

0

主题

2

帖子

11

积分

新手入门

Rank: 1

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

{:victory:}

回复

使用道具 举报

0

主题

0

帖子

10

积分

新手入门

Rank: 1

积分
10
发表于 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
回复

使用道具 举报

36

主题

741

帖子

4408

积分

超级版主

Rank: 8Rank: 8

积分
4408
发表于 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, 2017-9-22 07:07 , Processed in 0.078125 second(s), 21 queries , Wincache On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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