如何使一个HTA位于屏幕中心(Win32_DesktopMonitor)

我们可以调整(如果需要)窗口大小并使其居中,但这样做时会在屏幕上出现瞬间的闪烁。这并不是太明显,其实际结果就是你所期望的:HTA 会位于屏幕中心。我们希望这个过程变得稍微流畅些,但目前我们不得不使用此方法。
下面是 HTA 示例的代码。(若要实现此过程,请复制该代码,并将其粘贴到记事本中,然后以 .hta 为文件扩展名保存该文件。)我们担心的部分(也是唯一真正有用的部分)是 Window_Onload 子例程,每当 HTA 被加载或更新时,该子例程就自动运行:

代码如下:

<html>
<head>
<title>Centered HTA</title>
<HTA:APPLICATION
ID="objHTA"
APPLICATIONNAME="Centered HTA"
SCROLL="yes"
SINGLEINSTANCE="yes"
>
</head>
<SCRIPT Language="VBScript">
Sub Window_Onload
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * From Win32_DesktopMonitor")
For Each objItem in colItems
intHorizontal = objItem.ScreenWidth
intVertical = objItem.ScreenHeight
Next
intLeft = (intHorizontal - 800) / 2
intTop = (intVertical - 600) / 2
window.resizeTo 800,600
window.moveTo intLeft, intTop
End Sub
</SCRIPT>
<body></body>
</html>

启动此 HTA - 一个快速闪烁之后 - 窗口将调整为 800x600 像素,并将位于屏幕中心。

好问题:这里将要发生什么?我们先使用一些标准 WMI 代码,连接到本地计算机上的 WMI 服务,然后查询 Win32_DesktopMonitor 类。

注意。我们假定您的计算机只连接了一台显示器。如果您有多台显示器,您将必须添加一个 WHERE 子句来确保您将检索主显示器的屏幕高度和宽度。

连接到 Win32_DesktopMonitor 类后,我们将使用下列两行代码来确定当前屏幕的尺寸:

代码如下:

intHorizontal = objItem.ScreenWidth
intVertical = objItem.ScreenHeight

我们已经事先决定,想让 HTA 窗口的宽度为 800 像素,高度为 600 像素。因此,我们可以使用以下代码计算出需要将该窗口的左上角放在什么位置:

代码如下:

intLeft = (intHorizontal - 800) / 2
intTop = (intVertical - 600) / 2

正如您所看到的,我们将获得屏幕宽度(存储在 intHorizontal 变量中)并减去 800 像素(HTA 窗口的水平尺寸)。假定我们有一台分辨率为 1024x768 的显示器。1024 减去 800 得 224:这告诉我们屏幕比 HTA 窗口宽多少。若要使该窗口居中,我们只需确保每个边为 112 像素;这就是用 224(即 intHorizontal – 800)除以 2 的原因。

然后,对于屏幕高度,重复该过程。对于我们的示例显示器,得到的是 768 – 600(即 168),然后除以 2 得到 84 像素(即该窗口上下边的尺寸)。

这样,我们还需要做两项工作。第一,将窗口调整到 800x600 像素:

window.resizeTo 800,600

第二,相应地放置窗口。这就是我们现在要做的:

window.moveTo intLeft, intTop

我们要做的所有事情就是调用 moveTo 方法并移动 HTA 窗口,使其左上角位于距左侧 112 像素、距顶端 84 像素的位置。

顺便说一下,我们将 resizeTo 方法放在该子例程底端附近,以供教学之用:我们想要将 resizeTo 与 moveTo 一起讲述。然而,当您通过调整窗口启动子程序时,将有一个轻微的、不太明显的闪烁:

代码如下:

Sub Window_Onload
window.resizeTo 800,600
strComputer = "."
Set objWMIService = GetObject("Winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * From Win32_DesktopMonitor")
For Each objItem in colItems
intHorizontal = objItem.ScreenWidth
intVertical = objItem.ScreenHeight
Next
intLeft = (intHorizontal - 800) / 2
intTop = (intVertical - 600) / 2
window.moveTo intLeft, intTop
End Sub

这不是个大问题,但有些帮助。我们会继续寻找消除闪烁的方法。(为什么如此困难?理想状态下,在调整和移动 HTA 窗口之前,我们会将其隐藏,这可以使用 Internet Explorer 来执行。然而,我们还没有找到一种使用 HTA 来执行该操作的方法。但我们从未放弃。)

(0)

相关推荐

  • MSN圣诞照片(Backdoor.Win32.PBot.a)病毒分析解决

    文件名称:devic.exe 文件大小:23304 bytes AV命名:(virustotal上仅卡吧一家报)Backdoor.Win32.SdBot.cok 加壳方式:未知 编写语言:VC 病毒类型:IRCbot 文件MD5:45de608d74ee4fb86b20da86dcbeb55c 行为分析: 1.释放病毒副本: C:\WINDOWS\devic.exe , 23304 字节 C:\WINDOWS\img5-2007.zip , 23456 字节 2.添加注册表,开机启动: HKEY

  • recycle.exe(Trojan-Dropper.Win32.VB.rj)病毒的查杀方法

    一.病毒描述:         病毒通过U盘传播,运行后复制自身到系统目录并释放一个灰鸽子木马.为增强隐蔽性,生成的病毒文件有回收站和安         装程序两种图标. 二.病毒基本情况:         病毒名称:Trojan-Dropper.Win32.VB.rj         病毒别名:无         病毒类型:病毒         危害级别:3         感染平台:Windows         病毒大小:458,752(字节)         SHA1 :b86e4197

  • Backdoor.Win32.IRCBot.afm(video.exe)病毒的处理方法

    文件名称:video.exe 文件大小:40960 bytes AV命名:Backdoor.Win32.IRCBot.afm (Kaspersky) 加壳方式:未知 编写语言:Microsoft Visual C++ 病毒类型:IRC后门 文件MD5:c06d070c232bc6ac6346cbd282ef73ae 行为分析: 1.释放病毒副本: %Srstemroot%system32\firewall.exe    40960 字节. (文件名应该是随机的,不一定是这个). 压缩副本病毒,保

  • win32使用openfilename浏览文件窗口示例

    代码如下: 复制代码 代码如下: OPENFILENAME ofn;WCHAR* szFile = new WCHAR[512];WCHAR* szFileTitle = new WCHAR[512];memset(&ofn, 0, sizeof(ofn));memset(szFile, 0, sizeof(WCHAR)*512);memset(szFileTitle, 0, sizeof(WCHAR)*512); ofn.lStructSize = sizeof(ofn);ofn.hwndOw

  • c#用Treeview实现FolderBrowerDialog 和动态获取系统图标(运用了Win32 dll类库)

    事情是这样子的.我需要做一个下面的东东: 这个不难啊,然后就用FolderBrowerDialog这个神器,嗯 还不错,刚开始客户用了也很喜欢. 可是过了一段时间之后,客户说 要屏蔽右键功能,他不想让其他通过右键能打开或浏览文件夹,如下面 红色要给屏蔽. 我一开始以为只是一个参数问题,就爽快的答应了客户咯.可是啊后来找啊找 找到天荒地老也木有找到...放弃了,然后改用了TreeView..结果,版本出来了,先截图: 好吧,确实很丑哦.. 复制代码 代码如下: public MyDirectory

  • python字符串加密解密的三种方法分享(base64 win32com)

    1. 最简单的方法是用base64: 复制代码 代码如下: import base64 s1 = base64.encodestring('hello world')s2 = base64.decodestring(s1)print s1,s2 # aGVsbG8gd29ybGQ=\n# hello world Note: 这是最简单的方法了,但是不够保险,因为如果别人拿到你的密文,也可以自己解密来得到明文 2. 第二种方法是使用win32com.client 复制代码 代码如下: import

  • inst.exe,Setup.exe木马Trojan-PSW.Win32.Magania.cjy解决方法

    木马Trojan-PSW.Win32.Magania.cjy inst.exe,Setup.exe Backdoor/Agent.apnf  病毒名称: Trojan-PSW.Win32.Magania.cjy 病毒类型: 木马 江民杀毒 10.00.650  Backdoor/Agent.apnf 1.395 NOD32 2.70.10  a variant of Win32/PSW.OnLineGames.NFF trojan 4.185 该病毒为玛格尼亚病毒的新变种,释放一个DLL通过挂钩

  • Downloader Win32.Delf.dqu(IRAT.rmvb,mm.exe)分析查杀

    文件名称:IRAT.rmvb\mm.exe 文件大小:140800 byte AV命名: Downloader.Win32.Delf.dqu(卡巴斯基) MultiDropper-JD(迈克菲) Downloader/W32.Agent.137216.I(nProtect) 加壳方式:未 编写语言:Delphi 文件MD5:1b2cf1cdcb03c7c990c6ffe5a75e0f9b 病毒类型:后门 行为分析: 1. 释放病毒副本: C:\WINDOWS\system32\IRAT.rmvb

  • win32安装配置非安装版的MySQL

    环境变量设置:单击桌面我的电脑右键属性->高级->环境变量->双击Path项,添加C:\MySQL5.1.40\bin目录,如果要使用SDK开发,则要添加Lib和include目录到对应的Lib和include环境变量中; 环境变量设好,在开始菜单->运行->CMD,执行MySQLD,或是直接切换到C:\MySQL5.1.40\bin目录双击运行MySQLD.exe服务程序,也可以服务的形式运行: 注意mysql安装目录不要有中文或空格,在SDK开发中,如QT会有意想不到的问

  • iis Win32状态数值(sc-win32-status)说明

    成功完成的时候该状态数值为0,其他的状态数值代表的意思如下: 函数不正确  系统找不到指定的文件  系统找不到指定的路径  系统无法打开文件  拒绝访问  句柄无效  存储控制块被损坏  存储空间不足,无法处理此命令  存储控制块地址无效  环境不正确  试图加载格式不正确的程序  访问码无效  数据无效  存储空间不足,无法完成此操作  系统找不到指定的驱动器  无法删除目录  系统无法将文件移到不同的驱动器  没有更多文件  媒体受写入保护  系统找不到指定的设备  设备未就绪  设备不识别

  • PSW.Win32.Magania.ffw(F3C74E3FA248.exe)病毒的清除

    1.  释放病毒文件: C:\WINDOWS\Help F3C74E3FA248.dll  143872 字节 F3C74E3FA248.exe  74532 字节 2.  添加启动项: Registrykey: HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks Registry value: {1DBD6574-D6D0-4782-94C3-69619E719765} Type: REG_SZ 3

  • nginx win32 版本静态文件测试 (Windows环境)

    下载了 Nginx For Win32 的官方版本 nginx 0.7.53 进行了试用以及压力测试. 安装使用方式很简单,直接贴官方的方式: Win32 Binaries As of 0.7.52, Nginx is now available as an official Windows binary. Installation: cd c:\ unzip nginx-0.7.52.zip ren nginx-0.7.52 nginx cd nginx start nginx Control

  • WMI中的Win32_PingStatus类(ping命令实现)

    复制代码 代码如下: IP = "jb51.net" WQL = "Select * from Win32_PingStatus Where Address = '$IP'" WQL = Replace(WQL,"$IP",IP) n = 0 : s = 0 Do Until n = 100 Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") Set colItem

  • Worm.Win32.AutoRun.bqn病毒分析解决

    一.病毒相关分析:        病毒标签:         病毒名称:Worm.Win32.AutoRun.bqn          病毒类型:蠕虫         危害级别:2         感染平台:Windows         病毒大小:21,504(字节)         SHA1 :01015B9F9231018A58A3CA1B5B6A27C269F807E6         加壳类型:PECompact V2.X-> Bitsum Technologies         开

  • win32 api实现简单的消息窗口示例

    复制代码 代码如下: #include<windows.h> LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow){static TCHAR szAppName[]=TEXT("HelloWin");HWND hwnd;MSG msg;WNDCL

  • 木马程序Trojan-Spy.Win32.Agent.cfu清除方法

    木马程序Trojan-Spy.Win32.Agent.cfu 该样本程序是一个使用Delphi编写的程序,程序采用MEW 1.x加壳企图躲避特征码扫描,长度为67,908字节,图标为windows默认图标,病毒扩展名为exe,主要传播途径网页挂马.文件捆绑.黑客攻击. 病毒分析 该样本程序被激活后释放systen.dll文件到%systemroot%\system32目录下,释放451062.dll文件(该文件名为6位或7位随机数字)到%systemroot%目录下,运行批处理删除自身: 添加注

  • python使用win32com在百度空间插入html元素示例

    复制代码 代码如下: from win32com.client import DispatchEximport timeie=DispatchEx("InternetExplorer.Application") ie.Navigate("http://hi.baidu.com/mirguest/creat/blog/")ie.Visible=1while ie.Busy:    time.sleep(1) body=ie.Document.body# headerf

  • 木马下载器Win32.TrojDownloader.Delf.114688

    木马下载器Win32.TrojDownloader.Delf.114688病毒行为: 该病毒是一个木马下载者,会从网上下载其他病毒至客户的机器上并运行.病毒运行后生衍生一个DLL文件至系统目录中. 1.生成文件 %WinDir%\System32\Downdll.dll 2.修改注册表 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections SavedLegacySetti

随机推荐