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

  • Semen Matusovski
    replied
    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
    ------------------

    Leave a comment:


  • Semen Matusovski
    replied
    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
    ------------------

    Leave a comment:


  • Semen Matusovski
    started a topic PBWIN7.0/PBCC3.0: Creating Lnk and PIF

    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



    ------------------
Working...
X