Win32API質問箱 Build122 at TECH
Win32API質問箱 Build122 - 暇つぶし2ch200:デフォルトの名無しさん
16/04/22 16:08:23.80 4ikocpMD.net
最後に出てくる「.」以降が拡張子。2文字もあれば6文字もある。

201:デフォルトの名無しさん
16/04/22 16:08:31.56 V7gBXlAq.net
拡張子3文字じゃない場合どうするつもりか知らないけど、好きに作ればいいよ

202:デフォルトの名無しさん
16/04/22 16:14:45.73 msF6wRol.net
読み込みたいって事は拡張子わかってるんじゃないの?

203:デフォルトの名無しさん
16/04/22 17:20:58.53 xOnwNmiP.net
>>196
.で終わってるファイルとか
.を含まないファイル名のときは?

204:デフォルトの名無しさん
16/04/22 17:38:18.46 +7c/qlM5.net
拡張子がないってこと以外に何かある?

205:デフォルトの名無しさん
16/04/22 17:42:35.47 YFuTfo2Y.net
>>199
>.で終わってるファイルとか
Windowsは.で終わってるファイルってのは認めていない
Windows環境下で作成しようとするとピリオド無しでファイルが作られる
>.を含まないファイル名のときは?
.を含まないファイル名は拡張子無し
拡張子を持たないピリオドを含むファイルってのは作れない
ピリオド以降を拡張子として認識してしまう

206:194
16/04/22 18:38:44.93 8YNH+QmN.net
いろいろ調べた結果PathFindExtensionを使うことがわかりましたが
ビルドが通りません
1>main.obj : error LNK2019: 未解決の外部シンボル __imp__PathFindExtensionW@4 が関数 _WinMain@16 で参照されました。
fatal error LNK1120: 外部参照 1 が未解決です。
URLリンク(ideone.com)
何が悪いのでしょうか?教えてください

207:デフォルトの名無しさん
16/04/22 19:15:23.54 4ikocpMD.net
#pragma comment(lib, "Shlwapi.lib")

208:デフォルトの名無しさん
16/04/22 23:12:03.91 8YNH+QmN.net
ありがとうございます、ビルドはできました
ですが拡張子を抽出することができません
GetCommandLine関数の返り血にスペースやダブルクォーテーションが含まれているのが問題だと思うんですが
C++のReplaceメソッドで置き換えしようとしてもLPTSTRからString型に変換するほうほうがわかりません
こういう場合どうすればいいんですか?

209:デフォルトの名無しさん
16/04/22 23:22:20.50 o1lCaFi5.net
諦めたらいいと思うよ

210:片山博文MZ ◆T6xkBnTXz7B0
16/04/22 23:38:04.60 ixsqd3SA.net
C++勉強してCStringのソース読めや。
__argc、__wargv、wcsrchrなんてのも使えるかもしれん。

211:203
16/04/23 05:57:01.65 UoCDvxkd.net
型変換がむずかしすぎます
嫌がらせのように文字列型があってなんで型変換のメソッドが用意されてないんですか?

212:デフォルトの名無しさん
16/04/23 07:32:43.16 1OvIZwV0.net
>>195
ファイル名の長さを調べて
ポインタを最後尾にする
ポインタを1文字すつ前に移動して最初に「.」があれば(略
>>207
asmoのソース参考にすればいい

213:デフォルトの名無しさん
16/04/23 07:51:54.45 1OvIZwV0.net
using std::string;
string get_file_prefix(const std::string& filename) {
string temp(filename);
string::size_type pos = temp.find_last_of(".");
if (pos != string::npos) {
temp = temp.substr(0, pos);
}
pos = temp.find_last_of("/\\");
if (pos != string::npos) {
temp = temp.substr(pos + 1);
}
return temp;
}
ex)
string in_filename(argv[1]);
string prefix = get_file_prefix(in_filename);

214:デフォルトの名無しさん
16/04/23 14:36:18.35 Ny1JsAlg.net
LPTSTRって何だっけ?

215:デフォルトの名無しさん
16/04/23 14:43:34.37 qkM7UD7C.net
#ifdef UNICODE
wchar_t *
#else
char *
#endif

216:デフォルトの名無しさん
16/04/23 14:45:32.47 43LRl8T1.net
NULLターミネートするTCHAR配列(TSTR)へのlong pointer(LP)

217:デフォルトの名無しさん
16/04/23 15:41:39.82 Ny1JsAlg.net
ああ、tcharで使うやつか
思い出した
他にも似たやうな名前のがあるよな
LPCTWSTRみたいな。
わけわかめだ

218:デフォルトの名無しさん
16/04/23 15:49:55.48 ob/Sewtp.net
LPTSTR と LPCTSTR のふたつくらい、君のキャパでも憶えられるだろ。
あとは気にしないでいい

219:デフォルトの名無しさん
16/04/23 15:55:31.31 Ny1JsAlg.net
おれはwchat_tしか使わないから。

220:デフォルトの名無しさん
16/04/23 16:35:07.30 ra5UaJir.net
>>213
LP=ロング・ポインタ
C=コンスト
T=テンプレート
W=ワイド
STR=ストリング
LPCTWSTR=ロング・ポインタ・コンスト・テンプレート・ワイド・ストリング
俺はこんな感じで覚えてる
ていうかLPCTWSTRなんてあったっけ?、テンプレートとワイドは共存しないとおもうが・・
LPCTSTRだろう

221:片山博文MZ ◆T6xkBnTXz7B0
2016/04/2


222:3(土) 16:39:45.15 ID:IdUKJjCp.net



223:デフォルトの名無しさん
16/04/23 17:05:51.57 7b5nyUqS.net
テキストとストリングって、上野クリニック案件になっちゃわない?

224:デフォルトの名無しさん
16/04/23 17:23:31.69 SujJgXyp.net
関数はA/W/無印なのに文字、文字列は無印/W/Tで一貫性がないよな

225:デフォルトの名無しさん
16/04/23 17:35:19.88 SujJgXyp.net
WinMain関数は無印,w,_tでCRT風だしで更にカオス
猫でも分かるなんかのうんこサイトは使い分けすらしておらず
初心者を陥れる為にわざとやってるのかと思うほどだわ

226:デフォルトの名無しさん
16/04/23 18:19:36.74 lEfknhOE.net
あれは本題部分のみ参考にするとこだろ

227:デフォルトの名無しさん
16/04/23 18:43:01.46 QugQUSQO.net
気にしたことなかったけど、確かにそうだな。
まともにソース読む気が起こらないし、読んだこともない。

228:デフォルトの名無しさん
16/04/23 18:50:54.27 ra5UaJir.net
>>217
え、そうなの?
なんかのサイトでテンプレートだと書いてあって、CP932でもUnicodeでも対応できる
ということで鋳型という意味のテンプレートだという説明だったので納得してたんだが

229:デフォルトの名無しさん
16/04/23 18:56:18.55 e6EoTGG4.net
>>213
TとWが同時に付くことはないはず

230:デフォルトの名無しさん
16/04/23 18:58:15.98 e6EoTGG4.net
>>215
これから作るのは全部それで良いよね

231:デフォルトの名無しさん
16/04/23 19:00:48.56 e6EoTGG4.net
>>216-217
TCHAR *fuga = _T("fuga");
wchar_t *hoge = L"hoge";
だっけ
_T は TEXT だよなー

232:片山博文MZ ◆T6xkBnTXz7B0
16/04/23 19:01:10.72 IdUKJjCp.net
>>223
あっしは汎用テキストのTだと理解してたが。

233:デフォルトの名無しさん
16/04/23 20:55:00.69 ra5UaJir.net
>>226
うん。_TのTはText、TCHARのTはテンプレートだと思ってる
>>227
UNICODEの定義によってCP932またはUNICODEにはめ込むことができるので
テンプレート(鋳型)という説明が一番しっくりくると思う

234:デフォルトの名無しさん
16/04/23 21:42:13.74 8PouUri8.net
普通に Type の T じゃね?

235:デフォルトの名無しさん
16/04/23 22:44:03.32 X/qVSAL9.net
>>208
ありがとうございます
一応LPTSTR→char *型への変換もできるようにがんばってみます

236:203
16/04/23 22:44:43.88 X/qVSAL9.net
LPWSTR→char *型への変換でした・・・

237:デフォルトの名無しさん
16/04/23 22:53:53.23 K7zZdQrl.net
>>226
_Tは_TEXTの省略形。

238:デフォルトの名無しさん
16/04/23 23:41:57.72 ra5UaJir.net
>>229
wchar_tの最後のtはtypeのtだそうだけどね
TCHARのTがTYPEだとUNICODEの定義の有無によってCP932またはUNICODEにという
情報が名前に反映されてないことになるのでおかしいのではないかな

239:デフォルトの名無しさん
16/04/24 00:36:28.24 5jPfs9BP.net
URLリンク(msdn.microsoft.com)
type を抑えてtemplate を推したくなるような記述は見当たらないような

240:デフォルトの名無しさん
16/04/24 01:00:59.35 jZ3tR2YK.net
>>234
"generic type"が鍵になりそうだな
1)generic typeでT(つまりtypeのT。但し、ただtypeでなくgeneric typeを表すT)
2)generic typeなので、その性質を一言で表すtemplateのT
この2種類が考えられそうだ

241:デフォルトの名無しさん
16/04/24 01:01:33.13 PmTKsIVl.net
あるサービス(hoge.exe)の起動を待機したいのですが可能でしょうか?

242:デフォルトの名無しさん
16/04/24 01:25:39.75 WUvyiW4J.net
タスクスケジューラでも使えば?

243:デフォルトの名無しさん
16/04/24 03:37:41.55 PmTKsIVl.net
そんなの使わなくてもできました

244:デフォルトの名無しさん
16/04/24 07:43:52.20 fu8W/E1c.net
>>233
templete って枠のことでしょ
TCHAR とか LPCTSTR 全体を言うならまだわかるけど T を templete って言うのは無理があるような気がする

245:デフォルトの名無しさん
16/04/24 09:22:15.37 TYncJpKd.net
wchar_t の


246:t が text の t だとしたら size_t の t は何だろ? 同じ種類のものではないの? 何の略かはわからんけど…



247:デフォルトの名無しさん
16/04/24 09:27:07.20 TYncJpKd.net
ごめん、よく読んでなかった
type の t が一番納得できるな

248:デフォルトの名無しさん
16/04/24 11:39:52.17 zKXhuchC.net
int64_t

249:デフォルトの名無しさん
16/04/24 16:31:23.37 8sLUoClv.net
>>241
URLリンク(faithandbrave.hateblo.jp)
俺はまったくもって納得できん
wcharを予約語にしてwchar_tはtypedefで残せばよかったのになー
WinSDKにしてもaffixはどうでもいいけどどれかに統一して
AMessageBox(=MessageBox)/WMessageBox/TMessageBox
ACHAR(=CHAR)/WCHAR/TCHAR
とでもしときゃよかったのになーと心底思うよ
そういうものだと割りきるしかないんだけど

250:デフォルトの名無しさん
16/04/24 16:50:26.02 zKXhuchC.net
localeのUTF-8化を頑なに拒んでる時点で

251:デフォルトの名無しさん
16/04/24 16:55:02.71 TYncJpKd.net
wchar_tは、C++03の予約語(言語仕様)だろ
基本型をtypedefすることはない
C++11では、char32_t とか char64_t とかも追加されてる

252:デフォルトの名無しさん
16/04/24 16:56:04.06 TYncJpKd.net
間違えた
char16_t と char32_t だった

253:デフォルトの名無しさん
16/04/24 21:06:36.67 8sLUoClv.net
>>244
でもその糞さのお陰で雇用も生みだしてるんだろうしね
正直U8,U32は欲しいところ
>>245
> wchar_tは、C++03の予約語(言語仕様)だろ
だからそれが納得できないって言ってるのだが…
予約語なら_tいらんだろと。
_t付けたいならtypedefでいいだろと。
ついでに言えばs16,u16でいいだろと。

254:デフォルトの名無しさん
16/04/24 21:19:50.47 CBUFfK5a.net
言語の予約語に_tとかついてるのは嫌で仕方ない
size_tとかwchar_tとか
予約語はシンプルであるべきだ

255:デフォルトの名無しさん
16/04/24 21:26:38.72 TYncJpKd.net
static_cast、const_cast、dynamic_cast、reinterpret_cast とか
thread_local とか static_aseart なんてのもあるな

256:デフォルトの名無しさん
16/04/24 21:28:31.96 TYncJpKd.net
static_assert

257:デフォルトの名無しさん
16/04/24 22:08:20.08 k3Kd32U9.net
>>248
駄々こねるのもいい加減にして下さい
size_tじゃなくてsizeに出来たらさぞかし素晴らしかったでしょうねw

258:デフォルトの名無しさん
16/04/24 22:12:22.95 HGS+mIYq.net
全世界のソースコード修正祭りが開催されて何億円という損失だな素晴らしい

259:デフォルトの名無しさん
16/04/24 22:56:43.97 GQXrb8zO.net
予約語の追加はかなりでかい破壊的変更になるからね
C#とか新しい順C++では文脈キーワードで対処してるけどさすがに型名は追加できんだろう

260:デフォルトの名無しさん
16/04/25 06:11:32.16 IJUNQlfS.net
>>248
それ以前に言語仕様で規定されてる sizeof の戻り値の型が typedef って言うのに違和感がある

261:デフォルトの名無しさん
16/04/25 13:56:35.15 HSarKqaj.net
そもそも、size_tは予約語か?
size_tはtypdedefで定義されていて、32bitアプリと64bitアプリで切り替わるようになっているんだぞ
wchar_tとは事情が違うだろ
だから>>247>>248の流れはおかしい
主に>>248がおかしい

262:デフォルトの名無しさん
16/04/25 19:23:57.38 Frw0Qt8a.net
本来ならwcharだけで予約されるべきところということか

263:デフォルトの名無しさん
16/04/25 19:38:55.15 jv7QqRvk.net
wchar を予約語にしておいてCとの互換性にはtypedef wchar wchar_t のようにしておけばよかったのにと思うけど
wchar を予約語に出来ない理由ってなんかあったっけ?

264:デフォルトの名無しさん
16/04/25 22:50:55.52 R+Ez/oiI.net
>>255
予約語のwchar_tとそうでないsize_tが同じ形式というのがそもそもおかしい

265:デフォルトの名無しさん
16/04/25 23:03:21.85 jv7QqRvk.net
size_tはおかしくないんだからsize_tを引き合いに出すのはおかしい

266:デフォルトの名無しさん
16/04/26 01:37:24.15 MYWP6CaR.net
>>234
"T"=????=generic type
"W"=Wide=Unicode type("W"がWideなのは他のドキュメントからわかる)
で、そのドキュメントには"W"がWideとは書いていないと同時に"T"が何なのかも
書いていないので、"T"がtemplateの可能性は排除できないだろうと思うがどうだろうな
template推しのサイト↓
URLリンク(vllv.us)
「TemplateとはC++のテンプレートから来ており、『型の変化に適応する』という意味が入っています。」
(『マルチバイトとユニコード両方で通用する書き方』項目の最後の文)
LPCTSTR=Long Pointer to Constant null-terminated Template STRingの略です。
と言い切っているのは興味深い

267:デフォルトの名無しさん
16/04/26 02:48:18.10 GOCkX5ww.net
Lサフィックスをマクロなんて書いてる個人サイト持ち出されてもな

268:デフォルトの名無しさん
16/04/26 02:48:44.74 GOCkX5ww.net
プレだった

269:デフォルトの名無しさん
16/04/26 03:18:04.61 R8utnF8M.net
URLリンク(www.wdic.org)
によると、Cでは(勝手にしてない限り)予約語ではない
c++はその名残、が妥当かと

270:デフォルトの名無しさん
16/04/26 03:30:36.17 R8utnF8M.net
ごめん、>>263 はなんか書いてること変だった
無視してくれ

271:デフォルトの名無しさん
16/04/26 14:16:03.38 zelw3Bet.net
ビットマップファイルを読み込む時に使うのはLoadBitmap
では、書き込む時に使うのは?

272:デフォルトの名無しさん
16/04/26 14:28:33.59 MYWP6CaR.net
>>261
Lプレフィックスをマクロなんてどこに書いてあるの?
どこにも見当たらなかったが・・

273:デフォルトの名無しさん
16/04/26 14:30:13.15 gGelNJu8.net
それはファイルI/Oとは違うから対となる書き込み機能は無いよ

274:デフォルトの名無しさん
16/04/26 14:33:30.69 p/TmI1mb.net
CImage::Save

275:デフォルトの名無しさん
16/04/26 14:40:17.40 zelw3Bet.net
>>267-268
windows.hの中にはないんですね。
対になる機能がないのが不思議。

276:デフォルトの名無しさん
16/04/26 14:46:48.74 gGelNJu8.net
いや、LoadBitmapはファイルじゃなくて”リソース”から読み込むのであってな。
書き込みはあってもいいかも知れんけど、バイナリ変形するし元に戻せなくなったら詰む。
ビットマップファイルのI/OはLoadBitmapじゃなくて、ファイルI/Oでやって下さい。

277:デフォルトの名無しさん
16/04/26 14:52:10.27 KUbgmjPe.net
気の利いたライブラリを探せば jpeg, png 使えるから
bmp なんか捨てたほうがいい

278:デフォルトの名無しさん
16/04/26 15:48:01.84 hodGhGMX.net
>>266
> 一番上のL

279:デフォルトの名無しさん
16/04/26 15:48:57.83 hodGhGMX.net
>>266
> 一番上のL"文字列"はユニコード限定の文字列ですよ、という
> 意味を表すマクロなので設定をマルチバイトに変更するとエラーになります。
一般的なブラウザを使っているなら
Ctrl-F 押すとページ内が検索できるようになるから
それで マクロ を検索してごらん
てかそのサイトは信用しないほうがいいと思うよ
> ちなみにLはLiteral(リテラル)の略で文字通りのとかいう意味です。
と断言してるとこは説得力なくて笑っちゃったよ
""だってナローリテラルだし他のu8"",u"",U""もリテラルなのに変じゃないか
引用元もないしで本人が思い込んでるだけじゃね?と不安になる

280:デフォルトの名無しさん
16/04/26 16:11:13.64 xq7hrZNz.net
>>265
読み込みも含


281:めてWICでやるのが一番いい



282:デフォルトの名無しさん
16/04/26 16:12:58.34 MYWP6CaR.net
>>273
ほんとだ、初っ端にちゃんと書いてあったわ、すまんすまん
> ちなみにLはLiteral(リテラル)の略で文字通りのとかいう意味です。
これは俺も違和感あったわ、確かにその通り変だ
ちょっといまいちなサイトだったな
MSDNからの引用があればよかったんだが・・

283:デフォルトの名無しさん
16/04/26 18:58:17.94 Tx8NMol0.net
MSDNも変なところ多いけどなあ。

284:デフォルトの名無しさん
16/04/26 19:04:37.78 lzHK63LG.net
大昔全FFを非同期リセットにしてた。
ASICの規模が大きくなってタイミングエラーの嵐になってきて、
99%以上のFFは同期リセット、
外部IO周りとか発振始まるまで不定じゃ困る部分のみ非同期リセットに変えた。
そのことでベンダーに何か注意されたこともないし、
特に困ったことも起こっていないな。

285:デフォルトの名無しさん
16/04/26 20:23:40.01 ScpOGrIY.net
LプリフィックスのLをロング(Long)の略としているサイトもあるけど
何のロングだろうかと思ったり
というかああいうサイトはなんで何かの略であることを書かずにはいられないんだろうか
たぶんどっかで聞いた(気がする)とか見た(気がする)ということから
知らんうちにそれが正しいと記憶違いをしてしまっているんだろうね

286:デフォルトの名無しさん
16/04/27 00:29:45.56 qLaue6Dh.net
何の出典も示さずにLプリフィックスを"Long"だの"Literal"だのの略だと
自分のサイトに書けるのがすごいわ
俺みたいな小心者には無理だわ

287:デフォルトの名無しさん
16/04/27 05:34:41.17 0VkfCe8A.net
Largeに決まってんだろ馬鹿どもが

288:デフォルトの名無しさん
16/04/27 21:11:48.41 qrup6c3l.net
服のサイズの "F"は Freeの略ではありません

289:デフォルトの名無しさん
16/04/27 21:47:51.66 ZNHkK8eC.net
LOVEこそ全て

290:デフォルトの名無しさん
16/04/30 16:13:55.93 FuZy8SxD.net
SysWOW64に32bit用のDLL入れて
System32に64bit用のDLL入れさせる習慣はどうにかならんかのぅ

291:デフォルトの名無しさん
16/04/30 16:25:37.58 x5p19SCW.net
どうにもならんよ by ロイエンタール

292:デフォルトの名無しさん
16/05/01 09:25:12.44 tKi6j9CT.net
匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
URLリンク(twitter.com)
ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw

The Covenant Project
概要
Covenantは、純粋P2Pのファイル共有ソフトです
目的
インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します
特徴
Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)
接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分


293:散され、特定のサーバーに依存しません i



294:デフォルトの名無しさん
16/05/01 09:48:44.26 AqctS693.net
>>283
ジャンクション張ってもっとマシな別名割り当てればいい

295:デフォルトの名無しさん
16/05/01 12:04:07.52 jr+NTyfn.net
>>285
死ね

296:デフォルトの名無しさん
16/05/01 12:16:34.83 1jzF+/1T.net
GetCommandLine()から拡張子のみを取り出したいのでPathFindExtension()を使ったのですが
そのまま投げても拡張子を返さず、GetCommandLine()の返り値を整形(ダブルクオーテーションを削除、一番後ろのスペースを削除)
しないとダメだったんですが、これは仕方ないことなのでしょうか?もっとスマートにやる方法ってないですか?

297:デフォルトの名無しさん
16/05/01 12:22:48.21 CY4SDQIv.net
どうせだし
"Path" Arg ...を分解するメソッドでも作っちゃえば

298:デフォルトの名無しさん
16/05/01 14:17:14.95 AqctS693.net
そのレベルを求めるなら API そのものじゃなくて何かライブラリを使うべきやろ
MFCまじおすすめ

299:デフォルトの名無しさん
16/05/01 14:54:23.63 OlEFIntC.net
WinMainの引数からsplitpath使えば

300:デフォルトの名無しさん
16/05/01 21:27:48.03 UCEkFn3w.net
CreateThread (Win32) についての質問なんですが
<---
C言語のランタイム ライブラリから関数を使っているスレッドは、 スレッドの管理用に、 CreateThreadおよびExitThreadよりは、 C言語のランタイム関数の_beginthreadと_endthreadを使ってください。
そうしないと、 ExitThread呼び出しでメモリを少し損失することになります。
--->
「C言語のランタイム ライブラリから関数を使っているスレッド」というのはどういうものを指すのでしょうか。
どういうときに CreateThreadでも良く、どういうときでは_beginthreadが良いのかがよくわかりません。

301:デフォルトの名無しさん
16/05/01 21:31:38.12 JP6hgmB0.net
>>292
>C言語のランタイム ライブラリから関数を使っている
stdio.h とか stdlib.h とかの関数を使うのなら _biginthread() ,ランタイムの関数をつかわないのなら CreateThread()
でも,win32api では普通Cランタイムは使わないようにするものだと思うのだが

302:デフォルトの名無しさん
16/05/01 21:42:39.45 bCr+8i5t.net
たいてい混ぜて使う
MFC
Win32Api
stdio
のでどのスレッド使えばいいかわからないww

303:デフォルトの名無しさん
16/05/01 21:49:22.42 ofEkM4aN.net
>>292
URLリンク(cpplover.blogspot.jp)
ここが分かりやすいかも

304:デフォルトの名無しさん
16/05/01 23:28:44.34 UCEkFn3w.net
>>293-295
なるほど
事情は良くわかりました
注意してCreateThread()のほうを使うようにします
ありがとうございました

305:デフォルトの名無しさん
16/05/02 15:15:28.11 aR8AOrvI.net
アフィ誘導乙

306:デフォルトの名無しさん
16/05/02 20:01:52.48 V/Rz0lGL.net
誘導されて来ました。
動的リンクされた.dllを.exeがあるディレクトリの1つ下のディレクトリにまとめたいと思っています。
.exeのショートカットを作成してショートカットのプロパティから、作業フォルダーの変更をすれば上手くいくのですが、これをプログラムでやる方法を探しています。
しかし、どうやら難しいようなので、変わる方法でもあれば教えて頂きたいです。
よろしくお願いします。

307:デフォルトの名無しさん
16/05/02 20:06:40.83 6+YY3Wwg.net
exeのフルパスを取得する GetModuleHandle, GetModuleFileName
dll検索パスを追加するAddDllDirectory

308:デフォルトの名無しさん
16/05/02 20:13:55.77 GdZkeqis.net
スレリンク(tech板:362-384番)

309:デフォルトの名無しさん
16/05/02 20:17:45.26 V/Rz0lGL.net
>>299
ありがとうこざいます。
adddlldirectoryですが、先ほど、main関数にたどり着いた段階でdllの読み込みは終わっていると教えてもらったので、mainの前に書いてみたところ、この宣言にはストレージクラスまたは型指定


310:子がありませんと言われました。 この関数はどこで使うべきなのですか? 調べても、サンプルが少なすぎて分かりませんでした。



311:片山博文MZ ◆T6xkBnTXz7B0
16/05/02 20:38:33.46 GdZkeqis.net
よくわからんが、DLLを遅延読み込みにしてAddDllDirectory使うんとちゃう?
//遅延読み込み
#pragma comment(lib,"delayimp")
#pragma comment(lib,"mydll")
//以下はmain内部に記述
WCHAR szPath[MAX_PATH];
GetModuleFileNameW(NULL,szPath,MAX_PATH);
LPWSTR pch = wcsrchr(szPath,L'\\');
lstrcpyW(pch,L"\\test2");
AddDllDirectory(szPath);

312:デフォルトの名無しさん
16/05/02 20:43:40.23 btgv3pKW.net
>>301
>動的リンクされた.dllを.exeがあるディレクトリの1つ下のディレクトリにまとめたい
なにをやりたいのかやっと分かったたよw
自分でLoadLibraryするんじゃなくてmain以前にdllをロードするやりかたならmain以降じゃ当然どうしようもないわな

313:デフォルトの名無しさん
16/05/02 20:45:09.22 btgv3pKW.net
ああ遅延読み込みという手があったか。試したことないけど
試してみて結果を教えて

314:デフォルトの名無しさん
16/05/02 20:46:24.19 6+YY3Wwg.net
LoadLibraryするんじゃないのか
なら、起動専用exeでPATHにdllのパスを追加してから、本体のexeをCreateProcess

315:片山博文MZ ◆T6xkBnTXz7B0
16/05/02 20:55:15.69 GdZkeqis.net
本体のexeと起動専用exeを分けるなら、本体のexeをDLLと同じフォルダーに入れて、
起動専用が本体をShellExecuteすればいいんじゃないか?

316:デフォルトの名無しさん
16/05/02 20:56:45.34 y5l6KIx0.net
なんかセキュリテイ的に弱点な気が
任意のexeで遅延させて自分のdll読ませれば何でも出来そう

317:300
16/05/02 21:03:38.21 eom7L+e5.net
自分の説明不足のせいか、大事になっている気が…
やりたかったのは、よくネットで公開されているフリーソフトのような、
zipを解凍したら.exeとreadmeとフォルダdataか出てきて
dataの中にアイコンのjpgやらdllが纏まってるみたいな簡素なものを作りたかっただけなのですが…
素人なのでセキュリティの脆弱性とかも全く分からないですが
とりあえず、教えてもらったことはありがたく全て試してみますので、回答ありがとうございます。

318:デフォルトの名無しさん
16/05/02 21:09:21.34 ahm7i7ng.net
回答者がエスパーすぎだろと思ったわw

319:300
16/05/02 21:30:39.06 EphQW+li.net
>>308
ちなみに、この聞き方であれば違う答えが返ってきたりしますか?
先ほどのやり方では、
セキュリティが危険とのことなので、素人が考えなしにやるのを躊躇しております。

320:デフォルトの名無しさん
16/05/02 22:16:40.26 ahm7i7ng.net
セキュリティは気にするな。
306がアホな子なだけ。

321:デフォルトの名無しさん
16/05/02 22:20:39.12 btgv3pKW.net
セキュリティは気にしなくても良いと思うけどね。
ニセのDLLを読み込ませたかったらDLLすげ替えてしまえば何でもできるし
DLLロードパスの優先順位はMSDNによると
1.実行中のプロセスの実行形式モジュールがあるフォルダー。
2.現在のフォルダー。
3.Windows システム フォルダー。このフォルダーへのパスは、GetSystemDirectory 関数が取得します。
4.Windows ディレクトリ。このフォルダーへのパスは、GetWindowsDirectory 関数が取得します。
5.環境変数 PATH 内に記述されたフォルダー。

322:片山博文MZ ◆T6xkBnTXz7B0
16/05/02 22:28:28.76 GdZkeqis.net
そもそもexeに高いセキュリティを要求するなら、exeはインストール時に
Program Filesなどのフォルダーに入れて、管理者権限がなければ書き込み不可にしないとあかん(ウイルス感染対策)。
さらにはインストーラーに有料の署名を付けんといけんのじゃ。

323:デフォルトの名無しさん
16/05/02 23:10:44.85 9Uaok0YL.net
>>305-306
バッチファイルでいいじゃん

324:デフォルトの名無しさん
16/05/02 23:44:54.35 6+YY3Wwg.net
>>314
黒いウインドウがダサい

325:デフォルトの名無しさん
16/05/02 23:59:57.71 9Uaok0YL.net
ならVBSで

326:デフォルトの名無しさん
16/05/03 01:17:07.20 ruihBwIa.net
GetModuleFileName + "data"フォルダ
を LoadLibrary でダメな理由はあるの?

327:デフォルトの名無しさん
16/05/03 02:05:10.66 Fq/Xo6LF.net
> 自作のプログラムから、エクスプローラの右クリックで表示されるコンテキストメニューを表示しようとしています。
>
> IShellFolder *pShellFolder;
> IContextMenu *pContextMenu;
> pShellFolder->GetUIObjectOf(NULL, pItemListLen, &pItemList, IID_IContextMenu, NULL, (void **)&pContextMenu);
> HMENU hmenu = CreatePopupMenu();
> pContextMenu->QueryContextMenu(hmenu, 0, 0x001, 0x7fff, CMF_NORMAL);
>
> とコンテキストメニューを作成しています。
> pItemListにはILFindLastID()で取得した対象のファイルのIDが、
> pShellFolderには親ディレクトリを格納しています。
>
> 同一フォルダ内のファイルであれば、複数のファイルのコンテキストメニューを作れるのですが、
> 異なるフォルダにある複数のファイルだと作成できません。
> エクスプローラだと検索結果などから異なるフォルダにあるファイルから
> コンテキストメニューを出してるみたいなのですが、どうやったら出来るのでしょうか?
過去ログから拾ってきたコピペですが、これと同じとこで躓いてます
> pShellFolderにデスクトップを格納し、pItemListには絶対PIDLを入れろ
このようなレスもありましたがこれでは上手く行かないです

328:デフォルトの名無しさん
16/05/03 09:16:56.28 kYqXiDhL.net
>>317
キミ、周回遅れ

329:デフォルトの名無しさん
16/05/03 12:12:00.81 aV7QMFwi.net
>>318
URLリンク(members.jcom.home.ne.jp)
>完全 PIDL はデスクトップで始まっていて、経路内にある間のフォルダの項目 ID がすべて入っています。
>完全 PIDL の最後は、そのオブジェクトの項目 ID と 2 バイトの NULL です。
>完全 PIDL は完全経路同様に、シェルの名前空間内でそのオブジェクトを一意に識別できます。
同一フォルダから得たものは相対 PIDL
要するにデスクトップ(pShellFolderにデスクトップを格納)からその項目までの経路、最後に項目のIDと2 バイトの NULL を入れろって意味じゃないかな
>このようなレスもありましたがこれでは上手く行かないです
ここが具体的にどういうことをしたのかわからんのですでに試したのかも知れんけど

330:デフォルトの名無しさん
16/05/03 12:43:23.64 Fr8Hxrb9.net
C言語でwin32apiを使ってnotepadにpostmessageでcontrol a を送りたい
がその方法が分からない。
一つの文字だけを送る場合は下記で上手く動きます。
#include <windows.h>
int main(void){
HWND hWnd;
hWnd = FindWindow("Notepad", NULL);
hWnd = FindWindowEx(hWnd, NULL, "Edit", NULL);
PostMessage(hWnd, WM_CHAR, 'a', 0);
return 0;
}
然し、ここでcontrol aを送るには、PostMessageのWM_CHAR
の次の引数をどの様に記述をすれば良いのでしょうか。
その時のコードの例示をお願いします。
宜しく、お願いします。

331:デフォルトの名無しさん
16/05/03 13:09:23.35 PQ3d4MP7.net
PostMessageでは不可

332:デフォルトの名無しさん
16/05/03 13:15:44.31 cK/moF+D.net
SendMessage(hWnd, WM_KEYDOWN, VK_CONTROL, 0);
SendMessage(hWnd, WM_KEYDOWN, 0x41, 0);
SendMessage(hWnd, WM_KEYUP, 0x41, 0);
SendMessage(hWnd, WM_KEYUP, VK_CONTROL, 0);

333:デフォルトの名無しさん
16/05/03 13:18:08.22 Fq/Xo6LF.net
>>320
どうも、レスありがとうございます ノシ
PIDLに関しては、必要に応じて手前で分割や結合が出来る程度には理解できてますので、完全か相対であるかは把握できています
親フォルダのIShellFolderとファイルの相対PIDLでは問題なく正常なメニューを取得できますが
デスクトップのIShellFolderと完全PIDL の組み合わせで正常なメニューが出るようには思えません…
たとえ単独ファイルであっても
デスクトップと完全PIDLでは正常なメニューは出ませんね
間違いが起こらないよう


334:以下のような簡単な方法でメニューを取得してもやはりだめなんです...orz LPSHELLFOLDER ptrDesktop; LPITEMIDLIST ptrIDL; LPCONTEXTMENU ptrContextMenu; SHGetDesktopFolder(&ptrDesktop); ptrDesktop->ParseDisplayName(NULL,NULL,L"C:\\CONFIG.SYS",NULL,&ptrIDL,NULL); ptrDesktop->GetUIObjectOf(NULL,1,(LPCITEMIDLIST *)&ptrIDL,IID_IContextMenu,0,(LPVOID *)&ptrContextMenu);



335:デフォルトの名無しさん
16/05/03 13:20:17.04 Fr8Hxrb9.net
>>322
ここでは例としてnotepadを挙げていますが。
notepad固定と言うのでは無くて汎用性のある
キーの送信を考えています。
postmessageでは駄目だとしたら、ほかに何が
有るのでしょうか。
宜しくお願いします。

336:デフォルトの名無しさん
16/05/03 13:21:37.30 kYqXiDhL.net
メッセージをspyしてみるくらいの知恵は働かないのか?

337:デフォルトの名無しさん
16/05/03 15:05:34.26 Fr8Hxrb9.net
有難う御座います。
今手元に有るのは、gccのコンパイラーだけです。
windows7を使っています。
spyツールを使えば何が分かるのでしょうか。
メッセージの流れが分かればその通りに
sendmessageを流せば良いのでしょうか。
済みません。教えて下さい。

338:デフォルトの名無しさん
16/05/03 15:19:30.82 cK/moF+D.net
無視されたオレ、涙目

339:317
16/05/03 15:34:20.80 Fq/Xo6LF.net
少し進展
C:ドライブのIShellFolderから、C:より下の階層の相対PIDLを渡せばディレクトリが違っていても正常なメニューを出す事が出来るようです

340:デフォルトの名無しさん
16/05/03 21:36:56.84 WxW7Sfac.net
>>328
透明人間の能力を手に入れたなんて羨ましいぜ

341:デフォルトの名無しさん
16/05/03 23:36:11.59 Fr8Hxrb9.net
>323
済みません、返事が遅くなりました。
実行した所、何も変化は有りませんでした。
直ぐに終了して何が起きたのか不明です。
何が考えられるのでしょうか。

342:デフォルトの名無しさん
16/05/03 23:52:34.46 PQ3d4MP7.net
SendMessageだとTranslateMessageとDispatchMessageを介してないんだから当たり前じゃん

343:デフォルトの名無しさん
16/05/03 23:55:40.99 PQ3d4MP7.net
PostMessageは順序保証ができないので不可
SendMessageはTranslateMessageとDispatchMessageを通過しないので不可
keybd_eventやSendInputを使うしかないが、これらはウィンドウを指定が不可
お前の望む動作は不可

344:デフォルトの名無しさん
16/05/04 00:04:01.21 kVGM/VsN.net
HANDLE h = Create...(
CloseHandle()を呼び出さずにアプリケーションが終了した場合
メモリ内にまだ、ハンドルがさしていたオブジェクトは存在し続けるのでしょうか?

345:デフォルトの名無しさん
16/05/04 00:07:45.41 c7vIrIvG.net
SendMessageやPostMessageだと
GetKeyboardStateを使ってるようなプログラムはまともに操作できないのも難点
URLリンク(msdn.microsoft.com)(v=vs.85).aspx
The status does not change as keyboard messages are posted to the thread's message queue,
nor does it change as keyboard messages are posted to or retrieved from message queues of other threads.

346:デフォルトの名無しさん
16/05/04 00:10:28.68 1kR93ddo.net
>>334
Windowsならプロセスの終了時に使用していたリソースも開放される

347:デフォルトの名無しさん
16/05/04 01:02:19.46 kVGM/VsN.net
>>336
ありがとう

348:デフォルトの名無しさん
16/05/04 01:50:54.23 VS80lwnU.net
そういや異常終了した後でファイルがロックされて削除できない
なんて事が昔はよくあったな

349:デフォルトの名無しさん
16/05/04 12:52:46.02 kVGM/VsN.net
アクセス違反で強制終了させられた場合にDumpを出力させた場合に
struct Foo
{
int i;;
};
Foo foo;
foo.iの値をDumpから知ることは可能ですか?

350:デフォルトの名無しさん
16/05/04 13:27:30.06 woHhfZt1.net
出来るはずがない

351:デフォルトの名無しさん
16/05/05 00:05:15.38 zUa6NWoE.net
struct Foo {
DWORD magic;
int i;
};
Foo foo;
foo.magic=0x07214545;
とかやってダンプから07214545を検索すればいいんでないの

352:デフォルトの名無しさん
16/05/05 00:21:23.15 M58BonNM.net
小さなプログラムしか作ったことないんだろうな
普通は構造体が1個しかないようなプログラムってありえないんだよ

353:デフォルトの名無しさん
16/05/05 01:05:24.34 zv5LYT8+.net
ダンプとWinDbgとソースコードとpdbがあって最適化とかで消えてなくて、
スタック上にあるなら表示できる気がする。やってみてないけど。

354:デフォルトの名無しさん
16/05/05 01:34:44.98 zUa6NWoE.net
>>342
んなの>>339からはこのFooのインスタンスが1つなんだかいくつもあるんだか
それとも別にFooに限らず不特定の構造体のメンバの値を知りたいんだか
分からんのだからその中で一つの案を出している
初期化が面倒なら初期値に書けばいいし、複数の構造体ならtype_info::hash_codeでも
メンバに持たせたテンプレートの基底クラスを作ればいい

355:デフォルトの名無しさん
16/05/05 11:19:01.99 /qWvSKFr.net
>>344
君は質問の本質が分かっていないな
みなまで言わないと分からないのか

356:デフォルトの名無しさん
16/05/05 11:47:05.71 aR3QcHwL.net
エスパーきた

357:デフォルトの名無しさん
16/05/05 12:09:33.89 UdftsNeY.net
質問の本質というけど
>>339の質問からは「特定の構造体」なのか「すべての構造体」かは分からないよね
もしかしたら自作の構造体ではなく既存の構造体かも知れないし
エスパーして勝手にすべての構造体だとして回答するのは自由だけど
それで別の可能性の回答にいちゃもんつけるのは違うと思う
それこそ本質を見誤っているのだと思います
>>342は小さなプログラムなら「構造体が1個しかないようなプログラム」もありえることを示唆しています
また小さなプログラムなら>>341は有用だとも取れる
>>339の作っているのが小さなプログラムではないとなぜ言えるのでしょうか?

358:デフォルトの名無しさん
16/05/05 12:15:35.09 l/2+Jb+M.net
帯域の無駄とはまさにこのこと

359:デフォルトの名無しさん
16/05/05 12:26:56.96 ET8VI+4U.net
スレタイ読んで寝ろ

360:デフォルトの名無しさん
16/05/06 19:47:08.86 gQ1eUeNa.net
Windows8の画面の自動回転で縦長になっている画面を横長に切り替えるAPIがあったらお教えください。
デスクトップアプリ(MFC使用のダイアログアプリ)です。
なるべく横長に表示したいダイアログのため、OnInitDialog()内でShowWindow(SW_MAXIMIZE)した後に
ダイアログ内のコントロールをダイアログの幅に合わせて再配置しています。
SetDisplayAutoRotationPreferences(ORIENTATION_PREFERENCE_LANDSCAPE)を使えば横長には切り替
わるのですが、OnInitDialog()ではまだ縦長のままのようで、再配置が正しく行えませんでした。
で、可能ならアプリ起動時、DoModal()前に画面を切り替えたいのです。
よろしくお願いいたします。

361:デフォルトの名無しさん
16/05/07 10:41:22.46 Kik6brAm.net
sendkey
Alt+F4 かなんか

362:デフォルトの名無しさん
16/05/07 17:01:24.81 FRLfg3Ln.net
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = TRUE;
sa.lpSecurityDescriptor = NULL;
CreateEvent(&sa, FALSE, FALSE, NULL); で作ったハンドルは子プロセスに継承されている
子プロセスのDuplicateHandleは成功し親プロセスとの同期は取れている
CreateFile("sample.txt", GENERIC_WRITE | GENERIC_READ, 0 , &sa, OPEN_ALWAYS, FILE


363:_ATTRIBUTE_NORMAL, NULL); で作ったハンドルは子プロセス側でのDuplicateHandle自体は成功しているのに ReadFile、WriteFileでプロセスが落ちる 何が原因なんだろう?



364:デフォルトの名無しさん
16/05/07 17:23:33.70 FRLfg3Ln.net
すみません間違えてました
試していたのはfprintf(...)でその場合は落ちるんですが
>>352を書いてからWriteFileを試したら成功しました
そうなると今度はfprintf(...)でなぜ落ちるんだろうかって疑問になるんですが・・・

365:デフォルトの名無しさん
16/05/07 17:31:53.27 KgU8/FJ+.net
stdin,stdout,stderr以外は子プロセスには引き継げないって分かってる?

366:デフォルトの名無しさん
16/05/07 17:34:03.64 KgU8/FJ+.net
つーか、子プロセスは0,1,2をstdin,stdout,stderrとしてfdopenすると考えて良い

367:デフォルトの名無しさん
16/05/07 17:49:42.38 7sMMCfTe.net
ファイルポインタとファイルハンドル

368:デフォルトの名無しさん
16/05/07 18:04:18.24 5sx0uiPg.net
win32api の世界に C ランタイムの世界を混ぜるのは,混乱するから止めておいたほうが
messagebox で頑張ってくれ

369:デフォルトの名無しさん
16/05/07 18:12:34.31 FRLfg3Ln.net
>>356
理解しました
ありがとうございます

370:デフォルトの名無しさん
16/05/07 18:41:23.13 9/SiGFfq.net
>>353
vsprintf でバッファに出力してそれを WriteFile

371:デフォルトの名無しさん
16/05/07 20:13:10.03 SVmAxHAH.net
おれはWM_CHARでなくWM_ペーストでやってるが

372:349
16/05/08 07:33:07.24 uPD0V3Q6.net
349です。
自己解決。
ShowWindow(WM_MIAXIMIZED)をやめ、デスクトップのサイズでMoveWindowするように
することで、正常に動作。
BOOL CSD_WinDlg::OnInitDialog()
{
    : 前略
  CRect rectDT ;
  GetDesktopWindow()->GetWindowRect( &rectDT ) ;
  int nWidth = rectDT.Width() ;
  int nHeight = rectDT.Height() ;
  do { // Windows8なら画面を横長に
    HMODULE hDll = LoadLibrary( "User32.dll" ) ;
    if ( !hDll ) break ;
    typedef BOOL WINAPI SetRotation( ORIENTATION_PREFERENCE orientation ) ;
    SetRotation* pfSetRotation = (SetRotation*)
      GetProcAddress( hDll, "SetDisplayAutoRotationPreferences" ) ;
    if ( !pfSetRotation ) break ;
    (*pfSetRotation)( ORIENTATION_PREFERENCE_LANDSCAPE ) ;
    FreeLibrary( hDll ) ;
    if ( nWidth < nHeight ) {
      int nTmp = nWidth ;
      nWidth = nHeight ;
      nHeight = nWidth ;
    }
  } while ( FALSE ) ;
  MoveWindow( 0, 0, nWidth, nHeight) ;
  CRect rectCli ;
  GetClientRect( &rectCli ) ;
    : 以下、クライアントのサイズに基づいてコントロールを再配置

373:デフォルトの名無しさん
16/05/08 11:39:33.12 pwQcqOb7.net
迷惑なアプリの見本とか

374:デフォルトの名無しさん
16/05/08 12:14:30.17 1yuVEopA.net
うむ。ウィルスと同種

375:片山博文MZ ◆T6xkBnTXz7B0
16/05/08 17:02:20.87 Urq1EQRP.net
IME内部で呼び出したGetTextExtentPoint32WがERROR_ALREADY_EXISTSで失敗する。
助けて下さい。

376:デフォルトの名無しさん
16/05/08 17:43:25.16 Urq1EQRP.net
助けて

377:デフォルトの名無しさん
16/05/08 18:18:07.81 8pUDf3MI.net
既に存在しますって。

378:デフォルトの名無しさん
16/05/08 21:31:28.06 H4GlBiCg.net
>>356
ファイルディスクリプタ

379:デフォルトの名無しさん
16/05/09 10:20:11.80 /WWMvIkB.net
>>367
Win32の話題なのにバカなの? 死ねば良いのに。

380:デフォルトの名無しさん
16/05/09 14:09:57.34 pzKdLl0R.net
片山先生にも分からない事が有るのか。

381:デフォルトの名無しさん
16/05/09 15:00:58.21 YBKaLZ+x.net
ハードディスクのクローンを行いたんですが、どのような関数でやるの?

382:デフォルトの名無しさん
16/05/09 15:06:09.73 2UQDwNbB.net
まず服を脱ぎます

383:デフォルトの名無しさん
16/05/09 15:07:23.57 noyNIse2.net
>>370
つCloneDisk(dst,src) API

384:片山博文MZ ◆T6xkBnTXz7B0
16/05/09 15:31:05.83 12nCphG6.net
>>370
CreateFileを使うらしい。アクセス権限が必要。
URLリンク(stackoverflow.com)

385:デフォルトの名無しさん
16/05/09 17:27:43.94 ihh7VJo/.net
>>373
できないから、質問してるのでは?
そんなのドヤ顔で紹介されても・・・

386:デフォルトの名無しさん
16/05/09 17:59:52.23 mwKhqul2.net
>>374
その論法では、どんな質問に対してどんな回答をしても同じことが言えるね。

387:デフォルトの名無しさん
16/05/09 18:21:28.96 ihh7VJo/.net
>>375
そうではない
紹介されてるのは、できないか人の質問を紹介してるだけ。
別のできない人の質問を見ても何にもならないだろう

388:デフォルトの名無しさん
16/05/09 18:54:03.51 mwKhqul2.net
>>376
ああ、「できないから質問」はリンク先の話ね。すなまない。

389:デフォルトの名無しさん
16/05/09 19:46:49.69 WSElaHek.net
クローンと九龍って似てるよね
九龍って聞くと3×3EYES思い出すわ

390:デフォルトの名無しさん
16/05/09 19:52:27.27 kFMtfNT1.net
clone

cron
は発音が違う

391:デフォルトの名無しさん
16/05/09 20:37:02.59 M3iPLLj4.net
>>376
質問の回答を読めば答えがあるんじゃないの?読んでないけど

392:デフォルトの名無しさん
16/05/09 22:37:05.87 jCCSCwvz.net
/etc/crontab

393:デフォルトの名無しさん
16/05/09 23:35:52.42 noyNIse2.net
あるんじゃないの?って・・・
回答する側はちゃらんぽらんでもいいんですねw

394:デフォルトの名無しさん
16/05/09 23:46:31.04 YBKaLZ+x.net
クラッシュダンプの中からある変数の値
をしりたい
たとえば、下記のような
CDocumentクラスのint型のメンバm_dataの値です。
不可能ですか?

395:片山博文MZ ◆T6xkBnTXz7B0
16/05/09 23:51:44.12 12nCphG6.net
>>383
あらかじめSetUnhandledExceptionFilterに変数の内容を出力する関数を設定せよ。

396:デフォルトの名無しさん
16/05/09 23:59:03.23 M3iPLLj4.net
>>382
俺は回答者じゃないぞ
ただ>>376が質問のトピックだけ見てそれに対する回答にまで目を通していない可能性を示唆しただけ
本当にあのリンク先が質問投げられてるだけで解決してないだけのトピックならそれを貼るのは意味分からんけど
解決してるんちゃうの?って話

397:デフォルトの名無しさん
16/05/10 00:04:44.38 5J1aLd4L.net
>>384
それだと、クラッシュダンプを取っている意味がなくね?

398:デフォルトの名無しさん
16/05/10 01:10:03.16 95ydQ9Nw.net
>>383
シンボルファイルがあれば見れるでしょ。

399:デフォルトの名無しさん
16/05/10 01:21:14.99 5J1aLd4L.net
>>387
みれました。

400:デフォルトの名無しさん
16/05/10 13:08:37.18 2ogGQYkn.net
カスタムドローとオーナードローの違いが分からん

401:デフォルトの名無しさん
16/05/10 14:05:48.41 Jb8df6a5.net
毎ターンの最初にドローするのがオーナードロー
カードの特殊効果でドローするのかカスタムドロー

402:デフォルトの名無しさん
16/05/10 15:01:34.24 HhVOss0K.net
細かいところまで全部自分で描画するのがオーナードロー
OSがある程度描画してくれて、ステップごとに自分で描画したければ描画できるのがカスタムドロー

403:デフォルトの名無しさん
16/05/10 15:42:05.83 ZuNavWCV.net
オーナードローは全て自分で
カスタムドローは割り込んで差し替え

404:デフォルトの名無しさん
16/05/10 18:15:28.39 5J1aLd4L.net
たとえば、ダイアログにeditでもおいた場合
editのオーナーはダイアログですよね
ってことはeditをダイアログがおこなわなきゃいけないってこと?
それともオーナーをドローする?

405:デフォルトの名無しさん
16/05/10 22:10:15.17 vVT3Tded.net
MultiByteToWideChar関数とWideCharToMultiByte関数の変換結果ってNULL文字入ってますか?

406:デフォルトの名無しさん
16/05/10 22:12:24.86 wov2Q3bj.net
入ってるけど先っちょだけなのでセーフ ノーカン

407:片山博文MZ ◆T6xkBnTXz7B0
16/05/10 22:16:55.19 CPTIUhXJ.net
>>394
長さに-1を指定するとNUL文字が入るよ

408:デフォルトの名無しさん
16/05/10 22:37:50.04 vVT3Tded.net
>>396
ありがとう


409:ございます CommandLineToArgvW関数を使ってGetCommandLine関数から受け取ったものを解析しようとしているのですがうまくいきません ソースはこれなんですがヒントがほしいです https://ideone.com/blqCFb あとMessageBox関数ってどうしてconstしか受け付けてくれないんですか?



410:デフォルトの名無しさん
16/05/10 23:45:17.67 ee1FUJs8.net
>.396
エラーが出たらメッセージをよく見ましょう。
エラーが起こった場合にキャストして無理矢理エラーを消しても動く可能性はほとんどありません。

411:デフォルトの名無しさん
16/05/10 23:49:50.96 y6IvleFL.net
文字列をキャストして変換したツモリナールは罠
ちゃんと変換しよう

412:デフォルトの名無しさん
16/05/11 00:23:03.54 rUu5NPeL.net
うまくいきました!
あとはCommandLineToArgvW関数がちょっとわからないところありますが試行錯誤してみます
どうしてもダメだったらまたきます

413:デフォルトの名無しさん
16/05/11 15:39:15.62 qkI+/TV/.net
馬鹿には無理

414:デフォルトの名無しさん
16/05/11 16:33:16.52 l/Aku55r.net
>>397
const なし → const ありは暗黙変換の範囲
無駄なキャストするな
どうしてconst*無し*しか受け付けてくれないんですか?
なら許す

415:デフォルトの名無しさん
16/05/11 22:07:09.71 AfFgGj2Z.net
グローバル変数を持つDLLを遅延読み込みやLoadLibraryした場合に、そのグローバル変数に
アクセスする方法ってないんでしょうか?GetProcAddressのような。
遅延読み込みを使わなければ__declspec(dllimport)でいけるんですが、遅延読み込みにすると
LNK1194エラーになってしまいます。

416:デフォルトの名無しさん
16/05/11 22:12:17.37 9I+RCTR4.net
安全な方法はないんじゃないですかね
DllにGetGlobalVar()とか適当な関数を追加してグローバル変数へのポインタを取得してください

417:デフォルトの名無しさん
16/05/11 22:19:35.79 zhYWy9+O.net
GetProcAddressは関数だけじゃなくて、変数のアドレスも取得できる
(exportされていれば)

418:デフォルトの名無しさん
16/05/11 22:31:25.37 AfFgGj2Z.net
>>405
ありがとうございます。GetProcAddressでいけました。
それにしても、これは盲点でした。

419:デフォルトの名無しさん
16/05/13 18:36:08.65 GSvBVZn8.net
Cランタイムのmemcmpに対応するWin32APIってないのでしょうか?
上の方でWin32APIではCランタイムを使うな的なレスがありますが、何かしらのAPIに置き換え可能なのでしょうか?
それとも自作すべき?

420:片山博文MZ ◆T6xkBnTXz7B0
16/05/13 18:47:38.06 Q4+gmma8.net
>>364
自己解決しました。COMPOSITIONSTRING構造体のサイズ情報の不整合が原因でした。

421:片山博文MZ ◆T6xkBnTXz7B0
16/05/13 18:51:36.20 Q4+gmma8.net
>>407
Cランタイムの方が高性能で合理的。気にせず使いたまへ。

422:デフォルトの名無しさん
16/05/13 18:54:16.38 GSvBVZn8.net
>>409
あろがとうございました。気にしないでおきます。

423:デフォルトの名無しさん
16/05/14 22:54:45.77 vRpxoSsR.net
Spinコントロールを使用している(Editコントロールに関連付けずUDN_DELTAPOS
を処理している)アプリで、マウスでは長押しすればUDN_DELTAPOSが連続して送られ、
さらに長押しでアクセラレーションが働く(増分が増える)のですが、(タブレット
の)パネルへの指での長押しでは、UDN_DELTAPOSが1回しか送られて来ません。
指での長押しでもマウスと同じように動作させるには、どうすれば良いでしょうか?

424:デフォルトの名無しさん
16/05/14 23:04:18.19 E3fn5B/n.net
高橋名人になる

425:デフォルトの名無しさん
16/05/16 16:27:41.62 IBGTyv6p.net
タッチパネルには向いてない(非推奨と宣言されている)から諦めて他の部品を探す

426:デフォルトの名無しさん
16/05/16 18:56:25.57 P91hC5sf.net
>>413
コメント、ありがとうございます。
最初はSliderコントロールで作っていたのですが、タッチでは非常に操作しづ
らいため(大きなボタンの)Spin


427:に変えてみたのに前記のような次第です。 動きを見てみると・・・ マウスの場合はボタンを押したときにWM_LBUTTONDOWN・離した時にWM_LBUTTONUP が来るのが、パネルだと押したときにWM_LBUTTONDOWNは来ず、離した時にDOWNと UPが続けて来るようです。(レピートもアクセラレーションも働かないのは当然) 数値の範囲が広い(5~5000等)ため、DropDownList等にはできず。 WM_TOUCHメッセージを受けてどうにかできないかトライ中。



428:デフォルトの名無しさん
16/05/16 22:03:35.57 89EWpk6s.net
タッチするとスライダーが出るっていうのもあり

429:デフォルトの名無しさん
16/05/23 02:26:17.08 x4vKVRRs.net
ダブルクリックメッセージの後の、WM_LBUTTONUPが地味にうっとうしい
こんなの誤作動の元だろ・・・

430:デフォルトの名無しさん
16/05/23 02:32:42.88 x4vKVRRs.net
MS的にはダブルクリックしたままドラッグするような操作も想定していたのかもしれないが
そんなオペレーションが必要なアプリに出会ったことがない
ダブルクリック自体オプション的な扱いなんだから
ダブルクリックの後のWM_LBUTTONUPもオプションにしてほしかった
いちいちキャンセル処理するのが面倒

431:デフォルトの名無しさん
16/05/23 03:35:11.85 CHotlqdd.net
Firefox,Chrome,サクラエディタではダブルクリックのままのドラッグサポートしてるよ
単語単位選択のまま範囲が拡張される

432:デフォルトの名無しさん
16/05/23 03:42:10.00 CHotlqdd.net
というかメモ帳もVisual Studioでも同じだった
メモ帳は日本語だと1文字づつになるけど

433:デフォルトの名無しさん
16/05/23 09:09:35.53 IdraLXZT.net
>>417
ダブルクリック
→あ、ミスったからそのまま範囲外に持っていってからWM_LBUTTONUP
とかない?

434:デフォルトの名無しさん
16/05/23 20:01:41.03 x4vKVRRs.net
>>419
必須の動作ではないでしょ
その意味で
そんなぺレーションが必要なアプリに出会ったことがない
そもそも、普通のクリックの後とダブルクリックの後とで
BUTTONUPのメッセージが共通なのがいやらしい
普通のクリックとダブルクリックでは、アプリは別の動作をするのが普通なのだから
そのあとのBUTTONUPのメッセージも分けてほしかった
WM_LBUTTONDBLCLKDOWN→WM_LBUTTONDBLCLKUP
とかね
普通に考えて、LボタンとRボタンで、UPのメッセージはそれそれ別になってて
それぞれWM_LBUTTONUP、WM_RBUTTONUPでしょう?
これがどの場合でもWM_BUTTONUP一つに共通になってたら嫌でしょう
これと同じことだと思うんですけどねー 何でメッセージを共通にしたんだろうかね
別のメッセージを共通に扱うのは簡単だけど
共通のメッセージを別に扱うのは面倒

435:デフォルトの名無しさん
16/05/23 20:18:48.93 BbHX4Eo2.net
>>421
> これがどの場合でもWM_BUTTONUP一つに共通になってたら嫌でしょう
嫌とか言う以前に左右ボタンを同時押しされたら区別できないだろ
頭の構造がプログラマに向いてないんじゃね?

436:デフォルトの名無しさん
16/05/23 20:34:56.44 Xj6YQxJ5.net
>>421
何がしたいの?
そうだねすごいねって言って欲しいのか?
あ?ボケが

437:デフォルトの名無しさん
16/05/23 20:41:01.24 x4vKVRRs.net
ダブルクリックの後のUPのメッセージが
普通のクリックの時と別になっていたほうが良いと思いません?

438:デフォルトの名無しさん
16/05/23 20:47:25.72 Xj6YQxJ5.net
同意してくれないと暴れるよって付け加えろ
同意が欲しいだけのくせに否定されると嫌だからって
質問の体を取らせようとする女の腐ったような奴は見苦しいんだよ

439:デフォルトの名無しさん
16/05/23 20:52:30.88 x4vKVRRs.net
どうして同意してくれないんですか?

440:デフォルトの名無しさん
16/05/23 20:54:08.47 x4vKVRRs.net
逆に何か理由があって
ダブルクリックと普通のクリックの後のUPのメッセージが同じになってるんですかね
同じになっていたほうが便利なことって、ちょっと思い浮かばないんですけど

441:デフォルトの名無しさん
16/05/23 20:55:24.82 6EggAem/.net
>>424
思いません。
理由は述べません。
議論もしません。
ですが思いません。
こちらからは以上です。

442:デフォルトの名無しさん
16/05/23 22:37:23.51 WWhEKyeV.net
トリプルクリックとか4thクリックの実装が汚くて一々気にしたら負け
という結論を20年以上前に得たことを思い出した

443:デフォルトの名無しさん
16/05/26 09:04:44.12 QP0+R2rv.net
グローバル変数だろうが、ローカル変数だろうが、コンパイル時にそのアドレスは決定してますよね。実行することなく、その変数のアドレスを知りたいのですがどうすればしれますか?

444:デフォルトの名無しさん
16/05/26 09:40:20.34 vJm9AXBO.net
最適化で消えたりレジスタのみで処理されてるかもしれねーじゃん
出直せ

445:デフォルトの名無しさん
16/05/26 10:09:09.07 6KAnMnB/.net
>>430
リンカーにマップを出力させる

446:デフォルトの名無しさん
16/05/26 13:38:43.82 PPtVZd97.net
>>430
ローカルは実行時まで決定しないんじゃね

447:デフォルトの名無しさん
16/05/26 13:50:59.72 M2X0d2Pu.net
>>430
グローバルと静的変数はコンパイル時に決まる
それはビルド時にシンボルマップファイルを生成させれば見られる
ローカルとヒープは実行時じゃないと無理
レジスタにのってる奴は実行時でも無理

448:デフォルトの名無しさん
16/05/26 14:07:29.18 qDP8EFHX.net
ローカルちゃん。メインスレッドのスタックそのものののアドレスはASLRでないなら固定じゃなかったっけ
関数呼び出しのツリーが固定ならアドレスは計算可能かと思ったけど
プログラムの引数とかallocaとか使うとアドレスずれるんだっけか?

449:デフォルトの名無しさん
16/05/26 15:03:48.00 iU2f12RA.net
お前は囀らなくていい

450:デフォルトの名無しさん
16/05/26 18:18:53.68 YS/YHZQs.net
シフトキーを押しながらダブルクリックとかあった

451:デフォルトの名無しさん
16/05/26 18:48:05.78 ZS10B00B.net
>>436
フリガナ付けてくれ

452:デフォルトの名無しさん
16/05/26 20:19:26.84 Z+cHO4t2.net
>>435
こんなのはどうなるの?
#include <stdio.h>
int a = 0;
void Func1(void) {
int b;
static int c;
printf("a:%p b:%p c:%p\n",&a,&b,&c);
if (++a<4) Func1();
else a = 0;
}
void Func2(void) {
int x;
printf("x:%p\n",&x);
Func1();
}
int main(void) {
Func1(); printf("\n");
Func1(); printf("\n");
Func2(); printf("\n");
return 0;
}

453:デフォルトの名無しさん
16/05/26 20:42:30.72 tEodBnd+.net
サエズ
囀 る

454:デフォルトの名無しさん
16/05/26 20:49:06.51 e4t247TT.net
何の価値も感じない問答だ
まともでない手段が出てくるときは9割9分9厘方針が間違ってるか
横着するつもりでドツボに嵌まる選択をしている

455:デフォルトの名無しさん
16/05/26 21:09:18.72 kT3OAx5i.net
Unicode形式:  お前は囀さえずらなくていい
青空文庫形式: お前は|囀《さえず》らなくていい
まともに表示できるブラウザがあるかは知らん

456:デフォルトの名無しさん
16/05/31 01:01:12.53 2D2ULHTm.net
vbs から Win32API を呼ぶ方法はありますか?
無い場合、OS にランタイム等をインストールせずに実行できる実行ファイルを作れて
API を呼べるお勧めの言語はありますか?

457:デフォルトの名無しさん
16/05/31 01:54:47.72 dsq6ciRV.net
c

458:デフォルトの名無しさん
16/05/31 07:09:12.05 Q6hYp8jt.net
vbs から Win32API を呼ぶ方法
でそのままググれ

459:片山博文MZ ◆T6xkBnTXz7B0
16/06/04 01:14:28.88 9azu721e.net
CPUが64-bitで、かつOSが32-bitである環境がアリエールとは驚きだ。

460:片山博文MZ ◆T6xkBnTXz7B0
16/06/04 01:19:03.37 9azu721e.net
こうした「ねじれ環境」では最新のInkscapeなどのプログラムが動かないことがあるらしい。

461:デフォルトの名無しさん
16/06/05 09:00:41.62 n7k60ruZ.net
>>446
普通にあるだろ 少し時代遅れなだけだ

462:デフォルトの名無しさん
16/06/05 11:20:52.39 wpgdhQ4H.net
>>446
Windows7の時代はそんなのが当たり前だったが。Windows8の時代でも普通にあった。
64bitのOSが標準になったのはここ数年だ。
OSが64bitになると32bitのドライバーは完全に使えなくなるし、搭載メモリーが4G以下だと
64bitにするメリットがあまりなかったからな。

463:デフォルトの名無しさん
16/06/05 13:12:51.41 5CTJmFcd.net
>>430
そんなアドレス取得して何をしたい?

464:デフォルトの名無しさん
16/06/05 13:31:26.44 4pXfFBXo.net
>>450
そこは本題ではない

465:デフォルトの名無しさん
16/06/05 14:16:02.61 MNddmiLP.net
初心者なんて手段と目的と発想がとっちらかってるから
本人が本題だと思ってることは本題ではない可能性のが高い
岡目八目

466:デフォルトの名無しさん
16/06/05 14:26:35.95 wpgdhQ4H.net
ゲームか何かのデータをオンラインで覗き見や改竄したかったんじゃないの。

467:デフォルトの名無しさん
16/06/05 15:06:46.74 4pXfFBXo.net
>>452
>>430の情報だけでは何をしたいかは関係無い

468:デフォルトの名無しさん
16/06/05 15:14:10.27 ALg55j00.net
みんなひどいな、ちゃんと教えてやれよ。
>>430
>グローバル変数だろうが、ローカル変数だろうが、コンパイル時にそのアドレスは決定してますよね
いいえ。

469:デフォルトの名無しさん
16/06/05 16:18:47.98 b0qHmmcL.net
>>454
別解ができるできるかもしれないから本来の目的を聞いてんだろ
頭悪いんじゃねーの?

470:デフォルトの名無しさん
16/06/05 16:43:38.72 4pXfFBXo.net
>>456
実行することなくアドレス知った後に何をしたいか知っても
アドレス知らなければできないだろバカ?

471:デフォルトの名無しさん
16/06/05 17:05:53.27 m3XTKDYl.net
>>456
別解は訊かれてないからそれは余計なお世話
お節介おばさん

472:デフォルトの名無しさん
16/06/05 21:34:41.29 iq7db8Ia.net
>>455
「言語とか環境によるからそれだけでは答えられない」が正解だろ。
懐かしの *.com タイプの実行ファイルなら、アドレスが決まってると言えなくもない。
実行時にセグメントアドレスが変わるだけでプログラム内で意識すべきアドレスは変わらないからな。

473:デフォルトの名無しさん
16/06/05 21:46:16.77 mNRbI/bE.net
>>459
ローカル変数はスタック上にあるんだろう?具体的にアドレスを出すのは難しいんじゃないかな

474:デフォルトの名無しさん
16/06/05 22:26:30.18 iq7db8Ia.net
>>460
comタイプだと開始時の SP も確定できる。
だから main() のローカル変数のアドレスは確定できるという意味だったけど、
そこから呼び出される関数内のローカル変数のアドレスはそこに至るまでの
スタックの使用状態に依存するからそういう意味では確定ではないな。
関数ごとに確定したら再帰呼出できない。

475:デフォルトの名無しさん
16/06/06 00:29:06.57 KlmLRyc2.net
だから、まとめると、
Q:決まってますね?
A:いいえ、決まってません
だろ。

476:デフォルトの名無しさん
16/06/06 01:10:07.28 b3wiPZEu.net
A.
決まってないことがほとんどだけど、条件によっては決まってる事もあります。
自分で SP を操作して決めることも場合によっては可能です。
かな。

477:デフォルトの名無しさん
16/06/06 01:47:32.02 KlmLRyc2.net
>条件によっては
そういうのは「決まってない」って言うんだよ。
だって条件明示できないだろう?

478:デフォルトの名無しさん
16/06/06 03:02:28.37 f8xfohh0.net
ランダム化されたベースアドレス
とか
固定ベースアドレス
とか

479:デフォルトの名無しさん
16/06/06 08:18:46.91 l5dDSXNJ.net
エミュでベースアドレスが固定なのはどうやってんの?

480:デフォルトの名無しさん
16/06/06 08:32:20.01 ltcrYsll.net
エミュレータは所詮エミュレータ
完全に実物を再現することは出来ない
ベースアドレスが固定されているのであれば、ホストマシンの速度や容量の関係でゲストマシンのメモリマッピングの
エミュレーションを放棄して処理の簡素化を図っているだけ

481:デフォルトの名無しさん
16/06/06 20:24:45.16 QosaUsgl.net
宇宙開闢の瞬間からアドレスは決まっているかもな
それを知ることができるかは別だが

482:デフォルトの名無しさん
16/06/06 21:29:21.12 XWFkF7NO.net
標準 Windows APIというサイトより

キーボードイベントはアプリケーションがそれを処理するよりも速い速度でタイプすることができます
しかし、基本的にキーボードイベントはアクティブなウィンドウに対して送られますが
キューのメッセージの途中で、アクティブなウィンドウが切りかえられた場合
その後のキーイベントは切り替わったウィンドウに送られるべきです

これの具体例がわかりません。キーボードを連打してウインドウがたくさん開いてる状態
なんてPC操作しててありますか?

483:デフォルトの名無しさん
16/06/06 21:33:07.14 okPwaxJe.net
あるよ
WM_LBUTTONDOWNでウィンドウを閉じたら
WM_LBUTTONUPは別のウィンドウに届く
怖いね

484:デフォルトの名無しさん
16/06/06 22:30:16.23 XWFkF7NO.net
>>470
切り替わったウインドウに送られるってことですか???
それを防ぐための機能はあるんでしょうか?

485:デフォルトの名無しさん
16/06/06 22:35:42.16 XWFkF7NO.net
防げるわけないか

486:デフォルトの名無しさん
16/06/06 23:20:33.76 okPwaxJe.net
一応そういう機能は用意されているよ
ただし、切り替わったことを検出する機能だが
DOWNとUPは必ず対で同じウィンドウに送られるとは限らないから
そのつもりで書かないと変なことになるよ
LBUTTONDOWNでフラグを立ててドラッグ処理してLBUTTONUPでフラグを戻すという
ありふれた処理ですらバグる可能性があるよ
マウスをキャプチャしていたとしても、途中でAlt+TABなどでウィンドウを切り替えたりしたら
勝手にキャプチャが解除されてLBUTTONUPは飛んでこないよ
キャプチャが解除されたことを検出してフラグを元に戻すなど、後処理をしないとダメ
怖いね

487:デフォルトの名無しさん
16/06/07 00:13:54.68 41OqMrsx.net
たまにWin10の起動処理で、マウスが張り付いて動かないことがあり、
再起動しているのだが、アプリがそういう事を想定していないからか
Windowsは恐ろしい

488:デフォルトの名無しさん
16/06/07 08:05:48.66 GLc24ffb.net
ウィンドウプロシージャで描画するときのはじめと終わりは
hdc = GetDC(hwnd);

ReleaseDC(hwnd , hdc);
のパターンもしくは
hdc = BeginPaint(hwnd , &ps);

EndPaint(hwnd , &ps);
だと思いますが、後者はデバイスコンテキストをデバイスコンテキストを
解放してないと思うんですがこれでいいんでしょうか?
後、文字やグラフィックの描画に関しては、絶対に後者のほうがいいそうですが
前者使う時は?

489:デフォルトの名無しさん
16/06/07 08:06:51.30 GLc24ffb.net
すいません
×「デバイスコンテキストをデバイスコンテキストを」で
正しくは「デバイスコンテキストを」です。

490:デフォルトの名無しさん
16/06/07 08:07:46.67 GLc24ffb.net
デバイスコンテキストを解放してないと描画機能に影響を及ぼすみたいな
事書いてありますし、後者で大丈夫ですか?

491:デフォルトの名無しさん
16/06/07 09:54:05.47 L0Kpz/xt.net
 PAINTSTRUCT構造体のメンバを見ればデバイスコンテキストハンドルがあるのがわかる。
実際のところBeginPaint()の戻り値は冗長。

492:デフォルトの名無しさん
16/06/07 09:56:09.48 4sqWtxYj.net
まったく変態APIだよな

493:デフォルトの名無しさん
16/06/07 10:01:23.12 L0Kpz/xt.net
それからGetDC()とBeginPaint()の使い分けは処理の内容じゃない。
BeginPaint()は無効領域に書き込みを開始する関数なので無効領域が発生したときに来る
WM_PAINTメッセージのときしか使わないし、無効領域の描画が完了したらそのことをEndPaint()
で知らせなければならない。何かの理由で(クラスのメンバとして保持するとか)HDCを持ちっぱなし
にするならGetDC()を使う。
逆にWM_PAINTが来てるときにGetDC()を使うと無効領域が無効領域のままなのでメッセージが
来続けることになる。自分でInvalidateRect()で無効領域を発生させまくってるなら大差ないけど

494:デフォルトの名無しさん
16/06/07 11:02:25.45 L0Kpz/xt.net
あぁそれからBeginPaint()は無効領域の外への描画は反映されないようになってるから
WM_PAINT以外で使っても無効領域がないので各種描画関数自体は成功するけど画面には
反映されない。
WM_PAINTを呼ぶのにSendMessage()じゃなくてInvalidateRect()を使うのも同じ理由。

495:デフォルトの名無しさん
16/06/07 11:17:37


496:.48 ID:L0Kpz/xt.net



497:デフォルトの名無しさん
16/06/07 16:41:36.62 DjDItv96.net
>>478
ありがとうございます。
つまりpsというオブジェクトがデバイスコンテキストハンドルを開放する
メソッドなりがEndpaint中に実行されてるってことですね。
>>481
なるほど、BeginPaint()使っても描画されない時があるのはWM_PAINTとセット
じゃないからですね…なるほど

498:デフォルトの名無しさん
16/06/07 16:44:32.25 DjDItv96.net
ただ無効領域っていうのはプログラム開始時はどうなってるんですか?
LPTSTR lptStr = TEXT("Kitty on your lap");
switch(msg) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd , &ps);
TextOut(hdc , 10 , 10 , lptStr , lstrlen(lptStr));
EndPaint(hwnd , &ps);
return 0;
}
この場合だと文字が実行時に描かれていますが、プログラムの最初は
そもそも無効領域なんてないはずだからBeginPaintが反応しないはずだと思いますけど
実際文字列表示されますし。

499:デフォルトの名無しさん
16/06/07 16:53:42.50 w2gqx7DJ.net
>>484
UpdateWindow()

500:デフォルトの名無しさん
16/06/07 17:02:56.06 RY15Skw4.net
>プログラムの最初はそもそも無効領域なんてないはず
いやいや

501:デフォルトの名無しさん
16/06/07 17:24:17.39 DjDItv96.net
あれ理解してないかな俺
無効領域ってのは一端描画されて、他のアプリで消された領域っていう
理解ですけど…

502:デフォルトの名無しさん
16/06/07 19:25:51.81 NYG4EICE.net
それは勝手なお前の思い込みだから知らない

503:デフォルトの名無しさん
16/06/07 21:36:26.14 L0Kpz/xt.net
>>486
無効領域は「描画の必要がある領域」だからそういう場合「にも」無効領域は発生する。
後はInvalidateRect()が無効領域を発生させる関数だし、CreateWindow()の後は画面全体が
無効領域になってるからその旨をUpdateWindow()で知らせてやることで1回目のWM_PAINTがよばれる。
>>484には書いてないけどCreateWindow()の後メッセージループに入る前に使ってるでしょ?

504:デフォルトの名無しさん
16/06/08 07:27:04.52 ZY4F9/6a.net
別に UpdateWindow() を呼んだりしないけどね

505:デフォルトの名無しさん
16/06/08 10:25:31.59 AssKLBZs.net
>>489
>>無効領域は「描画の必要がある領域」だからそういう場合「にも」無効領域は発生する。
なるほどそうですよね。すいません僕がバカでこのような考えできませんでした。

506:デフォルトの名無しさん
16/06/08 11:25:15.46 AssKLBZs.net
やっぱりわからないw
描画の必要がある領域っていうのは
プロシージャ呼ばれる前にはわからないんじゃ?
だってプロシージャ内でどう描くか記述してるんだから。
それなのに再描画必要っていってプログラム起動してしょっぱなに
WM_PAINTが発行されるのは何故なんですか?

507:デフォルトの名無しさん
16/06/08 11:25:39.49 AssKLBZs.net
と思ってしまいます。

508:デフォルトの名無しさん
16/06/08 11:33:32.92 WRRf0iRn.net
(再)描画管理はOS(とウインドウマネージャ)の仕事
ウインドウが非表示から表示になったとか裏から表に出たとか
いろんなケースで
WM_PAINT が送られる

509:デフォルトの名無しさん
16/06/08 11:35:39.56 WRRf0iRn.net
"再"描画 とかリフレッシュとかいう言葉に勘違いするのはよくある罠かな
無効化というより未処理化というのがわかりやすい
描く内容が変わったから画面更新(の指示)するのはアプリケーションの仕事
ウインドウ全体もしくはその一部を塗り直し箇所としてマーキングする
そこから先は上の再描画と同じ流れ

510:デフォルトの名無しさん
16/06/08 11:36:07.17 lMpdbKpY.net
>プロシージャ呼ばれる前にはわからないんじゃ?
何故そう思ってしまうのかが逆に全然わからない
CreateWindow直後はウインドウ全体が「描画の必要がある領域」だっていうのはシステムは当然わかってるよ

511:デフォルトの名無しさん
16/06/08 11:44:43.23 XFtKz/Go.net
どう言ったら理解できるのかがもはやわからないんだけど
真っ白な紙を渡されたら、何も書かれてない、つまり無効領域だから
何か書かなければならないのは分かるよね
もはや何のたとえ話かも�


512:墲ゥらないけど 普通の人はそんなところでつまずかないから相当気合い入れたほうが良い



513:デフォルトの名無しさん
16/06/08 16:07:34.37 ZLPAH2q/.net
>>492
簡単に言うとシステムがウィンドウの状態を見てる
そんで、被さってたウィンドウがどいたとか裏に隠れてたけど表に出てきたとか
最小化から元のサイズに戻ったとか最大化されたとかの時に無効になった(再描画が必要になった)として
WM_PAINTを送ってくれる

514:デフォルトの名無しさん
16/06/08 16:17:29.92 ZLPAH2q/.net
あ、プログラム起動してしょっぱなか
プログラムを起動してウィンドウが表示されるとクライアント領域の内容も
描画しないといけないということで、クライアント領域は無効な描画領域状態(描画が必要な状態)
なのでWM_PAINTを送ってくれる

515:デフォルトの名無しさん
16/06/09 09:07:11.76 enLYes+t.net
文字が切れて描画の必要があるときはWM_PAINTが呼ばれる事は理解しました。
ただプロシージャ自体は再描画する必要があるというイベントしか受け取って
ないわけですよね。実際TextOutで文字全体を表示しなければならないし。
では例えば具体的に今何ピクセルの情報が欠損してるかなど、
欠損してる位置などを記憶してるオブジェクトは何にあたるんでしょうか?
これはWM_PAINTが呼び出される時ではなく、切れた時点で発動するオブジェクトだと思うんですけど。

516:デフォルトの名無しさん
16/06/09 09:20:40.17 dIu2vu4F.net
ここまでの話で何度も出てるだろ…

517:デフォルトの名無しさん
16/06/09 09:34:06.31 enLYes+t.net
BeginPaint(hwnd , &ps); ですか?
hwnd→単なるウインドウのハンドル
ps→PAINTSTRUCT ps;でプロシージャで定義してるからこれではない

518:デフォルトの名無しさん
16/06/09 10:01:48.91 vUW3kMHA.net
これまでの話で、デバイスコンテキストが無効領域を管理してるんだな
と、思いつかないのは、思考方法に欠陥がある。
BeginPaintをしっかり調べりゃ、
必ずしも文字全体を再描画する必要がないことだってわかるはずだ

519:デフォルトの名無しさん
16/06/09 10:08:05.78 Sr66m38T.net
PAINTSTRUCTのフィールド確認した?
BeginPaintを呼んだ後、何が格納されるか確認した?

520:デフォルトの名無しさん
16/06/09 10:10:14.15 enLYes+t.net
いやいやデバイスコンテキストが無効領域を管理してるか
もしくは参照してるかはBeginPaint見ないと分からないですね。
参照していることを管理してると意味付けしたら別ですが。

521:デフォルトの名無しさん
16/06/09 10:11:28.60 enLYes+t.net
>>504
怠っていました。
つまりTextOut(文字列)としなくても良いってことがわかったので
そんなコード書いてみますね。

522:デフォルトの名無しさん
16/06/09 10:23:16.19 CDrC/h56.net
PAINTSTRUCT構造体
URLリンク(msdn.microsoft.com)
RECT rcPaint が 無効領域の情報を保持しているメンバ
デバイスコンテキスト経由でPAINTSTRUCT構造体を参照すれば
ps->rcPaint.leftが無効領域の左端のx座標、ps->rcPaint.topが同y座標(以下略
などで無効領域の位置が分かる

523:デフォルトの名無しさん
16/06/09 10:46:09.86 EpB3wgru.net
描画するハンドルなのにデバイスコンテキストとか糞みてぇなネーミング

524:デフォルトの名無しさん
16/06/09 10:57:53.63 M6gePxQX.net
ただ、デバイスコンテキストが無効領域を管理しているというのは、何か違うと思うけどね
強いていれば、ウィンドウを管理している何かが無効領域を管理している、と言えるかもしれない
我々の目で見える部分でいえば、HDCというよりは、HWNDが無効領域を覚えている
HWNDを指定してBeginPaintを呼び出すと、これが拾えることからも分かる通り
ただ、例の彼にとってはどうでもよいことだけどね
また良くわからないズレた書き込みをしているようだし

525:デフォルトの名無しさん
16/06/09 11:05:28.94 CSH5zx3A.net
>>508
本来はプリンタを意識した設計
プリンタに対する制御命令の羅列をなんとか抽象化して画面とそろえたもの

526:デフォルトの名無しさん
16/06/09 11:05:47.81 PDv6puL4.net
HWNDが覚えているというよりは
HWNDが色んな情報と関連付けられている

527:デフォルトの名無しさん
16/06/15 21:39:02.30 mjbwSP1S.net
              【Win10】    こんな犯罪級OS薦めんなよwww   ↓   【スパイウェア】

この使用許諾契約書には書かれています
”最後にあなたのコンテンツを含む個人データ(例えばあなたの電子メールの内容や―プライベート通信やプライベートフォルダ内のファイル)にアクセスし―開示し保全します”
開示する ここ重要だよ
契約がなければ通常 高度な違法行為になりうることです それはあなたが自分の意思としてこの契約書に同意したのです
URLリンク(www.youtube.com)

【被爆大量死】   ペットを保健所で殺処分するように国民を殺戮する自民・東電・フクシマ応援テロリスト  【放射能犯罪】

りうなちゃんは去年の暮れ、脳腫瘍のために亡くなった。2歳を過ぎたころ「放射能があるから砂は触れない」「葉っぱは触っちゃだめ」
URLリンク(twitter.com) oyaMorishita/status/648628684748816384
UFOや核エネルギーの放出を見ることはエーテル視力を持つ子供たちがどんどん生まれてくるにつれて次第に生じるでしょう。
マイト レーヤは原発の閉鎖を助言されます。
マイト レーヤによれば、放射能は自然界の要素を妨害し、飛行機など原子のパターンが妨害されると墜落します。
マイト レーヤの唇からますます厳しい警告と重みが発せられることを覚悟しなさい。彼はいかなる人間よりもその危険をよくご存じです。
福島県民は発電所が閉鎖されれば1年か2年で戻って来られるでしょう。
日本の福島では多くの子どもたちが癌をもたらす量の放射能を内部被ばくしています。健康上のリスクは福島に近づくほど、高まります。
日本の近海から採れた食料を食べることは、それほど安全ではありません。汚染されたかもしれない食料品は廃棄すべきです。
日本もさらに多くの原子力発電所を作ろうとしています。多くの人々が核の汚染の影響で死んでいるのに、彼らは幻想の中に生きています。
問題は、日本政府が、日本の原子力産業と連携して、日本の原子力産業を終わらせるおそれのあることを何も認めようとしないことです。

528:デフォルトの名無しさん
16/06/18 06:33:38.33 MIQvGXJh.net
今このページをブラウザ(クローム)で開いていますが
このブラウザのウインドウ・ハンドルから
EnumChildWindowsして、お絵かき領域"wPaint-canvas"のハンドルを取得したいのですが
子ウインドウは「Chrome Legacy Window」の1つしか取得できず
その孫ウインドウは1つも取得できません
(試しに、Outlook Expressを調べると孫ウインドウまで色々と取得できます)
なんとかお絵かきキャンバスにアクセスできないものでしょうか

529:デフォルトの名無しさん
16/06/18 07:14:54.10 3SzE3rgE.net
例えばあなたが銀行のページを見ていて
横からそのページにアクセスできたらどうしますか?

530:デフォルトの名無しさん
16/06/18 10:45:35.39 KIJwdLCd.net
クロームが最下層まで全部自前で描画してたらウィンドウハンドル自体が無いと思われ

531:デフォルトの名無しさん
16/06/18 10:58:51.74 KIJwdLCd.net
特にクロームはフラッシュを内蔵しているからハンドル無くてもおかしくない

532:デフォルトの名無しさん
16/06/18 14:04:30.57 AGMP56Qn.net
canvasってHTMLのDOMじゃねーのか?

533:デフォルトの名無しさん
16/06/18 14:20:53.00 z5tqSjVb.net
DOMのclass属性とWNDCLASSの区別がついてなくて
canvasがChildWindowだと思ってて
canvasにwPaint-windowってclassを設定してるから
EnumChildWindowsで取れると思ってんのよ

534:デフォルトの名無しさん
16/06/18 14:22:41.72 z5tqSjVb.net
もちろん実態は最初の前提が間違ってるから「できるわけがない」

535:デフォルトの名無しさん
16/06/19 12:50:07.45 wWCYPJVS.net
Windows8以降だとtimeBeginPeriodでタイマー精度を1msに設定しても電池持ちに悪影響は無いんでしょうか
Windows8以降はticklessカーネルだから悪影響は無いというような事が書いてある記事がありますが
どんなハードウェアとか状況でもそうなんですか?

536:デフォルトの名無しさん
16/06/19 14:02:51.46 5KvSKdL/.net
URLリンク(ryo021021.hatenablog.com)

537:デフォルトの名無しさん
16/06/19 14:07:33.03 XJg+8VdY.net
chrome 使うと負荷が増えるって昔聞いたことがあったっけ
そういうことかい

538:デフォルトの名無しさん
16/06/20 07:52:22.29 ccfWO27l.net
>>521
そのブログの人、Windows7ユーザーっぽいから質問者のWindows8以降の話の回答にはなってなさげね

539:デフォルトの名無しさん
16/06/20 08:36:55.24 3NNTVW74.net
俺のWindows7環境ではtimeBeginPeriodなんて呼ばなくてもSleepは1ms精度になってるんだが

540:デフォルトの名無しさん
16/06/20 08:56:33.89 usQ28XEZ.net
普通のWindowsはRTOSではないのでレスポンスタイムの保証はない
設定できることと 精度が保証されることとは別
Windows10IoT(旧WindowsEmbedded)がどうなっているかは知らないけど

541:デフォルトの名無しさん
16/06/20 10:21:10.16 3NNTVW74.net
保証されないのはあたりまえ
EmbeddedでもIoTでも一緒だよ
それとtimeBeginPeriodの話は関係ない

542:デフォルトの名無しさん
16/06/20 11:13:48.10 3NSvhYkC.net
timeBeginPeriodよりスレッド単位で優先度を指定するMMCSSでの設定の方が行儀が良いんでないっけ
どのみちスレッド切り替えの頻度を上げることには変わりはないのだから消費電力への影響はあるだろうけど

543:デフォルトの名無しさん
16/06/20 14:55:49.31 78XmmaUt.net
Windows7以降のOSだとDirect3D9使うよりDirect3D11とか使った方が同じ処理でも速くなる?

544:デフォルトの名無しさん
16/06/20 15:41:47.81 /1RXmdBC.net
そりゃドライバの出来にもよるし

545:デフォルトの名無しさん
16/06/20 15:41:48.38 3NNTVW74.net
>>527
スレッドのプライオリティを設定したいなら(よっぽどのことがなければお勧めしないが)SetThreadPriorityを使えばいい
MMCSSはそれをやってないマルチメディアアプリの救済機能だと理解してる

546:デフォルトの名無しさん
16/06/20 22:16:41.09 ccfWO27l.net
>>525
Windows10IoTはUWP前提だから、なおさら悪そう

547:デフォルトの名無しさん
16/06/21 12:04:43.28 LE9F52CG.net
D3D11 ってデバイスロストの面倒見なくて良くなったんだっけ

548:デフォルトの名無しさん
16/06/21 18:27:13.32 fuc/q6yL.net
GPUがTDR起こすとロストする

549:デフォルトの名無しさん
16/06/23 10:54:04.97 awVn2K/F.net
アプリ実行中にドライバを更新したりするとロストするらしいよ。
URLリンク(msdn.microsoft.com)

550:デフォルトの名無しさん
16/06/23 10:57:57.58 YrvC//rF.net
それは当たり前じゃね?

551:デフォルトの名無しさん
16/06/23 11:26:57.96 FjipjPjg.net
D3D9世代のOSだと別アプリが排他フルスクリーンになっただけでロストしてたからね
耐性はかなり高くなったけどロスト処理から完全に開放されたわけでもない
動作検証で任意にロスト起こしたいならデバマネからグラフィックドライバを無効すればよい

552:デフォルトの名無しさん
16/06/23 11:34:40.47 332nxUAD.net
smplayerでmp4再生したら見事にロストしてくれたはthx

553:デフォルトの名無しさん
16/06/26 15:32:26


554:.59 ID:nR9q+WlS.net



555:デフォルトの名無しさん
16/06/27 01:49:15.06 WrVlvgBr.net
ちょっと前マイクロソフトの中の人らしい人が
twitterでロストしたら終了する事をお勧めするとか身も蓋もない事言ってた

556:デフォルトの名無しさん
16/06/28 08:54:31.13 Ek0WLuSu.net
windows7からウィンドウの上下ドラッグである程度大きくすると
自動的に縦サイズだけ最大化する機能があるんだけど
あれを禁止したり挙動変えるにはどうすればいいでしょうか?

557:デフォルトの名無しさん
16/06/28 09:09:22.68 pgmex0YM.net
URLリンク(www.atmarkit.co.jp)
Tech TIPS:
Windows 7でウィンドウのAeroスナップ機能を無効にする
Windows 7のAeroスナップ機能が有効な場合、ウィンドウのタイトル・バー部分を画面の端へドラッグするだけで最大化したり、左右に並べて整列させたりできる。コントロール・パネルで設定を変更すれば、この機能を無効にできる。

558:デフォルトの名無しさん
16/06/28 09:39:27.20 rabCRM7S.net
このスレで聞いてるのだから、APIを教えろってことじゃないの?

559:デフォルトの名無しさん
16/06/28 10:24:01.46 UehficRp.net
レジストリ編集系のAPIを使えばほぼなんでもできるやろ

560:デフォルトの名無しさん
16/06/28 10:46:26.79 4uPkxyfr.net
>>539
T社を買収して完璧なAPIに再構築するまでもうしばらくお待ち下さい

561:デフォルトの名無しさん
16/06/28 13:41:44.15 a3nSzCGl.net
>>540
スナップインを無効

562:片山博文MZ ◆T6xkBnTXz7B0
16/06/28 20:05:49.71 /EmS/Fyw.net
Windowsの絵文字サポートはどこまで進んでいる?

563:デフォルトの名無しさん
16/06/28 21:33:53.66 8HwZwHHy.net
FirefoxがTrueTypeを自力でレンダリングしなきゃならないくらい

564:デフォルトの名無しさん
16/06/28 21:36:04.97 jXofjD/x.net
WindowsがUTFに移行すれば早いんだけど

565:デフォルトの名無しさん
16/06/29 12:14:01.70 xPFVh+mM.net
その前に Windows が絶滅するかもな
Android ChromeOS の勝利

566:デフォルトの名無しさん
16/06/29 16:18:58.51 zh/CO/83.net
>>546
URLリンク(www39.atpages.jp) の851手書き雑フォントを使うのが今のところ一番の妥協策だと思う。
RobotoJやメイリオ-AARもいいが、絵文字以外の漢字も…となると両方とも851手書き雑フォントより少し劣る。
他のフォントは(Microsoft謹製のSegoe UI Symbolや貴殿が作ってくれた梅フォントPZを含めて)どれも更に劣るが…

567:デフォルトの名無しさん
16/06/29 19:59:57.53 LWp+msui.net
レジストリ内の指定位置から下の階層をまるまるバイト列などで取得したり、
逆に取り込んだりすることは、APIでできるのでしょうか。
コマンドプロンプトから
reg export HKCU\Software\...
reg import HKCU\Software\...
を実行したときと同じようなことを、自作アプリ内で行いたいのですが。

568:デフォルトの名無しさん
16/06/29 21:16:33.31 lW/yxd55.net
できると思うけど、管理者権限を与えないと無理かも

569:デフォルトの名無しさん
16/06/29 21:32:59.15 lW/yxd55.net
CString CRegistry::GetRegValueStr(HKEY hKey, CString SubKey, CString KeyName, CString DefaultString)
BOOL CRegistry::SetRegValueStr(HKEY hKey, CString SubKey, CString KeyName, DWORD DataType, CString strValue)
このへんは?

570:デフォルトの名無しさん
16/06/29 22:58:54.44 h8+xihiz.net
>>551
API 使ってちょっとコード書けばできると思うが
> レジストリ内の指定位置から下の階層をまるまるバイト列などで取得したり、
> 逆に取り込んだりする
専用の API があると思ってないだろうな?

571:デフォルトの名無しさん
16/06/29 23:32:15.05 Z73kXcdz.net
>>551
RegOpenKeyExとか使ってあとはぐるんぐるんと

572:デフォルトの名無しさん
16/06/30 08:30:09.10 j22CMfak.net
>>551
指定した所の値取得はできるから
ループ回して指定以下全て取得するようにしたらいいよ

573:デフォルトの名無しさん
16/06/30 08:37:05.63 Mg1DKigT.net
そんなAPIがあったとしても、値の返却方法考えたら、ループ回す方がはるかに簡単だな

574:uy ◆e6.oHu1j.o
16/06/30 08:43:29.06 U+B64GZ8.net
質問です
PeekMessageとかSendMessageとか色々ありますけど
そのメッセージって一度に大量に来た場合ってアプリクラッシュしないんですか?

575:デフォルトの名無しさん
16/06/30 08:52:39.65 Mg1DKigT.net
クラッシュするように作られてるプログラムはクラッシュする
当たり前だ
一般的にはバグと呼ばれている

576:uy ◆e6.oHu1j.o
16/06/30 10:59:59.38 U+B64GZ8.net
>>559
URLリンク(codepad.org)
転載元: wisdom soft
バグというか脆弱性って言うほうが近いけど
こういうウィンドウって
外部から落とせるのかな?っていう疑問

577:uy ◆e6.oHu1j.o
16/06/30 11:38:44.52 U+B64GZ8.net
パソコンにC言語コンパイラが入っていなかった
諦める

578:デフォルトの名無しさん
16/06/30 11:41:51.57 8IMpbPEW.net
そのスレッドのメッセージキューがいっぱいになっても落ちたりはしない
プロセスキルはできる
昔はキューいっぱいになってWindowsごと止まったなあ・・・

579:デフォルトの名無しさん
16/06/30 12:17:00.45 bSccWkK0.net
もうその流れ秋田

580:uy ◆e6.oHu1j.o
16/06/30 13:25:28.04 U+B64GZ8.net
>>562
じゃあ今は多分無理かな
>>563
他にWinAPIの利用方法を知らない

581:デフォルトの名無しさん
16/07/08 00:03:57.41 AI/Q8yEO.net
壁紙とデスクトップアイコンの間のレイヤー?にTextOut()する方法を
教えてください。

582:デフォルトの名無しさん
16/07/08 03:42:35.31 L4ZXDalo.net
そんなものはありません
現在の壁紙に直接文字を描画するのが一般的です

583:デフォルトの名無しさん
16/07/08 10:09:12.30 ERN9BCt7.net
デスクトップに重ねて透明Window作れば?

584:デフォルトの名無しさん
16/07/08 11:14:09.94 Os6EI0g/.net
それじゃアイコンの上に描画するだろ

585:デフォルトの名無しさん
16/07/08 13:58:57.41 WN2toBJM.net
>>568
そんなことはないよ

586:デフォルトの名無しさん
16/07/08 15:41:34.80 Z0zroLgC.net
そんなことあるやろ?
どういう原理や?

587:デフォルトの名無しさん
16/07/08 16:54:42.46 01+4ed2Z.net
あのアイコンはリストビューのアイコン表示なんじゃないの?知らんけど

588:デフォルトの名無しさん
16/07/08 20:00:28.65 gjq4uhFL.net
>>567
それは X window の考え方

589:片山博文MZ ◆T6xkBnTXz7B0
16/07/08 20:10:00.63 5bf5xqe9.net
「最背面 Win32 API」でググれ

590:564
16/07/09 09:47:16.52 xG4M4Iyi.net
まだ自分にはレベルが高すぎる課題でした。
ありがとうございます。
解決には至りませんでした。

591:デフォルトの名無しさん
16/07/10 20:50:46.93 J7L2i5Ph.net
アルファチャンネルで抜けば良い。

592:デフォルトの名無しさん
16/07/10 23:48:47.81 /zxXYSmb.net
HTTPサーバーから特定ファイルをダウンロードする際、URLがリダイレクトされた場合を検出したいと思っています。
ブラウザで特定ファイルURIを指定して、意図したとおりにリダイレクトされる環境であることを確認した後、
実際に下記コードでステータスを取得してみましたが、どうしても200が返ってきてしまいます。
意図するステータスは302(ないしは303などリダイレクトを表すステータス)なのですが、何か不足しているか
手順が間違っているのでしょうか?
hInetFile = InternetOpenUrl(hInet, lpszUrl, NULL, 0, INTERNET_FLAG_NO_AUTO_REDIRECT | INTERNET_FLAG_DONT_CACHE, 0);
HttpQueryInfo(hInetFile, HTTP_QUERY_STATUS_CODE, szStatus, &dwBufSize, &dwIndex);
szStatusは"200"となってしまいます。
存在しないURIを指定すると"404"となります。(これは当然)
よろしくお願いします。

593:デフォルトの名無しさん
16/07/11 00:14:34.48 /WdS7w57.net
>>576
htmlかjavascriptでリダイレクトされてるんじゃないの?
通信内容確認した?

594:575
16/07/11 00:39:17.05 mE5jKs6R.net
>>577
すみません。情報が抜けていました。
とりあえず現在リダイレクトテストとして、自鯖apache2.xでmod_rewrite.soを有効にし、
テスト用URLに.htaccessを置いて中身は以下のような感じにし、リダイレクトされることを確認しました。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^対象ページのURL$ 移転後のURL [R=302,L]
</IfModule>
そもそもリダイレクト検出が必要となった理由が、ドメイン更新手続きを担当者が忘れた結果、
ドメインが一時凍結されてしまいました。
しかし、ブラウザ・プログラムシステム側ともに404エラーにはならずにDNS管理会社の
ドメイン一時停止中だよページ(?)にリダイレクト状況(?)になり、特定ファイルのダウンロードも
エラーにはならずにステータス200で返ってきてしまっていました。
結果、ファイルの中身は本来のものとは異なるデタラメなもので、システム側が誤作動を起こした。
ということがありまして、今回リダイレクト環境を用意した上でテストしてみたのですが、
ドメイン一時停止中に遭った現象を同じくステータス200が返ってきてしまっている現状です。
しかし、javascriptでリダイレクトされるとステータスが取れないとなると、誤作動対策としては
別の方法を考えなければいけないかもですね。
当面、内々の事情としてはドメイン更新を忘れなきゃOKな話でもありますし。

595:デフォルトの名無しさん
16/07/11 08:37:30.50 BOCVQw3X.net
試してないけど MSDN 見る限りは HttpSendRequest が要るんじゃね?
INTERNET_FLAG_NO_AUTO_RED IRECT
Meaning Does not automatically handle redirection in HttpSendRequest.
URLリンク(msdn.microsoft.com)(v=vs.85).aspx

596:デフォルトの名無しさん
16/07/11 16:01:04.43 Ffg41DtV.net
dnsならそもそもリダイレクトじゃなくてipで管理会社のサーバーにとばされただけじゃないの?
接続先のサーバーがいじれるならカスタムのhttpヘッダ付けるとかで判定した方が楽だと思う。

597:575
16/07/11 18:00:53.06 yrWfG2oN.net
>>579
現状で200や404が返ってきているので”これで正解”風味な感触を得ていましたが(実際ダメ


598:でしたが)、 確かにHttpSendRequestを経ていけば結果が変わりそうですね。 テストしてみて、また報告します。 >>580 確かに単にIPで飛ばされているのも確かです。 ただ、URLの奥深い階層のあらゆるファイルも全て404にならず、意図しない内容のものがダウンロード されてしまうので、リダイレクトもされているであろうと当たりを付けました。 HTTPカスタムヘッダーはいい案ですね。鯖側管理者と相談してみます。



599:デフォルトの名無しさん
16/07/11 18:15:46.95 DHaYiQ8W.net
リダイレクトされたかどうかじゃなくて
内容が意図してるものなのかどうかチェックすればいいんじゃないの?

600:デフォルトの名無しさん
16/07/11 19:19:09.82 zdvynnCD.net
>>578
サーバー側のmod_rewriteのリダイレクトは検出出来ないんじゃね?

601:デフォルトの名無しさん
16/07/11 19:20:56.59 zdvynnCD.net
>>578
サーバー側のmod_rewriteのリダイレクトは検出出来ないんじゃね?

602:デフォルトの名無しさん
16/07/11 22:11:30.20 O0wDeDe6.net
>>578
サーバー側のmod_rewriteのリダイレクトは検出出来ないと思う

603:デフォルトの名無しさん
16/07/12 08:10:05.82 5gnI1m0l.net
>>583-585 には
と言う意味なら正しい

604:デフォルトの名無しさん
16/07/13 08:57:46.63 Fl43tCNC.net
もう見てないと思うけど、
十数年前、矩形を短形と読んで恥をかいていた者です。
自分はもう落ち目なんですけど、このスレ・板に感謝しています。
ただの自己満足です。
名無しなのに回答してくる風土が好きです。貢献できなくて、すみません私はクズです。
以上。

605:デフォルトの名無しさん
16/07/13 17:19:35.41 Zm0ukFfg.net
方形を包茎だと思ってたよ

606:デフォルトの名無しさん
16/07/13 17:30:36.22 ZdYcti+1.net
Tank Way

607:デフォルトの名無しさん
16/07/13 17:33:39.54 ZZxmFYpS.net
539 名前:デフォルトの名無しさん :04/12/12 19:44:43
BCCで簡単な画像編集アプリを作りたいんですが
一般的なキャンバスの仕組みが分かりません。
灰色の背景に白地のキャンバスエリアだとして、ただ白の短形を描画して
その上から線を引くとしたら白の短形を再描画した時消えるし
どう作ればいいのでしょうか?
保存する時はクライアントエリア上に直接描かれた絵を1ピクセルずつ色を
キャプチャして保存するような感じでいいのですか?
リンク探しても、それっぽい内容が見当たりません。
どなたか教えてください。
540 名前:デフォルトの名無しさん :04/12/12 19:48:16
たんけい選択
541 名前:デフォルトの名無しさん :04/12/12 19:54:55
短形
542 名前:デフォルトの名無しさん :04/12/12 19:56:10
たんけいコピー

608:デフォルトの名無しさん
16/07/13 18:22:49.47 BO773i0L.net
よく残ってんなw
リアルタイムでスレにいた気がするが、よく覚えてないぞ


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch