DELPHI實現通過URL觸發自訂協議的軟體

來源:互聯網
上載者:User

{
*
*
* 檔案名稱:uMainForm.pas
* 檔案類別:delphi 代碼檔案
*
* 檔案版本:0.1
* 作    者:俞偉
* 完成時間;2008-01-28
* 連絡方式: yu924@hotmail.com
* QQ:       183088201
*
*
}

unit uMainForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, Registry, ExtCtrls;

type
  TMainForm = class(TForm)
    StatusBar1: TStatusBar;
    GroupBox1: TGroupBox;
    btnRegProtocol: TButton;
    btnUnRegProtocol: TButton;
    btnClose: TButton;
    Label1: TLabel;
    Label2: TLabel;
    txtProtocolName: TEdit;
    txtProtocolApplication: TEdit;
    btnBrowser: TButton;
    chkUseAsParams: TCheckBox;
    pnlProtocolUrl: TPanel;
    procedure btnCloseClick(Sender: TObject);
    procedure btnBrowserClick(Sender: TObject);
    procedure btnRegProtocolClick(Sender: TObject);
    procedure btnUnRegProtocolClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    function RegUrlProtocol(aProtocolName, aProtocolApplicationName: string; aUseParam: Boolean): Boolean;
    function UnRegUrlProtocl(aProtocolName: string): Boolean;
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}

procedure TMainForm.btnCloseClick(Sender: TObject);
begin
  Close;
end;

procedure TMainForm.btnBrowserClick(Sender: TObject);
var
  OpenDlg: TOpenDialog;
  strFileName: string;
begin
  OpenDlg := TOpenDialog.Create(nil);
  try
    OpenDlg.Filter := '協議檔案(*.EXE)|*.EXE|全部檔案(*.*)|*.*';
    OpenDlg.DefaultExt := '*.EXE';
    if OpenDlg.Execute then
    begin
      strFileName := Trim(OpenDlg.FileName);
      if strFileName <> '' then
      begin
        txtProtocolApplication.Text := strFileName;
      end;
    end;
  finally
    FreeAndNil(OpenDlg);
  end;
end;

procedure TMainForm.btnRegProtocolClick(Sender: TObject);
var
  strProtocolName, strProtocolApplication: string;
begin
  strProtocolName := Trim(txtProtocolName.Text);
  strProtocolApplication := Trim(txtProtocolApplication.Text);
  if strProtocolName = '' then
  begin
    MessageBox(Handle, '請輸入協議名稱.', '提醒', MB_OK + MB_ICONWARNING);
    Exit;
  end;
  if strProtocolApplication = '' then
  begin
    MessageBox(Handle, '請設定協議程式.', '提醒', MB_OK + MB_ICONWARNING);
    Exit;
  end;
  if RegUrlProtocol(strProtocolName, strProtocolApplication, chkUseAsParams.Checked) then
  begin
    MessageBox(Handle, '註冊使用者自訂協議成功.', '提示', MB_OK + MB_ICONINFORMATION);
    Exit;
  end;
end;

function TMainForm.RegUrlProtocol(aProtocolName,
  aProtocolApplicationName: string; aUseParam: Boolean): Boolean;
var
  objReg: TRegistry;
begin
  Result := False;
  objReg := TRegistry.Create;
  try
    objReg.RootKey := HKEY_CLASSES_ROOT;
    if objReg.OpenKey('/' + aProtocolName, True) then
    begin
      objReg.WriteString('', aProtocolName + 'Protocol');
      objReg.WriteString('URL Protocol', aProtocolApplicationName);
      if objReg.OpenKey('/' + aProtocolName + '/DefaultIcon', True) then
      begin
        objReg.WriteString('', aProtocolApplicationName + ',1');
      end;
      if objReg.OpenKey('/' + aProtocolName + '/shell/open/command', True) then
      begin
        if aUseParam then
          objReg.WriteString('', '"' + aProtocolApplicationName + '" "%1"')
        else
          objReg.WriteString('', '"' + aProtocolApplicationName + '"');
      end;
      Result := True;
    end;
  finally
    FreeAndNil(objReg);
  end;
end;

function TMainForm.UnRegUrlProtocl(aProtocolName: string): Boolean;
var
  objReg: TRegistry;
begin
  Result := False;
  objReg := TRegistry.Create;
  try
    objReg.RootKey := HKEY_CLASSES_ROOT;
    objReg.DeleteKey(aProtocolName);
    Result := True;
  finally
    FreeAndNil(objReg);
  end;
end;

procedure TMainForm.btnUnRegProtocolClick(Sender: TObject);
var
  strProtocolName: string;
begin
  strProtocolName := Trim(txtProtocolName.Text);
  if strProtocolName = '' then
  begin
    MessageBox(Handle, '請輸入協議名稱.', '提醒', MB_OK + MB_ICONWARNING);
    Exit;
  end;
  if UnRegUrlProtocl(strProtocolName) then
  begin
    MessageBox(Handle, '卸載使用者自訂協議成功.', '提示', MB_OK + MB_ICONINFORMATION);
    Exit;
  end;
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
  pnlProtocolUrl.Caption := ParamStr(1);
end;

end.
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.