最近ABとCを併用することが多いのですがそのときに無性にWinMainが欲しくなる(コマンドラインとかnCmdShowとか)ので作りました.
留意点はPathGetArgsが何故か先頭にスペースがあるのにそのままにする場合があるのでWhileで進ませています.
あと最初にSysWinMainと書かなくては動かないのが個人的に不満です.
参考元: http://hp.vector.co.jp/authors/VA016117/tinyexe.html
ABでもC++のUnicodeとかみたくStringとBytePtrの切り替えができたらいいのにな…と思ったり
(AB4.23で動作確認)
コード: 全て選択
Declare Function PathGetArgs Lib "shlwapi" Alias "PathGetArgsA" (ByVal p As BytePtr) As BytePtr
SysWinMain()
Function WinMain(ByVal hInstance As HINSTANCE, ByVal Reserved As HINSTANCE, ByVal sCmdLine As String, ByVal nCmdShow As Long) As DWord
MessageBox(0, StrPtr(sCmdLine), "WinMain test", MB_OK)
WinMain = 0
End Function
Sub SysWinMain()
Dim szCmdLine As BytePtr
szCmdLine = PathGetArgs(GetCommandLine())
While GetByte(szCmdLine) = &H20 '&H20=半角スペース
szCmdLine++
WEnd
Dim sinfo As STARTUPINFO
sinfo.dwFlags = 0
GetStartupInfo(sinfo)
If Not(sinfo.dwFlags and STARTF_USESHOWWINDOW) Then sinfo.dwFlags = SW_SHOWDEFAULT
Dim ret As DWord
ret = WinMain(GetModuleHandle(0), 0, MakeStr(szCmdLine), sinfo.dwFlags)
If ret = 0 Then End
ExitProcess(ret)
End Sub