App 类
App类包装运行中应用程序的标识和版本元数据,以及少量进程级状态(模块句柄、主线程ID、进程是否在twinBASIC IDE内运行或具有提升权限等)。它是单例——每个进程恰好有一个App实例,由运行时拥有,通过Global对象的全局App属性公开。代码无需限定即可访问:
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资源中。少数读/写属性——Title和HelpFile——允许代码更改少量运行时状态,运行时的其他部分(特别是窗体标题默认值和F1帮助分派器)会查询这些状态。
单例和访问
App不可创建:没有New App,也没有可实例化的公共coclass。运行时通过Global应用对象上的App属性公开此单例,该对象本身无需限定即可访问。App返回的引用在进程生命周期内被缓存且稳定。
文件和模块位置
Path和ModulePath描述可执行文件所在位置:
- Path返回包含EXE的文件夹,无尾部反斜杠(例如
"C:\Program Files\MyApp")。 - ModulePath返回EXE本身的完整路径(例如
"C:\Program Files\MyApp\MyApp.exe")。 - EXEName返回EXE的不含扩展名的基本名称(例如
"MyApp")。
当项目在twinBASIC IDE中运行时——App.IsInIDE为True——Path是项目文件的文件夹而非已编译EXE的文件夹,因此它仍然可用作"应用程序所在位置"的锚点,用于在设计时打开相对路径的资源。
LastBuildPath是twinBASIC特有的扩展,记录最近IDE构建写入EXE的路径——对于需要在IDE构建后链接步骤的构建脚本很有用。
版本元数据
版本信息属性直接从EXE的VERSIONINFO资源读取:
- Major、Minor、Revision和Build——项目Make选项卡中设置的四部分版本号的四个组成部分。
- Comments、CompanyName、FileDescription、LegalCopyright、LegalTrademarks和ProductName——同一资源的标准文本字段。
- Title——在任务列表和消息框默认值中显示的友好应用程序标题;可读可写。
hInstance和ThreadID公开底层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,否则为False。Boolean,只读。
IsInIDE
如果运行中的进程是twinBASIC IDE宿主而非独立编译的可执行文件则为True。Boolean,只读。用于仅在设计时运行的代码路径,或应在发布版本中抑制的诊断日志。
LastBuildPath
IDE写入最近构建的完整路径。String,只读。当IDE在当前会话中尚未生成构建时为空。twinBASIC特有——VB6没有对应功能。
LegalCopyright
应用程序VERSIONINFO资源的LegalCopyright字段。String,只读。
LegalTrademarks
应用程序VERSIONINFO资源的LegalTrademarks字段。String,只读。
LogMode
当前日志记录模式,作为LogModeConstants的成员。只读。
INFO
twinBASIC目前仅报告vbLogOff和vbLogAuto,区分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,否则为False。Boolean,只读。通常在启动时测试,以便第二个实例可以将第一个带到前台或优雅退出。
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
向操作系统显示的应用程序标题(在任务列表中)以及MsgBox、InputBox和其他系统对话框的默认标题。String,可读可写。默认为可执行文件的FileDescription(如果未设置描述则为EXEName)。
UnattendedApp
INFO
保留用于VB6兼容性;twinBASIC中目前未实现。
方法
LogEvent
INFO
保留用于VB6兼容性;twinBASIC中目前未实现。
语法:object.LogEvent LogBuffer, EventType
StartLogging
INFO
保留用于VB6兼容性;twinBASIC中目前未实现。
语法:object.StartLogging LogTarget, LogModes