[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 06/08 10:58 / Filesize : 131 KB / Number-of Response : 644
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Win32API質問箱 Build65



1 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 15:51:24 ]
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。

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

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(msdn2.microsoft.com/library/)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで

- Win32API質問箱 wiki
wiki.livedoor.jp/program1/d/FrontPage

Win32API質問箱 Build64
pc11.2ch.net/test/read.cgi/tech/1207099291/

554 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 12:21:15 ]
WM_USERなんて名前だから、自作アプリの独自メッセージはそこから使えって意味だと思ってた俺。
そういうのはWM_APPからって、ややっこしいんだよ!逆だろ名前!
せめてWM_USERだけでもなんとかならんかったのか。


555 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 12:26:55 ]
WM_USER+???を使っている物(Toolbarなど)と、そうでない物(ListViewなど)があるのは何故だろう
何か理由でもあるのだろうか・・・

>>554
Win16→Win32でコモンコントロールが大量に追加されてWM_USER未満では足りなくなったから
WindowsのコントロールがWM_USER以降を使うようになってWM_APPが定義されたかと

Win16時代のAPIヘルプにはこう書いてある。

> 0〜WM_USER − 1  Windowsが使用するために予約されているメッセージです。
> WM_USER〜0x7FFF プライベート ウィンドウ クラスが使用する整数メッセージです。
> 0x8000〜0xBFFF  Windowsが使用するために予約されているメッセージです。
> 0xC000〜0xFFFF  アプリケーションが使用する文字列メッセージです。

556 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 12:31:46 ]
こういう話は面白いから許容

557 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 12:34:06 ]
WM_USERはuser32.dllが使う場所かと思っていました

558 名前:549 mailto:sage [2008/05/03(土) 13:03:19 ]
>>550
どうもありがとうございます。そういうことになりそうですね…。
確かに、他から TerminateProcess できてしまうことを考えると、
悪意のある攻撃を想定することはあまり意味がないですね。

>>551
>>549 の説明不足でしたかね…すみません。
ポインタの値が、プロセス境界を超えた時点で意味がなくなることは理解しています。
動作させたいのではなく、他のプロセスからの無意味なアクセスを拒否したかったのです。

559 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 13:17:38 ]
>>558
じゃ具体的にどうやるんだ。
誰がメッセージを送ったのか知る方法は無いぞ。

アドレスだって、予約されてるとか、コミットされてるぐらいしかわからん。

560 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 13:19:10 ]
同一デスクトップ内の同一権限のアプリにイタズラされることを想定するなんて
かなーり無意味なことだと思うが

561 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 14:16:05 ]
そういう事が簡単に出来てしまうのもどうかと思うぞ
今更変えられないのも分かるけどな

562 名前:549 mailto:sage [2008/05/03(土) 14:18:00 ]
>>559
アドレスから直接判断するのは難しいので、例えば __try 〜 __except の
中で中身を読んで値をチェックすれば可能かなと思っていました。
もちろん、この方法にも限界があるような気はしますけど…。

>>560
そうかもしれません。ただ、仮に攻撃を想定しないでコーディングして、
>>525 に書かれているようなことをされてアプリが落ちてしまったとき、
実際は送った側に問題があるにもかかわらず、落ちたアプリの側に
問題があるように見えてしまうのが気持ち悪かったというのはあります。



563 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 14:46:14 ]
気持ち悪さの解消のためにここまで引っ張ったのかよ

あほらしい

564 名前:デフォルトの名無しさん [2008/05/03(土) 14:59:13 ]
↑話を理解してない馬鹿

565 名前:デフォルトの名無しさん [2008/05/03(土) 15:04:37 ]
↑話を理解してない馬鹿

566 名前:549 mailto:sage [2008/05/03(土) 15:07:30 ]
>>563
ちょっと気になったものですから、この機会に質問させていただきました。
私の疑問は >>550 さんのお返事で解消できましたのでこれにて消えることにします。
他にも不快な思いをした方がいらっしゃいましたら、申し訳ありませんでした。

567 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 15:09:52 ]
vertualalloc使えば、相手プロセスがアクセス出来たんだったかな

これは、それ使ってるんじゃない?
www.yoshibaworks.com/ayacy/inasoft/lv2csv/index.html

568 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 15:13:19 ]
>>567
それはVirtualAlloc、WriteProcessMemory、CreateRemoteThread辺りでDLL注入してるだけじゃないの

569 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 15:13:58 ]
IsBadReadPtr でも使っとけ

570 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 15:20:18 ]
>>569
obsoletedだ馬鹿

571 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 15:29:02 ]
ところで、obsoleteを動詞として使う用法ってどの程度一般的なの?
辞書によっては載ってるのと載ってないのとあるんだけど。

572 名前:デフォルトの名無しさん [2008/05/03(土) 15:29:08 ]
vertualalloc(笑)
どこをどうすればそんな勘違いして覚えられるんだよww



573 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 15:31:30 ]
ローマ字読みです

574 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 15:33:58 ]
www.rfc-editor.org/categories/rfc-standard.html

obsoletedなんて単語はrfcでも使われてないな

575 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 16:19:20 ]
>>573
ローマ字読みでもベーチャルだろ
つうかAPI名をスペルミスする奴は打ち慣れてない(=スキルが浅い)証拠だと思うな

で、誰だよSHStripMneumonicなんてミスした奴w
せめて#defineで間違ってない名前でも定義しとけっつーの

576 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 17:00:58 ]
>>571
m-wによると、1640年からだそうだ。
--
Main Entry: 2obsolete
Function: transitive verb
Inflected Form(s): obsolet・ed; obsolet・ing
Date: 1640
: to make obsolete
--

577 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 17:48:34 ]
>>571はどの程度一般的かを聞いてるのであって
何時から使われ出したかなどとは聞いていない

578 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 23:04:35 ]
外野は黙っとけの典型例だな。なに文句付けてるんだか。

579 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 23:12:46 ]
>>578
お前も外野だろ
そして俺も

580 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 23:13:53 ]
BNCで引いたらobsoletedを動詞で使ってる用例が3件だけあった。形容詞は340件だった。

581 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 00:14:19 ]
くだらん足の引っ張り合いしてんなよ。見苦しい。

ところで、自作アプリ内で動画再生したいんだけど、Media PlayerとDirect Showどちらを使うのが良い?


582 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 00:17:24 ]
好きな方を使うとよい



583 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 00:56:22 ]
エディットコントロールでDrawTextのDT_WORDBREAKみたいに自動で改行してくれるように
するにはどうすればいいですか?

584 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 01:52:30 ]
横スクロールバーを消す

585 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 02:34:26 ]
>>581
自前でデコード+DirectGraphicsで描画

586 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 02:59:12 ]
>>584
ありがとう、できた

587 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 03:28:57 ]
DialogBoxやCreateDialogを使わず、CreateWindow等を使って同じ事をする場合、どう書きますか

588 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 03:56:52 ]
ひたすらコントロールを作りまくる

589 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 05:39:07 ]
>>588
dialog base unitの座標変換もやってる?
絵とか貼ると、どうせズレるからおれは無視してる。


590 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 05:45:56 ]
そんな物無視でいいだろ
無視しないで中途半端に絵とか貼ってもXPのダイアログみたいに
アイコンやビットマップが潰れてかえって見づらいだけ

591 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 05:47:47 ]
質問が悪かったです。
DialogBox等はCreateWindowExを使ってダイアログを生成してると書いてありました。
どのようにCreateWindowExを使ってるのか知りたかったです。

592 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 06:23:19 ]
>>581
VFW関数にフレームを1枚ずつデコードしてもらってGDIで描画



593 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 06:52:32 ]
>>591
Old New Thingの本によくまとまっている。
邦訳版は「Windowsプログラミングの極意」
10.4.2のあたり。

594 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 06:56:25 ]
old new thingの本というならば、リンクぐらい貼ってやれよ。
今すぐ読めるんだから。

だいたいこのあたりか。
ttp://blogs.msdn.com/oldnewthing/archive/2005/03.aspx
ttp://blogs.msdn.com/oldnewthing/archive/2005/04.aspx

595 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 14:37:22 ]
こんにちは。DelphiスレでAPIスレで聞いた方がいいとアドバイスがあったので、質問します。
とりあえずマウスのフックとキーボードが押されたときに反応する(フックっていうのか?)のはできるんだけど、
電卓の例の場合はどういう種類のフック使うんでしょうか?
電卓のプログラム(OSに搭載されている)の3のボタンを9っていう数字に変えたいんですけど(というより3を押すと9を押したときと同じ動作に)

596 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 14:51:06 ]
キー入れ替えソフト使ったほうが早いような・・・レジストリいじるやつ

597 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 14:57:32 ]
どうしてもやりたいんであれば
対象ウィンドウのウィンドウプロシージャを入れ替えるとか…

お行儀のいい方法ではないよ

598 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 15:27:44 ]
ていうか3を9に変えたいなんて不可解な行為の理由が激しく気になる
テンキーを携帯電話の配列にしたいの?

599 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 15:31:53 ]
>>597
なんかDelスレでSetWindowsExで可能になると聞いたんですが、これを使うとなるとどのようにフックすればよろしいのでしょうか?

入れ替えるというより、3を押されたことを確認したら9というメッセージを変わりに送るという事はできますでしょうか?

600 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 15:32:50 ]
>>598
とくに意味はないんですが、好奇心です^^



601 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 15:50:34 ]
>>599
WriteProcessMemory、CreateRemoteThreadを使って相手プロセスにDLLを入れる
GetWindowLongでターゲットウィンドウのウィンドウプロシージャの前に自前のウィンドウプロシージャを挿入
ウィンドウメッセージのキーコードを見張って書き換えてから元のウィンドウプロシージャに渡す

602 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 15:56:59 ]
>>601
ありがとうございます。
DLL INjectionってやつですか?
流れ書いてくれたおかげで、できそうです。
どうもありがとうございました。




603 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 16:01:22 ]
どうしてこうフックまがいの話ばかりに…

604 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 16:14:45 ]
便利だからじゃない、フック。
フックでアプリをファックするわけだよ。ぷぷっ

605 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 16:25:03 ]
ほとんどが悪用だからな

606 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 16:52:50 ]
ここで質問するような奴は悪用できないだろう。常考

607 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 16:54:30 ]
>>601
そんな面倒な方法を取らなくてもできるだろ
ホント、フック厨は短絡思考だな

608 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 17:15:23 ]
>>607
だったら書いてやれよw 悪態ついてないでさ。

609 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 18:13:53 ]
SetWindowsHookExをMSDNで調べれば>>601のような面倒な手段を取る必要が無いぐらい分かるだろう
回答者がその程度のスキルじゃ質問者が可哀想だ

610 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 18:19:08 ]
どうだろ。
別にフックする事が目的でないんなら601のような回答でも問題はないような。

611 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 18:40:51 ]
キーイベントを弄るだけにWriteProcessMemoryやCreateRemoteThreadを使うのはナンセンス

612 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 20:21:58 ]
>>609
SetWindowsHookEx
を使うとしたら、
SetWindowsHookEx(? @HookProc, HInstance, 0);
第一引数はなに使うんだ?



613 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 21:04:29 ]
>>612
WH_GETMESSAGEかな。

GETMESSAGEフックならWM_KEYDOWN拾えるし
メッセージやパラメータの書き換えも出来たはず。

多分ね。

614 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 21:38:12 ]
現在マウスのボタンが押下されてるかどうかを知る方法ってありますか
キーでいうGetAsyncKeyStateのマウス版がほしいのですが・・・

615 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 21:42:46 ]
>>613
595読むとマウスでボタンクリックされた場合も考慮する必要がありそうだからダメだと思う。
SetWindowsHookEx はプロセスへのDLL注入目的に使うのかと思ったら違ったのか。

>>612
自分なら SetWindowsHookEx でプロセスを注入、メッセージ投げてフックプロシージャ内から
SetWindowLongPtr でウィンドウプロシージャの差し替えってやりそう。

616 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 21:44:55 ]
>>614
MSDN の GetAsyncKeyState の項目に
> GetAsyncKeyState 関数は、マウスボタンの状態も取得できます。
> ただしこの関数は、物理的なボタンのマップ先である論理的なマウスボタンの
> 状態ではなく、物理的なマウスボタンの状態を取得します。
って書いてあるけど、ダメなの?

617 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 21:47:17 ]
>>615
orz

キーボードだけだと思ってた。ごめんね。

618 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 21:51:18 ]
流れも読めない奴がレスすべきではない。

と煽ってみる。

619 名前:デフォルトの名無しさん [2008/05/04(日) 21:51:18 ]
どないしたらWindowsアプリ

620 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 21:51:43 ]
>>619
気になるので最後まで書き込んでください。

621 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 21:52:55 ]
>>615
ボタンの位置をMoveWindowで動かして変えればいいんじゃね?

てかいつの間にか電卓のボタンがButtonコントロールになってるんだな
Win98以降文字が小さくなって見づらいと思っていたらそれが原因か

622 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 21:56:36 ]
>>621
感動した。なんてスマートな方法なんだ。



623 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 22:03:07 ]
>>615
まず何をフックするかじゃね?
この場合は3を押された事をフックするから何使うかわからないが・・・。


624 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 22:11:53 ]
自分で電卓作ればよくね?



いや、電卓のUIだけ作って見えない本物のcalc.exeに計算させるとか。

625 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 22:12:19 ]
電卓の改造 〜結論〜

・calc.exeをリソースエディタで書き換える
 原則的に、フックやDLL注入などで動的に書き換える必要があるのは
 対象アプリが限定されていない場合、または対象アプリがCRCやMD5などで改竄チェックしている場合に留めるべき

・どうしてもフックで解決したいならSetWindowsHookEx(WH_GETMESSAGE)でWM_COMMANDを書き換える
 キー(0〜9、+-*/など)を押された場合もアクセラレータテーブルに基づいて
 TranslateAcceleratorがWM_COMMANDを発行するようになっている

626 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 22:23:08 ]
>>619
何を書き込もうとしたのか気になって昼寝ができませんでした。

627 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 22:36:04 ]
>>626
ヨーロッパ辺りに住んでる人ですか?

628 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 22:36:19 ]
>>616
失礼シマスタ・・・
キーだけだとばかり・・・

629 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 22:47:51 ]
619は書き込んでる途中で来客か何かあったんだろう。
鼻歌を歌ってて、おっと、ここは用心しなければ。な事態になったとかな。

630 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 22:55:25 ]
猫とwisdomが久しぶりに更新。
改訂第3版とな?

631 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 22:58:02 ]
誰があんなとこ見てんだよ

632 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 23:02:36 ]
久米井もよくやるもんだw



633 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 23:10:50 ]
Win32APIの解説サイトってあまり良質な所は無いよね
まあそれに気づくのはスキルがそこそこ付いてきた頃だけど

この辺、Javaや.NETとかの解説サイトはどうなんだろう・・・

634 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 23:17:55 ]
良質な所って例えばどこ?

635 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 23:44:01 ]
完全無欠なサイトなど存在しない

636 名前:デフォルトの名無しさん [2008/05/04(日) 23:46:01 ]
↑話を理解してない馬鹿

637 名前:デフォルトの名無しさん mailto:sage [2008/05/04(日) 23:51:22 ]
どんな(へぼ)サイトでも役に立つよ

638 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 00:53:40 ]
これ読めよ
www.amazon.co.jp/dp/4756136001

639 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 02:48:04 ]
SetForegroundWindow() するとウィンドウが最前面に来るけど、フォーカスだけを
当てて、ウィンドウは動かさない方法ない?

640 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 03:05:05 ]
SetWindowPosでできそうな気がしたけど、msdn.microsoft.com/ja-jp/library/cc411206.aspx

641 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 03:06:24 ]
途中で書き込んでしまった..。

SetWindowPosでできそうな気がしたが、できないようですね..。
msdn.microsoft.com/ja-jp/library/cc411206.aspx

642 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 03:39:35 ]
ワロタ。じゃあ書くなよw



643 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 11:26:12 ]
>>639
何のためにWin98でSetForegroundWindowの仕様が変更されたのかよく考えてみよう






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<131KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef