Tag: wmi

Windows更新后,VBA GetObject winmgmts不起作用

我一直在使用Excel VBA从事件日志中获取桌面login,注销时间。 该程序运行良好,直到上周Windows更新。 debugging完成后,我发现GetObject函数不起作用。 Sub get_log_time() On Error GoTo ErrorHandler 'strComputer = ComputerName strComputer = "." Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colLoggedEvents = objWMIService.ExecQuery("Select * from Win32_NTLogEvent Where Logfile = 'System' and (EventCode = '7001' or EventCode = '7002')") ErrorHandler: If Err.Number <> 0 Then Msg = "Error # " & […]

检索excel.ActivePrinter的端口名称

嗨打印方法在Excel上工作我需要像这样的printername和端口名称:“打印机上NE3”只是一个例子。 问题是,我使用虚拟打印机和端口是不同的,几乎每次我需要使用它。 该程序需要在后台运行,所以打开的对话框select不是一个选项。 我也尝试从WMI中检索端口名称: protected string FindPrinterWithPort(string printerName) { StringBuilder query = new StringBuilder(); query.Append("SELECT * FROM Win32_Printer "); query.Append("WHERE DeviceID = \""+printerName+"\""); ObjectQuery objectQuery = new ObjectQuery(query.ToString()); var searcher = new ManagementObjectSearcher(objectQuery); foreach (ManagementObject mo in searcher.Get()) { return printerName +" On "+ mo["PortName"]; } return string.Empty; } 我收到的端口名为我提供了虚拟打印机程序的完整path。 我以前使用下面的方法来改变打印机的excel,而且我总是知道它们应该最终被改变,代码既不快也不好,但它工作了一段时间,直到我做了multithreading,它只是一个大封锁。 因为我需要locking这些方法不要更改Windows中的默认打印机。 private bool SetPrinterForExcel(string […]

在Windows上通过ruby处理2个或更多的Windows程序实例

好的,那么。 谢谢您阅读此篇。 我很容易处理例如Excel中的多个实例,只需定义两个variables: require 'win32ole' excel1 = WIN32OLE.new('Excel.Application') excel2 = WIN32OLE.new('Excel.Application') …魔术发生aaaaand它工作得很好。 (Excel可能默认支持多个实例) 让我们移动其他的例子。 (几个小时的谷歌search后)我find了一种方式如何运行两个不支持它的程序单独的实例(至lessruby不工作,因为它是与Excel的工作)通过创build* .bat文件(或键入它在cmdline中): start "BrioQry" "C:\Program Files (x86)\Brio\Brio8\Client\Program\brioqry.exe" "C:\samefiletoload.bqy" /e %1 start "BrioQry" "C:\Program Files (x86)\Brio\Brio8\Client\Program\brioqry.exe" "C:\samefiletoload.bqy" /e %2 我不知道/ e和%1和%2在做什么(%可能是参数),但它工作得很好。 是的,这些文件是相同的。 我可以通过winmgmts获得关于这个进程的一些信息 require 'win32ole' mywmi = WIN32OLE.connect("winmgmts:\\\\.") 所以,我的问题是: 1)如果可以通过向WIN32OLE.run()添加某种参数来运行单独的实例(不支持它的程序) 2)如果可以通过WIN32OLE.connect方法连接到已经运行的进程(通过cmdline启动) 3)如果我不想通过尝试来实现这一点, 4)如果有其他的方式来做这个ruby或python (是的,我想然后使用该应用程序) 谢谢!!!

使用WMI在VBA中获取当前的Windows用户名

我想知道是否有一个简单的方法来使用WMI来获取当前的Windows用户名和域名。 Windows API调用只是简单的用户名,所以你最终会再次调用域名。 我有一些代码,但我得到一个自动化错误。 有任何想法吗? 我认为我走在正确的道路上,但是我对WMI有点新鲜。 函数GetFullName()作为string 昏暗的电脑作为string 电脑=“。” Dim objWMIService,colProcessList As Object 设置objWMIService = GetObject(“winmgmts:\\”&computer&“\ root \ cimv2”) 设置colProcessList = objWMIService.ExecQuery _ (“selectTOP 1 *从Win32_Process WHERE名称='EXCEL.EXE'”) Dim uname,udomain As String Dim objProcess As Object 对于每个objProcess在colProcessList中 objProcess.GetOwner uname,udomain 下一个 GetFullName = UCase(udomain)&“\”&UCase(uname) 结束function 更新:请参阅接受的答案

Python不支持的操作数types为+:'float'和'str

我正在编写一个简短的脚本,用于获取有关主机的一些信息,并将其写入Excel工作簿。 我还在学习东西,所以没什么特别的。 我得到所有我需要的数据,并可以写入大部分内容。 我似乎无法得到一件事情,虽然。 当尝试下面的代码: hardwareSheet.write("B7", usage + "%") 我只能打印出“使用”variables,但是当我添加+“%”时,我不断收到以下错误: TypeError: unsupported operand type(s) for +: 'float' and 'str' 我正在使用xlsxwriter库来创build和编写excel。 hardwareSheet.write是一个命令,允许我将数据写入名为硬件的工作表中。 以下是我如何得到“使用”variables: cpuInfo = wmi.Win32_Processor()[0] usage = float(cpuInfo.LoadPercentage) 如果我没有parsingcpuInfo.LoadPercentage到一个浮点数,它将是一个string。 我GOOGLE了这一点,并认为我需要parsing成浮动,所以我这样做。任何想法可能是错误的?