Win32API質問箱 Build28

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:05/03/07 15:16:33
どこら辺がwin32apiなのやら
953デフォルトの名無しさん:05/03/07 15:44:25
質問ですが、
GetDC(m_hWnd)
したあと、必ずReleaseDCをしなければならないと決まりがありますが、
特にReleaseDCをしなくても、エラーは出ません。

これはGetDCをするたびに、メモリ領域が作成され、
終了後、すぐにReleaseで削除しないといけないということなのでしょうか?

GetDCを呼び出す回数が多いので、いちいちReleaseDCを呼び出すのが難です。
954デフォルトの名無しさん:05/03/07 15:50:02
>>953
Use MFC.
955デフォルトの名無しさん:05/03/07 15:50:58
>>950
「getcharが表示される」とはどういう意味?
それから、スレ違い。
956デフォルトの名無しさん:05/03/07 15:52:44
>>953
WTLについてるCDCとかCPaintDCがお勧め
957デフォルトの名無しさん:05/03/07 16:23:10
>>953
文字列表示関数、ビットマップ表示関数などを作って、引数の指定によっては、
関数の中で、Get〜Releaseを行うみたいな事をすればいい。
958デフォルトの名無しさん:05/03/07 16:25:23
WM_CREATEでGetDCしてWM_DESTROYでReleaseDCすりゃいいよ。
959デフォルトの名無しさん:05/03/07 16:50:38
CreateProcessして出来たプログラムから、
呼び出し元のウィンドウハンドルを得る方法を教えてください。

呼び出し先への引数で、ウィンドウクラス名、ウィンドウタイトル名を渡して、
呼び出し先でFindWindowという方法は思いついたのですが、
ウィンドウクラスが渡せない状況の時はどうすればいいでしょうか。
960デフォルトの名無しさん:05/03/07 16:56:14
>>959
ウィンドウクラス名、ウィンドウタイトル名が渡せるのなら
ウィンドウハンドルを直接渡せばいいじゃない。
961959:05/03/07 17:04:19
>>960
すいません。ウィンドウハンドルも渡せません。

例えば、一般のテキストエディタからプログラムを呼び出し、
その引数にテキストエディタ名(.exe)、編集中の.txtを渡して、
呼び出し元の方でなんかやる見たいな事がしたいんです。
962959:05/03/07 17:06:19
>>961
間違えました。呼び出し先でなんかやるです。
編集中の.txtは、ファイル名の事です。
963デフォルトの名無しさん:05/03/07 17:14:20
>>961
ウィンドウハンドル渡せない理由が無いが?
964959:05/03/07 17:24:56
>>963
JmEditor2というテキストエディタからプログラムを呼び出したくて、
ツール実行という機能があるので、それで呼び出します。

ファイル名は、当然知っているので簡単に渡せますが、
ウィンドウクラス名、ウィンドウハンドル名は、
JmEditor2の中にアクセスできない状況(ユーザーとして使う状況)では、
分からないと思うのですが。
965デフォルトの名無しさん:05/03/07 17:35:40
ウィンドウクラス名、ウィンドウタイトルのみっでは同名クラス同タイトルの別ウィンドウが存在しうるので一意の同定は不可能。
966デフォルトの名無しさん:05/03/07 17:39:51
JmEditor2側にそういう仕組みが無いならFindWindow等で調べるしかない。
967959:05/03/07 18:04:48
>>965>>966
そうですよね。%fとかで、ファイル名は簡単に分かるんですが、
ウィンドウクラス名、ウィンドウハンドルも渡す機能が欲しいです。

所で、テキストエディタから、別のテキストエディタを呼び出して、
その引数に現在編集している.txtのファイル名を渡すと、
(EcoNote.exe(フルパス一時ファイル名) → JmEditor.exe)
呼び出し先で編集して、呼び出し元の.txtも変わる見たいな事が
出来る事が分かったんですけど、これはどういう感じで行っているのでしょうか。

ファイル名しか渡していなく、僕の状況と同じだと思うんですが、
こちらはアクセスして処理できています。
968デフォルトの名無しさん:05/03/07 18:21:16
>>967
FindFirstChangeNotificationで監視していて
変更されたら再読み込みしてるとか?
969959:05/03/07 18:29:18
>>968
そのキーワードで調べてみます。
お答えくださった皆様、どうもありがとうございました。
うまくやるやり方が分かった時は、ご報告させていただきます。
970デフォルトの名無しさん:05/03/07 23:07:22
えと、質問です。

RubyでWinInet.dllを使おうとしているのですが、なんだかうまくいきません。
いかんせん、RubyでWin32APIを使うのは初めてなので、試行錯誤の連続ですが。

このサイトのVB用コードを参考に、翻訳+αしてみました。
ttp://www.geocities.co.jp/SilkRoad/4511/vb/wininet.htm

これがソースです。汚くてすいません;;
ttp://www.freewebz.com/pme_jp/inetlib.rb

このファイルを外部ライブラリとしてrequireした後、
(変数)=GetHttpData("(URL)")と呼び出します。

しかし、irbでやってみたところ、なぜか予期しない"1"を返してきます。
なぜでしょ?
971970:05/03/07 23:11:56
あ、それから「socketライブラリ使えばできるじゃないか」ってツッコミはなしの方向でw
972デフォルトの名無しさん:05/03/07 23:20:13
それはWin32APIの質問じゃなくてRubyの質問なんじゃないのか
973デフォルトの名無しさん:05/03/08 00:13:08
>>946
ありがとうございました
974デフォルトの名無しさん:05/03/08 00:37:46
リストビューコントロールについて2つ質問させてください。

一つ目はカラムの数を知ることができるマクロ(メッセージ)についてです。
ListView_GetColumnCountみたいなマクロがあれば一番なんですが、ないみたいなので
今のところListView_GetColumnでカラムのインデックスを0から増やしていって
FALSEが返るまで呼び出すことで数えています。
ただ、このやり方でホントに常に正しく数えられるのかどうか分からないし、
いまいちスマートさに欠けるやり方なのでよりよい取得方法があれば教えてください。


二つ目はListView_GetColumnWidthについてです。MSDNを見ると・・・

If you use the returned string width as the column width in a call to the ListView_SetColumnWidth macro,
the string will be truncated. To retrieve the column width that can contain the string without truncating it,
you must add padding to the returned string width.

となっていて、カラム幅を適切に設定したいならpaddingを足せとのことですが、このpaddingの値を適切に
取得する方法が分かりません。

以上です。どなたかご存知の方がいればよろしくお願いします。
975974:05/03/08 00:40:49
すみません。二つ目の質問のマクロは
ListView_GetColumnWidth
じゃなくて
ListView_GetStringWidth
でした。
英文もこっちのマクロの説明です。

あ、あとあげ忘れてた。
976デフォルトの名無しさん:05/03/08 00:45:00
>>959
ちょっとよく分からないで書いてる部分もあるけど、
親プロセスを取得することは可能みたい。
というわけで、FindWindowしたウィンドウが親プロセスの
ウィンドウかどうかを確かめるなどの方法で、確実に起動元の
ウィンドウを特定することは可能だと思う。

親プロセス取得は、
- Retrieving the parent of a process (WinNT)
ttp://www.codeguru.com/Cpp/W-P/win32/article.php/c1437/
- class Win32_Process
http://msdn.microsoft.com/library/en-us/wmisdk/wmi/win32_process.asp
※ ParentProcessIdというメンバ
あたりを見てみました。
977デフォルトの名無しさん:05/03/08 01:31:51
>>974
一つ目はListView_GetHeaderしてHeader_GetItemCountかな。
978974:05/03/08 02:12:18
>>977
どうもです。一個目のほうはうまくいきました。

二つ目は今のところ適当に10pixelほど足してごまかしています。
カラム間の境界部分をダブルクリックするのをエミュレートすれば勝手に幅を整えてくれるとも
考えたのですが、なんか余計に泥臭くなってしまいそうでいまいちです。

Windows内部ではこの幅の調整の処理をうまく行えているということは
何か方法があるとは思うのですが・・・
979デフォルトの名無しさん:05/03/08 02:24:31
単純にカラム幅をアイテム幅に合わせたいなら
ListView_SetColumnWidthをLVSCW_AUTOSIZEでかな。
980974:05/03/08 02:43:55
>>979
ガ━━(゚Д゚;)━━━ン!!
・・・今までの苦労はいったいorz

何はともあれ、どうもありがとうございました。
981959:05/03/08 07:47:57
>>976
ありがとうございます。やってみます。
982デフォルトの名無しさん:05/03/08 09:40:48
WMIでワークグループ取得ってどこでやるんでしょうか?
Win32_NetworkAdapter
Win32_NetworkAdapterConfiguration
Win32_NetworkAdapterSetting
を使ってみたのですが、該当項目が見当たらなくて。
取得不可能??
983デフォルトの名無しさん:05/03/08 10:07:56
>>982
Win32_ComputerSystemのDomainじゃダメ?
984デフォルトの名無しさん:05/03/08 10:59:30
>>983
とれました!
ネットワークと違うところに格納されているとは盲点でした。
ありがとうございました。
985デフォルトの名無しさん:05/03/08 12:09:36
WNDClASSで決まっているスタイルを変更する方法を教えてください。
986デフォルトの名無しさん:05/03/08 12:28:48
>>985
SetClassLongPtr 関数を使え。
987985:05/03/08 12:40:51
できました、ありがとうございました。
988デフォルトの名無しさん:05/03/08 12:47:09
window messageをアプリケーションに送るツールありませんか?
989デフォルトの名無しさん:05/03/08 13:02:00
>>988
そのくらい自分で書け
990デフォルトの名無しさん:05/03/08 13:13:02
SendMessage(otherAppHWnd, WM_APP, wParam, lParam);
991デフォルトの名無しさん:05/03/08 15:44:34
次スレまだー?
992デフォルトの名無しさん:05/03/08 19:24:41
【AdvancedWindows】Win32API質問箱 39【読め】
993デフォルトの名無しさん:05/03/08 20:28:51
39かよっ!
994デフォルトの名無しさん:05/03/08 20:36:32
【AdvancedWindows】Win32API質問箱 29【読め】
995デフォルトの名無しさん:05/03/08 20:40:46
996デフォルトの名無しさん:05/03/08 20:48:51
997デフォルトの名無しさん:05/03/08 20:57:42
998デフォルトの名無しさん:05/03/08 21:03:59
      ((
       ) )
     ノ           /^l'"'"~/^i'ツ'ッ.,
    ((  ((        ヾ          ヾ    モフー・・・
     )    ) 丿   ミ ´ ∀ `      彡
    (( (   ノノ     ッ       _    ミ 
     ∴∵ >>      (´彡,.     (,,_,ノ  _,,.ヽ 
   //》||ヾミ\        "'"'゙''""''''゙""´
999デフォルトの名無しさん:05/03/08 21:13:47
ume-
1000デフォルトの名無しさん:05/03/08 21:17:30
このスレ終了。続きは次スレ。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。