« 2006年11月 | トップページ | 2007年1月 »

2006年12月の20件の記事

2006/12/31

WindowsMediaVideoのプロファイルリスト作成

以下のソースをメモ帳に貼り付けて「GetWmvProfiles.wsf」で保存。
保存後ダブルクリックをするとWindowsMediaVideoのプロファイルをテキストに保存します。
--<以下ソース>--
<?XML version="1.0" encoding="Shift_JIS" standalone="yes" ?>
<package>
<job>
<script language="VBScript">
<![CDATA[
Option Explicit

 

Dim fso
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Dim txtname
txtname = Replace(WScript.ScriptFullName, WScript.ScriptName, "Profiles.txt")
Dim f
Set f = fso.OpenTextFile(txtname, 2, True)

 

Dim encoder 'Encoder Object
Dim profilecoll
Dim profile
Set encoder = WScript.CreateObject("WMEncEng.WMEncoder")
Set profilecoll = encoder.ProfileCollection
For Each profile In profilecoll
f.WriteLine profile.Name
Next
Set profile = Nothing
Set profilecoll = Nothing
Set encoder = Nothing

 

f.close
Set f = Nothing
Set fso = Nothing
WScript.echo "プロファイルリストの作成がしました。"
]]>
</script>
</job>
</package>

2006/12/30

アウトルック返信メールのインデント設定

Microsoft Office Outlookの返信メールのインデント設定はわかりにくいのでメモ。
「ツール」メニューから「オプション」を選択。

 

下の画面が開くので、「メールオプション」ボタンをクリック

 

Outlook01

 

下の画面が開くので、お好みに合わせてどうぞ

 

Outlook02

2006/12/28

構成ファイルの適用範囲を限定するには

ASP.NETアプリケーションでForm認証やWindows認証などで、ユーザ認証を行っていてもあるページだけは匿名ユーザにも閲覧させたい時の設定。
@ITの記事が参考になります。

 

[ASP.NET]構成ファイルの適用範囲を限定するには?

 

<location path="xxxxxx.aspx">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>

2006/12/27

ASP.NET タイトルを動的に変更する

ASP.NET(VS2003)でWebFormを追加すると通常下の様なhtmlになっています。
------------------------
<head>
<title>WebForm1</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
</head>
-------------------------
IDEで<title>WebForm1</title>の値を書き換えれば、タイトルを変更することができますが、リテラルなので動的に変更することができません。

 

そこで<title>にid属性とrunat属性を与えて
<title runat="server" id="PageTitle"></title>
ソースに以下のメンバ変数を加えます。
protected System.Web.UI.HtmlControls.HtmlGenericControl PageTitle;

 

これによって、プログラム中で動的にタイトルを変更することができます。
this.PageTitle.InnerText = "すきなタイトル"

 

これを応用すると<H1>や<BODY>などもプログラムから制御することができます。

2006/12/23

DirectShow 日本語ドキュメント

日本語ドキュメントは「DirectX 9.0 SDK Update (October 2004) 日本語ドキュメント」もリリースされていますが、DirectShowのドキュメントが含まれていないので、下のサイトからダウンロードしたものをインストールします。ダウンロードした自己解凍書庫ファイル「dx90_sdkextras_jpndocs.exe」を解凍し、展開されたファイルの「DirectX9JpnDoc.msi」でインストールを行う。

 

DirectX 9.0 日本語ドキュメント

2006/12/22

DirectShow SDKのインストール その2

続いて、Direct X SDK本体のインストール。下のURLからSDKをダウンロードします。古いバージョンのSDKがインストールしてある場合は、あらかじめアンインストールすること。

 

Microsoft DirectX 9.0 SDK Update (August 2005)

 

ダウンロードした自己解凍書庫ファイル「directx_9c_Aug05sdk_redist.exe」を解凍すると自動的にウィザードが起動します。基本的にデフォルトの設定のままウィザードを進行します。 インストールオプションとインストール先もデフォルトのまま次へ

 

Dirextx01 Dirextx02

 

Visual Studioの設定を変更してくれるらしいのでYesを選択します。以降はインストールが進みます。

 

Dirextx03 Dirextx04 Dirextx05

2006/12/21

DirectShow SDKのインストール その1

Platformsdk DirectShowはMicrosoft DirectX SDKの一部でしたが、DirectX 9.0 SDK Update (April 2005) 以降、Platform SDKに含まれるようになりました。

 

「Microsoft DirectX 9.0 SDK Update (August 2005)」と「WindowsR Server 2003 SP1 Platform SDK」のインストール方法について。DirectShow SDKはPlatform SDKに含まれますが、DirectShowを使った開発にはDirectX SDKが必要です。
手始めに下のURLからプラットフォームSDKをダウンロードします。

 

WindowsR Server 2003 SP1 Platform SDK

 

ダウンロードした「PSDK-x86.exe」を実行するとウィザードが起動するので必要なコンポーネントをインストールします

2006/12/20

Flash動画の静止画をキャプチャーする

Flash動画の静止画をキャプチャーする方法です。MPEGやAVIなどwindowsのメディアプレイヤーで再生可能な動画から静止画をキャプチャーするには、DirectShowのSample Grabberを使えば実装可能です。Flashファイルの場合、DirectShowフィルタが見つけられなかったので、別のアプローチをとります。
開発環境はVisual Studio 2003のC#で行いました。
まず、COMコンポーネントのShockwave Flash Objectを登録します。

Flash

そして、Formに貼り付けます。その際にDockプロパティをFillに設定します。
貼り付けたShockwave Flash ObjectのLoadMovieメソッドを呼べば、フラッシュファイルの再生が行えます。

this.axFlash.LoadMovie(0, filename);

this.axFlash.GetVariable("_width")でフラッシュの横幅が
this.axFlash.GetVariable("_height")でフラッシュの高さが取得できるので取得したサイズで、フォームのClientSizeを変更します。

this.axFlash.TotalFramesでフラッシュの合計フレーム数が取得できるので、フレームだけthis.axFlash.GotoFrame(i)でシークさせつつ、Shockwave Flash ObjectのHandleを取得し、user32.dllのGetWindowDCとBitBltを使用すれば静止画の取得が行えます。

2006/12/19

Killer

Kg_starrion Killerのスタリオンです。形はこんなですが、結構弾きやすいのと音もオールランドに使えます。世界のLOUDNESSのギターリスト高崎晃が使っているギターの廉価版ですが、楽器としてはしっかりと作られているので、十分満足できる質感です。歪ませた音はリアピックアップで弾くことが多いですが、クリーンの時はフロントとリアのミックスポジションで弾くとキレイでふくよかな音がでます。

 

KG-Starrion
Body Light Weight Ash
Neck Maple 1P/Thin U Shape
Scale 648mm
Frets 22
Neck Joint Bolt-on
Front Pickup LQ-500
Rear Pickup Dyna-Bite
Controls Master Vol
Front Tone
Select SW
Direct SW
Bridge Floyd Rose Original 

Microsoft Visual Studio .NET 2003 Service Pack 1

Microsoft® Visual Studio® .NET™ 2003 Service Pack 1が公開されています。

http://www.microsoft.com/downloads/details.aspx?FamilyID=69D2219F-CE82-46A5-8AEC-072BD4BB955E&displaylang=ja

2006/12/18

C#でzip圧縮を行う

Visual Studio 2003のC#を使ってzip圧縮を行う方法。J#のライブラリを使ってもzip圧縮を行うことができるようですが、日本語のファイル名を扱えないというので、統合アーカイバプロジェクトのzip32j.dllを使用した方法のサンプルです。
まずはzip32j.dllのラッパークラスを作成します。統合アーカイバプロジェクトで推奨されているバージョンチェックは行っていません。

using System;
using System.Runtime.InteropServices;

namespace winApp.Utility
{
  /// <summary>
  /// Zip形式で圧縮をします
  /// </summary>
  public sealed class Zip32
  {
    private Zip32()
    {
      
    }

    /// <summary>
    /// バージョンの取得
    /// </summary>
    /// <returns></returns>
    [DllImport("zip32j")]
    private extern static UInt16 ZipGetVersion();
   
    /// <summary>
    /// DLLの実行状況の取得
    /// </summary>
    /// <returns></returns>
    [DllImport("zip32j")]
    private extern static bool ZipGetRunning();

    /// <summary>
    /// 書庫ファイルの作成
    /// </summary>
    /// <param name="hWnd"></param>
    /// <param name="szCmdLine"></param>
    /// <param name="szOutput"></param>
    /// <param name="dwSize"></param>
    /// <returns></returns>
    [DllImport("zip32j")]
    private extern static int Zip(int hWnd, string szCmdLine, string szOutput, int dwSize);

    /// <summary>
    /// コマンドライン用にファイル名を検証します
    /// </summary>
    /// <param name="filename"></param>
    /// <returns></returns>
    private static string _checkFileName(string filename)
    {
      if(filename.IndexOf(' ') > 0)
      {
        return string.Format("\"{0}\"", filename);
      }
      else
      {
        return filename;
      }
    }

    /// <summary>
    /// zipファイルを生成します
    /// </summary>
    /// <param name="zipname">zipファイル名</param>
    /// <param name="fileFilter"></param>
    /// <returns></returns>
    public static bool archive(string zipname, string fileFilter)
    {
      if(Zip32.ZipGetRunning())
      {
        return false;
      }
      else
      {
        string cmdline = string.Format("-rj {0} {1}",
          Zip32._checkFileName(zipname), Zip32._checkFileName(fileFilter));
        int ret = Zip32.Zip(0, cmdline, null, 0);
        return (ret == 0);
      }
    }
  }
}

呼び出し側のクラスでメソッドを呼び出すとzipファイルを生成します。

winApp.Utility.Zip32.archive(@"C:\test\test.zip", @"C:\text\*.txt");

上記のクラスではディレクトリ名を含まずにzipファイルを生成します。
改良する場合はcmdlineのスイッチを変更して下さい。
コマンドの詳細はダウンロードしたzip32j.dllのCMD_ZIP.TXTを参照してください。

2006/12/17

C#で圧縮ファイルを生成する

C#でzipやlzhなどの圧縮ファイルを生成する方法。
DOBON!さんのサイトに実装方法が詳しく説明されています。
遅延バインディングによりアンマネージDLL関数を呼び出す

ここでは展開する方法についてサンプルを掲載されていますが、圧縮するのも同様な手続きで実装できます。

汎用的に扱えるように遅延バインディングの実装方法が掲載されていますが、自分の落ちた落とし穴があります。

サンプルを実行させるには、「Invoke.dll」が必要です。

DOBON!さんの親切な解説をしっかり読めば、入手方法とコンパイル方法がきちんと記述されています。自分は焦って、すっかり見落としていました。どうか、みなさんはご注意下さい。

2006/12/16

ポストバックイベントを発生したコントロールを調べる

ASP.NET(VS2003)でアプリケーションを開発しているときに、ポストバック(PostBack)イベントを発生させたコントロールを調べる方法。ボタンコントロールだとClickイベントやCommandイベントでハンドリングしやすいですが、ドロップダウンリストだとSelectedIndexChangedイベントしかないので意図したタイミングでメソッドを呼べないことがあります。(設計が悪いんでしょうか・・・)
動的にコントロールを生成した場合も状況により、さっきまで存在したコントロールがなくなった場合などにイベントを呼んでくれないので、覚えておくと便利です。

 

private void Page_Load(object sender, System.EventArgs e)
{
  if(!this.IsPostBack)
  {
    ~何らかの初期化処理~
  }
  else
  {
    foreach(string key in Request.Form.AllKeys)
    {
      if(key.Equals("__EVENTTARGET"))
      {
        if(Request.Form[key].Equals("補足したいコントロールのID"))
        {
          ~何らかの処理から
        }
      }
    }
  }
}

2006/12/15

DataSetをXMLで書き出す時の注意点

VC#というよりは.NET Frameworkの扱い方です。
DataSetをXMLファイルに書き出すのは.WriteXml(filename)で簡単に行えますが、ちょっとばかりレコード数が多いと読み込む時に非常に時間がかかります。.WriteXml()メソッドを呼び出す時は第二引数にXmlWriteMode.WriteSchemaを指定してスキーマと一緒に書き出してあげると読み込みが嘘のように早くなります。

2006/12/14

画像の角を丸める 改良版

前回のkadomarizeメソッドは

  1. ソース画像の読込
  2. 描画用ビットマップの生成
  3. キャンバスを白で描画
  4. クリッピング領域の設定
  5. 描画用ビットマップへソース画像を描画

という手順で実装されていました。今更気にするほどのではないと思われますが、この手順だと描画用のビットマップを生成する分だけメモリを余計に消費することになります。

そこで処理の手順を以下のように修正します。

  1. ソース画像の読込
  2. クリッピング領域の設定
  3. クリッピング領域に白を描画

public void kadomarize(string filename)
{
using(Bitmap bmp = new Bitmap(filename))
{
using(Graphics g = Graphics.FromImage(bmp))
{
g.SmoothingMode = SmoothingMode.AntiAlias;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
int width = bmp.Width;
int height = bmp.Height;
GraphicsPath path = this.CreateRoundedRectangle(width, height);
g.SetClip(path, CombineMode.Exclude);
g.FillRectangle(Brushes.White, 0, 0, width, height);
g.Dispose();
}
string savename = string.Format(@"{0}\{1}k.bmp",
System.IO.Path.GetDirectoryName(filename),
System.IO.Path.GetFileNameWithoutExtension(filename));
bmp.Save(savename, ImageFormat.Bmp);
}
}
g.SetClip(path, CombineMode.Exclude);の第二引数CombineModeが肝です。
また、CreateRoundedRectangleメソッドも修正です。
最後の行が不要です。
private GraphicsPath CreateRoundedRectangle(int width, int height)
{
Size offset = new Size(width / 5, height / 5);
GraphicsPath path = new GraphicsPath(FillMode.Winding);
path.AddArc(width - offset.Width, 0, offset.Width, offset.Height, 270, 90);
path.AddArc(width - offset.Width, height - offset.Height, offset.Width, offset.Height, 0, 90);
path.AddArc(0, height - offset.Height, offset.Width, offset.Height, 90, 90);
path.AddArc(0, 0, offset.Width, offset.Height, 180, 90);
path.AddArc(width - offset.Width, 0, offset.Width, offset.Height, 270, 90);
return path;
}

2006/12/13

画像の角を丸める

実際は画像の角を丸めたように見せるための方法です。

Before_1 After

kadomarizrに触発されてVisual C#で実装してみました。本家のようにキレイにならないのはご愛敬ということで。最初角丸四角形のクリッピング領域を作る方法がわかりませんでしたが、Microsoftのサイトにサンプルがありましたのでなんとか実現できました。http://www.microsoft.com/japan/msdn/vbasic/migration/tips/graphic.aspx

使えるようにするにはもうちょっと作り込まないとならないのですが、とりあえずソースを掲載

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;

namespace kadomarizr
{
/// <summary>
/// 画像を生成します
/// </summary>
public sealed class Kadomarizer
{
  public Kadomarizer()
  {

  }

  /// <summary>
  /// カドマライズします
  /// </summary>
  /// <param name="filename">ファイル名</param>
  /// <returns></returns>
  public bool kadomarize(string filename)
  {
   using(Bitmap srcbmp = new Bitmap(filename))
   {
    int width = srcbmp.Width;
    int height = srcbmp.Height;
    using(Bitmap destbmp = new Bitmap(width, height, PixelFormat.Format24bppRgb))
    {
     using(Graphics g = Graphics.FromImage(destbmp))
     {
      g.FillRectangle(Brushes.White, 0, 0, width, height);
      g.SmoothingMode = SmoothingMode.AntiAlias;
      g.PixelOffsetMode = PixelOffsetMode.HighQuality;
      g.InterpolationMode = InterpolationMode.HighQualityBicubic;
      GraphicsPath path = this.CreateRoundedRectangle(width, height);
      g.SetClip(path, CombineMode.Replace);
      g.DrawImage(srcbmp, 0,0, width, height);
      g.Dispose();
     }
     string savename = string.Format(@"{0}\{1}k.bmp",
      System.IO.Path.GetDirectoryName(filename),
      System.IO.Path.GetFileNameWithoutExtension(filename));
     destbmp.Save(savename, ImageFormat.Bmp);
    }
   }
   return true;
  }

  /// <summary>
  /// 角丸領域のパスを生成します
  /// </summary>
  /// <param name="width">画像の幅</param>
  /// <param name="height">画像の高さ</param>
  /// <returns>GraphicsPath</returns>
  /// <remarks>
  /// </remarks>
  private GraphicsPath CreateRoundedRectangle(int width, int height)
  {
   Size offset = new Size(width / 5, height / 5);
   GraphicsPath path = new GraphicsPath(FillMode.Winding);
   path.AddArc(width - offset.Width, 0, offset.Width, offset.Height, 270, 90);
   path.AddArc(width - offset.Width, height - offset.Height, offset.Width, offset.Height, 0, 90);
   path.AddArc(0, height - offset.Height, offset.Width, offset.Height, 90, 90);
   path.AddArc(0, 0, offset.Width, offset.Height, 180, 90);
   path.AddArc(width - offset.Width, 0, offset.Width, offset.Height, 270, 90);
   return path;
  }
}
}

2006/12/12

C#でAccess(mdb)を作成する DAO編

Dao


DAOの参照設定を行いFormにボタンを1つ貼り付けて、下のコードを記述します。

try
{
DAO.DBEngine engine = new DAO.DBEngineClass();
DAO.Workspace wspace = engine.Workspaces[0];
DAO.Database db = wspace.CreateDatabase(@"d:\accessDB\dao.mdb",
DAO.LanguageConstants.dbLangJapanese, DAO.DatabaseTypeEnum.dbVersion40);
db.Close();
wspace.Close();
db = null;
wspace = null;
engine = null;
MessageBox.Show("mdbの作成終了", this.Text,
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK,
MessageBoxIcon.Error);
}

ADOXに比べて、幾分スッキリしている気がします。

ZOOM B1X

B1_05 今日は新しい機材を買ってきました。ZOOMのB1X。ぶっちゃけ見た目はプラスチックで安っぽいですが、楽器屋で試奏したら音はかなり良かったです。家で宅録用にと思ったのでヘッドフォンでモニターしました。基本はギターリストなんであんまりベースの機材に投資できないのでB2.1uとどっちにしようか、随分迷いました。B2.1uの方が見た目はしっかりしていて高そうな印象。G2.1uを持っているんで、使い方も同じだろうし・・・

でも、まぁ試奏した限り音はバッチリだったのと、軽さに惹かれて購入。これからちょこちょこといじってみます。

ZOOM B1X

2006/12/11

C#でAccess(mdb)を作成する ADOX編

Visual C#からプログラムでaccessのmdbファイルを生成する方法について。
Micorosoftのサイトで詳細に解説されています。

ADOX とビジュアルC#.NETを使って、 Access データベースを作成する方法

サンプルではコンソールアプリで実装されていますが、Windowsアプリで作成する際の注意点としてmdbファイル生成後、コネクションの解放処理が必要です。

ADOXの参照の追加Ado01

Formにボタンを1つ貼り付けて、下のコードを記述します。


try
{
ADOX.CatalogClass cat = new ADOX.CatalogClass();
cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=D:\\accessDB\\NewMDB.mdb;" +
"Jet OLEDB:Engine Type=5");
cat = null;
MessageBox.Show("mdbの作成終了", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
この状態でも、正常にmdbファイルは作成されますが、ldbファイルが出来ておりmdbファイルが開かれた状態になっています。

Ado02 作成したmdbのコネクションを解放するためにはADOの参照の追加を行います。


Ado03


try
{
ADOX.CatalogClass cat = new ADOX.CatalogClass();
cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=D:\\accessDB\\NewMDB.mdb;" +
"Jet OLEDB:Engine Type=5");

//コネクションを解放するコードを追加します。

ADODB.Connection con = (ADODB.Connection)cat.ActiveConnection;
con.Close();
con = null;

cat = null;
MessageBox.Show("mdbの作成終了", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
}

2006/12/04

HAMER GCTM-XC

Hamer 1992年6月2日に購入。
大学入学時に購入して、現在所有しているギターの中で一番弾き込んだギターです。 ブリッジが壊れてしまったので交換しました。それからトーンスイッチを取り外して、タップスイッチに変更。ハムとシングルの音が出せます。フレットがだいぶすり減っているので、本当なら交換したいのですが気にせず使っています。ピックアップははじめからついているものを使っていますが、メーカ名と型番はわかりません。

ラッカー塗装のため、ボディのあちこちにクラックが入っています。さながらヴィンテージギターの風格を漂わせています。

« 2006年11月 | トップページ | 2007年1月 »

2022年7月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

最近のトラックバック

無料ブログはココログ