- PR -

外部アプリのタイトルバーを消去したい

1
投稿者投稿内容
べじーた
会議室デビュー日: 2003/09/18
投稿数: 3
お住まい・勤務地: 東京都
投稿日時: 2005-06-06 21:47
Windowsアプリケーションから現在立ち上がっている別Window(EXCELなど)を
捕まえて、タイトルバーを消去する処理を行いたいと考えています。

別Windowを捕まえる所までは下記コードでできました。

[DllImport("user32.dll")]
public static extern int FindWindow(
string lpClassName,
string lpWindowName
);

private void button7_Click(object sender, System.EventArgs e)
{
int iHandle = FindWindow("XLMAIN","Microsoft Excel - Book1");
}

が、タイトルバーを消すという処理がウィンドウ関数に見当たりませんでした。

sendMessage(),getWindowInfo(),getTitleInfo()などいくつか関数を
チェックしてみたのですが、タイトルバーの状態は取れるけれども
それを消去することが出来ないようなのです。

別のWindowのタイトルバーを消すにはどのような方法があるのでしょうか?

【開発環境】
OS:Win XP Pro SP2
IDE:VisualStudio .NET 2002
Lang:C#
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-06-06 21:55
SetWindowLongでウィンドウスタイルのWS_CAPTIONフラグを落とす事になると思う。けど、それで美味く行くかは操作されるアプリケーション側の問題もあるので・・・(^^;

操作の対象となるのはExcelだけでしょうか?Excelにはフルスクリーンモードが用意されているので、VSTOからフルスクリーンモードにできないか検討するほうが良いと思う。
_________________
甕星 <mikahosi@abox9.so-net.ne.jp>
http://blogs.msmvp.jp/mikahosi/
べじーた
会議室デビュー日: 2003/09/18
投稿数: 3
お住まい・勤務地: 東京都
投稿日時: 2005-06-06 22:23
甕星様、ありがとうございました。
当方C#暦2日目なので、APIを把握するのが一苦労です…。

SetWindowLongで検索かけた所、正に当方がやりたいことが下記URLに
書いてありました。

http://www.athomejp.com/goldfish/vcs/titlelessform.asp

windowの参照を自分からFindWindowした参照に変えたら動きました。
実際に操作の対象となるのはIEになる予定なので、下記コードで
動作確認を取りました。

private void button7_Click(object sender, System.EventArgs e)
{
IntPtr iHandle = (IntPtr)FindWindow("IEFrame",
"about:blank - Microsoft Internet Explorer");
UInt32 unSyle = GetWindowLong(iHandle, GWL.STYLE);

unSyle = (unSyle & ~WS_CAPTION);

// スタイルを反映
UInt32 unret = SetWindowLong(iHandle, GWL.STYLE,unSyle);
}

[DllImport( "user32.dll")]
private static extern UInt32 SetWindowLong(IntPtr hWnd,
GWL index,
UInt32 unValue);

[DllImport( "user32.dll")]
private static extern UInt32 GetWindowLong(IntPtr hWnd,GWL index);

これから実際のアプリと組み込んでみたいと思います。
どうもありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)