C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: windowのハンドルを取るプログラミングなどの基礎知識


(過去ログ 22 を表示中)

[トピック内 11 記事 (1 - 11 表示)]  << 0 >>

■9651 / inTopicNo.1)  windowのハンドルを取るプログラミングなどの基礎知識
  
□投稿者/ しの (1回)-(2007/11/01(Thu) 17:07:00)

分類:[.NET 全般] 

VBのコードを読んでいると理解できるのですが、

windowのハンドルを取るコードになると
意味がわからなくなります。

windowのハンドルを取ったりする
プログラミングをさくさく作れるようになりたいです。

基礎知識が勉強できる書籍を紹介してください。

よろしくお願いいたします。

VB2005、XPです。

引用返信 編集キー/
■9653 / inTopicNo.2)  Re[1]: windowのハンドルを取るプログラミングなどの基礎知識
□投稿者/ 囚人 (212回)-(2007/11/01(Thu) 17:09:49)
とりあえず「プログラミングWindows(上下)」がバイブルでしょうね。基礎知識が身につくこと間違いなし。万人にお勧めです。
引用返信 編集キー/
■9659 / inTopicNo.3)  Re[2]: windowのハンドルを取るプログラミングなどの基礎知識
□投稿者/ しの (2回)-(2007/11/01(Thu) 18:26:48)
ありがとうございます。

買いました。

よんだら、また投稿します。m(__)m
解決済み
引用返信 編集キー/
■9727 / inTopicNo.4)  Re[3]: windowのハンドルを取るプログラミングなどの基礎知識
□投稿者/ ちば (1回)-(2007/11/02(Fri) 19:32:57)
No9659 (しの さん) に返信
横からすみません。windoowsのハンドルを取る?とはどのようなことでしょうか?
引用返信 編集キー/
■9730 / inTopicNo.5)  Re[4]: windowのハンドルを取るプログラミングなどの基礎知識
□投稿者/ しの (10回)-(2007/11/02(Fri) 19:59:20)
>横からすみません。windoowsのハンドルを取る?とはどのようなことでしょうか?

・一般的には、VBプログラマの間で、「windoowのハンドルとったらできるよね?」
という言葉で会話が成り立っているんですよ。


・技術的ですけど、APIを使って画面の部分のハンドルを取るんですよ。
解説になってないですね。
引用返信 編集キー/
■9745 / inTopicNo.6)  Re[5]: windowのハンドルを取るプログラミングなどの基礎知識
□投稿者/ 囚人 (218回)-(2007/11/03(Sat) 16:36:30)
ウィンドウには「ウィンドウハンドル」という一意な数値がそれぞれ紐づけられています。ここで言うウィンドウとはトップレベルウィンドウだけに限らず、ボタンやテキストボックス、コンボボックスなど、UI を構成する全ての要素の事です。それらすべてにウィンドウハンドルがあります。

.NET の WindowsForms では一般にハンドルは隠蔽されて意識しないで済みますが、ウィンドウハンドルを必要とする Win32API を使用するときには WindowsForms のウィンドウハンドルを使用するので、それを「ハンドルを取る」と言っているんでしょう。きっと。

ちなみに、WPF では「ウィンドウ」はトップレベルウィンドウだけになってしまい、ボタンやテキストボックスは「ただの絵」になってしまいました。
引用返信 編集キー/
■9767 / inTopicNo.7)  Re[6]: windowのハンドルを取るプログラミングなどの基礎知識
□投稿者/ しの (11回)-(2007/11/04(Sun) 14:33:13)
>.NET の WindowsForms では一般にハンドルは隠蔽されて意識しないで済みますが、

そもそも、.NETはAPIの代わりになるものですよね?
それなのに、いまだに、業務のアプリ開発で、DLLをインポートしてハンドルを取る部分と、
.NETの部分が混在しているんですよ。

.NETですべてできるじゃないんですか?実際のところどうなんですか?
引用返信 編集キー/
■9769 / inTopicNo.8)  Re[7]: windowのハンドルを取るプログラミングなどの基礎知識
□投稿者/ はつね (316回)-(2007/11/04(Sun) 15:05:04)
はつね さんの Web サイト
No9767 (しの さん) に返信
> そもそも、.NETはAPIの代わりになるものですよね?

Win-APIでしかできなかった機能が.NET Frameworkにかなりの部分実装されていてWin-APIを使わなくても実用上困らないという意味であればそうですが、言葉どおりの「.NETはAPIの代わりになるもの」という事とは違います。


> それなのに、いまだに、業務のアプリ開発で、DLLをインポートしてハンドルを取る部分と、
> .NETの部分が混在しているんですよ。

それは.NETの世界の中で作成できるものを作成しようとしていなかったり、同等の機能があるのに知らずに過去の遺物のWin-APIを使ったり、.NETなアセンブリになっていないDLLを使おうとするからだと思います。
とりあえずある程度の規模の開発を何件かこなしてきましたがDLLをインポートしなければならなかった案件は0件です。


> .NETですべてできるじゃないんですか?実際のところどうなんですか?

#例外もあるでしょうけれど、次のような感じでしょう。

クラスライブラリ化していなかったり外部から叩けるインターフェースを作っていない(例えばTCP/IPが会話できるとか).NETアセンブリについては、Windowsメッセージレベルでの連携が必要になります。これは、作成されている.NETアセンブリが他からの依頼を受付ける口(例えば画面に対してマウスとかキーボードで人間が操作するとかね)以外から無理やり依頼を投げつけようという無茶をしているためであり、無茶するからこそ.NETでできないというわけです。

つまり、WindowsハンドルなどのWin-APIを使わなければいけないような状況であれば、まずはその状況が生まれている原因から解決する必要があります。
該当.NETアセンブリが自社のものであれば該当アセンブリの設計ミスかもしれませんし、自社のでなければ自社のでないのに無理に連携しようとしているシステム構成ミスかもしれません。

あとは、INIファイルを読み取るとか.NETでは除外した機能を使うのにWin-APIをつかうという事もありますが、これも.NETの世界から外れた事をやろうとするから使わざるを得ないのであってこれも設計の見直しが必要な状況であると考えます。

引用返信 編集キー/
■9777 / inTopicNo.9)  Re[8]: windowのハンドルを取るプログラミングなどの基礎知識
□投稿者/ 囚人 (221回)-(2007/11/04(Sun) 17:13:38)
>そもそも、.NETはAPIの代わりになるものですよね?

それを目指してはいるのかもしれませんが、完全に代わりにはなっていないですね。

例えば、OS がバージョンアップして API が追加されたからと言って、.NET Fraemwork はそれについていっているわけではありません。

ネイティブとマネージで同じ概念だけど内部実装が違う場合なども API を使ったりするでしょう。例えばスレッド。混在したらかなりややこしくなりますが。

また、過去の資産を使いたいときとか。

というように、ネイティブとの連携は確かにない事はないでしょうけど、ウィンドウハンドルを直接触って何かしたいってのは実際のところあまりなさそう。
引用返信 編集キー/
■9780 / inTopicNo.10)  Re[7]: windowのハンドルを取るプログラミングなどの基礎知識
□投稿者/ GOD (3回)-(2007/11/04(Sun) 17:34:59)
No9767 (しの さん) に返信
> そもそも、.NETはAPIの代わりになるものですよね?
>
対応リスト(Win32−.NET API)のは↓ですね。
http://www.microsoft.com/japan/msdn/net/general/win32map.aspx
ただ、ページの適用対象が.NET1.0, 1.1 となっているので 2.0, 3.0になって増えているかも。
2.0, 3.0のページもどっかにあるのかな?
引用返信 編集キー/
■9813 / inTopicNo.11)  Re[5]: windowのハンドルを取るプログラミングなどの基礎知識
□投稿者/ カンタービレ (8回)-(2007/11/05(Mon) 14:08:54)
No9730 (しの さん) に返信
> ・一般的には、VBプログラマの間で、「windoowのハンドルとったらできるよね?」
> という言葉で会話が成り立っているんですよ。
>
ハンドルってAPI使用の時にWindowのコントロールなどを識別する際のハンドルって意味もありますけど
何かのイベントハンドラを扱いたい場合などにもハンドルを取るなんて言い方をしたりしますね。
.NETでわざわざAPIを使ってウィンドウハンドルを取得する必要は私もあまり感じませんケド。

No9767 (しの さん) に返信
>
> .NETですべてできるじゃないんですか?実際のところどうなんですか?

APIは使わなくてもすべてのことが出来る、というのはちょっと無理だと思いマス。
具体例では、他のアプリケーションのキーフックを組み込むためにはAPIを組み込まないといけません。
マネージドコード内では他の(アンマネージドアプリケーションなどの)イベントフックは出来ないので
APIを使用しなければイベントを取得できないからデス。
.NETもイベントフックの機能を持っていますがWindows全体のイベントまでは拾えないんです。

.NETに閉じた世界だけで機能要件が満たされる場合は不要かも知れませんし
実際多くのことが.NETのフレームワークの機能で実装可能デス。
ただ上の例のように機能はあっても範囲が限られていたり実装されていない機能も
あることは確かですので可能な限り.NETの機能を利用しつつも、足りない機能があれば
APIを利用するというようなくらいで考えるのがよいのではないでしょうか?


引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -