检测Vista Starter三开app限制

Mar*_*tin 9 vb6 windows-vista

我是一名开发人员,正在努力维护一个非常需要在Vista下运行的VB6应用程序.但是,它必须在Vista Starter Edition下正常工作,因为这里是新版本的计算机(阿根廷).

现在,关于技术的东西:我的应用程序使用ImageMagick的转换来处理图像(调整大小,黑白分割,旋转等),所以三个应用程序限制是......在某个地方真正的痛苦.最糟糕的是:运行转换失败不是(当前?)检测到的,所以当这种情况发生时,程序会挂起.

任何人都可以告诉我如何:

a_检测打开的应用程序的数量,以便在重试之前我可以要求用户关闭某些内容?可能是API调用?要么

b_检测到转换(当前使用"Shell"功能运行)未正确启动?

请注意,"你应该将你的应用程序迁移到x"这样的评论应该发送给我的老板(不是我),不欢迎,并且会让我去你的地方并咬你的脚趾.但是我需要一些时间来获得签证,但我向你保证,有一天,一个陌生人会敲你的门,问你的StackOverflow用户名然后他会咬你的脚趾.

谢谢你的考虑

Mar*_*rkJ 0

您是否尝试过检查 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)