什么是stackoverflow批准(因此正确)方法强制VBS使用cscript而不是wscript运行 - 无论用户尝试什么?
一个快速的谷歌搜索显示了大量的例子,但其中一些只是不起作用,而那些通常不能处理它可能已经参数运行的事实,所以我很想知道最好的方法是什么.
这是一个不处理参数的例子:
sExecutable = LCase(Mid(Wscript.FullName, InstrRev(Wscript.FullName,"\")+1))
If sExecutable <> "cscript.exe" Then
Set oShell = CreateObject("wscript.shell")
oShell.Run "cscript.exe """ & Wscript.ScriptFullName & """"
Wscript.Quit
End If
Run Code Online (Sandbox Code Playgroud)
我很欣赏这可能很容易修改以处理参数,但意识到这可能不是解决问题的最佳方法.
背景:我正在编写一个脚本,可以通过双击或(很可能)从DOS批处理文件或作为计划任务运行.它可以包含一个或多个可选的命令行参数.
我有一个文件夹,其中包含许多电子邮件和子文件夹.在这些子文件夹中有更多电子邮件.
我想写一些VBA,它将遍历某个文件夹中的所有电子邮件,包括任何子文件夹中的电子邮件.我们的想法是从每封电子邮件中提取SenderEmailAddress和SenderName使用它.
我尝试将文件夹导出为仅包含这两个字段的CSV,虽然这有效,但它不支持导出子文件夹中保存的电子邮件.因此需要编写一些VBA.
在我重新发明轮子之前,是否有人有任何代码片段或链接到网站,给定文件夹名称,显示如何获取MailItem该文件夹和后续子文件夹中的每个电子邮件的对象?
我已经编写了一个宏来迭代用户日历,并修改了对某个critera有用的条目.
问题是,当日历非常大时,这需要很长时间.我似乎无法过滤约会,因为oAppointmentItems似乎在创建条目时存储条目 - 这不一定与它们开始时的顺序相同.
我正在使用的代码是这样的:
Dim oOL As New Outlook.Application
Dim oNS As Outlook.NameSpace
Dim oAppointments As Object
Dim oAppointmentItem As Outlook.AppointmentItem
Set oNS = oOL.GetNamespace("MAPI")
Set oAppointments = oNS.GetDefaultFolder(olFolderCalendar)
For Each oAppointmentItem In oAppointments.Items
DoEvents
' Something here
Next
Set oAppointmentItem = Nothing
Set oAppointments = Nothing
Set oNS = Nothing
Set oOL = Nothing
Run Code Online (Sandbox Code Playgroud)
没有删除DoEvents(这只意味着Outlook似乎锁定用户)有什么办法可以通过应用某种过滤器加快速度?例如,将来开始的约会.
我在Windows Media Center中添加了自定义条带和磁贴.但是,当我选择磁贴时,我选择的应用程序(notepad.exe)不会启动,我收到以下错误:
[name]程序已停止响应,您将返回Windows Media Center.
我需要在XML中进行哪些更改才能 notepad.exe启动而不是显示此错误消息?
使用此博客文章和Windows开发人员中心的此页面提供的示例,我创建了以下XML文件(称为dummy.xml):
<application title="appTitle" id="{81E3517C-A5F3-4afa-9E37-81BF9A6A99FE}">
<entrypoint id="{760A3CF3-6675-444b-AA31-B2A3F94AD9A3}"
addin="Microsoft.MediaCenter.Hosting.WebAddIn,Microsoft.MediaCenter"
title="entrypointTitle"
description="Description"
run="notepad.exe">
<category category="MyCompany\MyApplication1"/>
</entrypoint>
</application>
Run Code Online (Sandbox Code Playgroud)
和以下注册表文件(称为dummy.reg):
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Media Center\Start Menu\Applications\{81E3517C-A5F3-4afa-9E37-81BF9A6A99FE}]
"Title"="appTitle"
"Category"="MyCompany\\MyApplication1"
"OnStartMenu"="True"
"TimeStamp"=dword:0c7e59de
Run Code Online (Sandbox Code Playgroud)
然后我使用以下命令安装它们:
%windir%\ehome\registermceapp.exe dummy.xml
regedit.exe /s dummy.reg
Run Code Online (Sandbox Code Playgroud)
当我运行Windows Media Center时,我可以看到条带和磁贴 - 但是当我选择磁贴时,我收到一条错误消息:
![[tile name]程序已停止响应,您将返回到Windows Media Center.](https://i.stack.imgur.com/JnoUT.jpg)
根据此页面,entrypoint元素具有以下属性run:
一个字符串,指定本地计算机上可执行文件的完整路径或相对路径.
我需要做什么不同的XML文件和注册表项notepad.exe才能运行,而不是显示错误消息?
我正在使用以下代码片段来确定我的vbscript正在运行的进程ID:
On Error Resume Next
Dim iMyPID : iMyPID = GetObject("winmgmts:root\cimv2").Get("Win32_Process.Handle='" & CreateObject("WScript.Shell").Exec("mshta.exe").ProcessID & "'").ParentProcessId
If Err.Number <> 0 Then Call Handle_Error(Err.Description)
On Error Goto 0
Run Code Online (Sandbox Code Playgroud)
在我的Windows 7(32位)计算机上,大约90%的时间都可以运行,并且iMyPID包含当前运行脚本的进程ID.但是,有10%的时间Handle_Error会被错误消息" SWbemServicesEX:Not found " 调用.
最近运行Windows 7(64位)的其他人报告Handle_Error总是被错误消息" Out of memory " 调用.这似乎是一个疯狂的错误消息,只是为了找到你自己的进程ID!
任何人都可以推荐更好的方法吗?
我想在Outlook启动后立即运行VBA功能.这是可能的,如果是这样,我需要做什么?我在Google上的搜索失败了.
我不介意会弹出安全警报.
我正在尝试编写一个独立的perl应用程序,列出存储在Google Tasks中的所有任务.我被引导相信我可以使用谷歌所谓的"简单API访问",因为它只是我的任务而且它是只读的.
所以我做了以下事情:
#!perl
use LWP;
my $browser = LWP::UserAgent->new;
my $list = "Iyrhxu8sRTVOhE4hUBr4W1kwNTI6MDow";
my $key = "<api key removed>";
my $url = "https://www.googleapis.com/tasks/v1/lists/$list/tasks?pp=1&key=$key";
print $browser->get($url)->content;
Run Code Online (Sandbox Code Playgroud)
作为回报,我得到:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "required",
"message": "Login Required",
"locationType": "header",
"location": "Authorization"
}
],
"code": 401,
"message": "Login Required"
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我不知道它目前需要什么授权.我尝试用以下代码替换最后一行:
my $auth = "...";
print $browser->get($url, "Authorization", $auth)->content;
Run Code Online (Sandbox Code Playgroud)
并使用API控制台中列出的Google列出的客户端ID,电子邮件地址和客户端密码 - 但他们都给了Invalid Credentials.
有人可以帮忙吗?
我正在尝试调试一些VBScript,通常我会安装古老的(但是免费的)Microsoft Script Debugger,它可以在32位XP和32位Windows 7上正常工作.
但是,在64位Windows 7上安装它之后,//d或者//x(或者甚至两者)都不再实际调用调试器.该脚本将很乐意运行,就像我从未提供过该选项一样 - 但这不是很有用.
有什么办法可以让它运作起来吗?我只是偶尔使用它来刮擦我自己的痒,所以我无法证明购买一些商业工具作为替代品.
我正在编写一些Perl,它可以在Windows Media Center上录制电视节目,并根据特定条件移动/重命名/删除它们.
由于Perl运行相当频繁,我想清楚地确定文件是否正在使用(换句话说,节目正在被录制过程中),所以我可以避免对它做任何事情.
我当前的方法查看文件的状态(使用"stat")并在5秒后再次比较它,如下所示:
sub file_in_use
{
my $file = shift;
my @before = stat($file);
sleep 5;
my @after = stat($file);
return 0 if ($before ~~ $after);
return 1;
}
Run Code Online (Sandbox Code Playgroud)
它似乎有效,但我很有意思,可能有更好,更清洁的方法来做到这一点.
你能给些建议么?
我写了一些Outlook VBA,需要用户选择一个邮件文件夹(来自他们的邮箱或外部PST).
目前,他们必须直接在代码中编辑路径 - 这不是远程用户友好或高效的.
有谁知道如何让对话框出现,允许用户浏览所有可用的文件夹和子文件夹,然后选择一个?
奖励积分如果它可以仅限于邮件文件夹,但它不是必需的.
是否有任何可用于 VB.net 的库使我能够轻松访问 MTP 设备?我希望能够找出连接了哪些设备,列出它们的内容并将文件复制到它们或从它们复制文件。
到目前为止,我看到的所有内容(在 Stack Overflow、Microsoft 网站上或通过简单的 Google 搜索)都是使用 C++、C# 或其他非 VB.net 语言编写的。Microsoft 文档完全超出了我的理解。
结果,除非我打算学习一门新语言,否则一切都不是入门。
我确实找到了MTPSharp,这给了我希望。但是没有文档,它似乎没有完全实现,我尝试做某些事情会返回一个异常,作者告诉我它是针对我不应该使用的旧 API 编写的,并且无法帮助我解决我有问题。
想要使用VB.net的人真的没有希望吗?