<ΠΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ> "%1" v
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠ΅ Π΅ΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΈ ΠΎΡΠΊΡΡΠ²Π°ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΠ°ΠΉΠ» Π² ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅. Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎΡ ΠΊΠΎΠ΄ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ (Π»ΠΈΡΡΠΈΠ½Π³ 1.47).
ΠΠΈΡΡΠΈΠ½Π³ 1.47. ΠΠ½Π°Π»ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈprocedure TDKSViewMainForm.FormShow(Sender: TObject);
var
OpenForView: BΠΎΠΎlean;
begin
// ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ Π½Π°Π»ΠΈΡΠΈΠ΅ ΠΊΠ»ΡΡΠ° "/v" Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°
OpenForView := (ParamCount > 1) and (CompareText(ParamStr(2), '/v') = 0);
if ParamCount > 0 then OpenFile(ParamStr(1), OpenForView);
...
end;
B Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΠ»ΡΡΠ°ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ Π±ΠΎΠ»ΡΡΠ΅ΠΌ ΡΠΈΡΠ»Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ Π΄Π»Ρ Π°ΡΡΠΎΡΠΈΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°) Π°Π½Π°Π»ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π±ΡΠ΄Π΅Ρ ΡΠ»ΠΎΠΆΠ½Π΅Π΅, Π½ΠΎ Π΅Π³ΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΠΎΡΡΠ°Π½ΡΡΡΡ ΡΠ΅ΠΌΠΈ ΠΆΠ΅.
1.3.2.3. ΠΠΎΠΈΡΠΊ ΡΠΆΠ΅ Π·Π°ΠΏΡΡΠ΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
ΠΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ Π΄Π°Π²Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ Π²ΡΠΎΡΠΎΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π 16-ΡΠ°Π·ΡΡΠ΄Π½ΡΡ Π²Π΅ΡΡΠΈΡΡ Windows Π²ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡ Π² ΠΎΠ΄Π½ΠΎΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅, ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΈΠ· Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ HPrevInstance ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π»ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ ΠΊΠΎΠΏΠΈΠΈ. ΠΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ HPrevInstance ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠ³Π»Π° Π½Π°ΠΉΡΠΈ ΡΠ²ΠΎΠΉ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΈΠ»ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΡΡΠΎ Π΄ΡΡΠ³ΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² Π½Π΅Ρ, Π΅ΡΠ»ΠΈ HPrevInstance ΡΠ°Π²Π½Π° Π½ΡΠ»Ρ. Π 32-ΡΠ°Π·ΡΡΠ΄Π½ΡΡ Π²Π΅ΡΡΠΈΡΡ ΡΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π΄Π»Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡΡΠ°Π²Π»Π΅Π½Π°, Π½ΠΎ Π²ΡΠ΅Π³Π΄Π° ΡΠ°Π²Π½Π° Π½ΡΠ»Ρ, Ρ.ΠΊ. ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ°Ρ ΠΊΠΎΠΏΠΈΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² ΡΠ²ΠΎΠ΅ΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅, ΠΈ Π΅Π΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ»Π°. ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΡΠΆΠ΅ Π·Π°ΠΏΡΡΠ΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ, ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ Π²ΡΠΊΡΡΡΠΈΠ²Π°ΡΡΡΡ ΡΠ²ΠΎΠΈΠΌΠΈ ΡΠΈΠ»Π°ΠΌΠΈ.
ΠΠ»Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΡΠΆΠ΅ Π·Π°ΠΏΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π°Π²ΡΠΎΡΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ (ΠΌΡΡΡΠ΅ΠΊΡΡ, ΡΠ΅ΠΌΠ°ΡΠΎΡΡ, Π°ΡΠΎΠΌΡ ΠΈ Ρ.ΠΏ.). ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΡΠ°Π΅ΡΡΡ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΊΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ. ΠΡΠ»ΠΈ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π½, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° "ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ", ΡΡΠΎ ΠΎΠ½Π° β Π²ΡΠΎΡΠ°Ρ ΠΊΠΎΠΏΠΈΡ, ΠΈ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ. ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° β Ρ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΌ ΡΠ°ΠΊΡ Π½Π°Π»ΠΈΡΠΈΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ ΠΊΠΎΠΏΠΈΠΈ, Π½ΠΎ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ. Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π·Π°Π΄Π°ΡΠ° ΡΠΈΡΠ΅: ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π°ΠΊΡΠΈΠ²ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ, Π° Π΅ΡΠ»ΠΈ Π²ΡΠΎΡΠΎΠΌΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ Π±ΡΠ»Π° ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π° Π½Π΅ΠΏΡΡΡΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°Ρ ΡΡΡΠΎΠΊΠ°, ΠΏΠ΅ΡΠ²ΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΡ ΡΡΡΠΎΠΊΡ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π½Π°ΠΌ Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ.
ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ Π½Π°ΠΌ ΠΏΠΎΠ΄ΠΎΠΉΠ΄ΡΡ ΠΏΠΎΡΡΠΎΠ²ΡΠ΅ ΡΡΠΈΠΊΠΈ (mailslots). ΠΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΡΡΠΎΡΠΎΠ½Π½Π΅ΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ (Π½ΠΈΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅Π³ΠΎ Ρ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΠΏΠΎΡΡΠΎΠΉ ΡΡΠΈ ΠΏΠΎΡΡΠΎΠ²ΡΠ΅ ΡΡΠΈΠΊΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡΡ). ΠΠΎΠ΄ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ Π·Π΄Π΅ΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡΡΡ Π½Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Windows, Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΉ Π½Π°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ (Π·Π΄Π΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ ΡΠΊΠΎΡΠ΅Π΅ ΡΠ΅ΡΠΌΠΈΠ½ "Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΠ°", Π° Π½Π΅ "ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅"). ΠΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΎΡΡΠΎΠ²ΡΠΉ ΡΡΠΈΠΊ ΠΈΠΌΠ΅Π΅Ρ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈΠΌΡ. ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΠΊΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠΎΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΡΠΈΠΊΠ° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ. Π‘Π½Π°ΡΠ°Π»Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΡΠ°Π΅ΡΡΡ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠΎΡΡΠΎΠ²ΡΠΉ ΡΡΠΈΠΊ ΠΊΠ°ΠΊ ΡΠ΅ΡΠ²Π΅Ρ. ΠΡΠ»ΠΈ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠΉ ΡΡΠΈΠΊ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, ΡΠΎ ΠΎΠ½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΊ Π½Π΅ΠΌΡ ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ²ΠΎΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΈ Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΡ. Π‘Π΅ΡΠ²Π΅ΡΠΎΠΌ Π² ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π·Π°ΠΏΡΡΡΠΈΠ²ΡΠΈΠΉΡΡ ΠΏΠ΅ΡΠ²ΡΠΌ, β ΠΎΠ½-ΡΠΎ ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠΎΡΡΠΎΠ²ΡΠΉ ΡΡΠΈΠΊ. ΠΡΡΠ°Π»ΡΠ½ΡΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°ΠΌ ΠΎΡΡΠ°Π½Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅ΠΌΡ Π΄Π°Π½Π½ΡΠ΅.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅Π ΡΠ»ΡΡΠ°Π΅ Π°Π²Π°ΡΠΈΠΉΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠ°ΠΌΠ° Π·Π°ΠΊΡΠΎΠ΅Ρ Π²ΡΠ΅ ΠΎΡΠΊΡΡΡΡΠ΅ Π΅Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ²Π°Ρ ΠΊΠΎΠΏΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠ½ΡΡΠ° ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΈ Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ Π·Π°ΠΊΡΡΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΏΠΎΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΡΠΈΠΊΠ°, ΡΡΠΈΠΊ Π±ΡΠ΄Π΅Ρ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ ΠΈ Π½Π΅ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ Π½ΠΎΠ²ΡΡ ΠΊΠΎΠΏΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠΎΡΡΠΎΠ²ΡΠΉ ΡΡΠΈΠΊ Π»ΡΡΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π½ΡΡΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½Π΅ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ ΡΠΎΡΠΌΡ, Π° Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±ΡΡΠ½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ Π½Π΅ ΠΈΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΊΠΎΠ΄ Π² dpr-ΡΠ°ΠΉΠ»Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 1.48.
ΠΠΈΡΡΠΈΠ½Π³ 1.48 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΡΠΈΠΊΠ° Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°const
MailslotName = '\\.\mailslot\DelphiKingomSample_Viewer_FileCommand';
EventName = 'DelphiKingdomSamplΠ΅_Viewer_Command_Event';
var
ClientMailslotHandle: THandle;
Letter: string;
OpenForView: Boolean;
BytesWritten: DWORD;
begin
// ΠΡΡΠ°Π΅ΠΌΡΡ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠΎΡΡΠΎΠ²ΡΠΉ ΡΡΠΈΠΊ
ServerMailslotHandle := CreateMailSlot(MailslotName, 0,
MAILSLOT_WAIT_FOREVER, nil);
if ServerMailslotHandle = INVALID_HANDLE_VALUE then
begin
if GetLastError = ERROR_ALREADY_EXISTS then
begin
// ΠΡΠ»ΠΈ ΡΠ°ΠΊΠΎΠΉ ΡΡΠΈΠΊ ΡΠΆΠ΅ Π΅ΡΡΡ, ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ ΠΊ Π½Π΅ΠΌΡ, ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ
ClientMailslotHandle := CreateFile(MailslotName, GENERIC_WRITE,
FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
// Π Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΡΠΎΡΠΌΠΈΡΡΠ΅ΠΌ
// ΡΡΡΠΎΠΊΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ. ΠΠ΅ΡΠ²ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ»
// ΡΡΡΠΎΠΊΠΈ - ΠΊΠΎΠΌΠ°Π½Π΄Π°:
// e - ΠΎΡΠΊΡΡΡΡ ΡΠ°ΠΉΠ» Π΄Π»Ρ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
// v β ΠΎΡΠΊΡΡΡΡ ΡΠ°ΠΉΠ» Π΄Π»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ°
// s β ΠΏΡΠΎΡΡΠΎ Π°ΠΊΡΠΈΠ²ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ
// ΠΠ»Ρ ΠΊΠΎΠΌΠ°Π½Π΄ e ΠΈ v ΠΊ ΡΡΡΠΎΠΊΠ΅, Π½Π°ΡΠΈΠ½Π°Ρ ΡΠΎ 2-Π³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π°,
// Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°
if ParamCount > 0 then
begin
OpenForView := (ParamCount > 1) and
(CompareText(ParamStr(2), '/v') = 0);
if OpenForView then Letter := 'v' + ParamStr(1)
elsΠ΅ Letter := 'e' + ParamStr(1);
end
else Letter := 's';
// ΠΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π² ΠΏΠΎΡΡΠΎΠ²ΡΠΉ ΡΡΠΈΠΊ
WriteFile(ClientMailslotHandle, Letter[1], Length(Letter),
BytesWritten, nil);
// Π‘ΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΎΠ± ΠΎΡΠΏΡΠ°Π²ΠΊΠ΅ Π΄Π°Π½Π½ΡΡ ΡΠ΅ΡΠ΅Π· ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅
CommandEvent := OpenEvent(EVENT_MODIFY_STATE, False, EventName);
SetEvent(CommandEvent);
// ΠΠ°ΠΊΡΡΠ²Π°Π΅ΠΌ Π²ΡΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ
CloseHandle(CommandEvent);
CloseHandle(ClientMailslotHandle);
end;
end
else
begin
// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠΎΠ±ΡΡΠΈΠ΅ Π΄Π»Ρ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎ ΠΏΠΎΡΡΡΠΏΠ»Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΡΡ
CommandEvent := CreateEvent(nil, False, False, EventName);
// ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΎΠ±ΡΡΠ½ΡΠΉ Π΄Π»Ρ VCL-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΡΠΈΠΊΠ»
Application.Initialize;
Application.CreateForm(TDKSViewMainForm, DKSViewMainForm);
Application.Run;
// ΠΠ°ΠΊΡΡΠ²Π°Π΅ΠΌ Π²ΡΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ
CloseHandle(ServerMailslotHandle);
CloseHandle(CommandEvent);
end;
end.
Π’Π΅ΠΏΠ΅ΡΡ ΠΎΡΡΠ°Π»ΠΎΡΡ "Π½Π°ΡΡΠΈΡΡ" ΠΏΠ΅ΡΠ²ΡΡ ΠΊΠΎΠΏΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°ΡΡ ΠΌΠΎΠΌΠ΅Π½Ρ, ΠΊΠΎΠ³Π΄Π° Π² ΠΏΠΎΡΡΠΎΠ²ΠΎΠΌ ΡΡΠΈΠΊΠ΅ ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΈ Π·Π°Π±ΠΈΡΠ°ΡΡ ΠΈΡ ΠΎΡΡΡΠ΄Π°. ΠΡΠ»ΠΎ Π±Ρ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ ΠΏΡΠΈ ΠΏΠΎΡΡΡΠΏΠ»Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΡΡ Π³Π»Π°Π²Π½Π°Ρ ΡΠΎΡΠΌΠ° ΠΏΠΎΠ»ΡΡΠ°Π»Π° Π±Ρ ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, Π½ΠΎ Π³ΠΎΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ°, ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ. ΠΠ· ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΉΡΠΈ, Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π² ΡΠΎΠ±ΡΡΠΈΡ.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅Π‘ΠΎΠ±ΡΡΠΈΡ β ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ΡΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅. Π‘ΠΎΠ±ΡΡΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²Π·Π²Π΅Π΄Π΅Π½ΠΎ ΠΈ ΡΠ±ΡΠΎΡΠ΅Π½ΠΎ. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ WaitForSingleObject ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ Π½ΠΈΡΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ. ΠΏΠΎΠΊΠ° ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²Π·Π²Π΅Π΄Π΅Π½ΠΎ. ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΡ ΠΎΠ΄ΠΈΡ Π·Π° ΡΠ°ΠΌΠΊΠΈ Π½Π°ΡΠ΅ΠΉ ΠΊΠ½ΠΈΠ³ΠΈ; ΠΎΠ½ΠΈ Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Π½Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² [2].
Π ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅, ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΊΡΡΡΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° ΡΠΈΡΡΠ΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΠΌΠ° Π²Π·Π²ΠΎΠ΄ΠΈΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΏΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΡΡ ΠΏΠΎΡΡΠΎΠ²ΡΠΌ ΡΡΠΈΠΊΠΎΠΌ, Π½ΠΎ ΠΏΠ΅ΡΠ΅ΠΊΡΡΡΡΠΉ Π²Π²ΠΎΠ΄-Π²ΡΠ²ΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Π² Windows 9Ρ /ΠΠ ΠΈ Π½Π° ΠΏΠΎΡΡΠΎΠ²ΡΠ΅ ΡΡΠΈΠΊΠΈ Π½Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ. Π§ΡΠΎΠ±Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ³Π»ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π² Windows NT/2000/XP, ΠΌΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΊΡΡΡΡΠΉ Π²Π²ΠΎΠ΄-Π²ΡΠ²ΠΎΠ΄.
Π‘ΠΎΠ±ΡΡΠΈΡ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ Ρ ΠΈΡ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π·Π½ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ. Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠ΅ΡΠ²Π°Ρ ΠΊΠΎΠΏΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ CreateEvent ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠΎΠ±ΡΡΠΈΠ΅, Π° ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΊΠΎΠΏΠΈΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ OpenEvent ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΡΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ ΠΈ Π²Π·Π²ΠΎΠ΄ΡΡ Π΅Π³ΠΎ. ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠ»Π°ΡΡ ΡΠΈΠ³Π½Π°Π» ΠΎ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΡΡ Π² ΠΏΠΎΡΡΠΎΠ²ΠΎΠΌ ΡΡΠΈΠΊΠ΅. ΠΠ»Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π² ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½Π°Ρ Π½ΠΈΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΈ, Π΄ΠΎΠΆΠ΄Π°Π²ΡΠΈΡΡ, ΠΏΠΎΡΡΠ»Π°Π΅Ρ Π³Π»Π°Π²Π½ΠΎΠΉ ΡΠΎΡΠΌΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ (ΡΡΠ° Π½ΠΈΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΠΎΡΡΠΈ Π²ΡΠ΅ Π²ΡΠ΅ΠΌΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ, Ρ.Π΅. ΠΊΠ²Π°Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊ Π·Π°Π΄Π°Ρ Π΅ΠΉ Π½Π΅ Π²ΡΠ΄Π΅Π»ΡΠ΅Ρ, ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π°Π»ΠΈΡΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Π² Π³Π»Π°Π²Π½ΠΎΠΉ Π½ΠΈΡΠΈ ΠΏΠΎ ΡΠ°ΠΉΠΌΠ΅ΡΡ ΠΎΡΠ½ΡΠ»Π° Π±Ρ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ²). ΠΡΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΈ Π±Π΅ΡΠ΅ΡΡΡ ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° WM_USER, Ρ.ΠΊ. Π΅Π³ΠΎ ΡΠΈΡΠΎΠΊΠΎΠ²Π΅ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠ°ΡΡΡΠ»ΠΊΠΈ Π½Π΅ Π±ΡΠ΄Π΅Ρ. ΠΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠΎΡΠΌΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΊΠΎΠ΄, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 1.49.
ΠΠΈΡΡΠΈΠ½Π³ 1.49. Π Π΅Π°ΠΊΡΠΈΡ ΡΠΎΡΠΌΡ Π½Π° ΠΏΠΎΡΡΡΠΏΠ»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Π² ΠΏΠΎΡΡΠΎΠ²ΡΠΉ ΡΡΠΈΠΊ// Π Π΅Π°ΠΊΡΠΈΡ Π½Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΎΡ Π΄ΡΡΠ³ΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
procedure TDKSViewMainForm.WMCommandArrived(var Message: TMessage);
var
Letter: string;
begin
// ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ΅ΡΠ΅Π΄Π½ΠΈΠΉ ΠΏΠ»Π°Π½
GoToForeground;
// ΠΠΎΠΊΠ° Π΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΡΠΈΡΠ°Π΅ΠΌ ΠΈΡ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ
Letter := ReadStringFromMailslot;