Win32API質問箱 Build34
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2005/07/30(土) 20:30:09やさしいお兄さんたちが答えてくれるかも。
∧_∧
( ´∀`) < 0x22
過去スレ、関連リンクは>>2-5くらい。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう
・日本語版MSDN Online Libraryは不完全です。英語版(http://msdn.microsoft.com)の利用推奨
・APIフックなど高度な事をしたい場合はできるだけAdvencedWindowsを読みましょう
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
-前スレ
Build33:http://pc8.2ch.net/test/read.cgi/tech/1120153520/
0232デフォルトの名無しさん
2005/08/10(水) 20:12:04スクロールバーを、モードレスダイアログボックスに配置しては?
0233デフォルトの名無しさん
2005/08/10(水) 23:11:270234デフォルトの名無しさん
2005/08/10(水) 23:21:25親ウインドウの背景を再描画しないようにすれば解決する…はず。
0235デフォルトの名無しさん
2005/08/11(木) 07:55:48既にロックされているかどうかを
処理を止めずに知るにはどうすれば良いのでしょうか?
0236デフォルトの名無しさん
2005/08/11(木) 08:21:19TryEnterCriticalSection
MSDNよめばEnterCriticalSectionからリンク貼られているぞ。
0237デフォルトの名無しさん
2005/08/11(木) 08:30:00既にロックされているかどうかを、処理を止めずに、かつロックせずに知りたいのです。
0238デフォルトの名無しさん
2005/08/11(木) 08:33:33むり。
クリティカルセクションでやりたければ、
TryEnter〜で確かめて、自分がクリティカルセクションつかんだら、
すぐにLeave〜するぐらいなもの。
0239デフォルトの名無しさん
2005/08/11(木) 08:39:39Mutexの方を検討してみます。ありがとうございました。
0240デフォルトの名無しさん
2005/08/11(木) 08:47:530241デフォルトの名無しさん
2005/08/11(木) 08:48:060242デフォルトの名無しさん
2005/08/11(木) 09:51:50レバーってrebar controlのことか!
0243デフォルトの名無しさん
2005/08/11(木) 11:53:400244デフォルトの名無しさん
2005/08/11(木) 12:14:58>既にロックされているかどうかを、処理を止めずに、かつロックせずに知りたいのです。
それってあまり役に立たないAPIだと思う。
APIから戻ってきて次のコードを実行するときには
もうロックの状態が変更されてるかも知れないわけだし
0245デフォルトの名無しさん
2005/08/11(木) 12:47:22プリプロセッサによる条件文を記述しようとしているのですが、
Windows環境でのビルドだと、指定したインクルード(#include "MyWinApp.h")がされるようにしたいのです。
プリプロセッサに何をしていすればいいのでしょーか?
よろしくお願いします。
#ifdef ?
#include "MyWinApp.h"
#else
#include "MyApp.h"
#endif
0246デフォルトの名無しさん
2005/08/11(木) 12:54:15どのコンパイラか言わないのに答えられるわけがない。
というか普通そういうコンパイラ依存の特殊なのは、コンパイラ付属のヘルプに書いてあるもんだが。
0247デフォルトの名無しさん
2005/08/11(木) 13:00:22失礼しました。
開発環境はVCです。
0248デフォルトの名無しさん
2005/08/11(木) 13:13:19ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/_predir_preprocessor_directives.asp
_WIN32とか_MSC_VERあたりかな。
0249デフォルトの名無しさん
2005/08/11(木) 13:13:56ちがった、こっちな。
0250デフォルトの名無しさん
2005/08/11(木) 13:14:03マルチすなや。移動するなら断ってからに汁。
つーか、どうしてWin32APIの問題だと思ったんだ? 更にスレ違いだがね。
>>246
スレ違いなんだからぬるーしる。
0251デフォルトの名無しさん
2005/08/11(木) 13:30:00VCスレ池
0252デフォルトの名無しさん
2005/08/11(木) 17:49:48察するに、CriticalSectionで囲まれた部分が何か重い処理を必要としていて、
もしこの部分を他のスレッドが使用していたら、待つのに時間がかかるから
他のスレッドはその処理を実行するのを一時あきらめよう、っていうことかな?
bool g_bEnter = false;
void f1()
{
EnterCriticalSection(&cs);
bEnter = true;
bEnter = false;
LeaveCriticalSecion(&cs);
}
void f2()
{
EnterCriticalSection(&cs);
bEnter = true;
bEnter = false;
LeaveCriticalSecion(&cs);
}
としときゃ、bEnterを調べることによってロックされているかわかるんじゃない?
まあ多少穴はあるが、用は足りるのでは?
0253デフォルトの名無しさん
2005/08/11(木) 18:06:39スレッド分割の設計を見直したほうがいいと思う。
0254デフォルトの名無しさん
2005/08/11(木) 18:22:13WM_TIMERの時に最小限の範囲(rect)をInvalidateRectして
WM_ERASEBKGNDも使ってます。
しかし、それでもちらつきがとれません。
どうすればいいでしょうか?
0255デフォルトの名無しさん
2005/08/11(木) 18:23:50プライマリスレッドがワーカースレッドを作って何か処理させる、というモデルなんじゃないの?
ワーカースレッドがひとつ動いてる間は、新たなワーカースレッドを作って処理させるためのボタン
なりメニューなりをDisableにして禁止したい、というケースじゃないかと想像してるんだが。
これは普通に、あっていいと思うけど。
0256デフォルトの名無しさん
2005/08/11(木) 18:26:13スレ違いといいつつ書き込む馬鹿に教える事など無い
0257デフォルトの名無しさん
2005/08/11(木) 18:27:42>>254
それはゲーム屋(俺は違うが)はみんな知ってるダブルバッファリング処理をしてないからだね。
ゲームならWind32APIを直接使わずに、DirectX9.0c SDKを使う方がいいと思うよ。
0258デフォルトの名無しさん
2005/08/11(木) 18:29:430259254
2005/08/11(木) 18:53:35�dクス。ついにDirectXか
0260デフォルトの名無しさん
2005/08/11(木) 19:13:14ついにDirectXか
ついにDirectXか
ついにDirectXか
今更DirectXか、だろ
0261デフォルトの名無しさん
2005/08/11(木) 19:32:13プログラムを作成したいのですが、IPアドレスエディットコントロールで
どうしてもIPを拾えず、変更も出来ません。
何かうまい方法はないでしょうか?
0262デフォルトの名無しさん
2005/08/11(木) 19:34:12ただ、ネットワークの設定画面なんかでよくある
IPアドレス入力に特化したエディットコントロールってだけですから
0263デフォルトの名無しさん
2005/08/11(木) 19:38:38じゃぁロックの設計が良くない。
本当にロックしないといけないのは、
ワーカースレッドが触っている対象物ではなく、
ワーカースレッドが動いているかどうかを管理している部分だろう。
0264261
2005/08/11(木) 19:40:232000やXPではIP取得し変更をかけられたんですが
NTで使える命令が知りたかったのですが・・
0265263
2005/08/11(木) 19:41:01そうすりゃ、ロック待ちの時間はとても短くなるでしょ。
0266デフォルトの名無しさん
2005/08/11(木) 19:49:55自動で出現させて、そこのIPアドレスエディットコントロールを弄る、という
話なのか?
0267261
2005/08/11(木) 20:01:01NicSet.IpAddress
NicSet.IpSubnet
NicSet.DefaultIpGateway
NicSet.DNSServerSearchOrder
NTでは無理なのでしょうか?
0268デフォルトの名無しさん
2005/08/11(木) 20:16:020269デフォルトの名無しさん
2005/08/11(木) 20:23:46よーわからんが、本当にNicSetってWin32APIの一部なの?
MSDNで検索してもそれらの関数ひとつもヒットしないんだが。
0270デフォルトの名無しさん
2005/08/11(木) 20:43:350271デフォルトの名無しさん
2005/08/11(木) 20:45:16そういう API があるかどうか以前に、本質的に無理だろ?
「ロックされていない」という返却値を受け取った直後にロックされたらどうするんだよ
0272デフォルトの名無しさん
2005/08/11(木) 20:47:35NicSetはインスタンス名だろう
ググったら同じ名前で宣言しとるVBソースとかあったし
そんなとこから引っ張ってきてんじゃないか?
>>267
ち な み に API で は あ り ま せ ん
0273デフォルトの名無しさん
2005/08/11(木) 20:56:52って2000が出てきたときにMS方面から聞いた記憶がある。
0274デフォルトの名無しさん
2005/08/11(木) 21:08:440275デフォルトの名無しさん
2005/08/12(金) 07:32:31richedit.hに
#define wReserved wEffects
の一文が
0276デフォルトの名無しさん
2005/08/12(金) 10:37:43どうでもいい高速化のためのキャッシュデータに使ったりして
スワップしそうならその領域を勝手に開放して新規の確保には失敗するとか。
0277デフォルトの名無しさん
2005/08/12(金) 10:45:57キャッシュ用のメモリは、
確保する最大サイズを指定した独自のヒープから確保するようにすれば?
0278デフォルトの名無しさん
2005/08/12(金) 10:53:140279デフォルトの名無しさん
2005/08/12(金) 10:54:47そういったものはない。
0280デフォルトの名無しさん
2005/08/12(金) 10:55:34winAPIヤバイ。
まず広い。もう広いなんてもんじゃない。超広い。
広いとかっても
「東京ドーム20個ぶんくらい?」
とか、もう、そういうレベルじゃない。
何しろ無限。スゲェ!なんか単位とか無いの。何坪とか何?fとかを超越してる。無限だし超広い。
しかも膨張してるらしい。ヤバイよ、膨張だよ。
だって普通は地球とか膨張しないじゃん。だって自分の部屋の廊下がだんだん伸びてったら困るじゃん。トイレとか超遠いとか困るっしょ。
通学路が伸びて、一年のときは徒歩10分だったのに、三年のときは自転車で二時間とか泣くっしょ。
だから地球とか膨張しない。話のわかるヤツだ。
けど宇宙はヤバイ。そんなの気にしない。膨張しまくり。最も遠くから到達する光とか比較してもよくわかんないくらい遠い。ヤバすぎ。
無限っていたけど、もしかしたら有限かもしんない。でも有限って事にすると
「じゃあ、宇宙の端の外側ってナニよ?」
って事になるし、それは誰もわからない。ヤバイ。誰にも分からないなんて凄すぎる。
あと超寒い。約1ケルビン。摂氏で言うと−272℃。ヤバイ。寒すぎ。バナナで釘打つ暇もなく死ぬ。怖い。
それに超何も無い。超ガラガラ。それに超のんびり。億年とか平気で出てくる。億年て。小学生でも言わねぇよ、最近。
なんつっても宇宙は馬力が凄い。無限とか平気だし。
うちらなんて無限とかたかだか積分計算で出てきただけで上手く扱えないから有限にしたり、fと置いてみたり、演算子使ったりするのに、
宇宙は全然平気。無限を無限のまま扱ってる。凄い。ヤバイ。
とにかく貴様ら、宇宙のヤバさをもっと知るべきだと思います。
そんなヤバイ宇宙に出て行ったハッブルとか超偉い。もっとがんばれ。超がんばれ。
0281デフォルトの名無しさん
2005/08/12(金) 10:57:290282デフォルトの名無しさん
2005/08/12(金) 11:19:40リッチエディットでSetOptions(ECOOP_OR,ECO_NOHIDESEL);を指定すると、
スクロールバーの表示がおかしくなるのですが、
このような不具合をご存知な人はいますか?
0283デフォルトの名無しさん
2005/08/12(金) 11:55:46キャッシュに使ってる最中にOSが勝手に解放したらどうなるのか考えたら
そんなものがあるわけないことくらい分かるだろ
0284デフォルトの名無しさん
2005/08/12(金) 12:30:490285282
2005/08/12(金) 12:55:380286デフォルトの名無しさん
2005/08/12(金) 12:59:120287デフォルトの名無しさん
2005/08/12(金) 16:46:13このように一度ロードしたDLLを開放せず何度もロードを繰り返して大丈夫でしょうか?
同じDLLでLoadLibraryを繰り返し実行してみたところ何度実行してもインスタンスハンドルが変わらなかったので、
一度メモリにロードされたものは再度ロードしようとしても実際はロードされないのだと思いますが・・・。
0288デフォルトの名無しさん
2005/08/12(金) 17:15:120289デフォルトの名無しさん
2005/08/12(金) 17:30:17point32解析するしかないのかなぁ
0290デフォルトの名無しさん
2005/08/12(金) 17:40:05�dクス。
エラー処理は手抜きせず呼んだあとはちゃんと開放するようにします。
0291デフォルトの名無しさん
2005/08/12(金) 18:17:43エクスプローラが親プロセスになってるプログラムなら取得出来るのですが…。
0292デフォルトの名無しさん
2005/08/12(金) 19:30:36既にロード済みであることがわかっている場合はGetModuleHandle()。
LoadLibrary()とFreeLibrary()は参照カウンタを使っているとAdvanced Windowsに書いてあったような気がする。
0293デフォルトの名無しさん
2005/08/12(金) 19:39:04普通に取れると思うけど。
0294デフォルトの名無しさん
2005/08/12(金) 19:46:34スクリーンセーバとか、作るとき、IMEを消したいんですが、
そんなAPI関数ありましたっけ?
それとも何か他の方法が、、、?
0295デフォルトの名無しさん
2005/08/12(金) 19:49:07ウィルスとかトロイの木馬とか作ってる香具師ばっかりなのか?
0296デフォルトの名無しさん
2005/08/12(金) 19:50:510297デフォルトの名無しさん
2005/08/12(金) 19:58:39無い。別の方法を使う。「VC++ 立川さん」でググれ。
0298294
2005/08/12(金) 20:14:30ググッた。 出た。 わかた。
ありがと。 この立川さんって人すごいね?
0299デフォルトの名無しさん
2005/08/12(金) 21:00:29ただの横スクロール
0300デフォルトの名無しさん
2005/08/12(金) 21:11:16使用用途の話はスレ違い。
だが、フックやプロセスメモリアクセスはイヤンな用途しか使い道がないような希ガス。
というよりその関数や機能自体そんな目的で作られてるようにも思える。
0301デフォルトの名無しさん
2005/08/12(金) 21:16:11アフォか
0302デフォルトの名無しさん
2005/08/12(金) 21:34:13SetWindowPos( m_hWnd , rect , SWP_NOSIZE);
って感じで実装してるんですが、rect内容が変わってる事、戻り値が0になってること、フラグの組み合わせなど
確認したんですが、どれもダメで。
何がいけないんでしょう?、ん〜わかんない。
よろしくお願いします。
0303デフォルトの名無しさん
2005/08/12(金) 21:45:04たぶん制限ユーザーなんだろう。
0304デフォルトの名無しさん
2005/08/12(金) 22:09:21フック系関数やReadProcessMemory、WriteProcessMemoryの使い道を述べよ
0305デフォルトの名無しさん
2005/08/12(金) 22:19:12ウイルス...
0306デフォルトの名無しさん
2005/08/12(金) 22:20:350307デフォルトの名無しさん
2005/08/12(金) 22:21:18MFCのソースでも見ろ
> ReadProcessMemory、WriteProcessMemory
MSDNの分類見れば自明
0308デフォルトの名無しさん
2005/08/12(金) 22:23:00デバッガ
0309デフォルトの名無しさん
2005/08/12(金) 23:39:39CBTを作っているわけでもないのに、
それらのAPIを使うのは、
行儀が悪いよね。
0310デフォルトの名無しさん
2005/08/12(金) 23:47:250311デフォルトの名無しさん
2005/08/12(金) 23:50:53ReadFileなんてAPIがあるからウイルスに(ry
0312デフォルトの名無しさん
2005/08/12(金) 23:52:570313デフォルトの名無しさん
2005/08/12(金) 23:57:44アプリケーションのファイルやレジストリのアクセスを監視したければ、
Sysinternalsのツールのようなやり方をすべきで、
フックしたりすべきじゃないんだよな。
0314デフォルトの名無しさん
2005/08/13(土) 00:01:38DeleteFileもReadFileもBitBltもウイルス以外に使い道は広い。
だがWriteProcessMemoryなんてデバッガとウイルスとクラックツールぐらいしか使い道がない。
デバッガ作れるような技術がある奴ならWriteProcessMemory相当のコードは書けると思うが。
それにデバッガ作る奴なんてそれほど多くない。
これはMSが厨房向けに容易にウイルスが作成できる環境を提供してると思われ。
0315デフォルトの名無しさん
2005/08/13(土) 00:07:55> 書けると思うが。
ReadFileがなくてもファイルを読めるのか? (メモリマップトファイルを使えば
読めるがそういう話じゃなくて)
APIってそういうものだろ
0316デフォルトの名無しさん
2005/08/13(土) 00:09:02それでMSにどういう得があるんだよ
デンパ垂れ流すのもたいがいにしろ
0317デフォルトの名無しさん
2005/08/13(土) 00:12:19WOW64のファイルシステムリダイレクションやレジストリリダイレクションが
ユーザーモードで実装されていることについてはどうお考えですか
0318デフォルトの名無しさん
2005/08/13(土) 00:34:44また、発生するメッセージを調べるにはどうしたらいいのでしょうか?
0319デフォルトの名無しさん
2005/08/13(土) 00:53:42つ [Spy++]
第4・第5とも同じメッセージが割り当てられてるから、PARAM値を見ないと判定できないんじゃなかったっけ。
0321291
2005/08/13(土) 01:22:09何故かC:\からのフルパスが取れるのは一部だけ…
0322デフォルトの名無しさん
2005/08/13(土) 01:43:240323デフォルトの名無しさん
2005/08/13(土) 02:37:19この話といったいどんな関係が?
それらはフックすることでAPIコール前に調整しているのではなく、
APIコールした後にOSのモジュール内で調整しているんですよ。
0324デフォルトの名無しさん
2005/08/13(土) 02:44:38> この話といったいどんな関係が?
「フックしたりすべきじゃない」と考える論拠によるのでお聞かせ願えますか
0325デフォルトの名無しさん
2005/08/13(土) 02:51:22どうやってる?
具体的にコードを示したほうがいいぞ。
エスパー能力を発揮すると・・・
PROCESSENTRY32構造体のszExeFileを見てたりする?
EnumProcessModulesして、
GetModuleFileNameExしたらどう?
0326デフォルトの名無しさん
2005/08/13(土) 02:54:45それじゃわからない。
もっと詳しく、この話とどう関係するのか説明してよ。
どうしてWOW64だとフックしなきゃいけないの?
0327デフォルトの名無しさん
2005/08/13(土) 03:22:14>>304
OSからしてソース非公開である以上、アプリがソース公開されているはずもなく、
ソースのない状況でもアプリをメンテナンスする必要性(あるいは需要)がある以上、
フックのような仕組みは必要悪として存在せざるをえない。
(バイナリパッチが使えないシチュエーションも存在する)
>>313
カーネルモードドライバでやるべきってのは間違い。
その程度の用途でいちいちカーネルモードにコード突っ込んでるようじゃ、
とてもじゃないが安定したシステムなんか望めない。
皆がSysintarnalsレベルの技術者ではない。
まあ、Server系ではフック類は無効になってるとかしたほうがいいとは、個人的には思うけどな。
あくまで「パソコン」としてのWindowsに必要なだけで、「サーバ」にはいらんだろうし。
0328デフォルトの名無しさん
2005/08/13(土) 04:28:15なるほど、フィルタドライバだとカーネルモードになるってことか。
バグがなくても危険きわまりないAPIフックと、
バグがなければ安定するフィルタドライバ、
どっちを選ぶかというと・・・後者でしょ。
なんだかんだ言ってるけど、やってることはクラックなんですよ。
0329デフォルトの名無しさん
2005/08/13(土) 04:57:13ダウト。ありえない仮定を持ち出すのは詭弁の第一歩だよ。
APIフックでコケるのはフックかけられる側プロセスだけで、
その程度でシステムダウンするほどNTカーネルはやわじゃない。
(9xは現代的OSじゃないのでしらん)
カーネルモードドライバはコケればほぼ確実にシステムごともっていく。
これはバグがどの程度あるにしたところで、変わらない事実。
> やってることはクラックなんですよ。
だから何。カーネルモードでやろうがどこでやろうが、クラックはクラックだが?
クラックかクラックじゃないかなんて、技術に対する解釈の相違にすぎんよ。
少なくともスレ違いだ。
0330デフォルトの名無しさん
2005/08/13(土) 05:21:380331デフォルトの名無しさん
2005/08/13(土) 05:35:08■ このスレッドは過去ログ倉庫に格納されています