坂本です。
しかし、下記のコードでは、Button2をクリックしても、
Yahooのページが前面に出てきません。
FindWindowのAPIを見てもなぜだか分かりません。
どうように修正すればよいのでしょうか?
FindWindowでは、第1パラメータにクラス名、第2パラメータにウィンドウ名なので、
www.yahoo.co.jpをクラス名に指定しても、左記はURLである為、
ウィンドウを見つける事ができません。
https://msdn.microsoft.com/ja-jp/library/cc364634.aspx
今回の場合、クラス名はnilで、ウィンドウ名にURLを開いているソフトウェア
(WEBブラウザ)のタイトルバー文字列を指定してやればいいと思います。
具体的には、以下のようにします
LHandle=FindWindow(nil,pchar('http://www.yahoo.co.jp/'))
また、FindWindowを手始めにしてAPIの学習をし、
自分でも修正方法が分かるようになりたいと思います。
どのような学習方法がいいのでしょうか?
WindowsAPIの学習について、私はC++Builder1からのユーザで、
WindowsAPIを使わずに10年くらいWindowsのプログラムを作成してきたので、
私も当初はかなり戸惑いました。
理由としては、WindowsAPIの解説で出てくる、使用される変数に、
基本的な型が殆ど無いからです。
ですが、これは実際の所、以下のような感じが殆どです。
※以下は乱暴な例え方で、厳密には違う部分もあります。
※変数名はC言語の例です。
・WORD=ANSIの1Byte文字変数(CHAR)に対する2Byte文字変数
=unsigned int
・DWORD=DOUBLE WORD変数=2倍の2Byte文字変数
=Unicode等の4Byte文字変数=unsigned long
・LPTSTR=文字列のポインタ=char[]=""で作成される文字列のポインタ
・LPVOID=VOID型のポインタ=void*
・WLARAM/LPARAM=OS依存のbit長パラメータ型
16bitOS=unsigned short(16bit)
32bitOS=unsigned long(32bit)
64bitOS=unsigned long long(64bit)
要は、Microsoftが、色々な変数を別の型として個別に呼び名を付けて定義
してるだけで、その実体は今まで使用してきた変数と変わりません。
なので、型が分かれば今までやっている事と特に変わりはないです。
勿論、DelphiからWindowsAPIに変数を渡す場合はキャストは必要ですが、
要はキャストすれば普通にWindowsAPIへDelphiから変数を渡すことも、
WindowsAPIからDelphiへ変数を渡すこともでき、WindowsAPIは動くという事です。
あと、よく出てくる"ウィンドウのハンドル"ですが、
これは、要は、Windowsが管理しているウィンドウ自体のポインタであり、
ウィンドウのポインタをHANDLEとかHWNDという型で定義しているもの
だと考えるのが妥当だと思います。
これらは、RadStudioのTForm等にあるHandle変数と互換があります。
キャストは必要ですが、ウィンドウのハンドルが必要な場合は、Form->Handle
を渡せばいいだけです。
この辺りを理解できれば、あとは、今回使用しようとしているような、
SetWindowPosやFindWindowのような、パラメータを指定してやれば
実行できるWindowsAPIを試してみればいいと思います。
この辺りが普通に気兼ねなく使えるようになったら、もう少し難しい、
EnumWindowsのようなCALLBACK関数を必要とするようなWindowsAPIや、
SendMessageのようなウィンドウメッセージを処理する関数を試してみる
といいと思います。
---- A.Sakamoto
Connect with Us