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


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

Win32API質問箱 Build31
251 名前:232 :2005/05/07(土) 17:20:02
>>235
顧客からの要求で、「ダイアログが画面内に収まらないなら画面縦一杯に出してListCtrlにスクロールバーを出せ。
さもなくば、適切なサイズにListCtrlをあわせてスクロールバーは出すな。
ただし、ダイアログのサイズは自由に変えられるようにしろ」なんてのがあったりするわけだがね。
#あ、説明不足で誤解されそうな悪寒。

252 名前:デフォルトの名無しさん :2005/05/07(土) 17:38:14
もうしゃべらないでいいよ無能

253 名前:デフォルトの名無しさん :2005/05/07(土) 18:56:17
指定されたフォルダから指定されたファイルを検索するWindowsの標準関数は、
ファイル名を一字一字比較して、末尾まで一致するファイルへのポインタを返す
という仕様になっていると思うのですが・・・間違ってないでしょうか?

254 名前:デフォルトの名無しさん :2005/05/07(土) 19:00:31
http://YahooBB219029188008.bbtec.net/


うはっwwwwwwっwうはっwwwっwwwwwwwwwwww
wwwwwwっうぇ
wwwwwwwwwwww
wおkwww
wwwwwwおkwww


255 名前:デフォルトの名無しさん :2005/05/07(土) 19:01:22
>>253
指定されたフォルダから指定されたファイルを検索するWindowsの標準関数
の名前を書いてくれなきゃわからない。

256 名前:デフォルトの名無しさん :2005/05/07(土) 20:09:12
>>249
その方法でうまくいきました。
どうもです。

>>252
無能で悪かったな。

257 名前:デフォルトの名無しさん :2005/05/07(土) 20:15:57
最近よくみかける>>254みたいなのってなんなんだ?

258 名前:デフォルトの名無しさん :2005/05/07(土) 20:16:56
>>257
山田ウイルス

259 名前:デフォルトの名無しさん :2005/05/07(土) 20:36:24
>>253
ファイルへのポインタ?

260 名前:デフォルトの名無しさん :2005/05/07(土) 22:07:33
>>253
ワイルドカードがあるからそう単純ではないと思う。

261 名前:デフォルトの名無しさん :2005/05/07(土) 22:29:05
>>260
ワイルドカードは内部でPathMatchSpecを呼んでるだけだろ。

262 名前:デフォルトの名無しさん :2005/05/07(土) 22:39:10
ポップアップメニューって親ウィンドウの中じゃないと絶対表示できない?
グローバルなフックプロシージャからTrackPopupMenu使ってみたけど親ウィンドウ以外では表示されません。
なんか方法ありますか?


263 名前:デフォルトの名無しさん :2005/05/07(土) 22:50:19
なんのポップアップだよ

264 名前:デフォルトの名無しさん :2005/05/07(土) 22:56:45
別にウィンドウに限定されないけどなあ

265 名前:デフォルトの名無しさん :2005/05/07(土) 23:00:39
質問させてください

Cの構造体ってコンパイラによってメンバが
4バイトの境界にそろえられてしまったりすると思うんですけど、
Windowsビットマップをそのまま読み込んで表示しようとした時に
読み込んだバッファに構造体のポインタをそのまま当てはめて使っているサンプルを
見かけるのですが問題ないのでしょうか

手持ちのbccではオプションに色々指定してもちゃんと1バイト区切りになっていましたが
そういう取り決めになっていたりするんでしょうか

266 名前:デフォルトの名無しさん :2005/05/07(土) 23:10:27
多分心配無用

267 名前:デフォルトの名無しさん :2005/05/07(土) 23:19:49
>>265
構造体の定義で
struct {
 char a;
 int b;
};
なんていう馬鹿なことしなければ大概大丈夫。

268 名前:デフォルトの名無しさん :2005/05/07(土) 23:30:25
>>265
普通はBITMAPFILEHEADERの定義の前に
#pragma pack(2)
とか入ってるから大丈夫よ。
まあメンバごとに読んだ方が行儀がいいのは確かだけど。

269 名前:265 :2005/05/07(土) 23:32:37
ええと、BITMAPFILEHEADERやRGBQUADでWORDとBYTEがあるので大丈夫かなあと心配してみたんです

お話を聞く限り大丈夫そうなので構造体使って画像読み込む関数つくってみます
ありがとうございました!

270 名前:デフォルトの名無しさん :2005/05/07(土) 23:34:53
何もしないと、パディングされちまうけど、
BITMAPFILEHEADERとかBITMAPINFO、INFOHEADERとかRGBQUADとかのような、
パディングされたら困るやつは、ちゃんと定義のとこでパディングされないように細工してある

271 名前:デフォルトの名無しさん :2005/05/07(土) 23:52:14
>>166
MSDNのmixer〜のあたりを読めば書いてあります。
マイクはMIXERLINE_COMPONENTTYPE_SRC_MICROPHONEでmixerGetLineInfo。

272 名前:デフォルトの名無しさん :2005/05/08(日) 00:22:52
ただ、ビットマップに関する構造体に関しては定義でパディング対策してあるけど
ビットマップの実際のビットデータ部は、画像の横幅によってはスキャンラインごとに、
ラインの最後にパディングが有るから、ビットマップファイルを触るときはそこに注意だな

273 名前:265 :2005/05/08(日) 00:28:51
>>270 >>272
レスありがとうございます
きちんと対策がしてあるものなのですね

データ部の4byte境界は横幅とビットカウントから1ラインのバイト数出す
関数作って対応済みです(`・ω・´) シャキーン

いろいろ心配していただいてありがとうございました

274 名前:デフォルトの名無しさん :2005/05/08(日) 00:56:53
>>273
その対策というのが>>268

275 名前:デフォルトの名無しさん :2005/05/08(日) 00:57:46
Win32API でのファイル操作についての質問です。

#include <windows.h>

HANDLE hFile;
・・・・・・・・・・・・
int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
PSTR lpCmdLine , int nCmdShow) {
HWND hwnd;
MSG msg;
WNDCLASS winc;

hFile = CreateFile(lpCmdLine , GENERIC_READ , FILE_SHARE_READ , NULL ,
OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL , NULL);
if (hFile == INVALID_HANDLE_VALUE) {
MessageBox(NULL , TEXT("ファイルが開けません") , NULL , MB_OK);
return -1;
}
(以下略)

をコンパイルして実行したら、存在するファイル名をコマンド引数に指定しても
「ファイルが開けません」のエラーメッセージが出てしまいます。

当方の開発環境は、
OS:Windows XP
コンパイラ: lcc-win32 Ver3.8
です。

どなたか問題点を教えて下さい。お願いしますm(_ _)m

276 名前:デフォルトの名無しさん :2005/05/08(日) 01:03:26
>>275
CreateFileに渡しているlpCmdLineに何が入っているか確認してみようとは思わん?

277 名前:デフォルトの名無しさん :2005/05/08(日) 01:33:09
>>276
ダイアログボックスには何度も表示しましたが、改めてコンソールに出力してみると、
276さんに言われるまで見落としていたのですが、lpCmdLine に入っていたのは
 C:\Document and Settings\・・・・\filename.txt
ではなくて、
 "C:\Document and Settings\・・・・\filename.txt"
↑                            ↑
文字列そのものの両端にダブルクォーテーションがある

ということに気づきました。
気づかない方がヴァカなのかも知れませんが、(私にとって)これは盲点でした。
でも、その一言のお陰で解決しました。どうも有難うございましたm(_ _)m感謝感謝

278 名前:デフォルトの名無しさん :2005/05/08(日) 02:41:52
>>277
ちなみにD:\とかだとダブルクォーテーションが排卵よ

279 名前:デフォルトの名無しさん :2005/05/08(日) 03:23:07
スペースが入れば入る

280 名前:デフォルトの名無しさん :2005/05/08(日) 03:24:34
スペースって宇宙の事だよね

281 名前:デフォルトの名無しさん :2005/05/08(日) 03:59:09
急速にスレの質が低下してまいりました

282 名前:デフォルトの名無しさん :2005/05/08(日) 04:18:38
>>278
D:\・・・ でもダブルクォーテーション入りました(当方の環境では D ドライブは CD-ROM)。
こちらの環境が Windows XP だからなのか、それとも lcc-win32 のためなんでしょうか・・・・・・

283 名前:デフォルトの名無しさん :2005/05/08(日) 06:19:39
サボらないでコマンドラインパーサ書けよ

284 名前:デフォルトの名無しさん :2005/05/08(日) 06:54:03
>>283
"を含むパス名って存在しないんだっけ?
パーサを書こうにも仕様がわからんとね。

285 名前:デフォルトの名無しさん :2005/05/08(日) 07:31:04
存在しねぇよ
仕様がわからんとねとか言う前に、自分でファイル名つけてみろよ

286 名前:デフォルトの名無しさん :2005/05/08(日) 07:31:21
なんでファイル名にスペースなんて使えるようにしたんだろう

287 名前:デフォルトの名無しさん :2005/05/08(日) 07:46:14
ファイル名に\ とか / とか使われたらお手上げだよ。

288 名前:デフォルトの名無しさん :2005/05/08(日) 08:53:31
CreateFileの前にPathUnquoteSpaces(lpCmdLine);を入れると解決するよ。

289 名前:デフォルトの名無しさん :2005/05/08(日) 11:00:01
Path系のAPIはIE4以降必須だから・・・


290 名前:デフォルトの名無しさん :2005/05/08(日) 11:12:03
今時IE4以降が入ってないようなWinマシン使ってるヤツが居るのか?
天然記念物だな

291 名前:デフォルトの名無しさん :2005/05/08(日) 11:41:22
>>290
某コンピューター系大企業の生産現場では、製品チェック用のノーマルWin95PCが現役だったよ。
工場とかには結構な数あるんじゃないかな?

292 名前:デフォルトの名無しさん :2005/05/08(日) 11:50:33
Win95ならもう既にshlwapi.dll入ってたと思うが

293 名前:デフォルトの名無しさん :2005/05/08(日) 11:51:37
おいおい
製品チェック用のマシンにどこの馬の骨とも知らんヤツの作ったアプリ入れるんかい

294 名前:デフォルトの名無しさん :2005/05/08(日) 13:03:46
自社製より信頼性が高いと思っているのかも知れない。

295 名前:234 :2005/05/08(日) 14:59:05
だれかおせーて

296 名前:デフォルトの名無しさん :2005/05/08(日) 15:58:27
質問したかて、必ず知ってる人間が居るとは限らん
とりあえず俺はしらね

297 名前:デフォルトの名無しさん :2005/05/08(日) 16:21:16
仮想の意味がわからんが、モニタ2台あるとスクリーン座標はそのまま出るよ
たとえば、1024幅が2台あってプライマリを左にすれば、 0 - 2047 の範囲になる

298 名前:デフォルトの名無しさん :2005/05/08(日) 17:07:38
ダライアス可能?

299 名前:デフォルトの名無しさん :2005/05/08(日) 17:33:52
>>298
ひっくり返るほどスレ違いすぎ。

300 名前:デフォルトの名無しさん :2005/05/08(日) 18:46:41
Gと外伝なら見たことあるな。
えっ、ダライアスだよ。

301 名前:234 :2005/05/08(日) 20:19:46
>297
ありがとうございます。
仮想スクリーンてのはこのあたりの文章を参照しました。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/monitor_7hym.asp

302 名前:デフォルトの名無しさん :2005/05/08(日) 21:31:20
すんません、
セミコロン(;)つきのファイル名って存在しますか?

303 名前:デフォルトの名無しさん :2005/05/08(日) 21:37:52
どころか、セミコロンだけでも存在できる。

304 名前:デフォルトの名無しさん :2005/05/08(日) 21:42:12
あちゃあ、まぢですか?

セミコロンをファイル名リストの区切りにしようとしてたんだけど、
破綻しちゃった。
おススメの区切り文字ってありますか?

305 名前:デフォルトの名無しさん :2005/05/08(日) 21:51:20
>>304
タブ文字でも改行でも

306 名前:デフォルトの名無しさん :2005/05/08(日) 21:52:21
>>304
MFCのCFileDialogでやってるように縦簿'|'はどう?

307 名前:306 :2005/05/08(日) 21:53:35
「棒」ね

308 名前:デフォルトの名無しさん :2005/05/08(日) 21:58:03
>>304
普通にセミコロンでいいじゃんか。
環境変数のパス名とかの区切りだし

309 名前:デフォルトの名無しさん :2005/05/08(日) 22:02:29
>>304
'\0'

310 名前:デフォルトの名無しさん :2005/05/08(日) 22:06:10
縦棒にします!
ありがとうございました!


311 名前:デフォルトの名無しさん :2005/05/08(日) 23:05:50
環境変数ではどうしてんだろう・・・

312 名前:デフォルトの名無しさん :2005/05/08(日) 23:31:17
UIやメッセージを表示する専用の子ウィンドウを沢山持つアプリケーションを作る場合、
その時点で使ってない子ウィンドウは、どのようにしておくのが推奨されていますか?
毎回、使う度にCreate と Destroyを繰り返すのはシステムに負荷が掛かるのでしょうか?
一応、作成しておいて、ただ見えなくしておくだけの方がいいのでしょうか?


313 名前:デフォルトの名無しさん :2005/05/08(日) 23:32:27
>>312
好きにしろ

314 名前:デフォルトの名無しさん :2005/05/08(日) 23:44:28
>>312
TPOに応じて方法を使い分けるべきかと。
少数の複雑なウインドウなら隠蔽するだけのほうがいいと思うが、多数のボタンやエディトボックスなら使うたびにCreateとDestroyを繰り返したほうがいい。
一つのプログラムに二つの方法を混在させると開放し忘れでリークするということもあるだろうからどちらかに統一するのがベター。

315 名前:デフォルトの名無しさん :2005/05/09(月) 00:11:27
回答ありがとうございます。
マナーの良いプログラミングを心掛けていきたいと思っています。

316 名前:デフォルトの名無しさん :2005/05/09(月) 00:15:47
フックについてですが、WH_GETMESSAGE でフックをかけているんですが、
ウィンドウのアクティブ/非アクティブを変えても WM_ACTIVE が捕捉できません。
全く同じコードで WM_LBUTTONDBLCLK などのメッセージは捕捉できるのですが
WM_ACTIVE は何か特別扱いになっているのでしょうか?

317 名前:デフォルトの名無しさん :2005/05/09(月) 00:44:41
>>311
フォルダ名を""で括ればok

318 名前:デフォルトの名無しさん :2005/05/09(月) 00:57:32
引用符切り分けるのめんどくさい

319 名前:デフォルトの名無しさん :2005/05/09(月) 01:08:14
>>316
WM_ACTIVEはsendされるメッセージ。
WH_GETMESSAGEはpostされたメッセージしか捕らえられない。

320 名前:デフォルトの名無しさん :2005/05/09(月) 01:51:38
>>319
なるほど。ありがとう御座います。
WH_CALLWNDPROC でフックできました。

321 名前:デフォルトの名無しさん :2005/05/09(月) 03:41:12
FindFirstChangeNotification()

ReadDirectoryChangesW()
のように、ディレクトリごとではなく、ファイルごとに変更を知る方法はありませんか?

一つのファイルを複数のプロセスが共有で開いて読み書きしている時に、
他の誰かが書きこんだことを知りたいので、書き込まれた位置までわかるとありがたいのですが。

322 名前:デフォルトの名無しさん :2005/05/09(月) 04:07:20
FindFirstChangeNotification

323 名前:デフォルトの名無しさん :2005/05/09(月) 04:27:12
それって、ネットワークドライブでも使える?

324 名前:デフォルトの名無しさん :2005/05/09(月) 05:43:25
使える

325 名前:デフォルトの名無しさん :2005/05/09(月) 07:18:57
PROCESSENTRY32構造体についてなんですが

PROCESSENTRY32 unko;

と宣言してるのですが
「'PROCESSENTRY32' : 識別名を宣言するのに、型が指定されていません」
とエラーがでます。解決方法を教えてください


326 名前:デフォルトの名無しさん :2005/05/09(月) 08:44:11
PROCESSENTRY32 構造体を宣言してください。

327 名前:デフォルトの名無しさん :2005/05/09(月) 08:47:08
#include <tlhelp32.h>

328 名前:デフォルトの名無しさん :2005/05/09(月) 09:03:47
>>327
既にやってる

329 名前:デフォルトの名無しさん :2005/05/09(月) 09:13:09
http://dhcp255-146.tamatele.ne.jp/
うぇwwwっうぇwwwwwwwwwwwwっwwwっうぇ
うはっwwwwwwwwwwwwwwwうはっwww
うぇwwwっwおkwwwっwwwwwwwwwwwww

330 名前:デフォルトの名無しさん :2005/05/09(月) 09:13:12
というか<tlhelp32.h>にインクルードしてるのに
「CreateToolHelp32Snapshot' : 定義されていない識別子」って出ます。原因と解決方法を教えてください

331 名前:330 :2005/05/09(月) 09:17:51
すいません解決しました

332 名前:デフォルトの名無しさん :2005/05/09(月) 09:41:32
どう解決したんだよ
>>328を書いた以上、経過を説明してくれないかな

333 名前:330 :2005/05/09(月) 10:18:54
関数名間違ってただけ

334 名前:デフォルトの名無しさん :2005/05/09(月) 10:28:52
>>325
...ENTRY... に「出るもの」の名前は後任者が勘違いしやすい。ここはもっと
ピタッとする名前があるのにしないのはまずいな。

335 名前:デフォルトの名無しさん :2005/05/09(月) 11:34:35
334 が非常に的外れなレスをしている気がしないでもないが、

336 名前:デフォルトの名無しさん :2005/05/09(月) 16:00:17
>>334
いやいや、その変数をEntryするのかもしれんぞ。
#どこにかは知らんが。

337 名前:デフォルトの名無しさん :2005/05/09(月) 16:46:46
シリアルポート2つ使うプログラムで同じCOM番号を指定した時にそれを共有して使う方法を教えてください

338 名前:デフォルトの名無しさん :2005/05/09(月) 16:49:33
Telephony API

339 名前:デフォルトの名無しさん :2005/05/09(月) 17:05:29
>>338
詳しく

340 名前:デフォルトの名無しさん :2005/05/09(月) 17:17:22
>>339
http://www.google.co.jp/

341 名前:デフォルトの名無しさん :2005/05/09(月) 17:45:05
>>336
あの続きのコードを見たくなった。日経の小説も気になってんだけど。

342 名前:デフォルトの名無しさん :2005/05/09(月) 18:06:47
>>340
知らないならレスしないで下さい。ウザイだけです、消えてください

343 名前:デフォルトの名無しさん :2005/05/09(月) 18:08:01
オマエモナ

344 名前:デフォルトの名無しさん :2005/05/09(月) 18:14:45
騙りが横行してる希ガス

345 名前:デフォルトの名無しさん :2005/05/09(月) 18:20:42
共有ねぇ。DuplicateHandleするとどうなるのかは気になるけど、
素直にアウトプロセスCOMみたいなRPCな仕掛けを挟んだら?

346 名前:デフォルトの名無しさん :2005/05/09(月) 19:37:00
めんどい

347 名前:デフォルトの名無しさん :2005/05/09(月) 21:09:50
コンボボックスを選択して確定することにするにはどうしたらいいでしょうか?
ただたんにテキストをかえるだけではだめなようです。
そのコンボボックスのハンドルはわかっています。

wm_Settext文字を変更することはできたのですが内部的には確定されていないのか結果が反映されないのです


348 名前:デフォルトの名無しさん :2005/05/09(月) 21:24:51 ?#
>>347
CB_ADDSTRINGで文字列を追加して、帰ってきたインデックスをCB_SETCURSELで選択。

349 名前:321 :2005/05/10(火) 09:58:23
>>322
あの、それはディレクトリごとだし、
ファイルの変更部分は通知されませんが。

350 名前:デフォルトの名無しさん :2005/05/10(火) 10:32:06
ReadProcessMemoryを使ってもことごとくNULLが返ります。アクセス権がないようなのですが解決方法を教えてください。
あとPROCESSENTRY32構造体のメンバth32ProcessIDにはProcess32Nextなどで最後に得たプロセスIDが格納されるのですか?


351 名前:デフォルトの名無しさん :2005/05/10(火) 10:49:53
>>349
ファイル単位で監視っていうのは無かったと思う。

352 名前:デフォルトの名無しさん :2005/05/10(火) 10:58:45
>>349
ディレクトリの変更がきたら自分で調べりゃいいだろ

353 名前:デフォルトの名無しさん :2005/05/10(火) 10:59:49
なんでもかんでもAPIに無いと、何もできないのだろうか

354 名前:デフォルトの名無しさん :2005/05/10(火) 12:20:28
>348
ありがとうございます
しかしそれでは目的のテキスト(CB_SETCURSELでセットしたインデックスのテキスト)は一瞬表示されますが
それが選択状態にはならず元にもどってしまいます

なにかいい方法はないでしょうか

355 名前:デフォルトの名無しさん :2005/05/10(火) 12:30:30

>>353を晒し上げ(´,_ゝ`)

356 名前:デフォルトの名無しさん :2005/05/10(火) 12:40:49
>>354
他のイベントで変な事してるんじゃないのか?

357 名前:デフォルトの名無しさん :2005/05/10(火) 12:45:30
そのようなこともないと思います
新規で試しにワードパッドのフォントを変えるものを作ってみましたが
同様でした。

コードは
SendMessage((HWND)コンボボックスのハンドル,CB_SETCURSEL,77,0);
念のためそのコンボボックスの親ウィンドウに
SendMessage((HWND)親ウィンドウのハンドル, WM_COMMAND,MAKEWPARAM(165, CBN_SELCHANGE),(LPARAM)(HWND)コンボボックスのハンドル);
と送ってみましたがそれでもダメでした

358 名前:デフォルトの名無しさん :2005/05/10(火) 12:48:32
>>357
>新規で試しにワードパッドのフォントを変えるもの

新規で作って検証するなら、
ウィンドウにコンボボックスのみを貼り付けて、
そのコンボボックスに CB_SETCURSEL を送るだけじゃないのか?

って言うか、外部プロセスのコンボボックスを変えようとしている?

359 名前:デフォルトの名無しさん :2005/05/10(火) 12:50:06
申し遅れましたがその通り外部のプロセスのコンボボックスです。


360 名前:デフォルトの名無しさん :2005/05/10(火) 12:51:08
やはりこれもwin98で影響を受けたsetforeground同様の制限をもらってしまうのでしょうか?

361 名前:デフォルトの名無しさん :2005/05/11(水) 01:28:05
質問なのですが
Win32において
Destoryを実行した場合
Destoryを実行されたWindowが一番最後にうけとるメッセージはなんなのでしょうか?
WM_NCDESTROYが最後でいいのでしょうか?

私的ライブラリでGUIをクラスライブラリ化したのですが
ウィンドウが破棄されたタイミングで自身のインスタンスにたいして
delete thisを行いたいのです。

MFCのほうではPostNcDestroyなるメソッドがあるっぽいのですが・・・
Win32オンリーの場合はどのように対処したらよいのでしょうか?

362 名前:デフォルトの名無しさん :2005/05/11(水) 01:30:29
つspy++

363 名前:デフォルトの名無しさん :2005/05/11(水) 01:53:31
>>361
それで良いと思う。気になるならMFCのソースを見てコードをまねれ。

364 名前:デフォルトの名無しさん :2005/05/11(水) 06:52:22
DestroyWindowを実行すると、WM_DESTROY、WM_NCDESTROYの順番でメッセージが送られる
その後のWM_QUITはウィンドウプロシージャでは受け取らない
よって、NCDESTROYが最後にウィンドウが受け取るメッセージ

365 名前:349 :2005/05/11(水) 09:55:50
>>351-353
ありがとう。
無駄に重くなるけど、ディレクトリごと監視します。

>>350
ReadProcessMemoryの返り値はBOOLですよ。
0が返ってきたら、GetLastError()してエラーコードを見ましょうよ。

366 名前:デフォルトの名無しさん :2005/05/11(水) 11:59:41
>>365
あぁ?失敗したらヌルポが返るんだよデブ。もう原因わかったからどっか行っていいよ

367 名前:デフォルトの名無しさん :2005/05/11(水) 12:09:09
>>366
「ヌルポ」がcatchできないんですが^^

368 名前:デフォルトの名無しさん :2005/05/11(水) 13:30:36
>>366
まあしねよぶた

369 名前:デフォルトの名無しさん :2005/05/11(水) 14:28:27
StretchBltの縮小画質がありえないくらい
汚いんですが(ゴミが入るようなかんじ)、フリーか何かで代用のAPIないでしょうか?
教えてください


370 名前:デフォルトの名無しさん :2005/05/11(水) 14:31:15
何でもかんでも API って言えばいいと思ってる奴
             キタ━━━━(゚∀゚)━━━━ッ!!

371 名前:デフォルトの名無しさん :2005/05/11(水) 14:36:43
>>369
SetStretchBltMode はどのモードでやった?

372 名前:デフォルトの名無しさん :2005/05/11(水) 15:28:24
>>369
つ[DirectX]

373 名前:デフォルトの名無しさん :2005/05/11(水) 15:35:07
gdi plus

374 名前:デフォルトの名無しさん :2005/05/11(水) 16:14:07
IPicture::Render

375 名前:デフォルトの名無しさん :2005/05/11(水) 16:22:29
自前でリサイズしたら?

376 名前:デフォルトの名無しさん :2005/05/11(水) 16:57:48
誘導されてきました

フォルダの中のファイルの監視をしたいのですが
下のコードを実行して c:\test フォルダ内のファイルの内容を変更すると
メッセージボックスが二回表示されてしまいます。
変更は一回しかしていないのに二回でてしまうのですが
ここまでコードを短くしても出るので行き詰まってしまいました
二回検知してしまう動作が正しいのでしょうか?
どこかおかしくて二回出てしまうのならばご指摘お願いします。

HANDLE hFind = FindFirstChangeNotification( "C:\\test\0", FALSE, FILE_NOTIFY_CHANGE_SIZE );
if( hFind == INVALID_HANDLE_VALUE )
  return;

while( 1 )
{
  DWORD ret = WaitForSingleObject( hFind , INFINITE );
  if( ret == WAIT_OBJECT_0 )
  {
    MessageBox( NULL, "TEST", "Changed!", MB_OK );
    if( FindNextChangeNotification( hFind ) == 0 )
      return;
  }
}
FindCloseChangeNotification( hFind );


377 名前:デフォルトの名無しさん :2005/05/11(水) 17:54:36
>>376
変更手段によるかと。
例えばエディタの場合、一時ファイルを作ったりするから一回の変更と思っても
複数回ファイル操作が行なわれているかも。

実際、fopen(..., "w")を行なうと空のファイルができるのでこの段階で一回、
fclose()でバッファフラッシュが起きて一回、都合2回通知されることは実験で確認した。

378 名前:デフォルトの名無しさん :2005/05/11(水) 18:02:26
>>376
何でファイルを変更しているのか知らないけど、多くのソフトはファイルを一度
0 サイズにクリアしてから改めて書き込む (CreateFile() で CREATE_ALWAYS を
指定したり、fopen() で "w" を指定していたりなど) ので、
 1. 0 クリアで 1 回
 2. データの書き込みで 1 回
の合計 2 回、変更が検知される。
(試しに 0 バイトのデータを保存してみること)
さらに、ディスクキャッシュサイズごとに書き込むので、そのたびに
変更が検知される可能性もある。

379 名前:376 :2005/05/11(水) 18:40:25
>>377
>>378
そういうことだったのですか!よく分かりました。
ファイルが変更されたあとフォルダのサイズが変わる?ので二回きている
とか色々考えていました
ちなみにファイルはテイストファイルでnotepadで書き換えていました

でも二回くるのはどうしようもないですね
ちょっと厄介になってきましたが
上手く一回だけ処理できるよう試行錯誤してみます

ありがとうございました

380 名前:デフォルトの名無しさん :2005/05/11(水) 18:54:06
テイストファイル(・∀・)!! ワラタ!!

381 名前:デフォルトの名無しさん :2005/05/11(水) 18:57:14
>>380
箸が転がっても笑う人?

382 名前:デフォルトの名無しさん :2005/05/11(水) 18:59:37
>>381
いやそれはさすがに                                               笑う

383 名前:デフォルトの名無しさん :2005/05/11(水) 19:11:28
笑う(・∀・)!! ワラタ!!

384 名前:デフォルトの名無しさん :2005/05/11(水) 19:17:41
  _  ∩
( ゚∀゚)彡 ワラタ!!ワラタ!!
 ⊂彡

385 名前:デフォルトの名無しさん :2005/05/11(水) 19:18:55
ここはハッピーなインターネットですね?

386 名前:デフォルトの名無しさん :2005/05/11(水) 20:12:21
WAVEファイルに格納されているサンプリングデータを取得するには、
WAVEファイルを自前で解析するしか方法はありませんか?
WAVE ファイルを解析するための API はないのでしょうか?

387 名前:デフォルトの名無しさん :2005/05/11(水) 20:17:27
WaveOut

388 名前:デフォルトの名無しさん :2005/05/11(水) 20:33:09
そもそもWaveファイルにしてもBitmapファイルにしてもファイル構造はどっちも単純だろうに。

389 名前:デフォルトの名無しさん :2005/05/11(水) 20:35:59
>>386
標準のwavファイルならヘッダを取り除けば、あとは生のPCMデータのはずだけど。

低レベル再生したいのなら、>>387のWaveOut系APIでも使えば良い。
再生中に、サンプルデータも自由に処理できるしね。

高レベルAPIでいいなら、PlaySound()やsoundPlaySound()で。


390 名前:デフォルトの名無しさん :2005/05/11(水) 20:43:59
解析したいと言ってるのにPlaySoundはないだろうw
ところでMCIってまだあるのかな。
考えたら5年ぐらいマルチメディア刑API触ってないや

391 名前:デフォルトの名無しさん :2005/05/11(水) 20:47:12
>>389
waveファイルってRIFF形式だった気がするんだが。
mmio〜系のAPIで操作できる・・・はず

392 名前:デフォルトの名無しさん :2005/05/11(水) 20:48:47
>>389
> 標準のwavファイルならヘッダを取り除けば、あとは生のPCMデータのはずだけど。

PCMとは限らないんだけど。。。


393 名前:デフォルトの名無しさん :2005/05/11(水) 20:52:55
>>390
もちろん残ってる。Win95の頃と実装は変わってるようだけど。

394 名前:デフォルトの名無しさん :2005/05/11(水) 22:19:33
>>386
作るのが面倒臭かったらこんなの使ってみたら?
Wave File Library(Windows95/98/Me/プログラミング)
ttp://www.vector.co.jp/soft/win95/prog/se214677.html

395 名前:デフォルトの名無しさん :2005/05/11(水) 22:25:02
宣伝乙。
いやしかし、既成ライブラリに頼るというのはこの場合正解だよ。
WavOutは使いやすいとは言い難いしな。

396 名前:デフォルトの名無しさん :2005/05/12(木) 01:11:31
ピクチャーコントロールにDirectXで描画するダイアログベースのツールを作ろうとしているのですが、
ピクチャーコントロールの更新されるタイミングが分からず困ってます。
DirectXの描画特有の問題かとも思ったのでDXスレで伺ったのですが、
なかなかレス頂けないみたいなのでこちらにも失礼します。

まずはアプリ起動時にDXで適当な矩形でも表示してみようと、
WM_INITDIALOGで矩形描画関数を呼んでみたのですが、
一瞬描画されたあと、ピクチャーコントロールの色で塗りつぶされてしまうようでした。
なので、WM_PAINT内でも同じように描画関数を呼んで見たのですが相変らず
起動時に矩形を表示してくれません。
(というかピクチャーコントロールの描画で消されているような感じ。)
WM_LBUTTONDOWN内などで描画すればきちんと表示されるのですが、
WM_MOVE内で呼んだ時などは、一度目の移動では表示されず、
二度目以降の移動では表示されるという、よく分からない挙動になっています。
どうしたらいいのでしょうか?

環境はW2k、VC6、DX9.0bです。よろしくお願いします。

397 名前:デフォルトの名無しさん :2005/05/12(木) 01:58:25
>>396
まずはDirectX描画域の背景を描画しない設定にする。
ダイアログのスタイルにWS_CLIPCHILDRENを適用、
コントロール側のWM_ERASEBKGNDで0以外の値を返す
これでちらつき・上書きは消えるはず。


398 名前:デフォルトの名無しさん :2005/05/12(木) 02:18:11
Win32API を使用したプログラムを実行したときに、コマンドプロンプトを待たせない方法はないのでしょうか?

例えば、コマンドラインから notepad を起動したとき、

 C:\>notepad[改行]
 
 C:\>
 (notepad が開く)

となりますが、自作のプログラムでは

 C:\>hogehoge[改行]
 (hogehoge が終了するまで待機状態)

となってしまいます。
これを解決するにはどうすればよろしいのでしょうか?

399 名前:デフォルトの名無しさん :2005/05/12(木) 02:23:26
>>398
コンソールアプリでビルドしてないか?

400 名前:398 :2005/05/12(木) 02:28:36
ビルドというか、lcc-win32 でプログラムを作成し、

 C:\>lcc hogehoge.c
 
 C:\>lcclnk hogehoge.obj

というふうに実行ファイルを作成しています。
それとも、この環境では >>398 の問題を解決することは出来ないのでしょうか?

401 名前:デフォルトの名無しさん :2005/05/12(木) 02:46:14
Meadow2ってエディタについてくるfiber.exeってやつなら
C:\ > fiber.exe hoge.c  
ってすれば
「.c」拡張子のファイルをクリックした時に起動するプログラムがそのファイルを開いて
シェルにも処理がもどる。

402 名前:デフォルトの名無しさん :2005/05/12(木) 02:54:22
>>400
それは「Win32API」の話ではなく、特定の処理系の話なのでスレ違い

403 名前:398 :2005/05/12(木) 02:58:49
すみません、説明不足でした。

エディタのことではなくて、自分で作成(コンパイル)した Win32API プログラムを実行したときに、
そのプログラムが実行したままシェルにも処理が戻るようなプログラムを作りたいのです。

 C:\>lcc hogehoge.c
 
 C:\>lcclnk hogehoge.obj
 
 C:\>hogehoge

 C:\>
 (hogehoge.exe は実行されたまま)

となるような hogehoge.c を作りたいのですが、どうすればよろしいのでしょうか?
プロセスやスレッドについて調べてみても、どうもうまく行きません。

404 名前:デフォルトの名無しさん :2005/05/12(木) 02:59:28
void FreeConsole(void);


405 名前:398 :2005/05/12(木) 03:13:58
>>404
そんな関数があったんですね。
どうもありがとうございました!!m(_ _)m感謝感謝

406 名前:396 :2005/05/12(木) 03:38:07
>>397
ありがとうございます。

>まずはDirectX描画域の背景を描画しない設定にする。
>コントロール側のWM_ERASEBKGNDで0以外の値を返す

この二つの意味は同じでしょうか?別の事を指してますか?とりあえず
DirectXで描画したいのはダイアログ内に配置したピクチャーコントロールなのですが、
これをサブクラス化してその自前プロシジャ内に
case WM_ERASEBKGND:
return 1;
と追加してみたのですが、変わりませんでした。

>ダイアログのスタイルにWS_CLIPCHILDRENを適用、
これはピクチャコントロールが乗ってる親ダイアログのプロパティで設定しても変わりませんでしたし、
ピクチャコントロール自体にSetWindowLongでWS_CLOPCHILDRENを設定してみても変わりませんでした。


407 名前:デフォルトの名無しさん :2005/05/12(木) 03:47:08
犯罪予告祭り会場
http://ex10.2ch.net/test/read.cgi/news4vip/1115834824/

408 名前:デフォルトの名無しさん :2005/05/12(木) 04:03:08
>>398
今の状態だとエクスプローラから実行するとコンソールが開くんでないかい。
それで構わないのならFreeConsoleでも使ってればいいんだけど、
そうじゃないのなら、lcclnkのマニュアルをよく読んどけ。

409 名前:デフォルトの名無しさん :2005/05/12(木) 05:37:12
Win32APIの話っていうより
そもそもWindowsプログラミングの

410 名前:デフォルトの名無しさん :2005/05/12(木) 06:34:19
>>376
何をしたいのかによるけど、
通知を何度受けるかわからない
という前提で作ったほうがいいですよ。

また通知を受けるたびに処理をしてたら重くなるので、
通知を受けたら、変更があったということだけ覚えておき、
それに対するアクションはその場ではしないほうがいいです。

もし通知に対してアクションをしたいのであれば、
1秒くらい待ってからやったほうがいいかも。

411 名前:デフォルトの名無しさん :2005/05/12(木) 10:40:44
ウインドウのタイトルや枠などの色の取得方法を教えてください。


412 名前:デフォルトの名無しさん :2005/05/12(木) 11:18:49
GetSysColor

413 名前:デフォルトの名無しさん :2005/05/12(木) 12:26:40
文字列が正当なURLであるかどうかを確かめるAPIと、
URLからホスト名などを抜き出すAPIはありますか?

414 名前:デフォルトの名無しさん :2005/05/12(木) 12:31:00
>>413
使ったことは無いけど、

>文字列が正当なURLであるかどうかを確かめるAPI
::UrlIs()にURLIS_URLを渡して確認する。

>URLからホスト名などを抜き出すAPI
::UrlGetPart()にURL_PART_HOSTNAMEを渡して切り出す

415 名前:デフォルトの名無しさん :2005/05/12(木) 14:58:39
>>414
できました。
ありがとうございます。


#shlwapi.dllには、自前で書くこともできるけど、面倒くさいから書きたくない処理をする関数がたくさんある気がする。

416 名前:デフォルトの名無しさん :2005/05/12(木) 16:22:36
MSはレジストリを使うことを推奨してるのに
レジストリを使うアプリが嫌われる理由は何?

417 名前:デフォルトの名無しさん :2005/05/12(木) 16:42:40
ユーザーが消しにくいから。

インストールしたフォルダを削除しても消えないからね。
まあそれが利点でもあるんだけど。

418 名前:デフォルトの名無しさん :2005/05/12(木) 17:03:32
レジストリをいじりまくるとレジストリファイルが断片化・肥大化するから。
Win9xの場合はそれが原因で不安定になることがあった。

もういい加減過去の話だが。

419 名前:デフォルトの名無しさん :2005/05/12(木) 17:08:54
.NETではXMLで保存するのが推奨されるとかどこかで読んだ気がするんだけど

420 名前:デフォルトの名無しさん :2005/05/12(木) 17:41:01
ちょっとしたツールだと、フォルダごとコピーすれば設定もコピーできて楽。

421 名前:デフォルトの名無しさん :2005/05/12(木) 18:15:16
しかしファイルで保存するにしてもユーザーのフォルダにしてほしいなあ
自分ちのマシンならどこでもいいが・・・

422 名前:デフォルトの名無しさん :2005/05/12(木) 19:53:11
ユーザのフォルダに設定ファイルを置くと、
1つのフォルダごとコピー・移動・削除
では済まなくなるので、レジストリと大差ないんだよね。
その割には、メリットがない。

EXEと同じフォルダにINIファイルを置くのは、
シングルユーザ当たり前のDOS時代の悪い慣習を引きずってると思う。

レジストリにすれば、ファイルのインストール先を気にしなくていいし、
レジストリをバックアップすれば、一括して設定をバックアップできるよね。

423 名前:デフォルトの名無しさん :2005/05/12(木) 20:06:10
便乗で質問ですが、
ユーザーのフォルダの取得って何を使えばよいですか?
ユーザー毎の設定を\Documents and Settingsの奥深くにある
フォルダに置きたい。

424 名前:デフォルトの名無しさん :2005/05/12(木) 20:10:22
>>422
初心者の発想だね

425 名前:デフォルトの名無しさん :2005/05/12(木) 20:17:34
>>423
GetEnviromentVariableで環境変数HOMEPATHを取得
USERPROFILEでもいい

426 名前:デフォルトの名無しさん :2005/05/12(木) 20:23:18
2000、XPでもレジストリのコンパクションはできないから肥大化する一方

427 名前:デフォルトの名無しさん :2005/05/12(木) 20:37:49
>>425
ありがとう。

428 名前:デフォルトの名無しさん :2005/05/12(木) 20:41:31
なんだよ、レジストリってのは欠陥システムだな。

429 名前:デフォルトの名無しさん :2005/05/12(木) 20:42:21
ややこしいことが1つの売りだったんだよ
商用とかシェアウェアにとっては

430 名前:デフォルトの名無しさん :2005/05/12(木) 20:56:28
>>423,425

ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdnw2kcli/htm/AppSpecDesk5.asp

SHGetFolderPath() を使ったやり方が書いてある。
こっちの方が MS の推奨ということか?

431 名前:デフォルトの名無しさん :2005/05/12(木) 22:14:00
SH〜系ってなんかアバウトというか、信用ならねーって感じのAPI群だけど、
それがMS推薦っぽいね。

432 名前:デフォルトの名無しさん :2005/05/12(木) 23:35:08
なんていうかもうapi関数大杉('д`)

433 名前:デフォルトの名無しさん :2005/05/13(金) 00:29:19
>>426
レジストリのサイズは消せば小さくなると思うけど・・・
VS.NETをインストール中に、一時的にものすごく大きくなるけど、インストール終わると減るし。

>>424
他に良い方法があれば教えてください。

1つのINIファイルの中にユーザごとに設定を書くと、
一人の設定を他所に移すのが難しくなるよね。

ユーザ別にINIファイルを分けると、
ユーザ名が変わったときにファイル名を変更しないといけない。

ユーザ名の代わりにSIDを使うと、他所のドメインやPCに移したら困るし。



434 名前:デフォルトの名無しさん :2005/05/13(金) 00:52:58
>>433
キーや値を削除してもサイズが減らない、それがWINDOWSのレジストリ

435 名前:デフォルトの名無しさん :2005/05/13(金) 00:55:48
VACUUMかければいいじゃない

436 名前:デフォルトの名無しさん :2005/05/13(金) 01:39:36
>>435
詳しく

437 名前:デフォルトの名無しさん :2005/05/13(金) 01:42:17
そりゃPostgreSQL

438 名前:デフォルトの名無しさん :2005/05/13(金) 01:50:05
どうせレジストリがパンクする頃には
新ウィンドウズが出てるんだろ。
XPももう過去の物だろw

439 名前:デフォルトの名無しさん :2005/05/13(金) 04:05:29
Snes9xにキーの入力情報送りたいんだけど
SendMessageやPeekmessageでは矢印や
ABYXに相当するボタンの情報を送っても無反応です。
(F1や1等ゲームというよりSnesの機能に相当するものは動きます。)

(例えばキーボードのAにSnesのAを割り当ててSendMessage送っても効果なし)

なんかこれ解消するAPIないっすか?


440 名前:デフォルトの名無しさん :2005/05/13(金) 04:47:21
Peekは受ける側だったorzPostMessageね

441 名前:デフォルトの名無しさん :2005/05/13(金) 04:54:38
DirectInput使ってるからだろ。

442 名前:439 :2005/05/13(金) 05:37:47
どうにかならんもんですかね。


443 名前:デフォルトの名無しさん :2005/05/13(金) 05:56:07
SendInpu()とかはだめ?

444 名前:439 :2005/05/13(金) 06:14:58
試してみようと思ったらサンプル少ねぇ
MSいってみます

445 名前:439 :2005/05/13(金) 12:56:46
>>443
キタ*・゜゚・*:.。..。.:*・゜(゚∀゚)゚・*:.。. .。.:*・゜゚・*!!!!!
後世の為に置き去りメモ

SendInputを使う為にstdafx.hの中に

#define _WIN32_WINNT 0x0501
#define WINVER 0x0501

を宣言。呼び出したい場所で

UINT ret;
INPUT tt;
tt.ki.wVk=0x41;
tt.ki.dwFlags=0;
tt.ki.time=0;
tt.type=INPUT_KEYBOARD;
ret=SendInput(1,&tt,sizeof(INPUT));

押しっぱになるのでdwFlagsで適度に補正してやる必要あり。

446 名前:デフォルトの名無しさん :2005/05/13(金) 13:43:20
GetWindowThreadProcessIdなどで取得したプロセスIDのベースアドレスを求めるにはどうしたらいいのでしょうか?教えてくださいお願いします

447 名前:デフォルトの名無しさん :2005/05/13(金) 15:23:29
>>446
プロセスIDのベースアドレス
この時点で、何か間違ってるよ。

いったい何がしたいの?

448 名前:デフォルトの名無しさん :2005/05/13(金) 16:10:32
うるせぇカスだなぁ。わかんねぇならでしゃばんなよボケが。
readprocessで戻ってきたハンドルのベースアドレスだよタコ。ほんとお前みたいカスがくると気分悪くなるぜ。
お前のせいでまたこんなレスしてしまった俺は結局自分で解決するハメになると。ほんとうぜぇ・・・

449 名前:デフォルトの名無しさん :2005/05/13(金) 16:17:25
スレのレベルが急速に低下してまいりました。

450 名前:デフォルトの名無しさん :2005/05/13(金) 16:18:10
お前が読み取りを始めたいアドレス=ベースアドレス(ReadProcessMemory()では)。
プロセスID→プロセスハンドルにはOpenProcess()がある。

451 名前:デフォルトの名無しさん :2005/05/13(金) 16:26:00
だからReadProcessMemoryで指定するベースアドレスがわかんねぇから教えろっつってんだよ。あ?わかんねぇんだろ?お?あぁ?コラ

452 名前:デフォルトの名無しさん :2005/05/13(金) 16:27:23
      __ ┌┬┬┬┐ __
    ―――┴┴┴┴┴―――――、
   /.  ̄ ̄ ̄//. ̄ ̄| || ̄ ̄ ̄||| ̄ ||     __________
  /.    ∧// ∧ ∧|.||      |||   ||  /
 [/____(゚_//[ ].゚Д゚,,) ||___|||   || <  >>448,451を迎えに来ました
 ||_. *  _|_| ̄ ̄ ∪|.|.       .|ヽ. _||  \__________
 lO|o―o|O゜.|二二 東|.|京 精神 .病院 ||
 | ∈口∋ ̄_l__l⌒l_|_____|_l⌒l_||
   ̄ ̄`ー' ̄   `ー'  `ー'   `ー'


453 名前:デフォルトの名無しさん :2005/05/13(金) 16:52:25
>>451
お前がやりたいこと次第。

454 名前:デフォルトの名無しさん :2005/05/13(金) 17:03:08
おまえらわかんねーならレスするなつってんだろ!

455 名前:デフォルトの名無しさん :2005/05/13(金) 17:10:11
>>454
ごめんよ、おれもわかんねーや

456 名前:デフォルトの名無しさん :2005/05/13(金) 17:57:30
>>454
http://www.microsoft.com/japan/msdn/subscriptions/resources/additionalincident.aspx
http://www.microsoft.com/japan/msdn/subscriptions/resources/support.aspx


457 名前:デフォルトの名無しさん :2005/05/14(土) 01:12:53
おいおい、騙りを何相手してやってんだ?

458 名前:デフォルトの名無しさん :2005/05/14(土) 04:00:39
うるせーよ。煽りたいだけのやつはしゃしゃりでんなよカスどもが
ほんと使えねーなー

459 名前:デフォルトの名無しさん :2005/05/14(土) 04:10:02
リソースエディタで作ったダイアログ内のボタンコントロール上に
矩形を描画しようとしているのですが、全く表示されません。
TextOutしてみても何も文字が表示されません。
どこがおかしい部分があるでしょうか?
何か他の部分で、ここがあやしそう、などありましたら教えてください。

hdc=GetDC(hWnd);//hWnd=GetDlgItemで取得したボタンのハンドル
hPen=CreatePen(PS_SOLID,1,RGB(r,g,b));//rgbは適当な値が入ってる
hBrush=CreateSolidBrush(RGB(r,g,b));
SelectObject(hdc,hPen);
SelectObject(hdc,hBrush);
Rectangle(hdc,0,0,100,100);
TextOut(hdc,0,0,"iii",3);

460 名前:459 :2005/05/14(土) 04:22:41
WM_PAINT内でやったらうまくいきました。
WM_INITDIALOG内でやってたのでダメだったようです。

461 名前:459 :2005/05/14(土) 05:02:09
度々すいません。やはり挙動が変です。
今までデバイスコンテキストの取得はGetDCを使ってたのですが、
GeginPaintとかいうのを使った方がいいらしいので書き換えました。
ですが、ダイアログ起動時に四角形は描画されるものの、ボタン自体が描画されません。
ボタンの部分を押してみるとボタンは出現するのですが、
今度は四角形が消えてしまいます。どうしたらよいのでしょうか。

//ダイアログのプロシジャ内
case WM_PAINT:
DrawRect(GetDlgItem(hWnd,IDC_BUTTON),100,100,0);
return FALSE;

//矩形描画関数
void DrawRect(HWND hWnd,int r,int g, int b){
PAINTSTRUCT paint;
HDC hdc;
HBRUSH hBrush;
RECT rct;
GetClientRect(hWnd,&rct);//hWnd はボタンのハンドル
hdc=BeginPaint(hWnd,&paint);
hBrush=CreateSolidBrush(RGB(r,g,b));
SelectObject(hdc,hBrush);
Rectangle(hdc,4,4,rct.right-5,rct.bottom-5);
EndPaint(hWnd,&paint);
ReleaseDC(hWnd,hdc);
DeleteObject(hBrush);
}

462 名前:デフォルトの名無しさん :2005/05/14(土) 06:47:52
>>446
ほんとここの無知どもはウザイよね。
おまえの気持ちはよくわかる。
特に>>449の馬鹿は、わかんねーのに答えるからレベル低下してるってのが
どうやら理解できないらしい。

というわけだから、わかるおれが答えてあげよう。
全部説明するとなると大変なのでかいつまんで言うと、
まずプロセスといっても中で実行されてるのはスレッドという単位だ。
つまりプロセスで実際に動いているスレッドを特定する必要がある。
これはいろんな方法があるので別途AdvancedWindows読むなり
すればわかる。PSAPIとかでググるのもいいかも。
スレッドを特定するまでできたら、そのスレッドに対して一旦
SuspendThreadなりで停止させ、GetThreadContextを呼ぶ。
すると現在の正確なEIPが得られる。

EIPが得られたら、そのアドレスからこんどはプロセスに
割り当てられているメモリのベースアドレスを特定する。
メモリのチェインをたどっていけばEIPの範囲に収まる
ブロックが見つかるはず。
それが質問のベースアドレスということになる。
まあPSAPIを使わなくても、たとえば普通のアプリなら
0x400000以降がベースアドレスだとか決め打ちされてる。
もちろんこの辺を細工しているアプリもある。
これの特定はプロセスにロードされているコードセクションの
PEヘッダ部分を見るのが手っ取り早い。
一番早いのは、そのプロセスに侵入してしまうという方法。
この辺のやり方の詳細を知りたいなら、やっぱり
AdvancedWindowsを読んどくのが良い。

463 名前:デフォルトの名無しさん :2005/05/14(土) 07:13:03
結局AdvncedWindows嫁って結論になったけど、
プロセス・スレッド周りの質問は説明しようとすると長くなるからね。
こんな糞スレだと、その説明が正確とも限らないし。
とりあえずやり方だけでも知っとけば道は開ける。
やっぱあの本の存在は偉大なんだよなあ。

ちなみにAdWinにはPEヘッダの読み方は載ってないので、
その辺はWebか何かで調べるしかない。
pe formatかなんかでぐぐれば出てくる。
PEヘッダの構造を理解するのにはかなり時間がかかると思うけど、
プロセスを解析する近道はPEヘッダなので、この辺はぜひ調べて欲しい。

464 名前:459 :2005/05/14(土) 08:41:54
いろいろ試してるのですが解決しないので
簡略化してUPしました。ソースとVC6のリソースが入ってます。
おかしい所を指摘していただけると助かります。

ダイアログ内にボタンが二つあります。
起動時にボタンの上に白い四角が表示されるのが理想なのですが、
なぜかボタン自体が描画されません。
ボタンを押すと色選択ダイアログが開き、
選択した色の四角がボタンの上に表示されるようにしたいです。
ですが、このサンプルではなぜか、一方のボタンで色を選択すると
もう一方のボタンの上の四角が消えてしまいます。
常に表示されているようにしたいです。
よろしくお願いします。

ttp://gamdev.org/up/img/2660.zip

465 名前:デフォルトの名無しさん :2005/05/14(土) 08:50:44
>>461
ボタンはダイアログの子ウィンドウ。
WM_PAINTが来たのはダイアログであって、ボタン(子ウィンドウ)に来たわけではない。
だからそのコードは不正。

で、そういうことがしたければオーナードローしなさい。

466 名前:デフォルトの名無しさん :2005/05/14(土) 08:53:32
>>464
>おかしい所を指摘
あんたの頭。

以下解説を書こうとしたら>465に先を越されたので割愛。

467 名前:デフォルトの名無しさん :2005/05/14(土) 12:05:12
>>464
オーナードローの他に、サブクラス化すると言う手もある。
どちらも詳細はググルか ttp://www.kumei.ne.jp/c_lang/ 辺りを探せ。

468 名前:デフォルトの名無しさん :2005/05/14(土) 12:11:23
>>448
> うるせぇカスだなぁ。わかんねぇならでしゃばんなよボケが。

人に文句つける前に、自分の日本語を見直せよ。

[ >>446より ]
> プロセスIDのベースアドレスを求めるには

・プロセスID
  プロセスを一意に識別するための識別子

識別子にベースアドレスなどない。
君の質問は、

 「整数値 1 のベースアドレスを求めるにはどうすればよいか?」

などと言っているのと大差ない。
日本語は正しく使え。

469 名前:デフォルトの名無しさん :2005/05/14(土) 12:48:59
>>462-463
ありがとうございます。

>>468
カスは黙っとけ(プw

470 名前:デフォルトの名無しさん :2005/05/14(土) 12:59:53
質問です
ウィンドウを何よりも最前面に表示するにはどうすればいいのでしょうか?
DirectDraw等で全画面+最前面になってる物のさらに上に表示したいです
普通に最前面にしただけでは無理でした orz

471 名前:459 :2005/05/14(土) 13:09:56
>>467
サブクラス化はボタン一個ずつに対してプロシジャ作るのが面倒くさいからやめました。
ボタンを押したらColorChooserダイアログを出して色を選択し、
ボタン上の四角に反映させたかったのですが、
押された後ではボタンのイベントは発生しないので、
オーナードローでは次に押すまで色が反映されないのでダメでした。
結局、消極的な方法で妥協しました。ありがとうございました。

472 名前:デフォルトの名無しさん :2005/05/14(土) 13:28:52
DirectDrawサーフェイスの前に持ってくるにはクリップするしかない

473 名前:デフォルトの名無しさん :2005/05/14(土) 13:51:58
質問です。

@ウインドウ作成してアクティブな状態にする
Aマウスでウインドウ外をクリックして非アクティブにする
Bタイマーで定期的に ShowWindow や SetForegroundWindow などを呼ぶ

AとBを繰り返すと、一回目は最前面にウインドウが表示されるのに、2回目以降は最前面に表示されません。
どうすれば最前面に表示することが出来るのでしょうか?

よろしくお願いします。


474 名前:デフォルトの名無しさん :2005/05/14(土) 14:04:12
>>473
CreateWindowEx(WS_EX_TOPMOST, ...

>>470のような高度な要求をしなければこれでいい。


SetForegroundWindow()は2000/XPで挙動が変更されたはず。

475 名前:470 :2005/05/14(土) 14:24:43
>>472
まえゲームで全画面+最前面なものをしてたときに、
なんかの拍子で、最前面表示してた後ろのWinampがゲーム画面内にずっと表示されたままになったので
なにかほかに方法があるのかなと思ったのです orz
#Winampは再生中の時間もちゃんと表示され操作も可能でした

476 名前:デフォルトの名無しさん :2005/05/14(土) 15:18:29
>>475
ttp://saw.minidns.net/software/index.html#soft09
こーゆーの使うとかじゃ駄目か?

477 名前:470 :2005/05/14(土) 15:41:59
>>476
某MMORPG用のツールなので窓化はむりぽいです
公認ツールとして交渉中なので orz

478 名前:デフォルトの名無しさん :2005/05/14(土) 19:22:54
ゲームのウィンドウをオーナーに指定する
DirectDrawSurfaceはGDIのクリッピング領域に従わないと思うから
ちゃんと描画されない気がするけど

479 名前:デフォルトの名無しさん :2005/05/14(土) 19:30:28
だからDirectDrawClipperでやるしかないって

480 名前:デフォルトの名無しさん :2005/05/14(土) 21:57:59
>>471に亀レス

> ボタンを押したらColorChooserダイアログを出して色を選択し、
> ボタン上の四角に反映させたかったのですが、
そういうボタンならサクラエディタなるオープンソースのテキストエディタに
あるからソースを参照にしてみるのはどうかな?
ちなみにサクラエディタではオーナードローで描画してるよ。

> 押された後ではボタンのイベントは発生しないので、
> オーナードローでは次に押すまで色が反映されないのでダメでした。
これはどこかソースがまずいんじゃない?

オーナードローは大した手間ではないし、コントロール上で自分の
好きなように描画する定石なんで知ってて損は無いよ。

あと、
> サブクラス化はボタン一個ずつに対してプロシジャ作るのが面倒くさいからやめました。
こいつは実装次第でどうにでもできる。

481 名前:デフォルトの名無しさん :2005/05/14(土) 22:53:41
ReadProcessMemoryなんていうスケベなAPIを使うのに、
自力で使いこなせないようなレベルの低い香具師って、
ろくでもないことをやろうとしている人間の屑だろうな。

どうせゲームのチートツールやウィルス等の怪しげなものを作ろうとしてるんだろ?

いいかげんウザイので、答えを教えてやる。
VirtualQuery()だ。
もうこのスレに出てくるなよ。

482 名前:デフォルトの名無しさん :2005/05/15(日) 09:49:47
>>481
カスが必死にググッてその様かwwwwwそんなもん質問する前から知ってますがwwwwwwwいい加減カスは黙ってチンポでも弄ってろwwwww

483 名前:デフォルトの名無しさん :2005/05/15(日) 09:53:03
最近w使う人増えたね。

484 名前:デフォルトの名無しさん :2005/05/15(日) 10:51:41
Windows, DWORD, WM_*

485 名前:473 :2005/05/15(日) 11:02:32
>474
レスサンクス
早速試してみましたが駄目でした


486 名前:デフォルトの名無しさん :2005/05/15(日) 11:15:18
>>485
SetWindowPosでHWND_TOPMOS指定したら?

487 名前:デフォルトの名無しさん :2005/05/15(日) 12:04:33
レスサンクスと書かれると、less thanks と読んでしまう。

488 名前:デフォルトの名無しさん :2005/05/15(日) 12:48:46
GetLastErrorの使い方がわかりません

489 名前:デフォルトの名無しさん :2005/05/15(日) 12:52:49
MSDNに載ってます

490 名前:デフォルトの名無しさん :2005/05/15(日) 13:00:50
使い方は載ってません

491 名前:デフォルトの名無しさん :2005/05/15(日) 13:05:41
>>490
プログラムなんかやめたほうがいいよ

492 名前:デフォルトの名無しさん :2005/05/15(日) 13:28:36
載ってます

493 名前:デフォルトの名無しさん :2005/05/15(日) 13:57:40
msdnのトップに出てる赤シャツの男って凄い頭よさそうだよな。
腕組みながらあの自信に満ち溢れた顔なんかとくに。

494 名前:デフォルトの名無しさん :2005/05/15(日) 15:11:36
どうも、赤シャツの男です。

495 名前:デフォルトの名無しさん :2005/05/15(日) 15:18:03
>>494
IQいくつ?

496 名前:デフォルトの名無しさん :2005/05/15(日) 15:25:09
80−130です

497 名前:デフォルトの名無しさん :2005/05/15(日) 15:43:31
血圧かよ!

498 名前:デフォルトの名無しさん :2005/05/15(日) 16:13:14
漏れのIQは 10D10+5 だぜ。

499 名前:デフォルトの名無しさん :2005/05/15(日) 17:56:00
期待値で60…低っ

500 名前:デフォルトの名無しさん :2005/05/15(日) 18:00:55
急速にスレの質が低下してまいりました


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