■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

Win32API質問箱 Build49
751 名前:デフォルトの名無しさん :2007/02/09(金) 00:25:56
>>749
あと、される側にとってははなはだ迷惑だけど
ひとつの問題点を質問した後に回答前に
解決法を見つけてしまうこともある。
「さんざん探した後なのに・・・」

752 名前:デフォルトの名無しさん :2007/02/09(金) 01:05:02
>>750 処理系依存

753 名前:デフォルトの名無しさん :2007/02/09(金) 01:46:02
>>746の評価できる点は質問に対する解答をレスにつけてたこと。

自己解決したら何も書かない奴が結構いるからな。


754 名前:デフォルトの名無しさん :2007/02/09(金) 06:25:26
CreateDialogで作ったダイアログの表示を親ウインドウの後ろにするには
どうしたらよいでしょうか?
親ウインドウのハンドルをNULLにするとタスクバーのところにダイアログの
名前が出てしまいます。
SetWindowLongでタスクバーに表示しないように設定するのでしょうか?
それとも、他に方法があるのでしょうか?

SetWindowLongのスタイルを色々と試しているのですが、見つけることが
できませんでした。

755 名前:デフォルトの名無しさん :2007/02/09(金) 06:54:51
すみません、自己解決しました。
ダイアログのリソースにEXSTYLE WS_EX_TOOLWINDOWを追加して、
CreateDialogで親ウィンドウのハンドルをNULLにしました。

これで良かったのでしょうか?
もし、こうするほうが安全とか、こっちのほうが良いとかありましたらお教えください。

756 名前:デフォルトの名無しさん :2007/02/09(金) 12:28:44
VC++でプログラムを書いております。
非コンソールのプログラムで、
コンソールウィンドウの表示のさせ方と、
そこへの文字の出力の仕方を教えてください。

よろしくお願いします。

757 名前:デフォルトの名無しさん :2007/02/09(金) 12:31:31
AllocConsole()かな

758 名前:デフォルトの名無しさん :2007/02/09(金) 12:47:21
>>756
CreateProcessでcmd.exeを起動させWriteFile関数で書き込めばいい



759 名前:756 :2007/02/09(金) 12:57:20
>>757 さん
>>758 さん
ありがとうございます、自分のプロセスで出したかったので
次のようにやりました。
たすかりましたー^^/

AllocConsole();
freopen("CON", "r", stdin);
freopen("CON", "w", stdout);
printf("本日は晴天なり");


760 名前:デフォルトの名無しさん :2007/02/09(金) 14:58:37
ダイアログにSTATICを貼り付けてテキストを表示しようとしています。
スタイルにSS_LEFTを入れているのですが、スペースがあると
適当なところで折り返してくれるのですが、スペースがないと
折り返さずに行が途切れてしまいます。
何か対策とかはあるでしょうか?

761 名前:デフォルトの名無しさん :2007/02/09(金) 20:28:23
>>760
意図的に改行したいの?
したくないの?

762 名前:デフォルトの名無しさん :2007/02/09(金) 20:34:09
教えてください。
APIでlstrncmpなるものは無いのでしょうか?

763 名前:デフォルトの名無しさん :2007/02/09(金) 20:43:53
無い

764 名前:デフォルトの名無しさん :2007/02/09(金) 20:51:09
ありがとう


765 名前:デフォルトの名無しさん :2007/02/09(金) 21:05:04
>>762
もすかしてTCHAR対応がお望み?

766 名前:デフォルトの名無しさん :2007/02/09(金) 21:08:13
m$
は嫌いだが、クラッカーはもっと嫌い

767 名前:デフォルトの名無しさん :2007/02/09(金) 21:13:03
チーズつけるとうまい

768 名前:デフォルトの名無しさん :2007/02/09(金) 21:14:04
>>765
ちゃいます。ただなんとなく全てAPIで書きたかっただけですw
まあ、自作で作ってDLLにでも埋め込もうと思っていたのでちょうどよかったです

769 名前:デフォルトの名無しさん :2007/02/09(金) 21:29:34
ちっちゃいバイナリなあれか?
この辺MSがちょっとまとめてる
http://support.microsoft.com/kb/99456/ja 

StrCmpNとかもあるけどな

770 名前:デフォルトの名無しさん :2007/02/09(金) 21:43:18
ちっちゃいバイナリーってなんだよw
スーパバイザモードじゃなけりゃなにをやってもいいはずだろw

771 名前:デフォルトの名無しさん :2007/02/09(金) 21:54:24
ところで、ZeroMemoryがmemsetへの#defneだということを知っているか?

772 名前:デフォルトの名無しさん :2007/02/09(金) 22:12:04
へえ〜〜〜〜
>>771ってとっても物知りなんだんあ〜〜〜〜
きっと周りの人から尊敬されてて、「きゃーステキ!」とかいわれてるんだろうなあ。
いや〜〜〜、スゴイ・スゴイ。


773 名前:デフォルトの名無しさん :2007/02/09(金) 22:22:20
SendMessageのAとWってwParam,lParamに文字列設定するときのために必要だったんだな
文字列設定するわけでもないのになんでA,Wが用意されてるんだろうってずっと疑問に思ってた

774 名前:デフォルトの名無しさん :2007/02/09(金) 22:28:44
っ[チラシの裏]

775 名前:デフォルトの名無しさん :2007/02/09(金) 22:31:37
直接じゃなくてもLV_ITEMとか色々文字列つかうよね。
そんなことを疑問に思う人もいたってのは新鮮。

776 名前:デフォルトの名無しさん :2007/02/09(金) 22:34:51
>>771
処理系依存。
ZeroMemoryというAPIは存在するし、それを何に置き換えるかは開発環境次第。
memsetすら関数ではなくストリング転送命令に置き換えられてしまう場合すらある。

777 名前:デフォルトの名無しさん :2007/02/09(金) 22:40:28
>>776
Win32 API スレでは Windows SDK のヘッダまで含んで "Win32 API" と言っていいんじゃない?
mingw とか cygwin とかはモドキってことで。

778 名前:デフォルトの名無しさん :2007/02/09(金) 22:42:40
存在するのは、RtlZeroMemoryじゃないか?

そういや、CreateWindowは存在しないよな。

779 名前:デフォルトの名無しさん :2007/02/09(金) 22:48:50
ExitWindowsも無い

780 名前:デフォルトの名無しさん :2007/02/09(金) 22:54:55
EXitMicrosoft
あったらすぐ買う

781 名前:デフォルトの名無しさん :2007/02/09(金) 22:56:17
質問させて下さい
nDesktopWidth = 画面の幅
hwnd = 最大化されてるウィンドウのハンドル
GetWindowRect(hwnd, &rect);
MoveWindow(hwnd, rect.left - nDesktopWidth, rect.top, rect.right - rect.left, rect.bottom - rect.top, TRUE);
とやっても動いてくれないのは何故でしょう?on WinXP
SetWindowPos() でもダメでした
反対側 (rect.left + nDesktopWidth) には動いてくれます
クラシックスタイルにすると動いてくれます


782 名前:デフォルトの名無しさん :2007/02/09(金) 23:03:00
誰か日本語に翻訳頼む

783 名前:デフォルトの名無しさん :2007/02/09(金) 23:03:54
WinFXは色々と変化してるらしい

784 名前:デフォルトの名無しさん :2007/02/09(金) 23:08:17
>>782
MoveWindowやSetWindowPosで、ウィンドウの右端座標(スクリーン座標)が 0 未満に
なるようにウィンドウを移動しようとしても、動いてくれません。これはなぜでしょう?

ヒント:
OS は Windows XP。クラシックスタイルにすると動く。

785 名前:デフォルトの名無しさん :2007/02/09(金) 23:29:37
愛情が足らんのだろう

786 名前:デフォルトの名無しさん :2007/02/09(金) 23:31:45
MSに文句言ったほうがイイカモな

787 名前:デフォルトの名無しさん :2007/02/10(土) 01:35:52
マルチモニタすればいいじゃない。

788 名前:781 :2007/02/10(土) 10:41:17
>>784
ありがと

最大化されてなければ問題は無いのです
最大化されてると、左と上には動いてくれない
右と下には動いてくれるのに

マルチモニタにできないから仮想的に広げようとしたのだが



789 名前:デフォルトの名無しさん :2007/02/10(土) 11:25:54
仮想デスクトップ使えばいいじゃん

790 名前:デフォルトの名無しさん :2007/02/10(土) 11:50:18
稚拙な質問ですみません。
真っ黒に塗りつぶされたダイアログを作りたいのですが、方法がわかりません。
見つかるのはVCとかVBなどを使ったもので、直接Win32 APIをたたくものが
見つけられませんでした。
リソースを書いて設定する方法でもかまいませんので、方法があれば教えてください。


791 名前:デフォルトの名無しさん :2007/02/10(土) 12:03:44
>>790
WM_CTLCOLOR で HIWORD(lParam) が CTLCOLOR_DLG だったら
GetStockObject(BLACK_BRUSH) を返すとか。

792 名前:デフォルトの名無しさん :2007/02/10(土) 12:34:08
>>788
最大化させなきゃいいじゃない

793 名前:デフォルトの名無しさん :2007/02/10(土) 12:35:48
>>791
WM_CTLCOLORDLG じゃないか?

794 名前:デフォルトの名無しさん :2007/02/10(土) 12:56:54
>>791>>793
ダイアログのプロシージャで

case WM_CTLCOLORDLG:
return (long)GetStockObject(BLACK_BRUSH);

とすれば解決しました。
とても簡単な方法にたどり着けて感謝しています。
ありがとうございました。



795 名前:781 :2007/02/10(土) 20:40:59
XPのバグだなこりゃ
クラシックスタイルなら全然問題無く指定した通り動いてくれるし

796 名前:デフォルトの名無しさん :2007/02/10(土) 22:26:17
発見したならちゃんと報告しとけよ

797 名前:デフォルトの名無しさん :2007/02/10(土) 22:52:10
クラシックスタイルのバグが直ったんだろ

798 名前:デフォルトの名無しさん :2007/02/10(土) 23:05:45
>788
最大化の時はデスクトップサイズ、というか、デスクトップにツールバーが追加されてから
その仕様が出来た。
ツールバーを含んだ領域を獲得するAPIがあるから、そちらから数値をもらってきてみな。
または、最大化を一時的に解除してから動かせば問題ない。

昔は幾らでもサイズ変更できたんだけどね。



799 名前:デフォルトの名無しさん :2007/02/11(日) 00:29:31
つーか最大化してるときにGetWindowRectしたらまともな値返ってこなかった気がするんだが

800 名前:デフォルトの名無しさん :2007/02/11(日) 01:26:10
GetWindowPlacement

801 名前:781 :2007/02/11(日) 14:23:12
SystemParametersInfo()
getworkarea
だっけ?

というか、サイズはあんま関係無い気がする
最大化されてるとマイナス座標へは動いてくれない
元々画面からははみ出てて左上は(-4,-4)とかの座標なのに、それよりマイナスには行かないっぽい
クラシックスタイルもWin2Kも動いてくれるのに

802 名前:デフォルトの名無しさん :2007/02/11(日) 17:49:06
なにか目的があってMSDNとgoogle徘徊してたら一日終わってた
なにが目的だったのかは思い出せてない
かゆ うま

803 名前:デフォルトの名無しさん :2007/02/11(日) 18:58:16
初歩的な質問ですみません。
Win32APIで具体的に何ができるようになりますか。

テンプレにある、
- Win32 API入門
http://wisdom.sakura.ne.jp/system/winapi/
- Win32 プログラミング入門
http://www7.plala.or.jp/keny01/

このあたりをすべてやればvectorとかにあるフリーソフト並のものが作れるのでしょうか。

804 名前:デフォルトの名無しさん :2007/02/11(日) 19:04:07
タイトルバーでマウスのミドルクリック押したら
そのウィンドウを閉じる用なの作りたいのだけど
どうすればいいの?

805 名前:デフォルトの名無しさん :2007/02/11(日) 19:04:46
努力次第

その中の内容だけでと言うのなら無理だが、そこにある事をある程度理解し
必要な機能をGoogleで探して活用するなら可能。
手始めにそのサイトを覚えるのは悪くはない。

ただ、『Win32 API入門』には何箇所かソースの間違いがあった。
他のコードと見比べるなら発見できるので、勉強にはちょうど良いかもしれない。
基本的にはソースコードはそのまま使えて、動作が確認できるので
理解の手がかりにはなる。

806 名前:デフォルトの名無しさん :2007/02/11(日) 19:29:55
>>804
自分のウィンドウのタイトルバーがクリックされたら閉じるようにしたいの?
ならWM_NCMBUTTONDOWNとUPを捕まえて処理するだけ。
一般のウィンドウに対してやりたいのならマウスをフックする必要がある。

807 名前:デフォルトの名無しさん :2007/02/11(日) 19:38:09
>>806
後者です。
よければマウスをフックもう少し詳しくお願いします。

808 名前:デフォルトの名無しさん :2007/02/11(日) 19:46:20
ググってみたんかい?
806でもない俺が言うのもなんだが、ググって簡単にひっかかったぞ。

809 名前:デフォルトの名無しさん :2007/02/11(日) 19:52:36
ぐぐってトップに来るのは猫だけど、
かぶすたにも説明があるんで参考にするといい。
ttp://www.kab-studio.biz/Programing/Codian/index.html
ちょっと手を伸ばしてAPIフックかじったりすると面白いと思う。
そのうち用済みになる知識だけど。

810 名前:デフォルトの名無しさん :2007/02/11(日) 19:54:41
うるせーカス

811 名前:デフォルトの名無しさん :2007/02/11(日) 19:54:59
>>809
ありがとうございます。
これから読んでみようと思いますです。

812 名前:804 :2007/02/12(月) 01:02:41
あかん。
出来たけどうごかへん、何が悪いのかもわからへん。
タイトルバー上での左Wクリック、右クリックアップ、中クリックアップをフックしようとしたのだけど
なぜか右クリックアップだけ全くとんでこなーい。
何度見直しても何が悪いのかわかんない。
そーすこーどアップするのでお願いだから何が悪いのか教えてけろ。
http://geiji.s10.x-beat.com/php/img/up524.zip

813 名前:質問 :2007/02/12(月) 01:23:08
質問です。
長めなので3レスに分けます。

標準入力(コンソール,パイプなど)をバイナリモードで読めるだけ読んで、
即座に標準出力に出したいのですが、
ブロックせずに読めるバイト数が取得出来ず困っています。

※ 上を実現した後ストリーム加工処理を入れるつもりです。
  また、読めるバイト数が0の場合は、待機関数で待てるのが理想ですが、
  ブロックしてもかまいません。

オーバーラップIOでは、ブロックはしませんが
バッファが満たされるまで読めないので意味がありません。

recvやPeekNamedPipeも使用出来ませんでした。

814 名前:813 (質問続き) :2007/02/12(月) 01:24:15
現在はReadFileを使用しています。
ReadFileで2バイト以上読むと入力元が1バイトで止まっている場合に
ブロックしてしまい、次のバイトが来るまで最初の1バイトが出力されないため、
1バイトずつ読んでWriteFileで出力しています。

パフォーマンスに関して、コンソール入力のときはまだ良いですが、
  # app < size_8MB.dat > out.dat
のようにファイルを通すと、500KB程度のバッファで
read,writeする場合と比較して、当然ですが非常に遅いのです。

せめてWriteFileの回数を減らそうと WaitForSingleObject(hStdIn,0) で
ブロックせずに読めるだけ(orバッファ埋まるまで)読んでから、
WriteFileしようと考えたのですが、GetStdHandle(STD_INPUT_HANDLE)は
バッファ以外も情報を持っているらしく、WaitForSingleObjectが望んでいる動きをしません。
(読める入力が無くてもシグナルになったりします。)

コンソールの場合は行単位入力,エコー有りが前提です。
(ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT)

815 名前:813 (質問続き) :2007/02/12(月) 01:24:49
DOSプロンプトで
  # (1秒おきに文字列を出力するexe名) | (今回作りたいexe名)

  # (今回作りたいexe名) < 10MB程度のファイル > 出力ファイル
のように使うプログラムで、「即座に出力」「それなりのパフォーマンス」を
両立させる手は何か無いでしょうか?

816 名前:デフォルトの名無しさん :2007/02/12(月) 01:44:27
ちょっと長めです。
CreateToolhelp32Snapshotの
TH32CS_SNAPPROCESSフラグで取得したszExeFileをリストボックスに
列挙させるいわゆるタスクマネージャ的な物を作った後。
次にそのリストボックスをマウスなどで選択し、ボタン等を押下すると
そのリストボックスに選択されてる対象の【ウィンドウハンドル】を
取得したいのですが皆さんどうやってやってるんでしょうか?

俺の場合はこんな感じでやってます

CreateToolhelp32Snapshotでリストボックス作成

どれでもいいから選択した後、実行ボタン押下

選択されてる項目のをSendMessage等で取得

CreateToolhelp32SnapshotでSendMessageで取得した
項目とszExeFileが一致するかどうかを判定

一致した場合対象のプロセスIDを取得

EnumWindowsのCALLBACK内でGetWindowThreadProcessIdを使い、
列挙したハンドルからプロセスIDを取得。

そのプロセスIDとCreateToolhelp32Snapshotで一致したプロセスIDを比較

該当するならそのハンドルを取得する。

こんな感じに書いてます。
因みにEnumWindowsの第二引数には下記の構造体を渡しています。
typedef struct tagSAMPLE { HWND hWnd, DWORD dwProcessId } SAMPLE, *LPSAMPLE;

817 名前:815 :2007/02/12(月) 01:46:08
で、何がいいたいのかというと。

もっと別で簡単なやり方が無いのかという事が知りたいのですが。
何かいい方法あれば、どうぞよろしく教えてください。

818 名前:デフォルトの名無しさん :2007/02/12(月) 01:52:03
うろ覚えだけど、それか、それに似た手段を
執らなくちゃいけなかったような気がする。
プロセスIDとウィンドウハンドルって繋がりなかったよなあ確か

819 名前:815 :2007/02/12(月) 02:00:18
>>818
ふむ・・・

因みに断片的ですがサンプルです
http://zetubou.mine.nu/itoshiki/nozomu/zetubou4948.c

820 名前:815 :2007/02/12(月) 02:03:18
呼び出し順としては

EnumProcessNameでリストボックスに列挙
TargetProcessIdで第一引数に紐付く名前を探してプロセスID取得
TargetWindowHandleでTargetProcessIdで取得したIDと同じ奴を探す

という感じになってます

821 名前:816 :2007/02/12(月) 02:06:37
間違えてた・・・。
>>815 ×
>>816 ○

822 名前:デフォルトの名無しさん :2007/02/12(月) 05:45:53
>>812
適当なウィンドウのタイトルバーでクリックを繰り返してみて、
それをSpy++でよーく見ると分かる
(持っていないのならVectorかどっかで類似ソフトを調達してくること。
この類のものを作るときには必須)。
左ボタンを押したときに送られて来るメッセージは
確かに WM_NCLBUTTONDOWN だけど、
解放されたときは WM_LBUTTONUP になる。右ボタンも同様。
ウィンドウを動かしたりメニューを出したりするために
ウィンドウが勝手にマウスに SetCapture() するからだろう(多分)。
中ボタンなら(調べもせずに適当に書いた)>>806の通り
WM_NCMBUTTONUP でいいんだけどね。
いつもSetCapture() とセットで使ってたもんだから
恥ずかしながら今知ったよ。

823 名前:デフォルトの名無しさん :2007/02/12(月) 05:51:44
ウィンドウハンドルを指定して、そのウィンドウがアクティブか否かって言うのを見たいんですが、そのような関数ご存知でしょうか。

824 名前:デフォルトの名無しさん :2007/02/12(月) 06:01:17
「HWND フォーカスを持つ」とかでぐぐれば1分で見つかる

825 名前:デフォルトの名無しさん :2007/02/12(月) 09:35:45
>813
stdinの実体に応じて、手法を使い分けるしかなくね?
パイプなら、PeedNamedPipe で長さ調査、
ソケットなら、selectで読み込み可能か調査
コンソールなら、ReadFileで読んでみる(エンターキー押下で戻ってくる)

UNIXなら、みんなselectで待てるんだろうが。

826 名前:デフォルトの名無しさん :2007/02/12(月) 09:40:07
つ Cygwin

827 名前:デフォルトの名無しさん :2007/02/12(月) 10:41:17
Cygwinは>>825を内部でやってくれる

828 名前:デフォルトの名無しさん :2007/02/12(月) 10:59:48
>>816
そもそも前提が間違っている。
全てのプロセスがウィンドウを持っているわけではない。
ウィンドウを取得したいなら、最初からウィンドウのリストを取らないと駄目。

829 名前:816 :2007/02/12(月) 11:21:11
>>828
その辺はEnumWindowProcの段階で見つからなかった場合のチェック
かかるようにしてるんでハンドルを持ってるか持ってないか識別できるようにしてます

lpWinHandle->hWnd = NULL;


830 名前:804 :2007/02/12(月) 13:07:37
>>822
なるほど!
確かにWM_NCRBUTTONUPではなくWM_RBUTTONUPが飛んできました。
そこでWM_RBUTTONUPに併せてSC_MAXIMIZEを行ったところフリーズ。
もしやCaptureしないといけないのかなと思い、WM_NCRBUTTONDOWNに併せてSetCapture()
そしてWM_RBUTTONUPでSC_MAXIMIZE、ReleaseCapture()することで
右クリックアップで動作させることができました。
アドバイス、本当にありがとうございました。
感謝です。

831 名前:デフォルトの名無しさん :2007/02/12(月) 13:33:58
HPEN,HBRUSHに対して色を変える操作だけをしたいんですけど、
その度にCreateとDeleteを繰り返さなければいけないんでしょうか。
できれば同じオブジェクトに対して色を変えるだけの操作をしたいです。

832 名前:デフォルトの名無しさん :2007/02/12(月) 14:46:40
Win2000以降なら
SetDCPenColor、SetDCBrushColor
Win9Xは知らない

833 名前:デフォルトの名無しさん :2007/02/12(月) 15:07:26
あいあおう

834 名前:デフォルトの名無しさん :2007/02/12(月) 15:26:28
>>831
ラッパークラス書く

835 名前:デフォルトの名無しさん :2007/02/12(月) 15:31:10
ダイアログに置いた子ウィンドウ上に、更に孫となるコントロールを置いたとき、
Tabキーで他の子のコントロールと今置いた孫のコントロールを行き来できるようにするには
どうするといいでしょうか?

836 名前:デフォルトの名無しさん :2007/02/12(月) 15:38:03
自分でTabキー捕まえてSetFocus

837 名前:デフォルトの名無しさん :2007/02/12(月) 16:06:23
>835
WM_CTLDLGだっけ、Focusをダイアログ側ですべて処理するように出来る、というのが1つの方々。
ウィンドウからウィンドウにフォーカスが移動する際に、特定のメッセージがあがるからソレを捕まえる、というのが二つめの方法。
最後のコントロールからの TAB 押下を判定して NEXTCTRする。というのが三つ目の方法。


838 名前:デフォルトの名無しさん :2007/02/12(月) 17:12:12
VC GDIでゲーム作ってるんですが、止めた方が良いんでしょうか。
「好きにしろ」レベルの事でしょうか。

839 名前:デフォルトの名無しさん :2007/02/12(月) 17:19:18
ゲーム次第だが、まあ好きにしろ

840 名前:デフォルトの名無しさん :2007/02/12(月) 17:26:39
どこを止めてほしいのかわからん
VC
GDI
ゲーム

841 名前:デフォルトの名無しさん :2007/02/12(月) 18:34:07
MODULEENTRY32のhModuleはLoadLibraryのモジュールハンドルと一緒なんでしょうか?

842 名前:デフォルトの名無しさん :2007/02/12(月) 18:44:55
>>837
IsDialogMessageでよくね?

843 名前:デフォルトの名無しさん :2007/02/13(火) 02:58:38
指定した文字列を描画するときに、描画範囲を指定してDrawTextなどで
出力するときに、どれくらいの領域が必要か調べるのにはどうするのが
良いでしょうか?
あまり知識がないので、文字の幅、高さ、行の幅などを取得して計算するしか
思いつかないのですが、なにか便利なAPIとかはないでしょうか?

844 名前:デフォルトの名無しさん :2007/02/13(火) 03:05:46
DrawText

DT_CALCRECT

845 名前:デフォルトの名無しさん :2007/02/13(火) 03:53:15
>>844
ありがとうございます。

846 名前:デフォルトの名無しさん :2007/02/13(火) 04:18:44
RPGを作っているんですが
フィールドの移動で32ピクセルを0.4秒くらいで移動するようにしたいんですが
FPSを60に設定して画面の一回の書き換えで1ピクセル移動するようにすると
32ピクセル移動するのに、32/60=0.533...秒で遅すぎて、
画面の一回の書き換えで2ピクセル移動するようにすると
32ピクセル移動するのに(32/2)/60=0.266...秒で早すぎるんですが
FPSが60で0.4秒くらいでキャラがフィールドをなめらかに
32ピクセル移動させるにはどうしたらいいでしょうか

847 名前:デフォルトの名無しさん :2007/02/13(火) 04:37:47
こんなのはどう?

浮動小数点数のカウンタをひとつ用意する。
1フレーム毎に、0.4/60.0加算する。
移動量 = 32ピクセル * カウンタ

これならFPSが変わっても大丈夫。

浮動小数点数が遅すぎて受け入れられないというのなら、
整数を多少工夫して使えばいいけれど。

848 名前:デフォルトの名無しさん :2007/02/13(火) 06:07:49
>>846

求めたい移動量 = 32 * 経過時間 / 移動に要する時間

小学生か?

849 名前:デフォルトの名無しさん :2007/02/13(火) 07:23:03
>>846
座標を整数ではなく少数で持つのが一番簡単。

850 名前:デフォルトの名無しさん :2007/02/13(火) 08:44:11
でもBitBltのに渡す座標の引数は整数だから
座標を少数で持つと動きがカクつく
0.5ピクセル色を塗るとかできないし

851 名前:デフォルトの名無しさん :2007/02/13(火) 10:28:10
少数画素位置での Blt は、AA処理のようにバックバッファ用意して

背景を n倍 StretchBlt
→ 整数化(座標xn) の位置に n倍 Obj を貼り付け
→ 全体を 1/n StretchBlt

とかやるしかないのかな

852 名前:デフォルトの名無しさん :2007/02/13(火) 10:52:42
>>850
世の中の2Dゲーが全てカクついて見えるんだな。
常人では追いつけないすご目をしているな。

853 名前:デフォルトの名無しさん :2007/02/13(火) 11:01:40
携帯ゲーみたいな小さい液晶と比べたらはるかに条件いいんだけどね

854 名前:デフォルトの名無しさん :2007/02/13(火) 11:08:16
こういうときこそ無駄に3Dエンジンを使うのだ!

855 名前:デフォルトの名無しさん :2007/02/13(火) 11:12:08
>0.5ピクセル色を塗るとかできないし

AA使いたいってこと?

856 名前:デフォルトの名無しさん :2007/02/13(火) 11:15:56
やっぱりゲ製作板へ行くべきだろう

857 名前:デフォルトの名無しさん :2007/02/13(火) 11:42:18
>>850
動体視力凄いな。
イチローでも80f/sくらいだけどお前は一体なに?
ハエか何かか?昆虫なら150f/sとかザラにいるけど地球外生命体なの?

858 名前:デフォルトの名無しさん :2007/02/13(火) 11:46:13
>>857
いや、使っているディスプレイもすごいと思うぞ。
なんだろ、1ドットが見えるような超巨大スクリーンかな。
スタジアムとかにあるやつ。

859 名前:デフォルトの名無しさん :2007/02/13(火) 12:22:25
今からゲームを作ろうと言うのにそんなとこでつまづいてたら一生できないぞw

860 名前:デフォルトの名無しさん :2007/02/13(火) 13:16:42
細かい事気にしてると禿げるよ。

861 名前:デフォルトの名無しさん :2007/02/13(火) 13:54:15
FPSが60で0.4秒で32ピクセル移動するわけだから
画面の一回の書き換えで移動するときと移動しないときができてなめらかに
表示されないと思うんですけど問題にならないですかね
それにキャラを書き換るんじゃなくて、背景画像をスクロールさせてるので
画面全体を書き換えてるんですけど問題ないですかね

862 名前:デフォルトの名無しさん :2007/02/13(火) 14:16:32
実際に試してみれば?

863 名前:デフォルトの名無しさん :2007/02/13(火) 14:18:24
>>850
アンチエイリアシングを応用すれば、
擬似的に解像度が高く見えるんじゃない?
モーションブラーって名前で既に一般化された手法だけど。


864 名前:デフォルトの名無しさん :2007/02/13(火) 14:35:22
輝度がFFFFFFのとある1pixelに、0.5x0.5pixelの輝度000000を描画したとすると、
描画対象になったかわいそうなとある点の輝度は(FFFFFF*3+000000)/4で良い。

とかいいたいの?

865 名前:デフォルトの名無しさん :2007/02/13(火) 15:29:58
普通の動画でも30fpsぐらいじゃん
60fpsだったらその倍の速さだぞ

866 名前:デフォルトの名無しさん :2007/02/13(火) 15:31:43
いまどきフレームレート固定はないだろ‥‥常識的に考えて

867 名前:デフォルトの名無しさん :2007/02/13(火) 15:59:26
今時120fpsもないなんて終わってる

868 名前:デフォルトの名無しさん :2007/02/13(火) 16:46:19
> いまどきフレームレート固定はないだろ‥‥常識的に考えて
ごめんね…
640x480 60fps 固定でゴメンね…

869 名前:デフォルトの名無しさん :2007/02/13(火) 22:45:33
>>861
なんで移動しないときが出て来るんだよ!

870 名前:デフォルトの名無しさん :2007/02/13(火) 22:50:33
1ピクセル動く時と2ピクセル動く時があるが、動かない事は無いな。

871 名前:デフォルトの名無しさん :2007/02/13(火) 23:24:05
対して手間のかかる物じゃないんだからとっとと作ればいいのに、
グダグダグダグダ
グダグダグダグダ
グダグダグダグダ
グダグダグダグダ

872 名前:デフォルトの名無しさん :2007/02/14(水) 01:25:39
子プロセスから親プロセスのハンドルを取得するAPIってありますか?

873 名前:デフォルトの名無しさん :2007/02/14(水) 02:13:49
CreateToolhelp32Snapshot
Process32First
Process32Next

874 名前:デフォルトの名無しさん :2007/02/14(水) 02:22:05
しかしその親プロセス情報って親が死んでようが生成されたときのままなんだよな
ツリー構成する類のタスクマネージャで見るとたいていプロセス関係は並列になっちゃってるし
プロセス間の親子関係はあんま使えない

875 名前:デフォルトの名無しさん :2007/02/14(水) 09:57:32
プログラムから他のプロセスのカレントディレクトリを変更するにはどうしてらよいですか?

876 名前:デフォルトの名無しさん :2007/02/14(水) 10:06:46
>>875
できません。フックその他の手法でターゲットのプロセスにコードを注入して、
そのプロセス自らがカレントディレクトリを変更するようにするしかありません。

877 名前:デフォルトの名無しさん :2007/02/14(水) 10:34:39
ここの「パレットアニメ」のサンプルプログラムが動きません。
http://wisdom.sakura.ne.jp/system/winapi/win32/win126.html

フリーのBorland C++コンパイラ23行目で「'void *' 型は
'tagLOGPALETTE *' 型に変換できない」エラーが出ましたので、
mallocの前に(LOGPALETTE *)をつけたらエラーはなくなりました。

しかし、256色モードにして実行をしてもサイトに説明されているように
黒い四角が左へは移動せず、その場から動きません。

何か間違いがあるのか、当方の環境が悪いのか、環境が悪いのは
コンパイラが悪いのか、ハード的な要因かなど一向に原因がつかめません。

どなたかわかる方がいましたら、ご助言をお願いします。

それから、フルカラーの場合にパレットアニメを実行するには
具体的にどうしたらよいかをご指南をいただければ助かります。
よろしくお願いします。

878 名前:デフォルトの名無しさん :2007/02/14(水) 10:42:33
普通に塗り直せよ。

879 名前:デフォルトの名無しさん :2007/02/14(水) 10:57:18
塗りなおしと言うとPatBltでマスク画像を用意して、XOR演算子で結合しか
当方には思いつきません。
なにか特定の色だけを一気に書き換える方法はないでしょうか?

880 名前:デフォルトの名無しさん :2007/02/14(水) 11:01:06
元データをメインメモリー上に持っておいて、変えたい色を変えて塗り直せ。
思いつくとかそういう問題じゃないぞ。

881 名前:デフォルトの名無しさん :2007/02/14(水) 11:11:11
>>879
1.256パレットのデバイスに依存しないビットマップを作る
2.パレット変更
3.デバイスコンテキストに転送
でいけると思う

882 名前:デフォルトの名無しさん :2007/02/14(水) 11:16:35
パレットアニメの意味がない

883 名前:デフォルトの名無しさん :2007/02/14(水) 11:18:18
パレットアニメっていったいどこの化石プログラマーだよ。

884 名前:デフォルトの名無しさん :2007/02/14(水) 11:20:47
今は全部書き直しでおk

885 名前:デフォルトの名無しさん :2007/02/14(水) 11:31:46
安直に名前だけでサンプル選んで動かしてみただけだろ
特に必要なかったらやる意味ないよ

886 名前:デフォルトの名無しさん :2007/02/14(水) 12:11:10
1フレーム毎に移動量を4/3ピクセルずつ増やして
実際の描画位置の座標は小数部分切捨てで整数部分をBitBlt関数に渡すようにして
24回の画面の書き換えで32ピクセル移動する設定で作ってみたら
0.4秒で32ピクセル移動するようになりましたありがとうございました
画面がカクつくと感じた原因は画面を書き換える時間を格納する変数をDWORD型?にしてたせいみたいで
これをlong double型とすることでうまくいきましたありがとうございました

887 名前:デフォルトの名無しさん :2007/02/14(水) 12:50:51
long doubleってあるんだ・・・

888 名前:デフォルトの名無しさん :2007/02/14(水) 13:29:46
結果的にうまくいってるように見えていても
それが正しい解決方法とは限らない好例

889 名前:デフォルトの名無しさん :2007/02/14(水) 14:59:10
>>886
とりあえずゲーム作るんなら秒で考えるの止めて何フレームで何をする
って考えにを身に付けた方がいいよ。

890 名前:デフォルトの名無しさん :2007/02/14(水) 16:00:41
質問です。
既存のシステムが機能的に不足があるのですが、ソースはもらえないので、
スレッドを作る機能を利用して機能を拡張したいと思ってます。

スレッドはCreateThreadで指定されたSubThread関数を呼び出す形になっています。
このSubThread関数の中だけで、既存のシステムのマウスの状態を拾いたいんです。
たとえばWM_LBUTTONDOWNとかを拾う感じです。

まずはSubThread関数が呼ばれたら普通にウィンドウを作り、(非表示)
この中で普通にWM_LBUTTONDOWNを拾えばいいのかと思ったんですが、
問題なく左クリックは検出できましたが、
既存のシステムのウィンドウと何か衝突してしまうようで、
無限ループのような感じでウィンドウが真っ白になり、応答なしになります。

何か他の方法とかありましたらよろしくです。

891 名前:デフォルトの名無しさん :2007/02/14(水) 16:10:18
なんでデバッグしないの?

892 名前:デフォルトの名無しさん :2007/02/14(水) 16:15:57
>>890
1.GetWindowLong 元のウインドウの WNDPROC を取得する
2.SetWindowLong で新しい WNDPROC に書き換える
3.新しい WNDPROC で必要な処理をした後で以前の WNDPROC を呼び出す

893 名前:デフォルトの名無しさん :2007/02/14(水) 16:31:18
>>890
マウス フックじゃダメなのん?

894 名前:デフォルトの名無しさん :2007/02/14(水) 17:10:03
>>888
kwsk

895 名前:872 :2007/02/14(水) 19:17:57
>>873-874
ありがとうございます。調べてみます。


896 名前:デフォルトの名無しさん :2007/02/14(水) 19:59:43
>>892
早速やってみました。

hwnd=Takesys->get_hwnd(); // hwndを既存のシステムから受け取る
OrgProc=(WNDPROC)GetWindowLong(hwnd,GWL_WNDPROC);
// WNDPROCを受け取る
SetWindowLong(hwnd,GWL_WNDPROC,(long)NewProc); // 新しいWNDPROCを使わせる

long CALLBACK NewProc(HWND hwnd,・・・・ // 新しいWNDPROC
{
  ・・・・
  return CallWindowProc(OrgProc,hwnd,・・・・ // 元のWNDPROCを呼び出す
}

どうもうまくいきません。
たとえばWM_NCRBUTTONDOWNは拾えるんですが、
WM_RBUTTONDOWNは拾えないようです。
ちゃんと既存のシステムで右ボタンを押して反応してます。

これはWNDPROCを通さないでマウス処理しているということでしょうか。

>>893
マウス以外も拾いたいんです。

897 名前:デフォルトの名無しさん :2007/02/14(水) 20:26:17
>>896
可能性
1. 右ボタンを押して反応している部分の WNDPROC が別
2. WNDPROCを通さないでマウスイベントを処理している
3. その他

どんなソフトなのか分からないので、なんとも言えない
RADツールで作ったソフトの場合には、ボタンなどのウインドウで処理しないイベントだけが親ウインドウに渡されたりする

898 名前:デフォルトの名無しさん :2007/02/14(水) 20:29:35
>>897
うーんそうですか・・・・もう少し悩んでみます。
ありがとうございました。

899 名前:デフォルトの名無しさん :2007/02/14(水) 20:46:24
僕ハッカー

900 名前:デフォルトの名無しさん :2007/02/14(水) 20:51:45
>>899
kwsk

901 名前:デフォルトの名無しさん :2007/02/14(水) 20:56:02
僕バッカー

902 名前:デフォルトの名無しさん :2007/02/14(水) 21:04:56
>>901
mjsk

903 名前:デフォルトの名無しさん :2007/02/14(水) 21:09:27
僕ぬるぽ

904 名前:デフォルトの名無しさん :2007/02/14(水) 21:17:29
俺ガッ

905 名前:デフォルトの名無しさん :2007/02/14(水) 21:22:36
バカバッカー

906 名前:デフォルトの名無しさん :2007/02/14(水) 21:44:34
 (⌒)    ピ
/ ̄ ̄|        ∧_∧ 
| ||.  |     ━⊂(・∀・ )
\__|    ========  \
 |   |   /※※※※ゞノ,_)

907 名前:デフォルトの名無しさん :2007/02/14(水) 21:47:14
LVS_EX_ALTERNATEROWCOLOR
をワクテカして使ってみようとしたんだが、ヘッダにも記述がない。
挙句にそんなflagなどないだと。本当になくなっちゃったの?

908 名前:デフォルトの名無しさん :2007/02/14(水) 21:51:15
よくみたらLVS_EX_にもうフラグの空きがないねorz

909 名前:デフォルトの名無しさん :2007/02/14(水) 21:59:36
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1071006&SiteID=1
>There is no such flag. The documentation is incorrect. I've filed a doc change request.

910 名前:デフォルトの名無しさん :2007/02/14(水) 22:08:16
>>872
Cygwinのgetpidのソース見れば

911 名前:デフォルトの名無しさん :2007/02/15(木) 15:32:04
CM_Request_Device_EjectでUSBデバイスをはずした後、
デバイスマネージャで!マークがつきますが、
これを抜き差しせずにまた再認識させるのにはどうしたらいいのでしょうか?

SetupDiChangeStateやSetupDiCallClassInstallerでの有効・無効では無理でした。

912 名前:デフォルトの名無しさん :2007/02/15(木) 16:16:18
SendInputを使えば他のmouse_eventの割り込みを受けずに連続動作が保証されると聞いたのですが,
確かに他のアプリが発行したmouse_eventの割り込みは受けないのですが
ユーザ自身のマウス操作に割り込まれてしまいます。
ユーザのマウス操作にも割り込ませず完全な連続動作を保証するにはどうすればいいのでしょうか?

913 名前:デフォルトの名無しさん :2007/02/15(木) 17:49:18
>>912
一体何をしたいんだ。
未署名のドライバのインストール時にでるダイアログでも回避したいのか?

914 名前:デフォルトの名無しさん :2007/02/15(木) 20:40:10
VK_Aなどの仮想キーコードを利用しようとすると
定義されていない識別子です。というエラーが出るのですが、
windows.h以外に何かインクルードしなければならないヘッダがあるのでしょうか?

915 名前:デフォルトの名無しさん :2007/02/15(木) 20:53:22
そもそもそのVK_Aとやらは、なんであると思ったんだ?

916 名前:デフォルトの名無しさん :2007/02/15(木) 21:12:33
'A'でいい。
英字のキーコードは、ASCIIの英大文字のコードと一致している。
VK_Aなどといった英字に対するVK_?定数は文字定数の存在しないVBなどで便宜的に使用されるもの。

917 名前:デフォルトの名無しさん :2007/02/15(木) 21:14:59
勘違してたから。
・・・すまん。吊ってくる

918 名前:デフォルトの名無しさん :2007/02/15(木) 21:15:35
>>916
ありがとう。

919 名前:デフォルトの名無しさん :2007/02/15(木) 21:19:09
WinUser.h

920 名前:デフォルトの名無しさん :2007/02/15(木) 21:51:03
>>919
ありがとう。
中身見たらいろいろ書いてあって勉強になった。

921 名前:デフォルトの名無しさん :2007/02/15(木) 22:29:21
なんでincludeの中を全文検索してみるとか、ごく簡単に出来ることをしなんだろう?

922 名前:デフォルトの名無しさん :2007/02/15(木) 22:52:58
MAXのつく#defineをファイル検索する俺は病気。

923 名前:デフォルトの名無しさん :2007/02/15(木) 23:12:54
"WM"
でそれやったことあるが


924 名前:デフォルトの名無しさん :2007/02/15(木) 23:29:15
ネットワーク上のWin9xマシンのファイル/フォルダに対して
GetFileAttributesEx()すると、作成日時が取得できない!?

925 名前:デフォルトの名無しさん :2007/02/15(木) 23:50:50
>>924
それは9xというよりFATのせいじゃね?

926 名前:デフォルトの名無しさん :2007/02/16(金) 00:55:12
>>925
ネットワーク越しのXPのFATでは問題なく取得できるので、
やはり9xっぽいですよ

927 名前:デフォルトの名無しさん :2007/02/16(金) 01:06:30
ローカルのFATのファイルの中に、作成日時が空で表示されるのがあるな。
DOSで弄った時は、作成・アクセス日時が書き込まれないのかも。

928 名前:デフォルトの名無しさん :2007/02/16(金) 01:25:52
DWORD MyGetTickCout()
{
return (DWORD)((ULONGLONG)(*(ULONG *)0x7FFE0000) * (*(ULONG *)0x7FFE0004) / 16777216);
}

この0x7FFE0000にユーザモードから書き込みたいのですが
いい方法が思い浮かびません。


929 名前:デフォルトの名無しさん :2007/02/16(金) 01:27:57
OutputDebugStringの出力を
コマンドプロンプトに表示させたいのですが
どうしたらいいですか?

930 名前:デフォルトの名無しさん :2007/02/16(金) 02:29:02
>>928
*(DWORD *)0x7FFE0000 = 0;
って話じゃないんだろうなあ。何が問題なのか良く分からん。

931 名前:デフォルトの名無しさん :2007/02/16(金) 02:31:23
そもそもユーザーモードってなんだろか。

932 名前:デフォルトの名無しさん :2007/02/16(金) 02:44:23
7ffe0000ってユーザモードで自由にアクセスできるエリアじゃなかったっけ

933 名前:デフォルトの名無しさん :2007/02/16(金) 03:02:27
ここで聞いた私が馬鹿でした

934 名前:デフォルトの名無しさん :2007/02/16(金) 03:45:07
>>928 の内容をエスパーを駆使して超解釈

【質問】
リアルタイムで動くゲーム(MMORPGか?)をしていますが、ゲームの動作速度を自由に変更したいです
ゲームの動作速度は API GetTickCount で取得した値に応じて動作しているようです

アドレス 0x7FFE0000 に書き込みが出来れば GetTickCount の返す値を自由に操作できます
これによってゲーム速度を変えられるのではないかと考えています

ただし、 0x7FFE0000 は読取専用となっており書込みが出来ません
どなたか 0x7FFE0000 のアドレスへ書込みを行う方法を教えて下さい

【回答】
っ API フック (jump するアドレスを書き換えろ!)

935 名前:デフォルトの名無しさん :2007/02/16(金) 05:20:30
通報しました

936 名前:デフォルトの名無しさん :2007/02/16(金) 07:41:50
>>934
わざわざ0x7FFE0000をreadしている理由を考えて見ましょう。
928はGetTickCountをフックしたいわけではないのでは。

937 名前:デフォルトの名無しさん :2007/02/16(金) 08:15:07
>>934
エスパー残念

938 名前:デフォルトの名無しさん :2007/02/16(金) 08:46:57
>>936
自作関数ならアドレスの内容を書き換えなくても、
コピーしてから好きなように加工できるから
>>928 は目的を隠すためにそういう書き方をしてるんじゃなかろうか?

と邪推してみる

939 名前:デフォルトの名無しさん :2007/02/16(金) 08:50:57
>>929
http://msdn.microsoft.com/library/en-us/vcsample98/html/vcsmpdbmon.asp

940 名前:911 :2007/02/16(金) 10:42:23
DDKスレで質問してみます

941 名前:デフォルトの名無しさん :2007/02/16(金) 11:01:10
>>928は俺のエスパー能力を駆使しても分からんん。
32bitのアドレスならば、カーネルのメモリでもないし
思う存分書き込めばいいだろうし。

GetTickCountをフックしたのならば、
いくらでも自分の好きなようにすればいいだろうし。

他プロセスのメモリならば、WriteProcessMemoryするだけだし、
PAGE_READONLY等が指定されているというのならば、VirtualProtectExだろうし。

942 名前:デフォルトの名無しさん :2007/02/16(金) 12:03:46
0x7ffe000〜は読み込み専用だった希ガス
Ollydbgでアクセス属性を変えようとしてもエラーが出たような。

943 名前:デフォルトの名無しさん :2007/02/16(金) 12:11:06
タイマーをフックしてゲームの速度を変更してしまうソフトがあるが、
ゲーム側でタイマー関係のAPIを呼ばずに0x7FFE0000を読んで
時間を取得するという対抗手段がある。

それに対応するために0x7FFE0000を書き換えたいのだろう。

944 名前:デフォルトの名無しさん :2007/02/16(金) 12:55:50
はーなるほど。
NTでは、0x7FFE0000から面白い情報が入っているのか。
しかしなんでこっちを書き換えたいのかね。
これはOSが使う領域だろうに。

0x7FFE0000だと分かっているのなら、
そのアドレスを参照している部分を全部特定できるのでは。

945 名前:デフォルトの名無しさん :2007/02/16(金) 17:10:23
質問です。
CでのAPIフック(他プロセス)の実現でSetWindowHookExを使ってやるのはどうすればいいのでしょうか?

現状、時プロセスにしかフックを実現できていません。
恐らくフックインストール時にインポートテーブルの書き換えをやっても呼び出しが自プロセスだからだと予想しているんですが。。。

946 名前:デフォルトの名無しさん :2007/02/16(金) 17:38:54
>>945
ぐぐればいくらでも出てくる

947 名前:デフォルトの名無しさん :2007/02/16(金) 18:11:13
それはCではないと思われ。
喧嘩を売るみたいで申し訳ないがググルなんて基本的な事はとうの昔にやっており、それでもわからなかったからここで質問したんだ。

俺が調べた限り【C言語】でのAPIフックのサンプルは自プロセスはあるが他プロセスに対してのアプローチのやり方は無かったはず(海外含めず)

まあ、自己解決したんで概要を。

まず、DLLにアタッチしたとき共有メモリで自プロセスIDを取得する。これはターゲットプロセス以外フックを行わないため。
次にターゲットにフックをかましてアタッチされた時、プロセスIDを取得し共有メモリのIDと比較して等しくない場合インポートテーブルを書き換えAPIフック完了

携帯だから文章汚いが勘弁

948 名前:946 :2007/02/16(金) 18:23:05
>>947
ごめん
ぐぐったらそれと全く同じ内容のサンプルが見つかった

949 名前:デフォルトの名無しさん :2007/02/16(金) 18:32:45
マジで?それどこよ?

いっとくけどKENJI氏のウェブサイトとかいわないでくれよ?w

950 名前:デフォルトの名無しさん :2007/02/16(金) 18:34:09
フックするのにCとC++で何か違うの?

951 名前:デフォルトの名無しさん :2007/02/16(金) 18:40:49
俺はCが前提って文頭に示して質問してるから、「何が違うの?」とか言われても逆に困るんだが。
取り敢えず帰宅するから家についてそのサンプルサイト楽しみにしてます。

952 名前:デフォルトの名無しさん :2007/02/16(金) 18:40:52
>>950
違わない

953 名前:デフォルトの名無しさん :2007/02/16(金) 18:41:12
なーんも変わらんな。

C++ かつラッパークラス作るあたりで、
暗黙でスタックに詰まれる this をどう始末するかで迷うだろうが。

954 名前:デフォルトの名無しさん :2007/02/16(金) 18:43:07
釣りだから釣られないように

955 名前:デフォルトの名無しさん :2007/02/16(金) 18:43:21
あるフォルダの内容が変更されたら(ファイルが追加されたり削除されたり)
それを察知するにはどうすればいいですか

956 名前:デフォルトの名無しさん :2007/02/16(金) 18:54:15
CreateFontで作ったフォントを使い終えたら元のフォントに戻す理由って何なんでしょうか。
色々調べてもそうした方が良い、そうするべき、としか書いてないので・・・

957 名前:デフォルトの名無しさん :2007/02/16(金) 19:02:47
DCのSelectObject話なら戻す必要ないぞ
あの辺をブラックボックスとみなす派が何が起きるかわからないと言ってるだけ
malloc/free論争に近い

958 名前:デフォルトの名無しさん :2007/02/16(金) 19:35:36
>>955
FindFirstChangeNotification
FindNextChangeNotification

959 名前:デフォルトの名無しさん :2007/02/16(金) 19:44:50
>>957
なるほど。ありがとう。

960 名前:デフォルトの名無しさん :2007/02/16(金) 19:51:42
理由聞いてたはずなのに自分に都合のいい意見なら理由はいらないんだ

961 名前:945 :2007/02/16(金) 19:56:01
>>946
返信が無いな
まあ、おそらくKENJI氏のサイトなんだろうけどw

962 名前:946 :2007/02/16(金) 19:59:22
>>961
そのサイトであってる
C++のコードだったがCでも書くこともできるので何の問題もない
それすらできないやつがAPIフックなんて考えないほうがいい

963 名前:デフォルトの名無しさん :2007/02/16(金) 20:04:08
APIフックでググって最初の10件に、C言語で他プロセスにAPIフックを
仕込む日本語サンプルがあったんだが。

964 名前:デフォルトの名無しさん :2007/02/16(金) 20:10:10
そもそもAPIフックって自プロセスのAPIフックして何が楽しいの?

965 名前:デフォルトの名無しさん :2007/02/16(金) 20:16:20
親近相姦

966 名前:デフォルトの名無しさん :2007/02/16(金) 20:30:46
>>malloc/free論争に近い
違う。全プロセスのGDIオブジェクトの合計はシステムで制限がされている(レジストリで指定されている)。

967 名前:デフォルトの名無しさん :2007/02/16(金) 20:51:10
ビットマップとか DC に Select されたままだと DeleteObject しても
解放されないしね。

968 名前:デフォルトの名無しさん :2007/02/16(金) 20:55:33
7FFE0000について今頃知った。
そうか、チート小僧だったのか。

969 名前:デフォルトの名無しさん :2007/02/16(金) 22:36:12
>>966-967
そういう理由だったんですか・・・
丁寧にSelectObjectの戻り値は取っておいて戻しておくべきなんですね。
ありがとうございました。

970 名前:945 :2007/02/17(土) 00:17:17
>>962
違うなー。サイトがあってる?俺は当初質問しただけで
サイト教えてとは一言もいってないんだけどな。
そもそも誰一人としてまとも(技術的)な返事が帰ってこなかった。
これじゃあ質問スレの存在意義が。。。(答えられる人がいないっていったらそれまでだけど)

ともかくなんとか自分で解決できたんだけどね。

「それすらできない」ってお前さん言ってるが、じゃあ有言実行
KENJI氏のC++コードを同じ動作をCで組んでごらん?
大変だから。解決はしたが、少なくとも知識の乏しい俺はここに
たどり着くまでにかなりの時間かかったけどな。
まあ、苦労したなりに得るものはかなり大きかったが。

それに動機(実現したいと考える)があるからものすごい努力するんであって
「それすらできない奴は考えない方がいい」という発言はおかしな話だと思わないか?。

恥を覚悟で言うがAPIフックをターゲット(単一)プロセスに実現できるように
なるまでにかかった時間は実に2ヶ月だ。今日はじめてできたんだ笑えよw

971 名前:デフォルトの名無しさん :2007/02/17(土) 00:18:56
>違うなー。
まで読んだ。

972 名前:デフォルトの名無しさん :2007/02/17(土) 00:31:18
>>966
ごめん「全プロセス」っていっているてことは
GDIProcessHandleQuotaやUSERProcessHandleQuotaとは別のものがリミットとして存在するってこと?
↑のやつの制限って「1つのプロセス」の制限値だよね?
よろしければ、教えてください。

973 名前:デフォルトの名無しさん :2007/02/17(土) 00:41:10
>>970
質問に対する答えとしてググれとかどこそこのページを見ればいいというのは認めないのか。

あと、そんなあのようなC++のコードをCにするのが大変なら、
拡張子cppでC++のままにしておいて、
自分の書くコードはCのコードのように書くという手段では駄目か?

974 名前:945 :2007/02/17(土) 00:57:08
>>973
それはもはやCとはいえない気が。

ググれとかどこそこのページを参考にとはわかるんだが
既にそのページを見て参考にしてでもわからないとなると
いったいどうすればいいんだろうという話を俺はしてたつもり。

まあなんにしろ何とか実現できたんで満足

975 名前:945 :2007/02/17(土) 00:57:52
これ以上いるとウザイからこれを最後に名無しに戻る。

976 名前:928 :2007/02/17(土) 01:04:20
皆様、反応ありがとうございます。
一応、GetTickCountをフックしてピンボールを早くすることくらいはできますw

kernel32.dllのGetTickCountはご存知の通り
0x7FFE0000を参照しているだけです。

>>944
OSが使う領域ということは
カーネルモードでしか書き込みできないのでしょうか。

977 名前:デフォルトの名無しさん :2007/02/17(土) 01:11:06
>>976
ふむふむ、確かに
MyGetTickCountとGetTickCountが同じ結果となる。

978 名前:デフォルトの名無しさん :2007/02/17(土) 01:17:32
>>974
そういうときはどこがどうわからないか具体的にはっきりと書いておいて、
後は誰か説明してくれる親切な人が現れるのを待つしかないよ。

979 名前:デフォルトの名無しさん :2007/02/17(土) 03:13:43
APIフックで思い出したけど、カーネルのSeAccessCheckを
フックして常にTRUEを返すようにしたら、あらゆるアクセス権を
無視して自由にアクセスできたな‥‥

980 名前:デフォルトの名無しさん :2007/02/17(土) 05:14:12
(゚Д゚)

981 名前:デフォルトの名無しさん :2007/02/17(土) 05:29:20
こっち見んな

982 名前:966 :2007/02/17(土) 13:20:23
972さま、わたくしのかんちがいでありました。
全部で約16K個という制限は固定であります。
つけくわえると、Vistaは所持しておらず不明であります。

983 名前:デフォルトの名無しさん :2007/02/17(土) 18:47:12
特定のネットワークアダプタの有効化/無効化を、
プログラムやバッチファイル等から制御する方法はあるでしょうか?

netsh.exeで簡単にできるのかと思っていたんですけど無理みたいです。


984 名前:デフォルトの名無しさん :2007/02/17(土) 19:40:28
      ,、‐ " ̄:::゙:丶、
    ,r: ,' 3゙ :::::::/ハヽ:ヽ::::、:ヽ
    {::://:::::::// ヽ\ト、:::::::!
    ヾ l:::::::/ 丶   `ヾ ィ、:::|
     |;:r::|  O`  'O ゙ハ|   < ないない
      ヽハ :.:.    :.: レ
        ´\ r‐--‐、,ノ
 r、     r、/ヾ ̄下ヘ
 ヽヾ 三 |:l1、_ヽ/__ .ィヽ
  \>ヽ/ |` }    n_n| |
   ヘ lノ `'ソ     l゚ω゚| |
    /´  /      ̄|. |
    \. ィ   ___ |  |
        | ノ     l |  |
      | |      i:|  |

985 名前:983 :2007/02/17(土) 20:27:54
自己解決しました。
984にカチンときたので教えません。
バーカ!

986 名前:983 :2007/02/17(土) 20:35:25
ほんとに使えねえクズどもだな。

987 名前:デフォルトの名無しさん :2007/02/17(土) 20:36:56
>>983
m9

988 名前:デフォルトの名無しさん :2007/02/17(土) 21:02:10
次すれまだぁ?

989 名前:デフォルトの名無しさん :2007/02/17(土) 21:05:02
CTRL+ALT+DELをプログラムからPCに送る方法ありませんか?
keybd_eventやVNCがやってる方法では期待する動作になりませんでした。
単にタスクマネージャーを出したいわけではなく、割り込みを発生させたいのです。

990 名前:デフォルトの名無しさん :2007/02/17(土) 21:30:41
wsprintfW(&Buff[0], TEXT("%s"), lpStr);
cds.cbData = lstrlen(Buff) * sizeof(TCHAR) + 1;

これで表示させた時、途中から文字が化けるんだが。
どうしてかわかる人いますか?
UNICODEだからかな。

lpStrは固定長でWCHARで9バイトになります。
cds.cbData(COPYDATASTRUCT)に9を指定するとちゃんと表示されるんですが・・・・
APIの不具合なんですかね?

991 名前:デフォルトの名無しさん :2007/02/17(土) 21:34:06
WCHARで9バイト?

992 名前:デフォルトの名無しさん :2007/02/17(土) 21:35:20
先頭1バイトが長さを指定したりする方式なのかなぁ?

993 名前:デフォルトの名無しさん :2007/02/17(土) 21:35:22
cds.cbData = lstrlen(Buff) * (sizeof(TCHAR) + 1);

トレイラーも二バイトなんじゃないの?
標準C++ではワイドのヌルキャラクターはやっぱりワイド。

994 名前:990 :2007/02/17(土) 21:35:23
>>991
!!!!!!!!!!!!!!
ありがとうございます!

995 名前:デフォルトの名無しさん :2007/02/17(土) 21:48:45
メモリにあるzip形式で圧縮されたデータを解凍するのにベストな方法は?
UnZip.dllだと1回ファイル作らないといけない??
何かフリーでライブラリないかな。

996 名前:デフォルトの名無しさん :2007/02/17(土) 21:52:39
>>995
ファイルに書き出しさえすれば色んな解凍ツールが使える
余計なコーディングはしないという点からはベスト!

997 名前:デフォルトの名無しさん :2007/02/17(土) 22:00:48
おいらはzlib付属のminizipみて、メモリ展開するようなのをつくったけど。

998 名前:デフォルトの名無しさん :2007/02/17(土) 22:35:27
APIの質問しろやああああああああああああああああああああああああああああ

999 名前:デフォルトの名無しさん :2007/02/17(土) 22:35:58
ああああああああああああああああああああああああああああああああああああ

1000 名前:1000 :2007/02/17(土) 22:37:41
自己解決しました。
>>1-999にカチンときたので教えません。
バーカ!


■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.