【soft】フリーソフトで広告収入@SoftAd
偶然発見したサービスです。あるんですね、知らなかった。
追記有り:C#でも表示できました
フリーソフト(じゃなくてもいいけど)とかで、広告収入を得られるサービスです。これで、多少は、開発意欲が増すというものでしょう・・(;^ω^)
クリック単価の8割がソフト作者へとの事ですが、概ね8円程度のようです。Google Adsenseと同じ程度かな。
しかしながら、提供元の多摩ソフトウェアさんお世辞にも大企業という訳でもなく、もしかすると、気づいたらサービス終了・・なんて事も考えられます(公式サイトの記事みてもなんとなく伝わります・・)
アフィリエイト系では、ValueCommerceがスマフォアプリ向けの広告サービスをスタートしましたし、もっと、こういうの増えて行ってもいいと思うんですけどね。
ちなみに、SDKと言われるものは前世代?のC/C++/Delphiでしか提供されてないので、.net/C#ソフトでの組み込みはどうなるんでしょう。
何度も使われる業務で使われるようなソフトで配信するとより効果的でしょうね。
広告主さんも、どうでしょう。こういう配信先もあるようです。宣伝単価的には安いでしょうね。
ソフト広告配信SoftAd/多摩ソフトウェア
http://www.tamasoft.co.jp/ad/
追記:
.Net/C#に組み込もうとテストしてみたのですが、うまく出来ません・・(´・ω・`)
DLLロードに失敗しているっぽくて、開発環境が64Bitだからなのか、どうにも煮え切らない・・。
追記:
なんとか表示できました。・・・が(;^ω^)
こちらを見ていただきたい。
右上のがそうなんですが、本来のメニューまでめっさ余白が出来上がってますよね。これが、どうしようもないんです。
ウソでした、テスト用に空のMenuStrip入れてた性でした(;^ω^)
SoftAdが想定しているのが、(前世代の)MainMenuコントロールで、今風にメニューを作るならMenuStripコントロールです。MainMenuは昔ながらのウィンドウ上部固定のやつ。
もちろん、SoftAdを利用したいがために、MainMenuでメニューを作ればOKなんですが、いまさら(´・ω・`)という感じです。
SoftAdの初期化の段階で、メニューハンドルを渡す必要があるのですが、これがMainMenuでないとダメ。かつ、this.Menu(これは互換性のためだけのFormプロパティ)に、MainMenuオブジェクトを入れておかなければならないようです。
色々やってみたんですが、ダメですねぇ・・・。どうしよう。
ウィンドウ上部に広告用の空行が表示されてしまいますね。
んでは、後に続けと、簡単ですのでコードをご紹介させていただきます。
#region Win32
[DllImport("SoftAd.dll")]
public static extern int SA_Initialize(
IntPtr hWnd,
IntPtr hMenu,
int fc,
int softId);
[DllImport("SoftAd.dll")]
public static extern void SA_Cleanup();
[DllImport("SoftAd.dll")]
public static extern void SA_InitMenuItem(IntPtr mi);
[DllImport("SoftAd.dll")]
public static extern void SA_DrawMenuItem(IntPtr di);
#endregion
DLL呼出用の定義を、好きな所に書いておきます。
//SoftAd
admenu = new System.Windows.Forms.MainMenu();
try
{
SA_Initialize(this.Handle,admenu.Handle,0,143); ここにソフトID
}
catch{ }
formのコンストラクタに、これを置きます。初期化に失敗してるかどうか調べる場合は、戻り値(int)が1なら成功。
private MainMenu admenu; //SoftAd
これを、formクラス頭辺りにこそーり書きます。
#region SoftAd
//SoftAd
private const int WM_MEASUREITEM = 0x002C;
private const int WM_DRAWITEM = 0x002B;
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case WM_MEASUREITEM:
SA_InitMenuItem(m.LParam);
break;
case WM_DRAWITEM:
SA_DrawMenuItem(m.LParam);
break;
default:
base.WndProc(ref m);
break;
}
return;
}
#endregion
formクラスに、WndProcオーバーライドを書きます(SoftAdはオーナードローで表示しているようです)ちゃんと書くなら、ここも例外処理しておいた方がいいですね。
//SoftAd
try
{
SA_Cleanup();
}
catch { }
フォーム閉じる辺り(formclosedとか)に、終了処理を入れておきます。
後は、広告を表示したい時は、
//SoftAd
this.Menu = admenu;
広告を消したい時は、
//SoftAd
this.Menu = null;
です。簡単ですよね(例外処理はしょってるので、ちゃんと書いてください)
これだけで、表示されちゃいます。(VisualStudio2008/C#にて確認)
あ、EXEのところに、最新版のDLLを置いておくのを忘れずに。