Skip to content

App 类

App类包装运行中应用程序的标识和版本元数据,以及少量进程级状态(模块句柄、主线程ID、进程是否在twinBASIC IDE内运行或具有提升权限等)。它是单例——每个进程恰好有一个App实例,由运行时拥有,通过Global对象的全局App属性公开。代码无需限定即可访问:

vb
Debug.Print "Running from " & App.Path
Debug.Print "Version " & App.Major & "." & App.Minor & "." & App.Revision & "." & App.Build

If App.PrevInstance Then
    MsgBox "Another instance is already running.", vbExclamation
    End
End If

App.HelpFile = App.Path & "\help.chm"

大多数属性为只读,在构建时从项目设置填充到可执行文件的Win32 VERSIONINFO资源中。少数读/写属性——TitleHelpFile——允许代码更改少量运行时状态,运行时的其他部分(特别是窗体标题默认值和F1帮助分派器)会查询这些状态。

单例和访问

App不可创建:没有New App,也没有可实例化的公共coclass。运行时通过Global应用对象上的App属性公开此单例,该对象本身无需限定即可访问。App返回的引用在进程生命周期内被缓存且稳定。

文件和模块位置

PathModulePath描述可执行文件所在位置:

  • Path返回包含EXE的文件夹,无尾部反斜杠(例如"C:\Program Files\MyApp")。
  • ModulePath返回EXE本身的完整路径(例如"C:\Program Files\MyApp\MyApp.exe")。
  • EXEName返回EXE的不含扩展名的基本名称(例如"MyApp")。

当项目在twinBASIC IDE中运行时——App.IsInIDETrue——Path项目文件的文件夹而非已编译EXE的文件夹,因此它仍然可用作"应用程序所在位置"的锚点,用于在设计时打开相对路径的资源。

LastBuildPath是twinBASIC特有的扩展,记录最近IDE构建写入EXE的路径——对于需要在IDE构建后链接步骤的构建脚本很有用。

版本元数据

版本信息属性直接从EXE的VERSIONINFO资源读取:

hInstanceThreadID公开底层Win32模块句柄和应用程序主线程的ID——对于需要它们之一的Windows API函数互操作很有用。

属性

Build

应用程序四部分版本号的Build组件,在项目Make选项卡中设置。Integer,只读。

Comments

应用程序VERSIONINFO资源的自由格式Comments字段。String,只读。

CompanyName

应用程序VERSIONINFO资源的CompanyName字段。String,只读。

EXEName

可执行文件的基本名称——文件名减去其.exe扩展名和任何目录部分。String,只读。在IDE内运行时,这是项目的编译时输出名称而非IDE宿主的名称。

FileDescription

应用程序VERSIONINFO资源的FileDescription字段。String,只读。

HelpFile

应用程序帮助文件(.hlp.chm)的完整路径。String,可读可写。当控件的HelpContextID非零且用户按下F1时,以及应用程序代码调用带帮助文件参数的MsgBox时,运行时查询此属性。

hInstance

可执行文件的Win32模块句柄(HINSTANCE)。LongPtr,只读。在调用代表应用程序加载资源或创建窗口的Windows API函数时很有用。

IsElevated

如果进程以管理员权限("以管理员身份运行"提升令牌)运行则为True,否则为FalseBoolean,只读。

IsInIDE

如果运行中的进程是twinBASIC IDE宿主而非独立编译的可执行文件则为TrueBoolean,只读。用于仅在设计时运行的代码路径,或应在发布版本中抑制的诊断日志。

LastBuildPath

IDE写入最近构建的完整路径。String,只读。当IDE在当前会话中尚未生成构建时为空。twinBASIC特有——VB6没有对应功能。

LegalCopyright

应用程序VERSIONINFO资源的LegalCopyright字段。String,只读。

LegalTrademarks

应用程序VERSIONINFO资源的LegalTrademarks字段。String,只读。

LogMode

当前日志记录模式,作为LogModeConstants的成员。只读。

INFO

twinBASIC目前仅报告vbLogOffvbLogAuto,区分IDE检测情况。其他VB6日志记录模式(文件、NT事件日志)尚未支持。

LogPath

INFO

保留用于VB6兼容性;twinBASIC中目前未实现。

Major

应用程序四部分版本号的Major组件。Integer,只读。

Minor

应用程序四部分版本号的Minor组件。Integer,只读。

ModulePath

可执行文件的完整路径。String,只读。这是GetModuleFileName(App.hInstance, …)会返回的值。

NonModalAllowed

INFO

保留用于VB6兼容性;twinBASIC中目前未实现。

OleRequestPendingMsgText

INFO

保留用于VB6兼容性;twinBASIC中目前未实现。

OleRequestPendingMsgTitle

INFO

保留用于VB6兼容性;twinBASIC中目前未实现。

OleRequestPendingTimeout

INFO

保留用于VB6兼容性;twinBASIC中目前未实现。

OleServerBusyMsgText

INFO

保留用于VB6兼容性;twinBASIC中目前未实现。

OleServerBusyMsgTitle

INFO

保留用于VB6兼容性;twinBASIC中目前未实现。

OleServerBusyRaiseError

INFO

保留用于VB6兼容性;twinBASIC中目前未实现。

OleServerBusyTimeout

INFO

保留用于VB6兼容性;twinBASIC中目前未实现。

Path

包含可执行文件的文件夹,无尾部反斜杠。String,只读。在IDE内运行时,这是包含项目文件的文件夹而非IDE宿主的文件夹,因此相对于应用程序位置打开文件的代码在设计时和运行时行为一致。

PrevInstance

如果应用程序的另一个实例已在运行则为True,否则为FalseBoolean,只读。通常在启动时测试,以便第二个实例可以将第一个带到前台或优雅退出。

ProductName

应用程序VERSIONINFO资源的ProductName字段。String,只读。

RetainedProject

INFO

保留用于VB6兼容性;twinBASIC中目前未实现。

Revision

应用程序四部分版本号的Revision组件。Integer,只读。

StartMode

INFO

保留用于VB6兼容性;twinBASIC中目前未实现。

TaskVisible

INFO

保留用于VB6兼容性;twinBASIC中目前未实现。

ThreadID

应用程序主(UI)线程的Win32线程ID。Long,只读。

Title

向操作系统显示的应用程序标题(在任务列表中)以及MsgBoxInputBox和其他系统对话框的默认标题。String,可读可写。默认为可执行文件的FileDescription(如果未设置描述则为EXEName)。

UnattendedApp

INFO

保留用于VB6兼容性;twinBASIC中目前未实现。

方法

LogEvent

INFO

保留用于VB6兼容性;twinBASIC中目前未实现。

语法:object.LogEvent LogBuffer, EventType

StartLogging

INFO

保留用于VB6兼容性;twinBASIC中目前未实现。

语法:object.StartLogging LogTarget, LogModes

twinBASIC及其LOGO版权为作者"韦恩"所有