- PR -

ウィンドウハンドルを取得するタイミングについて

1
投稿者投稿内容
るし
会議室デビュー日: 2005/09/23
投稿数: 4
投稿日時: 2006-06-16 15:29
現在VB.NETやC#(2003)でダイアログベースアプリの開発を行っています。
アプリケーション起動時にウィンドウハンドルを取得したいのですが、どの関数で取得するのがよろしいでしょうか?
VC++のダイアログアプリの場合はOnInitiDialog関数で取得しています。
VBやC#ではForm_Load関数で取得できるかなと思ったのですが、取得できませんでした。
ウィンドウハンドルなど必要とする初期化処理を実装するのに最適なイベントはないでしょうか。(OnPaint関数とかだとあまりきれいじゃないような気がして・・・)
よろしくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-06-16 15:34
引用:

るしさんの書き込み (2006-06-16 15:29) より:

アプリケーション起動時にウィンドウハンドルを取得したいのですが、どの関数で取得するのがよろしいでしょうか?


アプリケーション起動時? ウィンドウ ハンドル?
アプリケーション ハンドルではなく、MainWindowHandle ということでしょうか?
自アプリケーションなんでしょうか、それとも別のアプリケーションなのでしょうか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-06-16 15:43
こういうことなのでしょうか?

コード:

    [System.STAThread()]
    public static void Main(string[] cmdArgs) {
        Application.Idle += new EventHandler(Application_Idle);
        Application.Run(new FormMain());
    }

    private static void Application_Idle(object sender, EventArgs e) {
        System.IntPtr mainWindowHandle = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle;

        MessageBox.Show("ハンドル = " + mainWindowHandle.ToString());

        Application.Idle -= new EventHandler(Application_Idle);
    }

コード:

    <System.STAThread()> _
    Public Shared Sub Main()
        AddHandler Application.Idle, AddressOf Application_Idle
        Application.Run(New Form1())
    End Sub

    Private Shared Sub Application_Idle(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim mainWindowHandle As System.IntPtr = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle

        MessageBox.Show("ハンドル = " & mainWindowHandle.ToString())

        RemoveHandler Application.Idle, AddressOf Application_Idle
    End Sub


まあ、これは表示しているだけですが...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
るし
会議室デビュー日: 2005/09/23
投稿数: 4
投稿日時: 2006-06-16 15:44
じゃんぬねっとさん。
早速のお返事、ありがとうございますm(__)m。

取得したいのは自分自身のメインウィンドウのハンドルです。
VBで以下のようにハンドルを取得してみました。
----------------------------------------------
Dim prs As Process
prs = Process.GetCurrentProcess
Dim a As UInt32 = Convert.ToUInt32(prs.MainWindowHandle.ToInt32())
----------------------------------------------

Form_Loadイベントでは数値0が戻ってきてしまいました。
Form_Loadイベント発生段階ではメインウィンドウが生成されてないのかな
と想像しているのですが・・・。

よろしくお願いします。

きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2006-06-16 15:53
るしさん、こんにちは。

コード:
Private Sub Dialog1_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.Load
    Me.Text = Me.Handle.ToString()
End Sub


これじゃダメですか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-06-16 16:05
引用:

るしさんの書き込み (2006-06-16 15:44) より:

取得したいのは自分自身のメインウィンドウのハンドルです。
VBで以下のようにハンドルを取得してみました。


であれば、先の投稿のコードではダメでしょうか? (タイミング的には)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
るし
会議室デビュー日: 2005/09/23
投稿数: 4
投稿日時: 2006-06-16 16:11
きくちゃんさん、こんにちは。
ご教示いただいたコードでできました。
どうもありがとうございました。

じゃんぬねっとさん
アイドルイベントを使う方法ってのもあるんですね。
いま作成中のアプリで別件で活用できそうです。大変勉強になりました。
どうもありがとうございましたm(__)m。
1

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