powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как можно узнать имя ярлыка, который запускает приложение Visual FoxPro ?
3 сообщений из 3, страница 1 из 1
Как можно узнать имя ярлыка, который запускает приложение Visual FoxPro ?
    #36902754
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здраствуйте.
Как можно узнать имя ярлыка, который запускает приложение Visual FoxPro из запущенного приложения ?
Заранее спасибо.
...
Рейтинг: 0 / 0
Как можно узнать имя ярлыка, который запускает приложение Visual FoxPro ?
    #36905472
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А это в принципе возможно? Разве ярлык не есть некий усеченный вариант BAT-файла? Ну, или командной строки? Как мне кажется, факт запуска ярлыка никак и нигде не журналируется. А на момент запуска собственно приложения ярлык уже свое отработал...

Разве что, предусмотреть в самой программе некий входной параметр и озаботится изменением этого параметра в самом ярылыке.

Ну, есть еще сборщик мусора, который периодически выдает сообщение "На рабочем столе есть не используемые ярлыки". Предположительно, он это дело отслеживает по дате последнего обращения из реквизитов файла LNK. Можно на этом сыграть, сравнивая с датой/временем запуска приложения, хотя, понятно, это будет очень приблизительно. Из-за низкой точности измерения времени (кажется, для реквизитов файлов требовать точность меньше 1 секунды - бессмысленно)
...
Рейтинг: 0 / 0
Как можно узнать имя ярлыка, который запускает приложение Visual FoxPro ?
    #36919320
Игорь2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я нашел код здесь http://www.news2news.com/vfp/



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
* Reading STARTUPINFO structure for the current VFP session
Do Declare

*| typedef struct _STARTUPINFO {
*|   DWORD   cb;                 4 
*|   LPTSTR  lpReserved;         4 
*|   LPTSTR  lpDesktop;          4 
*|   LPTSTR  lpTitle;            4 
*|   DWORD   dwX;                4 
*|   DWORD   dwY;                4 
*|   DWORD   dwXSize;            4 
*|   DWORD   dwYSize;            4 
*|   DWORD   dwXCountChars;      4 
*|   DWORD   dwYCountChars;      4 
*|   DWORD   dwFillAttribute;    4 
*|   DWORD   dwFlags;            4 
*|   WORD    wShowWindow;        2 
*|   WORD    cbReserved2;        2 
*|   LPBYTE  lpReserved2;        4 
*|   HANDLE  hStdInput;          4 
*|   HANDLE  hStdOutput;         4 
*|   HANDLE  hStdError;          4 
*| } STARTUPINFO, *LPSTARTUPINFO; total:  68  bytes

Local lcStartupInfo, lnAddr

* do not use SPACE( 250 ) instead; there must be strict zeroes
lcStartupInfo = Repli(Chr( 0 ),  250 )

= GetStartupInfo(@lcStartupInfo)

? "Byte size:", buf2dword(Substr(lcStartupInfo,  1 , 4 ))
? "lpReserved:", buf2dword(Substr(lcStartupInfo,  5 , 4 ))

* WinNT/XP/@K returns a string value; WinMe -- empty string
? "lpDesktop string:", getStr(buf2dword(Substr(lcStartupInfo,  9 , 4 )))

* WinNT/XP/2K: possibly the shortcut to your VFP application
* or a full path to the executable if started directly
* WinMe = empty string
lcShortcut = getStr(buf2dword(Substr(lcStartupInfo,  13 , 4 )))

Return Getwordnum(lcShortcut, Getwordcount(lcShortcut, [\]), [\])

*!*	? "lpTitle string:", lcShortcut

*!*	? "dwX:", buf2dword(Substr(lcStartupInfo,  17 , 4 ))
*!*	? "dwY:", buf2dword(Substr(lcStartupInfo,  21 , 4 ))
*!*	? "dwXSize:", buf2dword(Substr(lcStartupInfo,  25 , 4 ))
*!*	? "dwYSize:", buf2dword(Substr(lcStartupInfo,  29 , 4 ))
*!*	? "dwXCountChars:", buf2dword(Substr(lcStartupInfo,  33 , 4 ))
*!*	? "dwYCountChars:", buf2dword(Substr(lcStartupInfo,  37 , 4 ))
*!*	? "dwFillAttribute:", buf2dword(Substr(lcStartupInfo,  41 , 4 ))
*!*	? "dwFlags:", buf2dword(Substr(lcStartupInfo,  45 , 4 ))
*!*	? "wShowWindow:", buf2word(Substr(lcStartupInfo,  49 , 2 ))
*!*	? "cbReserved2:", buf2word(Substr(lcStartupInfo,  51 , 2 ))
*!*	? "lpReserved2:", buf2dword(Substr(lcStartupInfo,  53 , 4 ))
*!*	? "hStdInput:", buf2dword(Substr(lcStartupInfo,  57 , 4 ))
*!*	? "hStdOutput:", buf2dword(Substr(lcStartupInfo,  61 , 4 ))
*!*	? "hStdError:", buf2dword(Substr(lcStartupInfo,  65 , 4 ))

Function num2dword(lnValue)
   #Define m0 0x0000100
   #Define m1 0x0010000
   #Define m2 0x1000000
   If lnValue <  0 
      lnValue = 0x100000000 + lnValue
   Endif
   Local b0, b1, b2, b3
   b3 = Int(lnValue/m2)
   b2 = Int((lnValue - b3*m2)/m1)
   b1 = Int((lnValue - b3*m2 - b2*m1)/m0)
   b0 = Mod(lnValue, m0)
   Return Chr(b0)+Chr(b1)+Chr(b2)+Chr(b3)

Function buf2dword(lcBuffer)
   Return Asc(Substr(lcBuffer,  1 , 1 )) + ;
      Asc(Substr(lcBuffer,  2 , 1 )) *  256  +;
      Asc(Substr(lcBuffer,  3 , 1 )) *  65536  +;
      Asc(Substr(lcBuffer,  4 , 1 )) *  16777216 

Function buf2word(lcBuffer)
   Return Asc(Substr(lcBuffer,  1 , 1 )) + ;
      Asc(Substr(lcBuffer,  2 , 1 )) *  256 

Function getStr(lnAddr)
   Local lcBuffer
   lcBuffer = Repli(Chr( 0 ),  128 )
   = CopyMemory(@lcBuffer, lnAddr, Len(lcBuffer))

   If At(Chr( 0 ), lcBuffer) <>  0 
      lcBuffer = Substr(lcBuffer,  1 , At(Chr( 0 ), lcBuffer)- 1 )
   Endif
   Return  lcBuffer

Procedure Declare
   Declare GetStartupInfo In kernel32 String @lpStartupInfo

   Declare RtlMoveMemory In kernel32 As CopyMemory  String @Destination, Integer Source, Integer nLength




Только для Windows 2008 server код возвращает имя bat файла который запускается из ярлыка. Bat файл же в свою очередь запускает приложение FoxPro.
для XP возвращается именно имя ярлыка а не bat файла.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как можно узнать имя ярлыка, который запускает приложение Visual FoxPro ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]