Announcement

Collapse

Forum Guidelines

This forum is for finished source code that is working properly. If you have questions about this or any other source code, please post it in one of the Discussion Forums, not here.
See more
See less

PBWIN7.0/PBCC3.0: Creating Lnk and PIF

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • PBWIN7.0/PBCC3.0: Creating Lnk and PIF

    PIF are useful for 9x only.
    If you want to start 'correctly' PB/CC module under NT/2k/XP, create LNK and prepare a special section in registry (there are samples on BBS, so I don't post similar code here).

    Test sample (PBWIN) for LNK and PIF (use own settings !)
    Code:
       #Compile Exe
       #Dim All
       #Register None
       #Include "Win32Api.Inc"
       #Include "Lnk.Inc"
       #Include "Pif.Inc"
    
       '========================= SpecialFolder ========================
       %CSIDL_TASKBAR = &H1000
    
       Function SpecialFolder (ByVal CSIDL As Dword, Optional ByVal DontAddBackSplash As Dword) As String
          Local TmpAsciiz As Asciiz * %MAX_PATH
          Local ValueType As Dword
          Local hKey As Dword
          Local ValueName As Asciiz * 16
    
          If CSIDL = %CSIDL_WINDOWS Then
             If GetWindowsDirectory (TmpAsciiz, SizeOf(TmpAsciiz)) Then Function = TmpAsciiz
          ElseIf CSIDL = %CSIDL_SYSTEM Then
             If GetSystemDirectory (TmpAsciiz, SizeOf(TmpAsciiz)) Then Function = TmpAsciiz
          Else
             If CSIDL = %CSIDL_PROGRAM_FILES Then
                If RegOpenKeyEx(%HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion", ByVal 0&, %KEY_READ, hKey) = %ERROR_SUCCESS Then _
                   ValueName = "ProgramFilesDir"
             ElseIf RegOpenKeyEx(%HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders", ByVal 0&, %KEY_READ, hKey) = %ERROR_SUCCESS Then
                Select Case As Long CSIDL
                  Case %CSIDL_STARTUP   : ValueName = "StartUp"
                  Case %CSIDL_DESKTOP   : ValueName = "Desktop"
                  Case %CSIDL_PROGRAMS  : ValueName = "Programs"
                  Case %CSIDL_PERSONAL  : ValueName = "Personal"
                  Case %CSIDL_MYPICTURES: ValueName = "My Pictures"
                  Case %CSIDL_STARTMENU : ValueName = "Start Menu"
                  Case %CSIDL_FAVORITES : ValueName = "Favorites"
                  Case %CSIDL_APPDATA, %CSIDL_TASKBAR : ValueName = "AppData"
                End Select
             End If
             If ValueName = "" Then
             ElseIf RegQueryValueEx (hKey, ValueName, ByVal 0&, ValueType, TmpAsciiz, SizeOf(TmpAsciiz)) <> %ERROR_SUCCESS Then
             ElseIf ValueType = %REG_SZ Then
                If CSIDL = %CSIDL_TASKBAR Then
                   If Right$(TmpAsciiz, 1) <> "\" Then TmpAsciiz = TmpAsciiz + "\"
                   TmpAsciiz = TmpAsciiz + "Microsoft\Internet Explorer\Quick Launch"
                End If
                If DontAddBackSplash = 0 Then If Right$(TmpAsciiz, 1) <> "\" Then TmpAsciiz = TmpAsciiz + "\"
                Function = TmpAsciiz
             End If
             If hKey Then RegCloseKey hKey
          End If
       End Function
    
    
       '================ Change me ====================================
       $LnkTitle = "PB 7.0 shortcut"
       $LnkExePath = "D:\Ltr.00\Bas32\Ltr32.Exe"
       $LnkCmdLine = "My Arguments"
       $LnkWorkDir = "D:\Ltr.02\Release\Bas32"
       $LnkIconPath = "E:\Windows\Explorer.Exe"
       %LnkIconIdx = 3
       %LnkShowCmd = %SW_MAXIMIZE
       $LnkComment = "My comment"
    
       $PIFTitle1 = "PB 7.0 PIF (Var.1)"
       $PIFTitle2 = "PB 7.0 PIF (Var.2)"
       $PIFExePath = "C:\Ltr\Ltr.02J\Ltr.Exe"
       $PIFCmdLine = "My Arguments"
       $PIFWorkDir = "C:\Ltr\Ltr.02J"
       $PIFIconPath = "E:\Windows\Explorer.Exe"
       %PIFIconIdx = 3
       $PIFWindowTitle = "My PB/CC program"
       %PIFFullscreen1 = 0 ' in window
       %PIFFullscreen2 = 1 ' full screen
       %PIFFontType1   = 0 ' bitmap
       %PIFFontType2   = 1 ' truetype
       %PIFFntWidth = 10
       %PIFFntHeight = 18
    
       Function PbMain
          CoInitialize ByVal 0
    
          If CreateLink (SpecialFolder(%CSIDL_DESKTOP)  + $LnkTitle + ".Lnk", $LnkExePath, $LnkCmdLine, $LnkWorkDir, _
             $LnkIconPath, %LnkIconIdx, %LnkShowCmd, $LnkComment) = 0 Then MsgBox "Error 1"
          If CreateLink (SpecialFolder(%CSIDL_PROGRAMS) + $LnkTitle + ".Lnk", $LnkExePath, $LnkCmdLine, $LnkWorkDir, _
             $LnkIconPath, %LnkIconIdx, %LnkShowCmd, $LnkComment) = 0 Then MsgBox "Error 2"
          If CreateLink (SpecialFolder(%CSIDL_TASKBAR)  + $LnkTitle + ".Lnk", $LnkExePath, $LnkCmdLine, $LnkWorkDir, _
             $LnkIconPath, %LnkIconIdx, %LnkShowCmd, $LnkComment) = 0 Then MsgBox "Error 3"
    
          If CreatePIF  (SpecialFolder(%CSIDL_DESKTOP)  + $PIFTitle1 + ".PIF", $PIFExePath, $PIFCmdLine, $PIFWorkDir, _
             $PIFIconPath, %PIFIconIdx, $PIFWindowTitle, %PIFFullScreen1, %PIFFontType1, %PIFFntWidth, %PIFFntHeight) = 0  Then MsgBox "Error 4"
          If CreatePIF  (SpecialFolder(%CSIDL_DESKTOP)  + $PIFTitle2 + ".PIF", $PIFExePath, $PIFCmdLine, $PIFWorkDir, _
             $PIFIconPath, %PIFIconIdx, $PIFWindowTitle, %PIFFullScreen2, %PIFFontType2, %PIFFntWidth, %PIFFntHeight) = 0  Then MsgBox "Error 5"
    
          SHChangeNotify %SHCNE_ALLEVENTS, %SHCNF_FLUSH, ByVal 0, ByVal 0
    
          CoUninitialize
          MsgBox "Done"
       End Function



    ------------------

  • #2
    Lnk.Inc
    Code:
       '===============================================================
       ' CreateLink - uses the Shell's IShellLink and IPersistFile interfaces to create
       '              and store a shortcut to the specified object.
       '              Based on SDK and Florent Heyworth's PB code
       '==============================================================================
    
       '  Offsets in IShellLinkAVtbl
       '
       '  0  HRESULT ( STDMETHODCALLTYPE *QueryInterface )( IShellLinkA * This,  /* [in] */ REFIID riid,  /* [iid_is][out] */ void **ppvObject);
       '  4  ULONG   ( STDMETHODCALLTYPE *AddRef )(IShellLinkA * This);
       '  8  ULONG   ( STDMETHODCALLTYPE *Release )(IShellLinkA * This);
       ' 12  HRESULT ( STDMETHODCALLTYPE *GetPath )(IShellLinkA * This, /* [size_is][out] */ LPSTR pszFile, /* [in] */ int cch,  /* [full][out][in] */ WIN32_FIND_DATAA *pfd, /* [in] */ DWORD fFlags);
       ' 16  HRESULT ( STDMETHODCALLTYPE *GetIDList )(IShellLinkA * This,  /* [out] */ LPITEMIDLIST *ppidl);
       ' 20  HRESULT ( STDMETHODCALLTYPE *SetIDList )(IShellLinkA * This,  /* [in] */ LPCITEMIDLIST pidl);
       ' 24  HRESULT ( STDMETHODCALLTYPE *GetDescription )(IShellLinkA * This, /* [size_is][out] */ LPSTR pszName, /* [in] */ int cch);
       ' 28  HRESULT ( STDMETHODCALLTYPE *SetDescription )(IShellLinkA * This, /* [in] */ LPCSTR pszName);
       ' 32  HRESULT ( STDMETHODCALLTYPE *GetWorkingDirectory )(IShellLinkA * This, /* [size_is][out] */ LPSTR pszDir, /* [in] */ int cch);
       ' 36  HRESULT ( STDMETHODCALLTYPE *SetWorkingDirectory )(IShellLinkA * This, /* [in] */ LPCSTR pszDir);
       ' 40  HRESULT ( STDMETHODCALLTYPE *GetArguments )(IShellLinkA * This, /* [size_is][out] */ LPSTR pszArgs, /* [in] */ int cch);
       ' 44  HRESULT ( STDMETHODCALLTYPE *SetArguments )(IShellLinkA * This, /* [in] */ LPCSTR pszArgs);
       ' 48  HRESULT ( STDMETHODCALLTYPE *GetHotkey )(IShellLinkA * This, /* [out] */ WORD *pwHotkey);
       ' 52  HRESULT ( STDMETHODCALLTYPE *SetHotkey )(IShellLinkA * This, /* [in] */ WORD wHotkey);
       ' 56  HRESULT ( STDMETHODCALLTYPE *GetShowCmd )(IShellLinkA * This,  /* [out] */ int *piShowCmd);
       ' 60  HRESULT ( STDMETHODCALLTYPE *SetShowCmd )(IShellLinkA * This,  /* [in] */ int iShowCmd);
       ' 64  HRESULT ( STDMETHODCALLTYPE *GetIconLocation )(IShellLinkA * This, /* [size_is][out] */ LPSTR pszIconPath, /* [in] */ int cch, /* [out] */ int *piIcon);
       ' 68  HRESULT ( STDMETHODCALLTYPE *SetIconLocation )(IShellLinkA * This, /* [in] */ LPCSTR pszIconPath, /* [in] */ int iIcon);
       ' 72  HRESULT ( STDMETHODCALLTYPE *SetRelativePath )(IShellLinkA * This, /* [in] */ LPCSTR pszPathRel, /* [in] */ DWORD dwReserved);
       ' 76  HRESULT ( STDMETHODCALLTYPE *Resolve )(IShellLinkA * This, /* [in] */ HWND hwnd, /* [in] */ DWORD fFlags);
       ' 80  HRESULT ( STDMETHODCALLTYPE *SetPath )(IShellLinkA * This, /* [in] */ LPCSTR pszFile);
    
    
       '  Offsets in IPersistFileVtbl
       '
       '  0 HRESULT ( STDMETHODCALLTYPE *QueryInterface )(IPersistFile * This, /* [in] */ REFIID riid, /* [iid_is][out] */ void **ppvObject);
       '  4 ULONG   ( STDMETHODCALLTYPE *AddRef )(IPersistFile * This);
       '  8 ULONG   ( STDMETHODCALLTYPE *Release )(IPersistFile * This);
       ' 12 HRESULT ( STDMETHODCALLTYPE *GetClassID )(IPersistFile * This, /* [out] */ CLSID *pClassID);
       ' 16 HRESULT ( STDMETHODCALLTYPE *IsDirty )(IPersistFile * This);
       ' 20 HRESULT ( STDMETHODCALLTYPE *Load )(IPersistFile * This, /* [in] */ LPCOLESTR pszFileName, /* [in] */ DWORD dwMode);
       ' 24 HRESULT ( STDMETHODCALLTYPE *Save )(IPersistFile * This, /* [unique][in] */ LPCOLESTR pszFileName, /* [in] */ BOOL fRemember);
       ' 28 HRESULT ( STDMETHODCALLTYPE *SaveCompleted )(IPersistFile * This, /* [unique][in] */ LPCOLESTR pszFileName);
       ' 32 HRESULT ( STDMETHODCALLTYPE *GetCurFile )(IPersistFile * This, /* [out] */ LPOLESTR *ppszFileName);
    
       Declare Function CoCreateInstance Lib "ole32.dll" Alias "CoCreateInstance" _
          (rclsid As Guid, ByVal pUnkOuter As Dword, ByVal dwClsContext As Dword, riid As Guid, ppv As Dword) As Dword
       Declare Function VTbl (ByVal p1 As Dword, Optional ByVal p2 As Dword, ByVal p3 As Dword) As Dword
    
       %CLSCTX_INPROC_SERVER = 1
    
       Function CreateLink (szLnkPath As String, szExePath As String, szCmdLine As String, szWorkDir As String, _
          szIconPath As String, ByVal iIcon As Dword, _
          ByVal ShowCmd As Dword, Comment As String) As Dword
    
          Dim TmpWide   As Local String
          Dim psl       As Local Dword Ptr                ' Pointer to IShellLink interface
          Dim ppf       As Local Dword Ptr                ' Pointer to IPersistFile interface
          Dim pp        As Local Dword Ptr                ' Pointer to function address (inside VTbl)
          Dim pidl      As Local Dword
          Dim lResult   As Local Dword
    
    
          Dim CLSID_ShellLink As Local Guid, IID_IShellLink As Local Guid, IID_Persist As Local Guid
          CLSID_ShellLink = Guid$("{00021401-0000-0000-C000-000000000046}")
          IID_IShellLink  = Guid$("{000214EE-0000-0000-C000-000000000046}")
          IID_Persist     = Guid$("{0000010B-0000-0000-C000-000000000046}")
    
          ' Get a pointer to the IShellLink interface
          If IsFalse(CoCreateInstance (CLSID_ShellLink, %Null, %CLSCTX_INPROC_SERVER, IID_IShellLink, psl)) Then
    
             ' Set the path to the shortcut target and fill some other fields
             pp = @psl + 80: Call Dword @pp Using VTbl (psl, StrPtr(szExePath))       ' psl->SetPath
             pp = @psl + 44: Call Dword @pp Using VTbl (psl, StrPtr(szCmdLine))       ' psl->SetArguments
             pp = @psl + 36: Call Dword @pp Using VTbl (psl, StrPtr(szWorkDir))       ' psl->SetWorkingDirectory
             pp = @psl + 60: Call Dword @pp Using VTbl (psl, ShowCmd)                 ' psl->SetShowCmd
             pp = @psl + 28: Call Dword @pp Using VTbl (psl, StrPtr(Comment))         ' psl->SetDescription
             pp = @psl + 68: Call Dword @pp Using VTbl (psl, StrPtr(szIconPath), iIcon) ' psl->SetSetIconLocation
    
             ' Query IShellLink for the IPersistFile interface for saving the shortcut in persistent storage.
             pp = @psl     : Call Dword @pp Using VTbl (psl, ByRef IID_PERSIST, ByRef ppf) To lResult
             If lResult = 0 Then
                ' Ensure that the string is Unicode
                lResult = Len(szLnkPath): TmpWide = String$(lResult + lResult + 1, 0)
                MultiByteToWideChar %CP_ACP, 0, ByVal StrPtr(szLnkPath), lResult, ByVal StrPtr(TmpWide), %MAX_PATH
                ' Save the link by calling IPersistFile::Save
                pp = @ppf + 24: Call Dword @pp Using VTbl (ppf, ByVal StrPtr(TmpWide), 1) To lResult: If lResult = %S_OK Then Function = 1
                pp = @ppf + 8: Call Dword @pp Using VTbl (ppf) ' ppf->Release()
             End If
             pp = @psl + 8: Call Dword @pp Using VTbl (psl)    ' psl->Release()
          End If
       End Function
    ------------------

    Comment


    • #3
      PIF.Inc
      Code:
         Type tagPIFEX ' L = 0171h Îñíîâíîé ðàçäåë
            Reserved    As Byte              ' 0000h       Íå èñïîëüçóåòñÿ
            CheckSum    As Byte              ' 0001h 0078h Êîíòðîëüíàÿ ñóììà  Â Windows 95/98 - âñåãäà 78h, â îñòàëüíûõ ÎÑ - çíà÷åíèå ìåíÿåòñÿ. Íèêîãäà íå ïðîâåðÿåòñÿ.
            WindowTitle As String * 30       ' 0002h       Çàãîëîâîê îêíà OEM. Äîïîëíÿåòñÿ ïðîáåëàìè äî 30 ñèìâîëîâ.
            MaxMem      As Word              ' 0020h 0280h Ìàêñèìàëüíûé îáúåì îñíîâíîé ïàìÿòè â êèëîáàéòàõ (3.1)
            MinMem      As Word              ' 0022h 0000h Ìèíèìàëüíûé îáúåì îñíîâíîé ïàìÿòè â êèëîáàéòàõ
            Path        As Asciiz * 63       ' 0024h       Èìÿ çàïóñêàåìîãî ôàéëà áåç ïàðàìåòðîâ. Ìîæåò ñîäåðæàòü ïîëíûé ïóòü.  êàâû÷êè íå çàêëþ÷àåòñÿ. Çàâåðøàåòñÿ íóëåâûì ñèìâîëîì. Êîäèðîâêà OEM.
            msFlags     As Word              ' 0063h       0010h = CloseOnExit
            StartUpDir  As Asciiz * 64       ' 0065h       Ðàáî÷èé êàòàëîã.  êàâû÷êè íå çàêëþ÷àåòñÿ. Çàâåðøàåòñÿ íóëåâûì ñèìâîëîì. Êîäèðîâêà OEM.
            CmdLine     As Asciiz * 64       ' 00A5h       Ñòðîêà ïàðàìåòðîâ. Çàâåðøàåòñÿ íóëåâûì ñèìâîëîì. Êîäèðîâêà OEM.
                                             '             Èñïîëüçóåòñÿ òîëüêî åñëè îòñóòñòâóåò ðàçäåë, ñîäåðæàùèé ñòðîêó ïàðàìåòðîâ äëÿ äàííîé ÎÑ.
            ScreenMode  As Byte              ' 00E5h       00h â 32-ðàçðÿäíûõ ÎÑ, 7Fh â Wind ows 3.X.
            TextPages As Byte                ' 00E6h   01h Êîëè÷åñòâî âûäåëåííûõ òåêñòîâûõ ñòðàíèö âèäåîïàìÿòè. Íå èñïîëüçóåòñÿ.
            InterruptMin As Byte             ' 00E7h   00h Ïåðâîå èñïîëüçóåìîå ïðåðûâàíèå. Íå èñïîëüçóåòñÿ.
            InterruptMax As Byte             ' 00E8h   FFh Ïîñëåäíåå èñïîëüçóåìîå ïðåðûâàíèå. Íå èñïîëüçóåòñÿ.
            Rows As Byte                     ' 00E9h   19h Âûñîòà ýêðàíà â ñèìâîëàõ. Íå èñïîëüçóåòñÿ.
            Columns As Byte                  ' 00EAh   50h Øèðèíà ýêðàíà â ñèìâîëàõ. Íå èñïîëüçóåòñÿ.
            xPos As Byte                     ' 00EBh   00h Ïîçèöèÿ îêíà ïî ãîðèçîíòàëè. Íå èñïîëüçóåòñÿ.
            yPos As Byte                     ' 00ECh   00h Ïîçèöèÿ îêíà ïî âåðòèêàëè. Íå èñïîëüçóåòñÿ.
            SysMem As Word                   ' 00EDh 0007h Íîìåð ïîñëåäíåé òåêñòîâîé âèäåîñòðàíèöû. Íå èñïîëüçóåòñÿ.
            SharedPrgPath As String * 64     ' 00EFh       Shared program path. Íå èñïîëüçóåòñÿ.
            SharedPrgDataPath As String * 64 ' 003Fh       Shared program data file
            uFlags  As Word                  ' 016Fh       0000h â Windows 95/98, 20E0h â Windows NT/2000
                                             '             0020h Èñïîëüçîâàòü ñîïðîöåññîð (NT)
                                             '             0040h Îñòàíàâëèâàòüñÿ â ôîíîâîì ðåæèìå (NT)
                                             '             0080h Ïðÿìàÿ çàïèñü òåêñòà íà ýêðàí (NT)
                                             '             2000h Èñïîëüçîâàòü ïîäìåíó âåêòîðîâ ïðåðûâàíèé (NT)
         End Type
      
         Type tagPIFEX_Title
            Signature As Asciiz * 16         ' 0000h       Ïîäïèñü ðàçäåëà
            OffSetNextPart As Word           ' 0010h       Ñìåùåíèå çàãîëîâêà ñëåäóþùåãî ðàçäåëà îò íà÷àëà ôàéëà.  ïîñëåäíåì ðàçäåëå ïðèíèìàåò çíà÷åíèå FFFFh.
            OffSetDataPart  As Word          ' 0012h       Ñìåùåíèå íà÷àëà äàííûõ ðàçäåëà îò íà÷àëà ôàéëà   S X 95 NT
            LenPart        As Word           ' 0014h       Äëèíà ðàçäåëà â áàéòàõ
         End Type
      
         Type tagWINDOWS386_TITLE
            Signature As Asciiz * 16         ' 0000h       Ïîäïèñü ðàçäåëà
            OffSetNextPart As Word           ' 0010h       Ñìåùåíèå çàãîëîâêà ñëåäóþùåãî ðàçäåëà îò íà÷àëà ôàéëà.  ïîñëåäíåì ðàçäåëå ïðèíèìàåò çíà÷åíèå FFFFh.
            OffSetDataPart As Word           ' 0012h       Ñìåùåíèå íà÷àëà äàííûõ ðàçäåëà îò íà÷àëà ôàéëà   S X 95 NT
            LenPart        As Word           ' 0014h       Äëèíà ðàçäåëà â áàéòàõ
         End Type
      
         Type tagWINDOWS386  '  WINDOWS 386 3.0 0068h
            MaxMem As Word                  ' 0000h  0280h Ìàêñèìàëüíûé îáúåì îñíîâíîé ïàìÿòè â êèëîáàéòàõ, êîòîðûé ìîæåò çàíÿòü ïðèëîæåíèå     X 95 NT
                                            '              Äëÿ 32-ðàçðÿäíûõ ÎÑ àâòî - 640 è áîëåå.
            ReqMem As Word                  ' 0002h  0000h Çàïðàøèâàåìûé îáúåì îñíîâíîé ïàìÿòè â êèëîáàéòàõ
                                            '              Äëÿ 32-ðàçðÿäíûõ ÎÑ àâòî - 0
            ActivePriority As Word          ' 0004h  0064h Àêòèâíûé ïðèîðèòåò    Äèàïàçîí çíà÷åíèé: 1-100 ?
            BkgPriority As Word             ' 0006h  0032h Ôîíîâûé ïðèîðèòåò
            MaxEMS As Word                  ' 0008h  FFFFh Ìàêñèìàëüíûé îáúåì ïàìÿòè EMS â êèëîáàéòàõ (16384), àâòî - FFFFh
            ReqEMS As Word                  ' 000Ah  0000h Çàïðàøèâàåìûé îáúåì ïàìÿòè EMS. Ìàêñèìàëüíîå çíà÷åíèå - 16384, àâòî - 0.
            MaxXMS As Word                  ' 000Ch  FFFFh Ìàêñèìàëüíûé îáúåì ïàìÿòè XMS â êèëîáàéòàõ, êîòîðûé ìîæåò çàíÿòü ïðèëîæåíèå.     Ìàêñèìàëüíîå çíà÷åíèå - 16384, àâòî  - FFFFh.
            ReqXMS As Word                  ' 000Eh  0000h Çàïðàøèâàåìûé îáúåì ïàìÿòè XMS. Ìàêñèìàëüíîå çíà÷åíèå - 16384, àâòî - 0.
            Flags1 As Dword                 ' 0010h  00021002h
            Flags2 As Word                  ' 0014h  001Fh
                                            '              0001h Ýìóëèðîâàòü âèäåî ROM
                                            '              0002h Íå ïðîâåðÿòü ïîðòû: òåêñò
                                            '              0004h Íå ïðîâåðÿòü ïîðòû: ãðàôèêà íèçêîãî ðàçðåøåíèÿ
                                            '              0008h Íå ïðîâåðÿòü ïîðòû: ãðàôèêà âûñîêîãî ðàçðåøåíèÿ
                                            '              0010h Âèäåîïàìÿòü: òåêñò
            Reserved As Word                ' 0016h
            HotKeyScanCode As Word          ' 0018h  0000h Ñêàí-êîä êëàâèøè áûñòðîãî âûçîâà.     X 95 NT Cì. Microsoft KB Q37617.
            HotKeyMod As Word               ' 001Ah  0000h 0003h Êëàâèøà-ìîäèôèêàòîð áûñòðîãî âûçîâà: Shift
                                            '              0004h Êëàâèøà-ìîäèôèêàòîð áûñòðîãî âûçîâà: Ctrl
                                            '              0008h Êëàâèøà-ìîäèôèêàòîð áûñòðîãî âûçîâà: Alt
            UseHotKey As Word               ' 001Ch  0000h 000Fh = Ïðèìåíÿòü êëàâèøó áûñòðîãî âûçîâà
            ExtScanCode As Word             ' 001Eh  0000h 0001h = Ïðèçíàê ðàñøèðåííîãî ñêàí-êîäà êëàâèøè áûñòðîãî âûçîâà
            Uknown1 As Word                 ' 0020h        0000h, 0064h â Windows NT   Íåèçâåñòíî (NT)
            Uknown2 As Word                 ' 0022h        0000h, 0032h â Windows NT   Íåèçâåñòíî (NT)
            Uknown  As Dword                ' 0024h
            CmdLine As Asciiz * 64          ' 0028h        Ñòðîêà ïàðàìåòðîâ. Çàâåðøàåòñÿ íóëåâûì ñèìâîëîì. Êîäèðîâêà OEM.
                                            '              Èìååòñÿ îøèáêà, èç-çà êîòîðîé ñòðîêà ïàðàìåòðîâ ñîõðàíÿåòñÿ â
                                            '              êîäèðîâêå ANSI, êðîìå òîãî, â Windows 95/98 ïðîãðàììå ïåðåäàåòñÿ
                                            '              ýòî çíà÷åíèå, åùå ðàç ïðåîáðàçîâàííîå â êîäèðîâêó ANSI.
         End Type
      
         Type tagWINDOWSVMM_TITLE
            Signature As Asciiz * 16         ' 0000h       Ïîäïèñü ðàçäåëà
            OffSetNextPart As Word           ' 0010h       Ñìåùåíèå çàãîëîâêà ñëåäóþùåãî ðàçäåëà îò íà÷àëà ôàéëà.  ïîñëåäíåì ðàçäåëå ïðèíèìàåò çíà÷åíèå FFFFh.
            OffSetDataPart As Word           ' 0012h       Ñìåùåíèå íà÷àëà äàííûõ ðàçäåëà îò íà÷àëà ôàéëà   S X 95 NT
            LenPart        As Word           ' 0014h       Äëèíà ðàçäåëà â áàéòàõ
         End Type
      
         Type tagWINDOWSVMM  '  WINDOWS VMM 4.0    L = 01ACh
            Reserved1 As String * 88         ' 0000h   00h Íåèçâåñòíî
            IconFile As Asciiz *  80         ' 0058h  PIFMGR.DLL  - Èìÿ ôàéëà, ñîäåðæàùåãî çíà÷îê
                                             '        Êîäèðîâêà ANSI, äëèííîå èìÿ áåç êàâû÷åê, ìîæåò ñîäåðæàòü ïîëíûé ïóòü, çàâåðøàåòñÿ íóëåâûì ñèìâîëîì.
            IconNum As Word                  ' 00A8h 0000h Íîìåð çíà÷êà. Ïåðâûé çíà÷îê â ôàéëå èìååò íîìåð 0.
            Flags1 As Word                   ' 00AAh 0002h Áèòîâàÿ ìàñêà.
            Uknown01 As String * 10          ' 00ACh   00h Íåèçâåñòíî
            CPUWait As Word                  ' 00B6h 0032h Ïðèîðèòåò   ×èñëî îò 0 äî 100, 0 - ìàêñèìàëüíûé ïðèîðèòåò, 100 - ìèíèìàëüíûé.
            Flags2 As Word                   ' 00B8h 0001h Áèòîâàÿ ìàñêà.
            Uknown2  As String * 8           ' 00BAh   00h Íåèçâåñòíî
            RowsInFullScreen As Word         ' 00C2h 0000h Êîëè÷åñòâî òåêñòîâûõ ñòðîê â îêíå  95  Àâòî - 0, èëè ñîîòâåòñòâóþùåå ÷èñëî (25, 43 èëè 50).
            Flags3 As Word                   ' 00C4h 0001h Áèòîâàÿ ìàñêà.
            Uknown02 As Word                 ' 00C6h 0000h Íåèçâåñòíî
            Uknown03 As Word                 ' 00C8h 0005h Íåèçâåñòíî
            Uknown04 As Word                 ' 00CAh 0019h Íåèçâåñòíî
            Uknown05 As Word                 ' 00CCh 0003h Íåèçâåñòíî
            Uknown06 As Word                 ' 00CEh 00C8h Íåèçâåñòíî
            Uknown07 As Word                 ' 00D0h 03E8h Íåèçâåñòíî
            Uknown08 As Word                 ' 00D2h 0002h Íåèçâåñòíî
            Uknown09 As Word                 ' 00D4h 000Ah Íåèçâåñòíî
            Flags4 As Word                   ' 00D6h 0001h Áèòîâàÿ ìàñêà
            Uknown10 As String * 6           ' 00D8h   00h Íåèçâåñòíî
            FontType As Word                 ' 00DEh 001Ch Áèòîâàÿ ìàñêà.
            Uknown11 As Word                 ' 00E0h 0000h Íåèçâåñòíî
            FontBitMapX As Word              ' 00E2h       Ðàçìåð òåêóùåãî øðèôòà ïî ãîðèçîíòàëè (òîëüêî äëÿ ðàñòðîâûõ øðèôòîâ).
                                             '             Àâòî èëè TrueType - 0000h, ðàñòðîâûé øðèôò - ðàçìåð ïî ãîðèçîíòàëè â ïèêñåëàõ.
            FontBitMapY As Word              ' 00E4h 0000h Ðàçìåð òåêóùåãî øðèôòà ïî âåðòèêàëè.
                                             '             Àâòî - ëþáîå çíà÷åíèå, èíà÷å ðàçìåð ïî âåðòèêàëè â ïèêñåëàõ.
            FontTrueTypeX As Word            ' 00E6h 0000h Ðàçìåð òåêóùåãî øðèôòà ïî ãîðèçîíòàëè.
                                             '             Àâòî - ëþáîå çíà÷åíèå, èíà÷å ðàçìåð ïî ãîðèçîíòàëè â ïèêñåëàõ.
            FontTrueTypeY As Word            ' 00E8h 0000h Ðàçìåð òåêóùåãî øðèôòà ïî âåðòèêàëè.
                                             '             Àâòî - ëþáîå çíà÷åíèå, èíà÷å ðàçìåð ïî âåðòèêàëè â ïèêñåëàõ.
            BitmapFont As Asciiz * 32        ' 00EAh Terminal  Íàçâàíèå ðàñòðîâîãî øðèôòà. Íå èñïîëüçóåòñÿ, çàêàí÷èâàåòñÿ íóëåâûì ñèìâîëîì.
            TrueType As Asciiz * 32          ' 010Ah Lucida Console Íàçâàíèå øðèôòà TrueType. Íå èñïîëüçóåòñÿ, çàêàí÷èâàåòñÿ íóëåâûì ñèìâîëîì.
            Uknown15 As Word                 ' 012Ah 04E3h â Windows NT/2000, 0000h â Windows 95/98   Íåèçâåñòíî
            Flags6 As Word                   ' 012Ch 0003h Áèòîâàÿ ìàñêà.
                                             '             0001h Íåèçâåñòíî
                                             '             0002h Ïîêàçûâàòü ïàíåëü èíñòðóìåíòîâ       95 NT
            RestoreParams As Word            ' 012Eh 0000h 0001h = Íå âîññòàíàâëèâàòü ïàðàìåòðû ïðè çàïóñêå
            WndCharWidth  As Word            ' 0130h 0000h ?? Ðàçìåð ýêðàíà ïî ãîðèçîíòàëè â ñèìâîëàõ (95). Ïîñëå ïåðâîãî çàïóñêà ïðîãðàììû çíà÷åíèå ñòàíîâèòñÿ ðàâíûì 80.
            WndCharHeight As Word            ' 0132h 0000h ?? Ðàçìåð ýêðàíà ïî âåðòèêàëè â ñèìâîëàõ (95).  Ïîñëå ïåðâîãî çàïóñêà ïðîãðàììû çíà÷åíèå ñòàíîâèòñÿ ðàâíûì 25.
            WndClientWidth As Word           ' 0134h 0000h Ðàçìåð êëèåíòñêîé îáëàñòè îêíà ïî ãîðèçîíòàëè (95). Â ïèêñåëàõ.
            WndClientHeight As Word          ' 0136h 0000h Ðàçìåð êëèåíòñêîé îáëàñòè îêíà ïî âåðòèêàëè (95). Â ïèêñåëàõ.
            WndWidth As Word                 ' 0138h 0000h Ðàçìåð îêíà ïî ãîðèçîíòàëè (95). Â ïèêñåëàõ.
            WndHeight As Word                ' 013Ah 0000h Ðàçìåð îêíà ïî âåðòèêàëè (95). Â ïèêñåëàõ.
            Uknown16 As Word                 ' 013Ch 0016h Íåèçâåñòíî
            FlagsForLastState As Word        ' 013Eh 0000h Áèòîâàÿ ìàñêà.
                                             '             0002h Ïðè ïîñëåäíåì çàïóñêå îêíî áûëî ðàçâåðíóòî (95)
                                             '             Åñëè äàííîå çíà÷åíèå íå óñòàíîâëåíî, çíà÷åíèå ïî ñìåùåíèþ 0140h
                                             '             íå èíòåðïðåòèðóåòñÿ.
            LastState As Word                ' 0140h 0001h Íå ÿâëÿåòñÿ áèòîâîé ìàñêîé.
            Uknown17 As Word                 ' 0142h FFFFh Íåèçâåñòíî (95)
            Uknown18 As Word                 ' 0144h FFFFh Íåèçâåñòíî (95)
            WndRightExt As Word              ' 0146h FFFFh Ïîëîæåíèå ïðàâîé ãðàíèöû îêíà â ðàçâåðíóòîì ñîñòîÿíèè (95)
                                             '              ïèêñåëàõ, åñëè äàííîå çíà÷åíèå ìåíüøå èëè ðàâíî ïîëîæåíèþ ëåâîé ãðàíèöû,
                                             '             è çíà÷åíèÿ ïî ñìåùåíèÿì 013Eh, 0140h óêàçûâàþò íà òî, ÷òî îêíî áûëî ðàçâåðíóòî,
                                             '             ñ÷èòàåòñÿ, ÷òî ïàðàìåòðû îêíà íå ñîõðàíÿëèñü, è èñïîëüçóþòñÿ çíà÷åíèÿ ïî óìîë÷àíèþ.
            WndBottomExt As Word             ' 0148h FFFFh Ïîëîæåíèå íèæíåé ãðàíèöû îêíà â ðàçâåðíóòîì ñîñòîÿíèè (95)
                                             '              ïèêñåëàõ, åñëè äàííîå çíà÷åíèå ìåíüøå èëè ðàâíî ïîëîæåíèþ âåðõíåé ãðàíèöû,
                                             '             è çíà÷åíèÿ ïî ñìåùåíèÿì 013Eh, 0140h óêàçûâàþò íà òî, ÷òî îêíî áûëî ðàçâåðíóòî,
                                             '             ñ÷èòàåòñÿ, ÷òî ïàðàìåòðû îêíà íå ñîõðàíÿëèñü, è èñïîëüçóþòñÿ çíà÷åíèÿ ïî óìîë÷àíèþ.
            WndLeft As Word                  ' 014Ah 0000h Ïîëîæåíèå ëåâîé ãðàíèöû îêíà (95). Â ïèêñåëàõ.
            WndTop As Word                   ' 014Ch 0000h Ïîëîæåíèå âåðõíåé ãðàíèöû îêíà (95). Â ïèêñåëàõ.
            WndRight As Word                 ' 014Eh 0000h Ïîëîæåíèå ïðàâîé ãðàíèöû îêíà â íîðìàëüíîì ñîñòîÿíèè (95)
                                             '              ïèêñåëàõ, åñëè äàííîå çíà÷åíèå ìåíüøå èëè ðàâíî ïîëîæåíèþ ëåâîé ãðàíèöû,
                                             '             è çíà÷åíèÿ ïî ñìåùåíèÿì 013Eh, 0140h óêàçûâàþò íà òî, ÷òî îêíî íå áûëî ðàçâåðíóòî,
                                             '             ñ÷èòàåòñÿ, ÷òî ïàðàìåòðû îêíà íå ñîõðàíÿëèñü, è èñïîëüçóþòñÿ çíà÷åíèÿ ïî óìîë÷àíèþ.
            WndBottom As Word                ' 0150h 0000h Ïîëîæåíèå íèæíåé ãðàíèöû îêíà â íîðìàëüíîì ñîñòîÿíèè (95)
                                             '              ïèêñåëàõ, åñëè äàííîå çíà÷åíèå ìåíüøå èëè ðàâíî ïîëîæåíèþ âåðõíåé ãðàíèöû,
                                             '             è çíà÷åíèÿ ïî ñìåùåíèÿì 013Eh, 0140h óêàçûâàþò íà òî, ÷òî îêíî íå áûëî ðàçâåðíóòî,
                                             '             ñ÷èòàåòñÿ, ÷òî ïàðàìåòðû îêíà íå ñîõðàíÿëèñü, è èñïîëüçóþòñÿ çíà÷åíèÿ ïî óìîë÷àíèþ
            Uknown19 As Dword                ' 0152h 00000000h Íåèçâåñòíî
            BatPath As Asciiz * 80           ' 0156h       Èìÿ bat-ôàéëà. Êîäèðîâêà OEM, ìîæåò ñîäåðæàòü ïîëíûé ïóòü,
                                             '             äëèííîå èìÿ, âêëþ÷àþùåå ïðîáåëû, äîëæíî áûòü çàêëþ÷åíî â êàâû÷êè, çàâåðøàåòñÿ íóëåâûì ñèìâîëîì.
            EnvSize As Word                  ' 01A6h 0000h Îáúåì ïàìÿòè äëÿ ïåðåìåííûõ ñðåäû. Àâòî - 0, èíà÷å îáúåì ïàìÿòè â êèëîáàéòàõ, max - 4096.
            DPMISize As Word                 ' 01A8h 0000h Îáúåì ïàìÿòè DPMI  Àâòî - 0, èíà÷å îáúåì ïàìÿòè â êèëîáàéòàõ, max - 16384.
            Uknown20 As Word                 ' 01AAh 0001h Íåèçâåñòíî
         End Type
      
         '---------------------------------------------------------------------------------------------------------------------
      
         Function CreatePIF (szPIFPath As String, szExePath As String, szCmdLine As String, szWorkDir As String, _
            szIconPath As String, ByVal iIcon As Dword, _
            szWindowTitle As String, ByVal FullScreen As Dword, ByVal FontType As Dword, _
            ByVal FntWidth As Dword, ByVal FntHeight As Dword) As Dword
      
            Dim PIFEX             As Local tagPIFEX              ' Ïîëÿ PIF-ôàéëà
            Dim PIFEX_TITLE       As Local tagPIFEX_TITLE
            Dim WINDOWS386        As Local tagWINDOWS386
            Dim WINDOWS386_TITLE  As Local tagWINDOWS386_TITLE
            Dim WINDOWSVMM        As Local tagWINDOWSVMM
            Dim WINDOWSVMM_TITLE  As Local tagWINDOWSVMM_TITLE
            Dim hPifFile          As Local Dword                 ' åãî handle
            Dim szPifData         As Local String                ' âíóòðåííîñòè
      
            Dim i                 As Local Dword
            Dim j                 As Local Dword
      
      
           '============================
            PIFEX.CheckSum  = &H78
            PIFEX.maxMem    = &H0280
      
            PIFEX.msFlags = &H10 ' Close On Exit
            PIFEX.WindowTitle = szWindowTitle
            GetShortPathName ByVal StrPtr(szExePath), PIFEX.Path, SizeOf(PIFEX.Path)
            GetShortPathName ByVal StrPtr(szWorkDir), ByVal VarPtr(PIFEX.StartUpDir), SizeOf(PIFEX.StartUpDir)
            PIFEX.CmdLine      = szCmdLine
            PIFEX.TextPages    = 1
            PIFEX.InterruptMax = &HFF
            PIFEX.Rows         = 25
            PIFEX.Columns      = 80
            PIFEX.SysMem       = 7
            ' If IsNT Then PIFEX.uFlags = &H20E0
      
            PIFEX_TITLE.Signature    = "MICROSOFT PIFEX" + Chr$(0)
            PIFEX_TITLE.OffSetNextPart =  Len(PIFEX) + Len(PIFEX_TITLE)
            PIFEX_TITLE.OffSetDataPart =  0
            PIFEX_TITLE.LenPart = Len(PIFEX)
      
            '============================
            WINDOWS386_TITLE.Signature = "WINDOWS 386 3.0"
            WINDOWS386_TITLE.OffSetNextPart =  SizeOf(tagPIFEX) + SizeOf(tagPIFEX_TITLE) + _
                                               SizeOf(tagWINDOWS386_TITLE) + SizeOf(tagWINDOWS386)
            WINDOWS386_TITLE.OffSetDataPart =  SizeOf(tagPIFEX) + SizeOf(tagPIFEX_TITLE) +SizeOf(tagWINDOWS386_TITLE)
            WINDOWS386_TITLE.LenPart = SizeOf(tagWINDOWS386)
      
            '============================
            WINDOWS386.MaxMem = 640
            WINDOWS386.ReqMem = 0
            WINDOWS386.ActivePriority = 100 ' 0004h  0064h Àêòèâíûé ïðèîðèòåò    Äèàïàçîí çíà÷åíèé: 1-100 ?
            WINDOWS386.BkgPriority = 50     ' 0006h  0032h Ôîíîâûé ïðèîðèòåò
            WINDOWS386.MaxEMS = &HFFFF&
            WINDOWS386.ReqEMS = 0
            WINDOWS386.MaxXMS = &HFFFF&
            WINDOWS386.ReqXMS = 0
      
            %WINDOWS386_AllowExitWhenActive        = &H00000001& ' Ðàçðåøèòü âûõîä, êîãäà àêòèâíà, Áèò îòêëþ÷àåòñÿ, êîãäà óñòàíîâëåí ìàêñèìàëüíûé ïðèîðèòåò.
            %WINDOWS386_ContinueWorkInBackhground  = &H00000002& ' Ïðîäîëæåíèå ðàáîòû â ôîíîâîì ðåæèìå
            %WINDOWS386_FullScreenMode             = &H00000008& ' Ïîëíîýêðàííûé ðåæèì
                                                                 ' Reserved by program
            %WINDOWS386_AltTab                     = &H00000020& ' Íå èñïîëüçîâàòü Alt+Tab
            %WINDOWS386_AltEsc                     = &H00000040& ' Íå èñïîëüçîâàòü Alt+Esc
            %WINDOWS386_AltSpace                   = &H00000080& ' Íå èñïîëüçîâàòü Alt+Space
            %WINDOWS386_AltEnter                   = &H00000100& ' Íå èñïîëüçîâàòü Alt+Enter
            %WINDOWS386_AltPrtSc                   = &H00000200& ' Íå èñïîëüçîâàòü Alt+PrtSc
            %WINDOWS386_PrtSc                      = &H00000400& ' Íå èñïîëüçîâàòü PrtSc
            %WINDOWS386_CtrlEsc                    = &H00000800& ' Íå èñïîëüçîâàòü Ctrl+Esc
      
            %WINDOWS386_CalcDelay                  = &H00001000& ' Îïðåäåëÿòü âðåìÿ ïðîñòîÿ
            %WINDOWS386_NoHMA                      = &H00002000& ' Íå èñïîëüçîâàòü HMA
            %WINDOWS386_UseHotKey                  = &H00004000& ' Èñïîëüçîâàòü áûñòðûé âûçîâ
            %WINDOWS386_QuickInsert                = &H00020000& ' Áûñòðàÿ âñòàâêà
            %WINDOWS386_ProtectMemory              = &H00080000& ' Çàùèòà ïàìÿòè
            %WINDOWS386_Minimize                   = &H00100000& ' Ñâåðíóòîå îêíî
            %WINDOWS386_Maximize                   = &H00200000& ' Ðàçâåðíóòîå îêíî
            %WINDOWS386_MSDOS                      = &H00800000& ' Ðåæèì MS-DOS  (95)
            %WINDOWS386_HideWindows                = &H01000000& ' Íå äàâàòü îáíàðóæèòü Windows (95)
            %WINDOWS386_DontOfferMSDOS             = &H04000000& ' Íå ïðåäëàãàòü àâòîìàòè÷åñêè ïåðåõîä â ðåæèì MS-DOS (95)
            %WINDOWS386_NoWarningMSDOS             = &H10000000& ' Íå ïðåäóïðåæäàòü ïåðåä ïåðåõîäîì â ðåæèì MS-DOS (95)
                                                                       '   00021002
      
            WINDOWS386.Flags1 = %WINDOWS386_ContinueWorkInBackhground + %WINDOWS386_CalcDelay + %WINDOWS386_AltEnter ' + %WINDOWS386_AltTab + %WINDOWS386_CtrlEsc
            If FullScreen Then WINDOWS386.Flags1 = WINDOWS386.Flags1 + %WINDOWS386_FullScreenMode
            WINDOWS386.Flags2         = &H001F
            WINDOWS386.HotKeyScanCode = 0
            WINDOWS386.HotKeyMod      = 0
            WINDOWS386.UseHotKey      = 0
            WINDOWS386.ExtScanCode    = 0
            WINDOWS386.Uknown1        = 0 ' 0000h, 0064h â Windows NT
            WINDOWS386.Uknown2        = 0 ' 0000h, 0032h â Windows NT
            WINDOWS386.Uknown         = 0
            WINDOWS386.CmdLine        = szCmdLine
      
            '============================
            WINDOWSVMM_TITLE.Signature = "WINDOWS VMM 4.0"
            WINDOWSVMM_TITLE.OffSetNextPart =  &HFFFF
            WINDOWSVMM_TITLE.OffSetDataPart = Len(PIFEX) + Len(PIFEX_TITLE) + Len(WINDOWS386_TITLE) + Len(WINDOWS386) + Len(WINDOWSVMM_TITLE)
            WINDOWSVMM_TITLE.LenPart = Len(WINDOWSVMM)
            If szIconPath = "" Then WINDOWSVMM.IconFile = "PIFMGR.DLL" Else _
               GetShortPathName ByVal StrPtr(szIconPath), WINDOWSVMM.IconFile, SizeOf(WINDOWSVMM.IconFile)
            WINDOWSVMM.IconNum  = iIcon
      
            %WINDOWSVMM_ContinueWorkInBackground  = &H0002& ' Ïðîäîëæåíèå ðàáîòû â ôîíîâîì ðåæèìå
            %WINDOWSVMM_NoWarningWhenExit         = &H0010& ' Íå ïðåäóïðåæäàòü ïðè çàâåðøåíèè
            %WINDOWSVMM_NoSplash                  = &H0020& ' Íå èñïîëüçîâàòü Çàñòàâêó
                                                                  ' 0002
      
            WINDOWSVMM.Flags1 = %WINDOWSVMM_ContinueWorkInBackground ' + %WINDOWSVMM_NoWarningWhenExit
            WINDOWSVMM.CPUWait = 50 ' 100 - CPUWaitInBackground
      
            %WINDOWSVMM_EmulateVideoROM =  &H0001& ' Ýìóëèðîâàòü âèäåî-ÏÇÓ
            %WINDOWSVMM_AllocVideoDynam =  &H0080& ' Íå âûäåëÿòü âèäåîïàìÿòü äèíàìè÷åñêè
            %WINDOWSVMM_FullScreen      =  &H0100& ' Ïîëíîýêðàííûé ðåæèì
                                                   ' 0001
      
            WINDOWSVMM.Flags2 = %WINDOWSVMM_EmulateVideoROM
            If FullScreen Then WINDOWSVMM.Flags2 = WINDOWSVMM.Flags2 + %WINDOWSVMM_FullScreen
            WINDOWSVMM.RowsInFullScreen = 25
      
            %WINDOWSVMM_QuickInsert  = &H0001& ' Áûñòðàÿ âñòàâêà
            %WINDOWSVMM_AltTab       = &H0020& ' Íå èñïîëüçîâàòü Alt+Tab
            %WINDOWSVMM_AltEsc       = &H0040& ' Íå èñïîëüçîâàòü Alt+Esc
            %WINDOWS386_AltSpace     = &H0080& ' Íå èñïîëüçîâàòü Alt+Space
            %WINDOWS386_AltEnter     = &H0100& ' Íå èñïîëüçîâàòü Alt+Enter
            %WINDOWS386_AltPrtSc     = &H0200& ' Íå èñïîëüçîâàòü Alt+PrtSc
            %WINDOWS386_PrtSc        = &H0400& ' Íå èñïîëüçîâàòü PrtSc
            %WINDOWS386_CtrlEsc      = &H0800& ' Íå èñïîëüçîâàòü Ctrl+Esc
      
            WINDOWSVMM.Flags3 = %WINDOWS386_AltEnter + %WINDOWS386_AltTab + %WINDOWS386_CtrlEsc
            WINDOWSVMM.Uknown03 = &H0005&
            WINDOWSVMM.Uknown04 = &H0019&
            WINDOWSVMM.Uknown05 = &H0003&
            WINDOWSVMM.Uknown06 = &H00C8&
            WINDOWSVMM.Uknown07 = &H03E8&
            WINDOWSVMM.Uknown08 = &H0002&
            WINDOWSVMM.Uknown09 = &H000A&
      
            %WINDOWSVMM_DontUseMiceForSelection = &H0001& ' Íå èñïîëüçîâàòü ìûøü äëÿ âûäåëåíèÿ
            %WINDOWSVMM_ExclusiveMouseUsage     = &H0002& ' Ìîíîïîëüíîå èñïîëüçîâàíèå ìûøè
                                                          ' 0001
            WINDOWSVMM.Flags4 = %WINDOWSVMM_DontUseMiceForSelection
      
            %WINDOWSVMM_UseBitmapFont = &H0004& ' Èñïîëüçîâàòü ðàñòðîâûå øðèôòû
            %WINDOWSVMM_UseTrueType   = &H0008& ' Èñïîëüçîâàòü TrueType øðèôòû
            %WINDOWSVMM_Auto          = &H0010& ' Àâòîìàòè÷åñêè âûáèðàòü ðàçìåð øðèôòà
            %WINDOWSVMM_CurrentBitmapFont   = &H0400& ' Òåêóùèé øðèôò - ðàñòðîâûé
            %WINDOWSVMM_CurrentTrueTypeFont = &H0800& ' Òåêóùèé øðèôò - TrueType
      
            If FontType = 0 Then WINDOWSVMM.FontType = %WINDOWSVMM_UseBitmapFont + %WINDOWSVMM_CurrentBitmapFont Else _
                                 WINDOWSVMM.FontType = %WINDOWSVMM_UseTrueType + %WINDOWSVMM_CurrentTrueTypeFont
            WINDOWSVMM.FontBitMapX = FntWidth
            WINDOWSVMM.FontBitMapY = FntHeight
            WINDOWSVMM.FontTrueTypeX = FntWidth
            WINDOWSVMM.FontTrueTypeY = FntHeight
            WINDOWSVMM.BitmapFont = "Terminal"
            WINDOWSVMM.TrueType = "Courier New"
            ' If IsNT Then WINDOWSVMM.Uknown15 = &H04E3&
            %WINDOWSVMM_Uknown = &H0001& ' Íåèçâåñòíî
            %WINDOWSVMM_ShowToolBar = &H0002&    ' Ïîêàçûâàòü ïàíåëü èíñòðóìåíòîâ
            WINDOWSVMM.Flags6 = %WINDOWSVMM_Uknown
            WINDOWSVMM.RestoreParams = &H0001&    ' non-standart 0001h = Íå âîññòàíàâëèâàòü ïàðàìåòðû ïðè çàïóñêå
            WINDOWSVMM.WndCharWidth = 80
            WINDOWSVMM.WndCharHeight  = 25
            WINDOWSVMM.WndClientWidth = 0
            WINDOWSVMM.WndClientHeight = 0
            WINDOWSVMM.WndWidth = 0
            WINDOWSVMM.WndHeight = 0
            WINDOWSVMM.Uknown16  = &H0016&
            WINDOWSVMM.FlagsForLastState = &H0000& ' Áèòîâàÿ ìàñêà.
                                                   ' 0002h Ïðè ïîñëåäíåì çàïóñêå îêíî áûëî ðàçâåðíóòî (95)
                                                   '       Åñëè äàííîå çíà÷åíèå íå óñòàíîâëåíî, çíà÷åíèå ïî ñìåùåíèþ 0140h
                                                   '       íå èíòåðïðåòèðóåòñÿ.
            WINDOWSVMM.LastState = &H0001&         ' Íå ÿâëÿåòñÿ áèòîâîé ìàñêîé.
                                                   ' Çíà÷åíèå 0002h èíòåðïðåòèðóåòñÿ êàê ðàçâåðíóòîå îêíî.
                                                   ' 0001h Ïðè ïîñëåäíåì çàïóñêå îêíî áûëî íîðìàëüíîãî ðàçìåðà (95)
                                                   ' 0002h Ïðè ïîñëåäíåì çàïóñêå îêíî áûëî ñâåðíóòî (95)
                                                   ' 0003h Ïðè ïîñëåäíåì çàïóñêå îêíî áûëî ðàçâåðíóòî (95)
            WINDOWSVMM.Uknown17 = &HFFFF&
            WINDOWSVMM.Uknown18 = &HFFFF&
            WINDOWSVMM.WndRightExt  = &HFFFF&
            WINDOWSVMM.WndBottomExt = &HFFFF&
            WINDOWSVMM.WndLeft   = 0  ' Áåñïîëåçíî
            WINDOWSVMM.WndTop    = 0
            WINDOWSVMM.WndRight  = 0
            WINDOWSVMM.WndBottom = 0
            WINDOWSVMM.Uknown20  = 1
      
            szPifData = PIFEX + PIFEX_TITLE + WINDOWS386_TITLE + WINDOWS386 + WINDOWSVMM_TITLE + WINDOWSVMM
            hPifFile = CreateFile (ByVal StrPtr(szPIFPath), %GENERIC_WRITE, 0, ByVal 0, %CREATE_ALWAYS, %FILE_ATTRIBUTE_HIDDEN, ByVal 0)
            If hPifFile <> %INVALID_HANDLE_VALUE Then
               i = Len(szPifData)
               If WriteFile (hPifFile, ByVal StrPtr(szPifData), i, j, ByVal 0) = 0 Then Else If j = i Then Function = 1
               CloseHandle hPifFile
            End If
         End Function
      ------------------

      Comment

      Working...
      X