• ベストアンサー

VC++コンソールアプリでのインスタンスハンドルの取得

VC++コンソールアプリでのインスタンスハンドルの取得 VC++コンソールアプリケーションでインスタンスハンドルを取得しようとしているのですが、 HINSTANCE hi = (HINSTANCE)GetWindowLong(HWND_DESKTOP, GWL_HINSTANCE); を実行すると、NULLが戻ってきます。 どこかまずい部分があるのでしょうか。 なお、第一引数のウィンドウハンドルは不明なため、 いくつかのWebサイトに習い、HWND_DESKTOPを指定しました。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

>実行すると、NULLが戻ってきます。 GetLastError()は確認しましたか? >なお、第一引数のウィンドウハンドルは不明なため、 >いくつかのWebサイトに習い、HWND_DESKTOPを指定しました。 適当なモノ指定するのはどうかと……。 アクセス権の問題もあるかと思いますけど、成功した場合は、Shellのインスタンスハンドルが返されるだけのような気がしますが。 GetModuleHandle(0); で、取れるようです。 # 取れる値って、リンカで指定したベースアドレス…のようです。 # 各プロセスでほとんど同じ値が取れることになりますけど。 # プロセス空間が異なる為、問題はない…(他の実行ファイルをLoadLibrary()した場合に変わることになりますね)

_hitoshi_
質問者

お礼

GetLastErrorは1400(ウィンドルハンドルが不正)が返されていました。 GetModuleHandle(0)を実行するとH'00400000が戻りました。 試しにコンソールアプリケーションのかわりにWINDOWSフォームアプリケーションを作成してみると、 関数WinMainの引数hInstanceにもH'00400000が格納されていました。 これで次のステップに進めそうです。 ありがとうございました。

関連するQ&A