1 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 22:39:56 ] スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。 やさしいお兄さんやお姉さんたちが答えてくれるかも。 過去スレ、関連リンクは>>2-5 くらい。 ■注意 ・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。 ・日本語版MSDN Online Libraryは不完全です。英語版(msdn2.microsoft.com/library/ )の利用推奨。 ・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。 ・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
237 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 12:05:44 ] >>232 ダイアログから複数のモードレスダイアログを開くサンプルを、 C+Win32で書いてみたぞ。 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5289.zip サブダイアログは、管理を楽にするために、 一度作成されると閉じても非表示になるだけの仕様。 宿題のメインはここじゃないのだろうから、こんなもんでいいんじゃね?
238 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 12:16:12 ] 宿題お願いすると簡単に答えてくれるスレはここですか?
239 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 12:26:45 ] 宿題スレでやれ
240 名前:158 mailto:sage [2007/11/18(日) 14:04:35 ] >>236 様 >>237 様 他 有難う御座います・・・ けれど、駄目だ Orz 分け分からないです。 void CKadai1119Dlg::Onmaru() { // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください //MessageBox("○の表示"); DialogBox(hInst, (LPCTSTR)IDD_maru, hWnd, (DLGPROC)About); } IDD_maru ダイアログを新たに作成し、取りあえず付けました。 当然エラー C:\Documents and Settings\あ\デスクトップ\kadai1119\kadai1119Dlg.cpp(178) : error C2065: 'hInst' : 定義されていない識別子です。 C:\Documents and Settings\あ\デスクトップ\kadai1119\kadai1119Dlg.cpp(178) : error C2065: 'hWnd' : 定義されていない識別子です。 C:\Documents and Settings\あ\デスクトップ\kadai1119\kadai1119Dlg.cpp(178) : error C2065: 'About' : 定義されていない識別子です。
241 名前:158 mailto:sage [2007/11/18(日) 14:08:11 ] 以上のエラーが出ています。 根本的に知識が足りないです。 サンプルプログラムや文献を漁ってみます。 とても、237様に感謝してます。参考にして頑張ります。
242 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 15:02:06 ] MFCで無意味にDialogBoxなんてAPIを使おうとする馬鹿初めて見た >>241 いい加減こっち行けつってるだろ 日本語読めんのか? ■MFC相談室 mfc18d.dll■ pc11.2ch.net/test/read.cgi/tech/1185917008/
243 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 15:02:35 ] 基礎からやれってことだ 横着したって無駄 ここは宿題スレではない
244 名前:デフォルトの名無しさん [2007/11/18(日) 16:00:50 ] 俺は、応援してるぞ158w
245 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 16:07:57 ] >>244 自演乙
246 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 16:20:19 ] __ /__.))ノヽ .|ミ.l _ ._ i.) (^'ミ/.´・ .〈・ リ .しi r、_) | しゃぶらないか? | `ニニ' / ノ `ー―i´ / ̄ '  ̄ヽ / ,ィ -っ、 ヽ | / 、__う人 ・,.y i | /  ̄ | | ヽ、__ノ | | | 。 | / | ヽ、_ _,ノ 丿 | (つ) | | / ヽ |
247 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 16:23:25 ] >>240 デスクトップwww
248 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 18:25:09 ] がんばれ158w
249 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 18:54:46 ] エディットボックスを透明にすることは出来ますかね?
250 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 18:59:10 ] 非表示にすればいい
251 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 19:11:18 ] 頭いいな
252 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 19:25:23 ] 間違えました。 透明な背景を持つようにするにはどうしたらいいですかね?
253 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 19:34:23 ] レイヤードウィンドウでカラーキーを設定する
254 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 21:05:18 ] 透明なエディットボックスって何の役に立つの?
255 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 21:13:38 ] 仕事中に官能小説でも書きたいんジャマイカ?
256 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 21:19:35 ] ググッてるんですが、中々難しいです。 >254 機能的にはなんの役にも立ちません。 しかし、描画してあるビットマップがエディットボックスの背景色と重なるのは少し気になります。
257 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 21:59:08 ] 1. WS_EX_TRANSPARENTを設定する 2. WM_CTLCOLOREDITでNULL_BRUSHを返す これで透明にならなければEditコントロール自体の問題だからMSに文句言うか諦める
258 名前:デフォルトの名無しさん [2007/11/18(日) 23:32:39 ] .NETでも探しているのですが、Win32APIでも探しています。 Windowsのユーザーアカウントの一覧リストをプログラム上で表示して そこからアカウントを選択するようなことをする場合、ユーザーアカウントの リストを得るためのクラスやAPIがあればうれしいのですが、どのようなものがある でしょうか? また、そのリストを、Domain上のユーザーアカウントに対しても取得したい 場合にも有効なクラスやAPIであれば尚ありがたいです。何卒よろしくお願いします。
259 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 00:07:56 ] static HBRUSH hBrush; switch (msg) { case WM_CREATE: hBrush = CreateSolidBrush(123); hEdit = CreateWindowEx(WS_EX_CLIENTEDGE,"EDIT", "", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL, 100, 10, 200, 25, hWnd, (HMENU)ID_EDIT, hInst, NULL); SendMessage(hEdit, EM_SETLIMITTEXT, (WPARAM)63, 0); case WM_CTLCOLOREDIT: SetBkColor((HDC)wParam, 456); return ((LRESULT)hBrush); break; こうですかね?
260 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 00:09:20 ] 標準機能では背景を透過させることは出来ない。 以上
261 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 00:16:47 ] dllから、そのdllを読み込んだexeにメッセージを渡したいのですが どちらもウインドウを持たない場合はどのような手段が考えられるでしょうか。
262 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 00:23:40 ] メールを送信する
263 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 01:05:11 ] メモリマップトファイル アトム
264 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 01:26:11 ] >>261 コールバック関数用意しとけばいいんじゃね?
265 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 01:55:32 ] 非同期でよければexeからdll呼び出すときに変数のポインタ渡せばいいんじゃない? コールバックが一番確実だろうけど。
266 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 02:10:55 ] >>259 hBrush = CreateSolidBrush(123); SetBkColor((HDC)wParam, 456); ナンダコレw
267 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 07:00:16 ] Process Explorerでプログラムのsuspendとresumeが可能なんですが どんなAPIを使ってるんでしょうか?
268 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 07:18:36 ] ねいてぃう゛API
269 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 09:03:22 ] スレッドを列挙してSuspendThread連打
270 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 13:18:16 ] たぶんNtSuspendProcess 調べてもないけど
271 名前:261 mailto:sage [2007/11/19(月) 14:22:54 ] >>262-265 レスありがとうございます! コールバックを実装してみようと思います。
272 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 17:31:21 ] リソースからではなく、ファイルからアイコンを取得してイメージリストに 追加したいんですが、どういう方法をとればいけるんでしょうか。
273 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 17:37:54 ] LoadLibraryで開いて、LoadIconなりLoadImageなり
274 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 17:55:20 ] すいません、dll内のものじゃなくて、iconファイルやbmpからです。
275 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 18:39:23 ] LoadImage で LR_LOADFROMFILE
276 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 19:26:25 ] >>275 ありがとうございました。 解決しました。
277 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 20:09:40 ] 透過出来ないのはなぜなんですか?
278 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 20:11:24 ] 何が?
279 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 20:15:08 ] 人体
280 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 20:28:59 ] 人体より衣服を透過したい
281 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 20:31:50 ] 夜店で売ってるよ
282 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 20:54:13 ] >>280 ユーザーモードでは他人の衣服を透過させる事はできない まずはターゲットに対しての特権取得を行う必要がある
283 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 21:17:45 ] >>282 どうあがいても、無理ってことですか?
284 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 21:39:50 ] 衣服の透過は実装例とか見つからないので詳しくはわからないけど、 管理者権限でも衣服にアタッチできないんなら諦めたほうが素直じゃないか?
285 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 22:13:16 ] 透過した衣服を着てくれる彼女を作ればいいよ
286 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 22:22:54 ] 境界線をクリックした時に出る 変な網目のようなバーを描画する関数ってあるんでしょうか?
287 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 22:27:49 ] あるといえばあるし、ないと言えばない。 あらゆるプログラムは関数を組み合わせて書く。
288 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 23:15:04 ] >>286 DrawFocusRect
289 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 01:53:40 ] >>286 白黒のブラシを作って、それで反転させる。
290 名前:デフォルトの名無しさん [2007/11/20(火) 06:43:28 ] 1つのアプリでコンソールを複数表示したいのですが、どうすればいいですか? stderr用とかstdout用とかにわけたいんですが。
291 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 07:30:24 ] コンソールは各プロセスに 1 つしか割り当てることができません。 すでにコンソールを持っているプロセスが AllocConsole 関数を呼び出すと失敗します。 FreeConsole 関数を使って現在のコンソールからプロセスを切り離すと、 AllocConsole 関数を呼び出して新しいコンソールを作成することができます。 AllocConsole 関数は、新しいコンソールの標準入力ハンドル、標準出力ハンドル、 標準エラーハンドルを設定することもできます。 標準入力ハンドルはコンソールの入力バッファのハンドル、 標準出力ハンドルと標準エラーハンドルはコンソールの画面バッファのハンドルです。 ハンドルを取得するときは、GetStdHandle 関数を使います。 この関数は主に、グラフィックスアプリケーションでコンソールウィンドウを作成するときに使います。 グラフィックスアプリケーションは、コンソールなしで初期化します。 コンソールアプリケーションは、切り離されたプロセスとして作成する (CreateProcess 関数を呼び出すときに DETACHED_PROCESS フラグをセットする) 場合を除いて、コンソール付きで初期化するのが普通です。 ttp://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpfileio/html/_win32_allocconsole.asp CreateConsole AllocConsole FreeConsole
292 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 08:25:51 ] コンソールを持つ子プロセスを複数用意して CreateProcessの時に親プロセスのstderrやらstdoutをそれぞれのstdinに当ててしまえば可能かも名
293 名前:デフォルトの名無しさん [2007/11/20(火) 09:41:19 ] ブラウザのお気に入りとかのウィンドウのサイズを変える境界線みたいなのってどうやって作るんですか? 境界線を移動できるオプションをウィンドウに設定しても、動くのは一つのウィンドウだけで、 その他のウィンドウはそれに反応してリサイズされないですよね?あの境界線ってどうやって作るのでしょうか?
294 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 09:47:10 ] リサイズされるたびに再計算してるだけ
295 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 10:34:59 ] >>293 「スプリッタウィンドウ」 で ググれ
296 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 13:03:37 ] >>288 >>289 ありがとう、試してみます
297 名前:デフォルトの名無しさん [2007/11/20(火) 14:21:09 ] >>295 ありがとうございます
298 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 14:24:56 ] でも画面DCに反転ブラシで書く方法はAeroGlass環境だとクソ重くなるぞ スプリッタならエクスプローラみたいにダイレクトにサイズ変更するようにしたほうがいい
299 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 15:48:34 ] 普通はスプリッタウィンドウの中に子ウィンドウを置くだろ
300 名前:デフォルトの名無しさん [2007/11/20(火) 20:19:01 ] スプラッタ?
301 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 20:52:48 ] バケラッタ!
302 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 20:58:28 ] (/O^)/
303 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 20:59:44 ] はらへった
304 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 23:08:21 ] hDCはEndPaintで開放されるのでしょうか? case WM_PAINT: // クライアント領域を再描画する処理 hDC = BeginPaint(hWnd, &ps); TextOut(hDC, 0, 0, s, lstrlen(s)); EndPaint(hWnd, &ps); return 0;
305 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 23:09:32 ] そうだよ。PAINTSTRUCTの中にhDCが保持されているので、 そこからEndPaintは解放するデバイスコンテキストを見付ける。
306 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 23:20:22 ] なるほど、そういうことだったのですね デバイスコンテキストはプロシージャを抜けるまでに開放しないと やばいことになる(どうやばいのかは知りませんが)と聞いていたので どこで開放してるのか必死になってさがしまつた
307 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 12:56:48 ] しかしPAINTSTRUCTの中のhdcと同じもの返すって普通に考えたら謎な実装だな。 文字列系関数で渡したバッファのポインタそのまま返すのと似た感じでコーディング楽にするためなんだろうか。
308 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 13:54:58 ] >>307 BeginPaint の動作を勘違いしていると思う・・・
309 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 14:01:02 ] そうか? >>307 はpsのメンバにもhdcあるのに、戻り値でも返してるって言ってるだけでは?
310 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 14:32:29 ] 確かに 別に戻り値は普通にT/Fで良いんだけどな いいけどさ
311 名前:307 mailto:sage [2007/11/21(水) 14:37:28 ] >>308 >>309 の通り。 かなりくだらないレベルかもしれんが、PAINTSTRUCTとHDCを両方定義するのが無駄と思って 戻り値は無視(NULLチェックだけ)してPAINTSTRUCTのhdcだけを使うようにしてる。
312 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 15:24:07 ] VBのWithのようなものがあったら俺もそうするな。 まあ今でもPAINTSTRUCTの変数名はいつもたった2文字、psだけど。
313 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 16:42:38 ] Windows Version 1 の頃の TextOut(BeginPaint(hWnd, &ps), 0, 0, s, lstrlen(s)); の名残
314 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 18:43:50 ] 色はつけれるけど、透過ができねぇぇぇえええ!!!
315 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 18:53:36 ] つGDI+
316 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 19:01:43 ] hdcはWM_PAINTのWPARAMで渡される訳だが
317 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 19:14:53 ] >>316 一体いつの時代だ? msdn2.microsoft.com/en-us/library/ms534901.aspx wParam This parameter is not used.
318 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 19:35:11 ] >>316 それは WM_PRINT じゃ?
319 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 19:37:50 ] WM_PRINTと勘違いしてないか?
320 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 20:28:56 ] >>317 URL貼るなら最後まで読めよw > For some common controls, the default WM_PAINT message processing checks the wParam parameter. > If wParam is non-NULL, the control assumes that the value is an HDC and paints using that device context.
321 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 20:38:07 ] そんなイレギュラーな仕様は常用すべきではないだろう
322 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 20:58:36 ] >>321 お前英語苦手だろw もう少し詳しく説明されてる古いWin32SDKヘルプの説明を貼ってやろう > Handle to the device context to draw in. If this parameter is NULL, use the default device context. > This parameter is used by some common controls to enable drawing in a device context other than the default device context. > Other windows can safely ignore this parameter.
323 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 22:11:02 ] 何にせよまずはBeginPaintが基本ということでいいのでは?
324 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 23:09:27 ] >>314 ttp://www.microsoft.com/japan/msdn/windows/windows2000/layerwin.aspx ttp://homepage1.nifty.com/ken1/win2kapi.html ttp://homepage1.nifty.com/kazubon/progdoc/tclock/oldwin.html ttp://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_Win32_SetLayeredWindowAttributes.asp
325 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 15:20:45 ] エクスプローラでマイコンピュータを開くと表示される 「ローカル ディスク」や「CD ドライブ」といった文字列を取得するには どうすればいいのでしょうか? 30分以内に小倉優子ばりのおっとりキャラで答えてください
326 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 15:23:32 ] shell32.dllからGetResource
327 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 15:36:31 ] SHGetFileInfoで取れぬのか?
328 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 15:41:26 ] >>327 おおいけそうな予感 ありがとー☆ミ
329 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 17:28:11 ] memo ttp://www.microsoft.com/technet/scriptcenter/scripts/desktop/special/default.mspx?mfr=true
330 名前:デフォルトの名無しさん [2007/11/22(木) 17:37:49 ] 割り込んで申し訳ないのですが、教えてください。 DirectX全画面のゲームの上から、文字や画像を表示する方法はないでしょうか? (レイヤードウィンドウとかはダメでした。。。)
331 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 18:36:06 ] グラフィックカードに直接アクセスして 描画領域くりぬいてるから駄目なんじゃない?
332 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 18:42:35 ] よくチートツール類がやってる方法: プロセスに潜り込んでIDrectDraw***を乗っ取り、そのBlt()あるいはBltFast()に割り込んで自分で書く。
333 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 19:19:22 ] >>330 俺は普通に枠なしウィンドウで文字表示したことあるけど べつにその画面内に描画したいわけじゃないんだろ
334 名前:デフォルトの名無しさん [2007/11/22(木) 19:37:41 ] 330です。 説明不足ですんません&ありがとうございます。 よくMODツールなんかで見かけるやつです。 (レースゲームなんかでスピードメータを追加する改造など) でもどうやったら、DirectDraw***のオブジェクトを乗っ取れるか? それができたらやりたい放題ですね。 そこをぜひぜひお願い申し上げます。 (僕のプログラミングレベルでは・・ デバイスコンテキスト取ってDrawText、BitBltぐらいしかできないっす。)
335 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 19:47:33 ] そのレベルじゃ厳しすぎるだろ・・・
336 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 20:06:50 ] >>334 (1) APIフックで CreateDirectDrawの類をフックして順次wrapperオブジェクトを返す (2) 途中まで同じで、wrapperは使わず IDirectDraw9Device 等の vtbl を書き換える のどっちかかな。 APIフックの仕方やvtblの書き替え方を自分で見つけられる程度の実力があれば、 地味にやってけばできるでそ。
337 名前:デフォルトの名無しさん [2007/11/22(木) 20:41:49 ] 334です。 >>335 やっぱり? >>336 ありがとうございやーす。 とりあえず正しい方向へ行けるのでホッとしました。 あとは学習あるのみ・・・