(2013/04/01~)
2013/04/02

IE のプロキシ設定をアプリケーションから設定する

 元ネタは

 個人的には "IE が動作していてもプロキシを切り替えなくてはならない" というシチュエーションが思いつきません。プロキシを自動で変更したいのであれば、WPAD (Web Proxy Auto Discovery Protocol) を使うのが筋のような気がするからです。

 また理屈上、この実装を行ったアプリケーションはマルウェア扱いされる可能性が高いです。

 さて...御託は並べましたが、実際にどうすればいいのかというと、InternetOpen() して、その中で InternetSetOption() してやればいいようです。そのものズバリなコードが以下にありました。

 ちょっと読みにくいのと typo があるので、コードをキレイにしてみました。

[uIESettings.pas]
unit uIESettings;

// [change internet proxy (Delphi Pages)]
// http://www.delphipages.com/forum/showthread.php?t=205516

interface

uses
  SysUtils, Registry, Wininet;

  // IE のプロキシ設定を有効にする
  procedure IE_EnableProxy(const aServer: string; aPort: Word = 80; aOverride: Boolean = True);
  // IE のプロキシ設定を無効にする
  procedure IE_DisableProxy;
  // IE の環境設定を反映させる
  procedure IE_ApplySettings;

implementation

procedure _SetProxy(aEnabled: Boolean; const aServer: string; aPort: Word; aOverride: Boolean);
var
  Reg: TRegistry;
  ServerStr: string;
begin
  Reg := TRegistry.Create;
  try
    Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Internet Settings', False);
    Reg.WriteBool('ProxyEnable', aEnabled);
    if aEnabled then
      begin
        ServerStr := aServer;
        if aPort <> 0 then
          ServerStr := ServerStr + Format(':%d', [aPort]);
        Reg.WriteString('ProxyServer', ServerStr);
      end
    else
      Reg.DeleteValue('ProxyServer');
    if aEnabled and aOverride then
      Reg.WriteString('ProxyOverride''<local>')
    else
      Reg.DeleteValue('ProxyOverride');
    Reg.CloseKey;
  finally
    Reg.Free;
  end;
  InternetSetOption(nil, INTERNET_OPTION_SETTINGS_CHANGED, nil0);
end;

procedure IE_EnableProxy(const aServer: string; aPort: Word; aOverride: Boolean);
begin
  _SetProxy(True, aServer, aPort, aOverride);
end;

procedure IE_DisableProxy;
begin
  _SetProxy(False, ''0, False);
end;

procedure IE_ApplySettings;
var
  HInet: HINTERNET;
  AgentName: string;
begin
  AgentName := ChangeFileExt(ExtractFileName(ParamStr(0)), '');
  hInet := InternetOpen(PChar(AgentName), INTERNET_OPEN_TYPE_DIRECT, nilnil, INTERNET_FLAG_OFFLINE);
  try
    if hInet <> nil then
      InternetSetOption(hInet, INTERNET_OPTION_SETTINGS_CHANGED, nil0);
  finally
    InternetCloseHandle(hInet);
  end;
end;

end.

 プロキシを設定する時は、

  IE_EnableProxy(Edit1.Text, StrToIntDef(Edit2.Text, 80));
  IE_ApplySettings;

 プロキシを無効にする時は、

  IE_DisableProxy;
  IE_ApplySettings;

 このようなコードになります。クラスで書き直すと使い勝手のいいユニットになると思います。

Manifest Ex ver2.00

 アプリケーションマニフェスト を簡単に追加するためのコンポーネント。64bit / FireMonkey (Windows) にも対応しています。

 今回の変更は、Delphi 6 / 7 / 2005 / 2006 /2007 用パッケージの追加です。

 XPMan のない Delphi 6 でも使えます。Delphi 6 でアプリケーションマニフェストを組み込んだ場合に "Delphi 5 同様の問題" が発生するかどうか記憶が定かではないのですが...。

小ネタ (コンポーネントと SysUtils)

 今更どうでもいい事なのでしょうが...。

 ANSI 版 Delphi では、コンポーネントが SysUtils を必要としなかったとしても SysUtils を uses 節に追加しないと IDE がコンポーネントを認識しません。

 パッケージにはインストールされる (インストールは成功する) のですが、パレットにアイコンが表示されません。コンポーネントを作る場合、SysUtils を uses しない事はまずあり得ないので、問題になるケースはとても少ないとは思うのですけれど。


2013/04/05

「ただし /SafeSEH (3.2)...テメーはダメだ!」

 03/26 の雑談でそう書いたのですが、これって...

 コレでいいんじゃ?

Delphi Forum

 作りました。

 作った経緯等はそちらに書いてあるのでお読みください。利用規定はこちら


2013/04/24

RAD Studio XE4 発売

 詳細はフォーラムにまとめてありますのでそちらをご覧下さい。また、Delphi の製品情報も更新されています。

XE4 ショップリンク

 今回は変則スケジュールでのリリースという事もあって、商品選択に注意が必要です。

 これを踏まえると話は簡単です。iOS 開発環境が含まれない (or 存在しない) のは、Delphi XE4 Professional と C++Builder XE4 のすべてのエディションです。その他の製品には iOS 開発環境が含まれています。

XE3 ユーザー向け: iOS 開発環境なし 2013/06/25 まで

XE3 ユーザー向け: iOS 開発環境あり 2013/06/25 まで

2010~XE2 ユーザー向け: iOS 開発環境なし 2013/06/25 まで

2010~XE2 ユーザー向け: iOS 開発環境あり 2013/06/25 まで

新規ユーザー向け: iOS 開発環境なし 2013/06/25 まで

新規ユーザー向け: iOS 開発環境あり 2013/06/25 まで

 ※価格にポイント等は反映されていません。また、価格は変動する事がありますのでリンク先を必ず確かめるようにして下さい。

See Also:

XE4 の価格設定に関する寸評他

 結構絶妙です。

 Delphi の製品情報 を見て頂けるとお判りかと思いますが、Delphi Professional の標準価格が値上げになりました。Delphi は登場以来、様々な機能が追加されましたが、実は 18 年で 1 度しか値上げされていません でした。今回が二度目で Delphi 2009 以来となります。

 さて、XE4 では、

 というような事になっているのですが、このような事情もあってか "Professional は確かに値上げになっているけれど、上位エディションはむしろ値下がり" しています。価格帯が狭まった感じですね。

 ちなみに、一番安価だった Professional 版の Delphi は "Turbo Delphi 2006 Professional" の 39,900円です。初代 Delphi? あれは特例で、現在で言う Starter Edition 相当です...まぁ、この特例の事を知るヒトも少なくなってきたとは思いますが。え?2006 で値上げになってるって?だって、あれは現在で言う "RAD Studio" ですもの。

 「昔は安かった」 と未だに言うヒトがいますが、当時は知らぬ間にキャンペーン価格で購入していたのですヨ。そもそも昔とはやれる事の幅が違いますしね。あと、消費税が上がってる事も考慮しないと。

ちなみに Delphi / C++Builder XE4 Starter は?

 後になって 「アレがない、コレができない」 言うヒトが多いので正直載せたくないのですが、一応載せておきます。

新規ユーザー向け: 64bit / OS X / iOS 開発環境なし

 ※価格にポイント等は反映されていません。また、価格は変動する事がありますのでリンク先を必ず確かめるようにして下さい。


 BACK   古いのを読む   新しいのを読む