トップページ⇒tech
1001コメント301KB

Win32API質問箱 Build42

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/04/14(金) 06:09:09
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。

過去スレ、関連リンクは>>2-5くらい。

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(http://msdn.microsoft.com)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvencedWindowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで。
0159デフォルトの名無しさん2006/04/19(水) 22:36:01
原因というか、そもそもそんなことは出来ない。
0160デフォルトの名無しさん2006/04/19(水) 22:39:35
>>158 >>159
即レスありがとうございます。

無理なんですか。
ちょっと希望を抱いていたのですが。

メモリDCじゃないとSelectObject出来ないんですか。
初めて知りました。
BitBltで頑張ります。

ありがとうございました。
0161デフォルトの名無しさん2006/04/19(水) 22:42:35
あと、SelectObjectの第二引数にhdcもありえねー
0162デフォルトの名無しさん2006/04/19(水) 22:49:49
>>157
なんとなく非効率的だから改善しようという心がけが非効率的。
非効率で困るのなら、きちんとどこが非効率だか調べて、そこを重点的に効率化しなさい。
0163デフォルトの名無しさん2006/04/19(水) 23:13:13
教えてえらい人!

Windows のサービスで回復タブに指定した内容で
動作させるにはどんなプログラミングを行えばいいの?

回復タブの設定ってどんな仕組みで動作するの?
0164デフォルトの名無しさん2006/04/20(木) 01:04:18
>>163
CreateServiceの引数で指定できない?
0165デフォルトの名無しさん2006/04/20(木) 10:13:53
そういや2D専用なDirect3Dのライブラリってないのかねぇ‥‥
0166デフォルトの名無しさん2006/04/20(木) 10:51:42
>165
2D描画程度なら変換済み頂点使えばすぐだしスプライトもある
その程度の事にライブラリ求める程度の脳しかないならプログラミングなんか止めちまえ
0167デフォルトの名無しさん2006/04/20(木) 11:57:00
D3DX の Sprite でほとんどの用途には事足りる気がする
0168デフォルトの名無しさん2006/04/20(木) 13:30:58
あ〜やめだやめだ
0169きっと166は独りで仕事しているんだろうなぁ2006/04/20(木) 13:49:14
漏れの脳をD3DXの為に浪費するのは勿体無いから
2D用に特化されたライブラリがあって使い勝手が悪くないなら使わなくもない。
#つーか、全ての部下が漏れ並みの脳を持っているわけではないしね。
0170デフォルトの名無しさん2006/04/20(木) 14:06:16
○ 漏れ並みの脳しか持っていないわけじゃないしね
01711692006/04/20(木) 14:09:18
>>170
それなら部下にライブラリを作らせるだけ。
0172デフォルトの名無しさん2006/04/20(木) 14:29:10
○ 部下にライブラリ作成をお願いして馬鹿にされるだけ
0173デフォルトの名無しさん2006/04/20(木) 15:26:49
脳内部下乙
0174デフォルトの名無しさん2006/04/20(木) 15:49:34
非コンソールなアプリをDOS窓から起動したときに、
そのDOS窓に、文字列を書き出したいので、
AttachConsole()
WriteConsole()
などを使う方法で出力することはできたのですが、
書き終わった後に、DOS窓のコマンドプロンプトが表示されません。
手でENTERキーを押すと、無事にコマンドプロンプトが出るのですが、
WriteConsole()で書き終わった後に、自動的にコマンドプロンプト
を出す方法がありましたら教えて下さい。
0175デフォルトの名無しさん2006/04/20(木) 15:53:05
キー入力をシミュレートするしかないんでない?
0176デフォルトの名無しさん2006/04/20(木) 15:54:31
>>174
アタッチがあるなら、デアタッチがありそうな気がするのはオレだけか?
と言うか、まずはググってみたらどうだ?
0177デフォルトの名無しさん2006/04/20(木) 16:00:14
>>174
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/console_functions.asp
0178デフォルトの名無しさん2006/04/20(木) 16:00:57
お前だけじゃないにしても、極端に少ないのは確か。

デアタッチ の検索結果 約 17 件中 1 - 8 件目
0179デフォルトの名無しさんNGNG
「デアタッチ」つったらdare touchだよなぁ・・・
"dare touch" の検索結果 約 151,000 件中 1 - 10 件目 (0.31 秒)
01801762006/04/20(木) 16:11:37
デタッチと言うのか…orz



# 英語力が無いから困る…orz
0181デフォルトの名無しさん2006/04/20(木) 16:27:10
attach⇔detachなんて常識だろ
英語云々以前に、そのままカタカナ語として使われてるだろ

>>176はデバッガ触ったことすら無いのか?
0182デフォルトの名無しさん2006/04/20(木) 17:09:35
今夜アナタにデアタッチ
0183デフォルトの名無しさん2006/04/20(木) 18:49:16
感じる時代ラブタッチ
いいじゃんか そうじゃんか
うひょうひょ〜
クライマ〜ックス♪
0184デフォルトの名無しさん2006/04/20(木) 19:46:06
おっさんw
0185デフォルトの名無しさん2006/04/20(木) 20:08:55
メモリの確保について質問です
物理メモリが2G乗っているWindowsXP Proで
タスクマネージャーの利用可能メモリが1.5Gとあるにもかかわらず
HeapAllocやGlobalAllocでは
合計1.2G分のメモリを確保できませんでした

大容量のメモリを使うときの作法がなにかあるんでしたら教えてください。
よろしくお願いします。
0186デフォルトの名無しさん2006/04/20(木) 20:12:21
VirtualAlloc()
VirtualAllocEx()
0187デフォルトの名無しさん2006/04/20(木) 20:38:42
>>185
32bit Windowsで1.2Gもの連続領域が確保できるだけで十分幸せだと思いねえ
0188デフォルトの名無しさん2006/04/20(木) 20:39:33
あ、「合計」か。まあでも、そんなもんだろ。
0189デフォルトの名無しさん2006/04/20(木) 21:23:55
>>187
>>185は確保できなかったと言ってるのでは
0190デフォルトの名無しさん2006/04/20(木) 23:07:22
(゚ν゚)ニホンゴムズカスィネー
0191デフォルトの名無しさん2006/04/21(金) 00:25:32
>>185
Win32アプリケーションのメモリ空間は4GB。
デフォルトではその内2GBがシステムで予約されてて、ユーザーアプリが使えるのが2GB。
一度に確保しようとすると、断片化等を考えるとそれくらいが妥当な線ではないかな?
0192デフォルトの名無しさん2006/04/21(金) 10:54:22
「合計」1.2GB が微妙。
600MB のブロックが2個かも試練し、1MB のメモリブロック 1200 コかも試練。
巨大ブロックなら断片化かも試練が、HeapAlloc で数千個のブロックを alloc
してたりするなら、0.3GB分くらい消費してるかも試練。
paging境界のpaddingも気になる。
0193デフォルトの名無しさん2006/04/21(金) 11:14:42
達人のみなさま、ねっとげーむ無料でやる方法教えてください!
0194デフォルトの名無しさん2006/04/21(金) 11:16:02
基本料金無料のネットゲームをやる
0195デフォルトの名無しさん2006/04/21(金) 13:53:40
>>194
通信料も無料でと言ってるんではなかろうか
0196デフォルトの名無しさん2006/04/21(金) 13:55:33
>>187 >>191-192
500MB程度のブロックを2つと100MB程度のブロックを2つです。
VirtualAllocも試してみましたがだめでした。
0197デフォルトの名無しさん2006/04/21(金) 14:17:10
・ネカフェでやる
利用料も無料にしたいなら
・他人の家でやる
0198デフォルトの名無しさん2006/04/21(金) 14:45:09
他人の家に侵入するのはリスクが高すぎる
0199デフォルトの名無しさん2006/04/21(金) 14:51:35
GMになればタダで遊べる上に給料までもらえる。
0200デフォルトの名無しさん2006/04/21(金) 15:19:01
脳内妄想ネットゲーム。これ最強。
これで数時間、余裕で潰せる俺に、窓際なんて怖くない。

>>196
そのメモリ確保前に、どれくらい「自アプリで」メモリ使っている?
0201デフォルトの名無しさん2006/04/21(金) 15:59:19
>>200
タスクマネージャーのPF使用量は
起動前221MB 起動直後224MB メモリ確保直前225MB
となっていますので
5MB前後だと思われます。
0202デフォルトの名無しさん2006/04/21(金) 16:01:22
なんでプロセスタブでターゲットプロセスのメモリ使用量を見ないんだろ。
02032002006/04/21(金) 16:14:53
>>201
202の指摘ももっともだけど、5M10M程度じゃ、あまり関係なさそうだ。失礼
0204デフォルトの名無しさん2006/04/21(金) 19:47:23
メモリ使用量じゃなくて仮想メモリサイズの方を見たほうがいいよ
0205デフォルトの名無しさん2006/04/21(金) 23:39:51
すみません。初歩的なことかもしれませんが教えてください。
ウィンドウの左端に「あるもの」にカーソルを合わせたら出てくるメニューってどう作るのですか?

「あるもの」とはVisualstudio.Netとかの「ツールボックス」とかのあれです。
わからなかったらすみません
0206デフォルトの名無しさん2006/04/21(金) 23:41:29
マウスポインタが「あるもの」の上に乗ったときにメニューを表示しすればいいんじゃないか?
0207デフォルトの名無しさん2006/04/22(土) 00:21:54
WTLでの実装例
ttp://www.viksoe.dk/code/xpui.htm
0208デフォルトの名無しさん2006/04/22(土) 00:51:39
教えてもらってなんですけど、
さっぱりわかりません。
確かに自分がいったものに間違いなさそうですが・・・

ですので左側に固定のものにしようと思います。

教えてくれてありがとうございます。
0209デフォルトの名無しさん2006/04/22(土) 07:52:30
Windowsプログラミング初心者です。
SetWindowsHookExでWH_KEYBOARDを監視するとして、何かキーが押されたらコールバックが発生しますが
コールバック元を特定するにはどうしたら良いのでしょうか?
フォーカスの当たっているウィンドウ?コントローラ?を探す感じでしょうか?
02102092006/04/22(土) 07:59:19
書き忘れました。
↑のはグローバルフックの場合です。
0211デフォルトの名無しさん2006/04/22(土) 11:25:27
IMEについての質問なんだが、
変換候補を取得する時、CANDIDATELIST 構造体を使うわけだが

CANDIDATELIST 構造体の定義
----------
typedef struct tagCANDIDATELIST {
 DWORD dwSize;   
 DWORD dwStyle;   
 DWORD dwCount;   
 DWORD dwSelection; 
 DWORD dwPageStart; 
 DWORD dwPageSize; 
 DWORD dwOffset[1]; ←配列の要素は一つ
} CANDIDATELIST, *PCANDIDATELIST;
----------

dwOffset[] はこの構造体の先頭からのオフセット値で、
一つ目の文字列を取得するには 先頭アドレス+dwOffset[0] を参照する。
二つ目なら 先頭アドレス+dwOffset[1] を参照してくらしいけど、
dwOffset[]って、構造体の中の宣言ではdwOffset[1]として、要素は一つしか
宣言してないのに、サンプルプログラムとか見ると、普通にdwOffset[2]とかを
使ってる。どうして、配列違反にならないの?
0212デフォルトの名無しさん2006/04/22(土) 11:28:24
その分、余分に領域を確保しているんじゃね?
newとかで。
0213デフォルトの名無しさん2006/04/22(土) 11:28:46
ならないようにメモリ確保して使ってるから。
0214デフォルトの名無しさん2006/04/22(土) 11:42:07
必要なサイズ調べて確保する

ttp://www.kumei.ne.jp/c_lang/sdk3/sdk_282.htm
0215デフォルトの名無しさん2006/04/22(土) 12:08:07
>>212-214
お、すばやい回答サンクス。

ちょっと簡単な実験プログラム書いて実験してみて理解できた。
こんなやり方があるんですね。勉強になったよ。
0216デフォルトの名無しさん2006/04/22(土) 12:25:53
EnumWindowで列挙したウィンドウハンドルから
Alt+PrintScreenでクリップボードに取れるような
ウィンドウイメージを取得するのはどうすればいいでしょうか?
0217デフォルトの名無しさん2006/04/22(土) 12:47:32
ウインドウハンドルがとれているのに、
何故その質問になるのかさっぱり意味が分からない。
0218デフォルトの名無しさん2006/04/22(土) 12:49:03
ウィンドウハンドルからどうやってビットマップイメージに変換するんでしょうか。
0219デフォルトの名無しさん2006/04/22(土) 12:49:25
(BMP)hWnd
0220デフォルトの名無しさん2006/04/22(土) 12:55:01
>>219
よくわからないので、できればそのことを確認できるキーワードか解説しているURLを教えてください。
0221デフォルトの名無しさん2006/04/22(土) 13:03:25
おしえてあげないよ!ジャン♪
0222デフォルトの名無しさん2006/04/22(土) 13:29:48
>>216
GetWindowDCでどうだ?
0223デフォルトの名無しさん2006/04/22(土) 14:08:09
Win32の先輩方って、構造化例外処理をどの程度活用されていますか?
例えば、HeapAlloc() に HEAP_GENERATE_EXCEPTIONS を指定したりします?
確かに便利だとは思うのですが、大きな罠が隠れているような気もします。
0224デフォルトの名無しさん2006/04/22(土) 14:15:18
ttp://www.int21.co.jp/pcdn/vb/noriolib/vbmag/9804/idea/fig02.gif
こういうのってどうやって作るの?
0225デフォルトの名無しさん2006/04/22(土) 14:16:35
フォーカス当たっている領域に動的にドロップダウンリスト貼り付けてるだけ。
0226デフォルトの名無しさん2006/04/22(土) 14:45:14
あっ、違います。
リストではなくその後ろの属性の値を入力できるもの全体です。
写真、ややこしいですねm(._.)m
0227デフォルトの名無しさん2006/04/22(土) 14:48:25
>>223
とりあえずalloca使うときはSEH使う。
0228デフォルトの名無しさん2006/04/22(土) 15:13:20
>>226
場所に応じて必用なコントロールを貼り付けてりだけ。
見たまんまだから別に悩むところでも疑問に思うところでもない。
0229デフォルトの名無しさん2006/04/22(土) 15:19:01
タブ型コンボボックス内蔵リストビューがあるかと言ったらそんなものはない
0230デフォルトの名無しさん2006/04/22(土) 15:31:15
C#にはあるけどね
0231デフォルトの名無しさん2006/04/22(土) 15:35:19
>>223
>Win32の先輩方
Win3.1とか?
0232デフォルトの名無しさん2006/04/22(土) 15:35:22
最近は言語にコントロールが付いてくるのか。
0233デフォルトの名無しさん2006/04/22(土) 15:36:00
>>231
むしろOS/2
02342232006/04/22(土) 17:49:07
>>227
なるほど。ご意見どうもありがとうございます。

>>231
Win32プログラミング歴の長い皆様…という意味っす。
0235デフォルトの名無しさん2006/04/22(土) 21:42:25
現在のキャレットの位置をスクリーン座標で取得したいのですが、
GetCaretPos はキャレットを所有しているウィンドウのクライアント座標しか
返してくれません。キャレットを所有しているウィンドウのハンドルが
分かれば、ClientToScreen でスクリーン座標に変換できるのですが、
そのような関数が見当たりません。どなたか助けてください!
0236デフォルトの名無しさん2006/04/22(土) 22:31:16
GetGUIThreadInfo
0237デフォルトの名無しさん2006/04/22(土) 23:28:20
GetForegroundWindow?
0238デフォルトの名無しさん2006/04/23(日) 00:12:55
SetWindowsHookExでグローバルフックをして
WH_KEYBOARDを監視するとして、何かキーが押されたらコールバックが発生しますが
コールバック元を特定するにはどうしたら良いのでしょうか?
フォーカスの当たっているウィンドウ?コントロール?を探す感じでしょうか?
0239デフォルトの名無しさん2006/04/23(日) 01:29:21
元はキーボードドライバ、とかじゃなくて?
02402382006/04/23(日) 01:45:48
説明足らずですみません。
元は、キーが押された時にフォーカスの当たっていたコントロールということです。
0241デフォルトの名無しさん2006/04/23(日) 01:57:52
209 :デフォルトの名無しさん :2006/04/22(土) 07:52:30
Windowsプログラミング初心者です。
SetWindowsHookExでWH_KEYBOARDを監視するとして、何かキーが押されたらコールバックが発生しますが
コールバック元を特定するにはどうしたら良いのでしょうか?
フォーカスの当たっているウィンドウ?コントローラ?を探す感じでしょうか?
0242デフォルトの名無しさん2006/04/23(日) 01:58:56
>>238
>>236
02432382006/04/23(日) 02:17:47
>>242
この場合、thread idはどこから取得すれば良いのでしょうか?
02442382006/04/23(日) 02:27:36
GetForegroundWindow
↓
GetWindowThreadProcessId
↓
GetGUIThreadInfo

をやって解決しそうです。お騒がせしました。
もしなんかもっとスマートなやり方があったら教えてください。
0245デフォルトの名無しさん2006/04/23(日) 04:37:19
スレッド間で少し長め(WPARAMとかに無理やりキャストできないサイズ)の文字列を
やりとりするには、領域を確保してそのポインタを渡すような実装しかできないんでしょうか?
どっちかのスレッドがこけて解放できなくなるなんてことが普通に起きそうで怖いんですが…
02462452006/04/23(日) 05:35:18
自己解決しました。
0247デフォルトの名無しさん2006/04/23(日) 05:38:52
してませんが…
0248デフォルトの名無しさん2006/04/23(日) 10:17:12
>どっちかのスレッドがこけて解放できなくなるなんてことが普通に起きそうで怖いんですが
んなコード書くほうが悪いだろう。
0249デフォルトの名無しさん2006/04/23(日) 10:24:25
>>245
スレッドの強制終了はNG。
フラグ立ててきっちり終了処理してから死んでくれと頼むのが基本。

その上でそのスレッドが文字列の開放を出来ない理由があるなら
開放の責任をメインスレッドに委ねてしまえばいい。

なんにしても
>領域を確保してそのポインタを渡すような実装しかできないんでしょうか?
これ以外の実装はない。
0250デフォルトの名無しさん2006/04/23(日) 10:42:36
GetFocus()
0251デフォルトの名無しさん2006/04/23(日) 10:49:19
他のアプリから文字を取ってきたりするけど
0252デフォルトの名無しさん2006/04/23(日) 11:33:39
プロセス間のデータ受け渡しで悩むならわかるが
スレッド間で悩む必要なんてなかろうに。
0253デフォルトの名無しさん2006/04/23(日) 19:12:45
動的に確保したメモリを指すポインタを渡した時にどっちに解放責任を持たすかで悩むとか
0254デフォルトの名無しさん2006/04/23(日) 19:16:53
IInterfaceみたいに参照カウンタでもつけたらどうだ?
0255デフォルトの名無しさん2006/04/23(日) 19:17:31
エスパーズが暴走しております
0256デフォルトの名無しさん2006/04/23(日) 19:18:44
MDIでツールバーを作成する方法を教えてください!!!
自分のなかのSDIの知識だけでしたらおかしくなったのでお願いします。
0257デフォルトの名無しさん2006/04/23(日) 19:42:00
MDI ツールバー
0258デフォルトの名無しさん2006/04/23(日) 19:48:36
>>257
参考になりそうなサイトを教えてください(^人^)
■ このスレッドは過去ログ倉庫に格納されています