我是一名开发人员,正在努力维护一个非常需要在Vista下运行的VB6应用程序.但是,它必须在Vista Starter Edition下正常工作,因为这里是新版本的计算机(阿根廷).
现在,关于技术的东西:我的应用程序使用ImageMagick的转换来处理图像(调整大小,黑白分割,旋转等),所以三个应用程序限制是......在某个地方真正的痛苦.最糟糕的是:运行转换失败不是(当前?)检测到的,所以当这种情况发生时,程序会挂起.
任何人都可以告诉我如何:
a_检测打开的应用程序的数量,以便在重试之前我可以要求用户关闭某些内容?可能是API调用?要么
b_检测到转换(当前使用"Shell"功能运行)未正确启动?
请注意,"你应该将你的应用程序迁移到x"这样的评论应该发送给我的老板(不是我),不欢迎,并且会让我去你的地方并咬你的脚趾.但是我需要一些时间来获得签证,但我向你保证,有一天,一个陌生人会敲你的门,问你的StackOverflow用户名然后他会咬你的脚趾.
谢谢你的考虑
您是否尝试过检查 Shell 函数的返回值?文档说如果 shell 失败它应该返回零。
马丁在评论中说:我尝试过,但每次我检查返回值时,都是一些大于零的奇怪数字。
再次MarkJ:返回值应该是进程ID。可以进行 API 调用来检查它们是否是有效的进程 ID。你可以尝试这样的事情:这总是为我显示“成功”MsgBox,因为我没有 Vista Starter Edition :)
Private Declare Function OpenProcess Lib "kernel32" ( _
ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" ( _
ByVal hObject As Long) As Long
Sub StartProcess()
Dim ProcessId&
Dim hProcess&
Const PROCESS_QUERY_INFORMATION = &H400&
ProcessId = Shell("notepad.exe", vbNormalFocus)
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessId)
If hProcess = 0& Then
MsgBox "Failed"
Else
MsgBox "Succeeded"
CloseHandle hProcess
End If
End Sub
Run Code Online (Sandbox Code Playgroud)