<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=356837&amp;view=findpost&amp;p=3134737</guid>
        <pubDate>Sat, 12 May 2012 08:21:27 +0000</pubDate>
        <title>Как зарегистрировать свой протокол?</title>
        <link>https://forum.sources.ru/index.php?showtopic=356837&amp;view=findpost&amp;p=3134737</link>
        <description><![CDATA[Rouse_: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=356837&view=findpost&p=3134626'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fr0sT &#064; <time class="tag-quote__quoted-time" datetime="2012-05-12T10:11:50+04:00">12.05.12, 06:11</time></span><div class='quote '>Не проще ли было обойтись одними пайпами? </div></div><br>
Да выбор средства синхронизации по сути результата не меняет, использовал то, что проще...]]></description>
        <author>Rouse_</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=356837&amp;view=findpost&amp;p=3134626</guid>
        <pubDate>Sat, 12 May 2012 06:11:50 +0000</pubDate>
        <title>Как зарегистрировать свой протокол?</title>
        <link>https://forum.sources.ru/index.php?showtopic=356837&amp;view=findpost&amp;p=3134626</link>
        <description><![CDATA[Fr0sT: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=356837&view=findpost&p=3134312'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Rouse_ &#064; <time class="tag-quote__quoted-time" datetime="2012-05-11T14:34:19+00:00">11.05.12, 14:34</time></span><div class='quote '>ActivatePreviosInstance</div></div><br>
Previo<strong class='tag-b'>U</strong>s  O:-)<br>
А так хороший код, всё понятно. Только вот великоват арсенал применяемых средств IPC: мьютекс, файлмаппинг, да еще и wm_copydata. Не проще ли было обойтись одними пайпами?]]></description>
        <author>Fr0sT</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=356837&amp;view=findpost&amp;p=3134312</guid>
        <pubDate>Fri, 11 May 2012 14:34:19 +0000</pubDate>
        <title>Как зарегистрировать свой протокол?</title>
        <link>https://forum.sources.ru/index.php?showtopic=356837&amp;view=findpost&amp;p=3134312</link>
        <description><![CDATA[Rouse_: Вот тебе кусок инициализирующего модуля, идея должна быть понятна:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit uSI5.StartUp;</div><div class="code_line">&nbsp;</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;Windows,</div><div class="code_line">&nbsp;&nbsp;Messages,</div><div class="code_line">&nbsp;&nbsp;Classes,</div><div class="code_line">&nbsp;&nbsp;SysUtils,</div><div class="code_line">&nbsp;&nbsp;Graphics,</div><div class="code_line">&nbsp;&nbsp;Forms,</div><div class="code_line">&nbsp;&nbsp;Registry,</div><div class="code_line">&nbsp;&nbsp;ShellApi;</div><div class="code_line">&nbsp;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TInitializer = class</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp;FLink: string;</div><div class="code_line">&nbsp;&nbsp; &nbsp;FMutexHandle, FMMFHandle, FWnd: THandle;</div><div class="code_line">&nbsp;&nbsp; &nbsp;FLinkChange: TNotifyEvent;</div><div class="code_line">&nbsp;&nbsp;protected</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure ActivatePreviosInstance;</div><div class="code_line">&nbsp;&nbsp; &nbsp;function CheckSLinkHandler: Boolean;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure RegisterSLinkHandler(CheckIsAdmin: Boolean = True);</div><div class="code_line">&nbsp;&nbsp; &nbsp;function GetOtherInstanceHandle: THandle;</div><div class="code_line">&nbsp;&nbsp; &nbsp;function CheckOneInstance: Boolean;</div><div class="code_line">&nbsp;&nbsp; &nbsp;function NeedReinstallSLinkHandler: Boolean;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure InitFileMapping;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure ReleaseFileMapping;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure CheckSLink;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure WndProc(var Message: TMessage);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure ProcessCopyData(Msg: TWMCopyData);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure DoLinkChange;</div><div class="code_line">...</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;&nbsp; &nbsp;constructor Create;</div><div class="code_line">&nbsp;&nbsp; &nbsp;destructor Destroy; override;</div><div class="code_line">...</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure ResetSLink;</div><div class="code_line">&nbsp;&nbsp; &nbsp;property SLink: string read FLink;</div><div class="code_line">&nbsp;&nbsp; &nbsp;property OnLinkChange: TNotifyEvent read FLinkChange write FLinkChange;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Initializer: TInitializer;</div><div class="code_line">&nbsp;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">const</div><div class="code_line">&nbsp;&nbsp;GInfoMutexName = &#39;GSI Client&#39;;</div><div class="code_line">&nbsp;&nbsp;GInfoMMF = &#39;GSI Client MMF&#39;;</div><div class="code_line">&nbsp;&nbsp;MagicWMCopyID = F4B1BE4;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;SLinkKeyName = &#39;slink&#39;;</div><div class="code_line">&nbsp;&nbsp;DefaultIconKey = SLinkKeyName + &#39;\DefaultIcon&#39;;</div><div class="code_line">&nbsp;&nbsp;CommandKey = SLinkKeyName + &#39;\shell\open\command&#39;;</div><div class="code_line">&nbsp;&nbsp;ReinstallSLinkCommand = &#39;reinstallslink&#39;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;function AllowSetForegroundWindow(dwProcessID: DWORD): BOOL; stdcall; external user32;</div><div class="code_line">&nbsp;</div><div class="code_line">{ TInitilizer }</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TInitializer.ActivatePreviosInstance;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;OtherInstanceHandle: THandle;</div><div class="code_line">&nbsp;&nbsp;PID: Cardinal;</div><div class="code_line">&nbsp;&nbsp;CopyDataStruct: TCopyDataStruct;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;OtherInstanceHandle := GetOtherInstanceHandle;</div><div class="code_line">&nbsp;&nbsp;if OtherInstanceHandle = INVALID_HANDLE_VALUE then Exit;</div><div class="code_line">&nbsp;&nbsp;GetWindowThreadProcessId(OtherInstanceHandle, PID);</div><div class="code_line">&nbsp;&nbsp;AllowSetForegroundWindow(PID);</div><div class="code_line">&nbsp;&nbsp;CopyDataStruct.dwData := MagicWMCopyID;</div><div class="code_line">&nbsp;&nbsp;CopyDataStruct.cbData := Length(FLink) * SizeOf(Char);</div><div class="code_line">&nbsp;&nbsp;if FLink &#60;&#62; &#39;&#39; then</div><div class="code_line">&nbsp;&nbsp; &nbsp;CopyDataStruct.lpData := @FLink[1];</div><div class="code_line">&nbsp;&nbsp;SendMessage(OtherInstanceHandle, WM_COPYDATA, 0, Integer(@CopyDataStruct));</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function TInitializer.NeedReinstallSLinkHandler: Boolean;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Result := FindCmdLineSwitch(ReinstallSLinkCommand, [&#39;-&#39;, &#39;/&#39;], True);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function TInitializer.CheckOneInstance: Boolean;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;FMutexHandle := CreateMutex(nil, False, PChar(GInfoMutexName));</div><div class="code_line">&nbsp;&nbsp;Result := GetLastError &#60;&#62; ERROR_ALREADY_EXISTS;</div><div class="code_line">&nbsp;&nbsp;if not Result then</div><div class="code_line">&nbsp;&nbsp; &nbsp;CloseHandle(FMutexHandle);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TInitializer.CheckSLink;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;I, Len: Integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Len := Length(SLinkProtocolPrefix);</div><div class="code_line">&nbsp;&nbsp;for I := 1 to ParamCount do</div><div class="code_line">&nbsp;&nbsp; &nbsp;if LowerCase(Copy(ParamStr(I), 1, Len)) = SLinkProtocolPrefix then</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;FLink := ParamStr(I);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Break;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function TInitializer.CheckSLinkHandler: Boolean;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Result := True;</div><div class="code_line">&nbsp;&nbsp;with TRegistry.Create do</div><div class="code_line">&nbsp;&nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp;RootKey := HKEY_CLASSES_ROOT;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if OpenKeyReadOnly(SLinkKeyName) then</div><div class="code_line">&nbsp;&nbsp; &nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if ReadString(&#39;&#39;) &#60;&#62; &#39;URL:Grand StroyInfo Protocol&#39; then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Result := False;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Exit;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if not ValueExists(&#39;URL Protocol&#39;) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Result := False;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Exit;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if ReadString(&#39;URL Protocol&#39;) &#60;&#62; &#39;&#39; then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Result := False;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Exit;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;CloseKey;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if OpenKeyReadOnly(DefaultIconKey) then</div><div class="code_line">&nbsp;&nbsp; &nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if AnsiLowerCase(ReadString(&#39;&#39;)) &#60;&#62; &#39;&quot;&#39; + AnsiLowerCase(ParamStr(0)) + &#39;&quot;, 0&#39; then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Result := False;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Exit;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;CloseKey;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if OpenKeyReadOnly(CommandKey) then</div><div class="code_line">&nbsp;&nbsp; &nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if AnsiLowerCase(ReadString(&#39;&#39;)) &#60;&#62; &#39;&quot;&#39; + AnsiLowerCase(ParamStr(0)) + &#39;&quot; &quot;%1&quot;&#39; then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Result := False;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Exit;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;CloseKey;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp;Free;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">constructor TInitializer.Create;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;if NeedReinstallSLinkHandler then</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;RegisterSLinkHandler(False);</div><div class="code_line">&nbsp;&nbsp; &nbsp;TerminateProcess(GetCurrentProcess, NO_ERROR);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;CheckSLink;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;if not CheckOneInstance then</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;ActivatePreviosInstance;</div><div class="code_line">&nbsp;&nbsp; &nbsp;TerminateProcess(GetCurrentProcess, ERROR_SERVICE_EXISTS);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;if SLink = &#39;&#39; then</div><div class="code_line">&nbsp;&nbsp; &nbsp;if not CheckSLinkHandler then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;RegisterSLinkHandler;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;InitFileMapping;</div><div class="code_line">&nbsp;&nbsp;ShowSplash;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">destructor TInitializer.Destroy;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;ReleaseFileMapping;</div><div class="code_line">&nbsp;&nbsp;CloseHandle(FMutexHandle);</div><div class="code_line">&nbsp;&nbsp;inherited;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TInitializer.DoLinkChange;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;if Assigned(FLinkChange) then</div><div class="code_line">&nbsp;&nbsp; &nbsp;FLinkChange(Self);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">...</div><div class="code_line">&nbsp;</div><div class="code_line">function TInitializer.GetOtherInstanceHandle: THandle;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;function ReadHandle: THandle;</div><div class="code_line">&nbsp;&nbsp;var</div><div class="code_line">&nbsp;&nbsp; &nbsp;MMFHandle: THandle;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Data: Pointer;</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;Result := INVALID_HANDLE_VALUE;</div><div class="code_line">&nbsp;&nbsp; &nbsp;MMFHandle := OpenFileMapping(FILE_MAP_READ, false, PChar(GInfoMMF));</div><div class="code_line">&nbsp;&nbsp; &nbsp;if MMFHandle = 0 then Exit;</div><div class="code_line">&nbsp;&nbsp; &nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Data := MapViewOfFile(MMFHandle, FILE_MAP_READ, 0, 0, 0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Data = nil then Exit;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Result := PInteger(Data)^;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;except</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// Другое приложение файл созадло, но еще ничего туда не записало..</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;on EAccessViolation do ;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;CloseHandle(MMFHandle);</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;I: Integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;for I := 0 to 9 do</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;Result := ReadHandle;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if Result &#60;&#62; INVALID_HANDLE_VALUE then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Exit;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Sleep(100);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">...</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TInitializer.InitFileMapping;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;MMFData: Pointer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;FWnd := Classes.AllocateHWnd(WndProc);</div><div class="code_line">&nbsp;&nbsp;FMMFHandle := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE,</div><div class="code_line">&nbsp;&nbsp; &nbsp;0, 4096, PChar(GInfoMMF));</div><div class="code_line">&nbsp;&nbsp;if FMMFHandle &#60;&#62; 0 then</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;MMFData := MapViewOfFile(FMMFHandle, FILE_MAP_WRITE, 0, 0, 0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;if MMFData &#60;&#62; nil then</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;PHandle(MMFData)^ := FWnd;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;UnmapViewOfFile(MMFData);</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TInitializer.ProcessCopyData(Msg: TWMCopyData);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;if Msg.CopyDataStruct^.dwData &#60;&#62; MagicWMCopyID then Exit;</div><div class="code_line">&nbsp;&nbsp;SetLength(FLink, Msg.CopyDataStruct.cbData div SizeOf(Char));</div><div class="code_line">&nbsp;&nbsp;CopyMemory(Pointer(FLink), Msg.CopyDataStruct.lpData,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Msg.CopyDataStruct.cbData);</div><div class="code_line">&nbsp;&nbsp;ReplyMessage(0);</div><div class="code_line">&nbsp;&nbsp;SendMessage(Application.Handle, WM_SYSCOMMAND, SC_RESTORE, 0);</div><div class="code_line">&nbsp;&nbsp;SetForegroundWindow(Application.Handle);</div><div class="code_line">&nbsp;&nbsp;DoLinkChange;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TInitializer.RegisterSLinkHandler(CheckIsAdmin: Boolean);</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;SEI: TShellExecuteInfo;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;case IsAdmin of</div><div class="code_line">&nbsp;&nbsp; &nbsp;csError:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if CheckIsAdmin then Exit;</div><div class="code_line">&nbsp;&nbsp; &nbsp;csLimitedUser:</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if not CheckIsAdmin then Exit;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if MessageBox(0,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#39;Служебный протокол ГСИ не зарегистрирован, выполнить регистрацию сейчас?&#39;,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#39;ГСИ&#39;, MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON1) = IDNO then Exit;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;SEI.cbSize := SizeOf(TShellExecuteInfo);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;SEI.lpFile := PChar(ParamStr(0));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;SEI.lpDirectory := PChar(ExtractFilePath(ParamStr(0)));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;SEI.lpVerb := PChar(&#39;runas&#39;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;SEI.fMask := SEE_MASK_NOCLOSEPROCESS;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;SEI.nShow := SW_HIDE;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;SEI.hInstApp := HInstance;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;SEI.lpParameters := PChar(&#39;-&#39; + ReinstallSLinkCommand);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ShellExecuteEx(@SEI);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Exit;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;with TRegistry.Create do</div><div class="code_line">&nbsp;&nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp;RootKey := HKEY_CLASSES_ROOT;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if OpenKey(SLinkKeyName, True) then</div><div class="code_line">&nbsp;&nbsp; &nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;WriteString(&#39;&#39;, &#39;URL:Grand StroyInfo Protocol&#39;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;WriteString(&#39;URL Protocol&#39;, &#39;&#39;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;CloseKey;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if OpenKey(DefaultIconKey, True) then</div><div class="code_line">&nbsp;&nbsp; &nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;WriteString(&#39;&#39;, &#39;&quot;&#39; + ParamStr(0) + &#39;&quot;, 0&#39;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;CloseKey;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if OpenKey(CommandKey, True) then</div><div class="code_line">&nbsp;&nbsp; &nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;WriteString(&#39;&#39;, &#39;&quot;&#39; + ParamStr(0) + &#39;&quot; &quot;%1&quot;&#39;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;CloseKey;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp;Free;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TInitializer.ReleaseFileMapping;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Classes.DeallocateHWnd(FWnd);</div><div class="code_line">&nbsp;&nbsp;CloseHandle(FMMFHandle);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TInitializer.ResetSLink;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;FLink := &#39;&#39;;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">...</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TInitializer.WndProc(var Message: TMessage);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;if Message.Msg = WM_COPYDATA then</div><div class="code_line">&nbsp;&nbsp; &nbsp;ProcessCopyData(TWMCopyData(Message));</div><div class="code_line">&nbsp;&nbsp;inherited;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">initialization</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Initializer := TInitializer.Create;</div><div class="code_line">&nbsp;</div><div class="code_line">finalization</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;Initializer.Free;</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>Rouse_</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=356837&amp;view=findpost&amp;p=3134192</guid>
        <pubDate>Fri, 11 May 2012 12:26:45 +0000</pubDate>
        <title>Как зарегистрировать свой протокол?</title>
        <link>https://forum.sources.ru/index.php?showtopic=356837&amp;view=findpost&amp;p=3134192</link>
        <description><![CDATA[BadBoyAlex: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=356837&view=findpost&p=3133184'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Rouse_ &#064; <time class="tag-quote__quoted-time" datetime="2012-05-10T08:49:35+00:00">10.05.12, 08:49</time></span><div class='quote '>либо передаем ее уже запущенному экземпляру программы)</div></div><br>
А можно поподробнее? Просто раньше с этим не сталкивался...]]></description>
        <author>BadBoyAlex</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=356837&amp;view=findpost&amp;p=3133247</guid>
        <pubDate>Thu, 10 May 2012 09:39:22 +0000</pubDate>
        <title>Как зарегистрировать свой протокол?</title>
        <link>https://forum.sources.ru/index.php?showtopic=356837&amp;view=findpost&amp;p=3133247</link>
        <description><![CDATA[CodeMonkey: MSDN: <a class='tag-url' href='http://msdn.microsoft.com/en-us/library/aa767914(VS.85).aspx' target='_blank'>http://msdn.microsoft.com/en-us/library/aa767914(VS.85).aspx</a>]]></description>
        <author>CodeMonkey</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=356837&amp;view=findpost&amp;p=3133210</guid>
        <pubDate>Thu, 10 May 2012 09:11:51 +0000</pubDate>
        <title>Как зарегистрировать свой протокол?</title>
        <link>https://forum.sources.ru/index.php?showtopic=356837&amp;view=findpost&amp;p=3133210</link>
        <description><![CDATA[Anatoly Podgoretsky: Смотри ссылку в реестре PROTOCOLS]]></description>
        <author>Anatoly Podgoretsky</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=356837&amp;view=findpost&amp;p=3133184</guid>
        <pubDate>Thu, 10 May 2012 08:49:35 +0000</pubDate>
        <title>Как зарегистрировать свой протокол?</title>
        <link>https://forum.sources.ru/index.php?showtopic=356837&amp;view=findpost&amp;p=3133184</link>
        <description><![CDATA[Rouse_: У нас программа умеет работать с ссылками вида slink://document/vid=100?rid=2?ps=3?pl=3<br>
<br>
Соответственно вот так выглядит регистрация в реестре:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Windows Registry Editor Version 5.00</div><div class="code_line">&nbsp;</div><div class="code_line">[HKEY_CLASSES_ROOT\slink]</div><div class="code_line">@=&quot;URL:Grand StroyInfo Protocol&quot;</div><div class="code_line">&quot;URL Protocol&quot;=&quot;&quot;</div><div class="code_line">&quot;EditFlags&quot;=dword:00000002</div><div class="code_line">&nbsp;</div><div class="code_line">[HKEY_CLASSES_ROOT\slink\DefaultIcon]</div><div class="code_line">@=&quot;\&quot;S:\Grand2010\Modules\StroyInfo 5\Release\StroyInfo.exe\&quot;, 0&quot;</div><div class="code_line">&nbsp;</div><div class="code_line">[HKEY_CLASSES_ROOT\slink\shell]</div><div class="code_line">&nbsp;</div><div class="code_line">[HKEY_CLASSES_ROOT\slink\shell\open]</div><div class="code_line">&nbsp;</div><div class="code_line">[HKEY_CLASSES_ROOT\slink\shell\open\command]</div><div class="code_line">@=&quot;\&quot;S:\Grand2010\Modules\StroyInfo 5\Release\StroyInfo.exe\&quot; \&quot;%1\&quot;&quot;</div></ol></div></div></div></div><br>
<br>
При нажатии на такую ссылку запускается экземпляр программы, которому передается текст ссылки и дальше выполняется определенное дейтвие (либо выполняем действия описанные в ссылке, либо передаем ее уже запущенному экземпляру программы)]]></description>
        <author>Rouse_</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=356837&amp;view=findpost&amp;p=3133028</guid>
        <pubDate>Thu, 10 May 2012 05:51:56 +0000</pubDate>
        <title>Как зарегистрировать свой протокол?</title>
        <link>https://forum.sources.ru/index.php?showtopic=356837&amp;view=findpost&amp;p=3133028</link>
        <description><![CDATA[BadBoyAlex: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=356837&view=findpost&p=3133018'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fr0sT &#064; <time class="tag-quote__quoted-time" datetime="2012-05-10T05:38:18+00:00">10.05.12, 05:38</time></span><div class='quote '>В списке ассоциаций файлов погляди типы URL:*** - это то, что тебе нужно</div></div><br>
Да, там они &quot;сидят&quot;.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=356837&view=findpost&p=3133018'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fr0sT &#064; <time class="tag-quote__quoted-time" datetime="2012-05-10T05:38:18+00:00">10.05.12, 05:38</time></span><div class='quote '> Есть шанс, что простое добавление соответствующей записи в HKEY_CLASSES_ROOT сработае</div></div><br>
Вот если бы ещё знать где именно)))<br>
<br>
Будем искать. Спасибо за наводку...<br>
<br>
Нашёл&#33; Ещё бы знать, что из этих ключей нужно, а что - треш для программы]]></description>
        <author>BadBoyAlex</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=356837&amp;view=findpost&amp;p=3133018</guid>
        <pubDate>Thu, 10 May 2012 05:38:18 +0000</pubDate>
        <title>Как зарегистрировать свой протокол?</title>
        <link>https://forum.sources.ru/index.php?showtopic=356837&amp;view=findpost&amp;p=3133018</link>
        <description><![CDATA[Fr0sT: В списке ассоциаций файлов погляди типы URL:*** - это то, что тебе нужно. Есть шанс, что простое добавление соответствующей записи в HKEY_CLASSES_ROOT сработает]]></description>
        <author>Fr0sT</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=356837&amp;view=findpost&amp;p=3132561</guid>
        <pubDate>Wed, 09 May 2012 08:59:02 +0000</pubDate>
        <title>Как зарегистрировать свой протокол?</title>
        <link>https://forum.sources.ru/index.php?showtopic=356837&amp;view=findpost&amp;p=3132561</link>
        <description><![CDATA[BadBoyAlex: Здравствуйте, уважаемые форумчане&#33;<br>
Возможно ли зарегистрировать свой протокол? Формально тот же http://, но который бы понимала только моя программа?<br>
<br>
С EmbeddedWB кое-как реализовал это:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">procedure TMainFrm.WebBrowserEvaluateNewWindow(Sender: TCustomEmbeddedWB; pszUrl, pszName, pszUrlContext, pszFeatures: PWideChar; fReplace: LongBool; dwFlags, dwUserActionTime: Cardinal; var Rezult: HRESULT);</div><div class="code_line">var Prot, User, Pass, Host, Port, Path, Para, frmtdURL: string;</div><div class="code_line">begin</div><div class="code_line">ParseURL(pszUrl, Prot, User, Pass, Host, Port, Path, Para);</div><div class="code_line">if LowerCase(Prot) = &#39;mmp&#39; then</div><div class="code_line">&nbsp;begin</div><div class="code_line">&nbsp;frmtdURL:= &#39;http://&#39; + Host + Path;</div><div class="code_line">&nbsp;//действия с файлом</div><div class="code_line">&nbsp;Abort;</div><div class="code_line">&nbsp;end;</div><div class="code_line">end;</div></ol></div></div></div></div><br>
Но понимаю, что это не нормальная работа. Нужно как-то по-другому, наверное...]]></description>
        <author>BadBoyAlex</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	