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


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

Win32API質問箱 Build66



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

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

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

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

Win32API質問箱 Build65
pc11.2ch.net/test/read.cgi/tech/1208847084/

152 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 00:32:57 ]
>>149
LVS_SHOWSELALWAYSスタイル付ければいいような気がする

153 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 01:22:59 ]
>>148
試したところ上手くいきました。ありがとうございます。

検証コード
#include <windows.h>
#include <msxml2.h>
#include <stdio.h>
#pragma comment(lib, "ole32")
#pragma comment(lib, "msxml2")
void examine() {
static int counter = 0;
IXMLDOMDocument* pv = NULL;
HRESULT hr = CoCreateInstance(CLSID_DOMDocument2, NULL, CLSCTX_INPROC_SERVER, IID_IXMLDOMDocument, (void**)&pv);
printf("%d : hr=%08lx\r\n", ++counter, hr);
if (SUCCEEDED(hr) && pv) { pv->Release(); }
}
void main () {
examine(); CoInitialize(NULL);
examine(); CoInitialize(NULL);
examine(); CoInitialize(NULL);
examine(); CoUninitialize();
examine(); CoUninitialize();
examine(); CoUninitialize();
examine();
}

154 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 04:48:05 ]
>>153
DllMainでCoInitializeを呼ばないように注意して書いた方がいいぞ

155 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 20:02:02 ]
>>152
それはすでにやっていて、フォーカスが外れても灰色にはなるのですが
その灰色になる時に青いままにしたいのですが無理でしょうか?

156 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 20:08:52 ]
できないことも無いけど、フォーカスが無いことをユーザーはどうやって知るの?

157 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 20:17:54 ]
教えてから訊いてやれよw

158 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 21:32:45 ]
>>151
そうなんですかね、
あきらめてフックしなきゃダメか。

159 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 22:40:29 ]
>153
それはアパートメントはどーなるんだ?
MTAとか混じってたら死亡でないのか?

160 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 22:48:05 ]
海外ドメイン規制で書き込めねー
>>51
やってみたんですがダメでした。成功したらまた来ます。



161 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 23:02:34 ]
>>159
エラーになってRPC_E_CHANGED_MODEが返ってくる。
msdn.microsoft.com/en-us/library/ms695279(VS.85).aspx

162 名前:デフォルトの名無しさん [2008/05/21(水) 09:34:44 ]
BMPの描画でダブルバッファリングを行いたいのですが、
〔背景BMP+新BMP〕HDC hdcBmp = 背景BMP
HDC hdcBmp3 = CreateCompatibleDC(hdcBmp);
HBITMAP hBMP3 = CreateCompatibleBitmap(hdcBmp,300,300);
SelectObject(hdcBmp3,hBMP3);
BitBlt(hdcBmp3背景BMPの上に新BMPを描画);

case WM_PAINT:
BitBlt(GetDC(hWnd),hdcBmp3を描画);
背景BMPに新BMPをくっつけたものを描画したいのですが
背景BMPが黒で塗り潰されてしまいます。
┏━━━━━━━━━┓
┃背景BMP     ┃
┃┏━━━━━━━┓┃
┃┃新BMP ┃

163 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 09:46:00 ]
それでどうしたいんだ?

164 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 09:48:55 ]
背景BMPが黒になるのを防ぎたいです。

165 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 09:53:39 ]
>>162,164
その疑似コードだけ見ると、hdcBmp3に背景BMPを描画していないように
思えるが。



166 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 09:58:47 ]
>>165
BltBlt(hdcBMP3,背景BMP);
BltBlt(hdcBMP3,新BMP);
これで大丈夫でしょうか?

167 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 10:50:26 ]
>>162
CreateCompatibleBitmapにメモリDCを指定しては駄目。

あと
>case WM_PAINT:
>BitBlt(GetDC(hWnd),hdcBmp3を描画);
これは駄目だろ

168 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 10:57:03 ]
>>167
CreateCompatibleBitmapには何を指定すればよいのでしょうか?

169 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 12:25:51 ]
GetDC()あるいはCreateDC("DISPLAY")の結果あたりを渡すのが吉

170 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 12:30:01 ]
描画用バッファは面倒だから全部DIBSectionでいいよもう



171 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 12:39:18 ]
>>162
突込みどころ満載のソースだな
まぁ頑張れw

172 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 12:43:18 ]
>>162
背景と前景を自前で合成して描画すればおk

173 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 12:50:05 ]
GDIはあと何年くらい使われるんだろう

174 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 13:05:19 ]
俺はwin32APIで作れなくなったら、ウィンドウズソフト開発から身を引く。引退。
MFCとかプログラミングじゃねーよ。あれ

175 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 13:44:17 ]
>>171
突っ込んで下さい。

176 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 14:33:55 ]
なんでやねん

177 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 15:00:09 ]
>>174
MFCなんて一皮剥けばバリバリWin32APIじゃないか

178 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 17:22:34 ]
>>177
プログラミングスタイルが受け付けない
TODO:ここにプログラム書いてね。みたいなのばかり。
しかも、いちいち用意されてる関数調べて、くっつけるだけ。
それで動かしてみて、動いてよかった。で終わり。
こんな状況でバグが出たら、生き地獄だ。

179 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 17:27:43 ]
はあ?

180 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 17:33:16 ]
用意されてる関数しらべてくっつけるだけってそれ以外のぷりぐらみんぐおれしらねー



181 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 17:39:51 ]
>>178
Win32APIの勉強始めた頃は俺もそう思ってた。
今じゃGUIライブラリ無しで作る気起きませんサーセン

182 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 18:01:25 ]
>>172
HDC hdc, hdcBmp[1], hBack[1];
HBITMAP hBmp[1];
BITMAP bm;
hdc = GetDC(hWnd);
hdcBmp[0] = CreateCompatibleDC(hdc); //背景BMP
hdcBmp[1] = CreateCompatibleDC(hdc); //新BMP
hBack[0] = CreateCompatibleDC(hdc); //合成BMP
hBmp[0] = (HBITMAP)LoadImage(hInst,MAKEINTRESOURCE(IDB_BITMAP1),IMAGE_BITMAP,0,0,LR_DEFAULTCOLOR);
hBmp[1] = (HBITMAP)LoadImage(hInst,MAKEINTRESOURCE(IDB_BITMAP2),IMAGE_BITMAP,0,0,LR_DEFAULTCOLOR);
SelectObject(hdcBmp[0],hBmp[0]);
SelectObject(hdcBmp[1],hBmp[1]);
// バックBMP
hBack[0] = hdcBmp[0];
BitBlt(hBack[0],0,20,bm.bmWidth,40,hdcBmp[1],0,20,SRCCOPY);
ReleaseDC(hWnd,hdc);
case WM_=PAINT:
BitBlt(hdc,0,100,bm.bmWidth,bm.bmHeight,hBack[0],0,0,SRCCOPY);
hdcBmp[0]とhdcBmp[1]に背景と新BMPを読み込み、背景と新BMPを合成したものをhBack[0]に読み込む。
そしてWM_PAINT時に合成した画像を描画する。という事ですか?

183 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 18:15:46 ]
標準関数も用意されてる関数だよなって突っ込みはなし

184 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 19:16:48 ]
 5月14日に民主党の円より子参議院議員から、ある嘆願が提出されました。内容は、「美少女
アダルトアニメやゲームを規制すべき」というものです。もしもこれらが規制されてしまうことに
なれば、全国のモテない童貞男子諸君にとって大打撃です。

 この嘆願が提出された理由ですが、ちょっとひどい。

  街中に氾濫(はんらん)している美少女アダルトアニメ雑誌やゲームは、小学生の少女を
  イメージしているものが多く、このようなゲームに誘われた青少年の多くは知らず知らず
  のうちに心を破壊され、人間性を失っており、既に幼い少女が連れ去られ殺害される事件
  が起きている。これらにより、幼い少女たちを危険に晒(さら)す社会をつくり出していること
  は明らかで、表現の自由以前の問題である。社会倫理を持ち合わせていない企業利潤追
  求のみのために、幼い少女を危険に晒している商品を規制するため、罰則を伴った法律
  の制定を急ぐ必要がある。

  ついては、美少女アダルトアニメ雑誌及び、美少女アダルトアニメシミュレーションゲーム
  製造及び販売規制の罰則を伴った法律を制定されたい。

 物凄く分かり易く要約すると、「エロゲーをする奴は心が壊れていて人間じゃないから幼女を
強姦する。だからエロゲーを規制しろ」ということになります。ええと、円議員あなたの血は何色
ですか?

 だいいち嘆願理由にしても私から言わせて貰えば、「ゲームをしているうちに心が破壊される」
のではなく、「現実世界で心が破壊されたからゲームに逃げた」のです。よくよく考えれば普通の
人は分かるはずです。あれはタダの絵だ、と。

 この「美少女アダルトアニメ雑誌及び美少女アダルトアニメシミュレーションゲームの製造・販
売を規制する法律の制定に関する請願」に賛同している議員は、円より子参議院議員のほかに
は、同じく民主党の下田敦子参議院議員がいます(5月21日現在)。増えないことを祈るばかりです。

digimaga.net/200805/adult-game-user-is-not-human.html


185 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 20:09:47 ]
>>182
まずは分かりやすい変数名を付ける事から学べ

186 名前:デフォルトの名無しさん [2008/05/21(水) 20:19:12 ]
>>185
すみませんでした。
背景用変数 = 背景BMP;
貼付けるBMP用変数 = 新BMP;
上部二つの合成用変数 = 合成したBMP(背景BMP+新BMP);
BitBlt(上部二つの合成用変数);

187 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 20:46:35 ]
>>186
まずは分かりやすい変数名を付ける事から学べ

188 名前:デフォルトの名無しさん [2008/05/21(水) 20:50:50 ]
>>187
>>186では不満ですか?

189 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 20:55:16 ]
>>188
お前はプログラマに向いていない
転職をおすすめする

190 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 21:03:26 ]
仕事でやってんならもう少しまともなコメントぐらいつけろよ
そのゴミソース引き継いだ奴はめちゃくちゃ苦労するんだよボケがw




191 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 21:05:56 ]
>>182
WM_PAINTがきたときに背景BMPと重ねるBMPを
自前で合成して一度のBiBlt呼び出しで描画するという意味。
それぞれのBMPはメモリ上にあるんでしょ?
とりあえずこれで動くものを作ってから原因とか考えながらゆっくりAPIの使いかた覚えればいいと思うよ。

192 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 21:36:47 ]
つい最近VC++2008ExpressEditionをいじり始めたものです。
テキストエディタまがいのものでもつくってみようと始めたはいいのですが、
GETOPENFILENAME 関数を使ってファイルを開くダイアログを作ろうとしたところ、
"OPENFILENAME構造体が定義されていない"
とエラーが出ます。
てっきり windows.h で定義されていると思っていたのですが、
これでないならなんのヘッダをインクルードすればいいのでしょうか?

193 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 21:48:53 ]
>>192
Declared in Commdlg.h, include Windows.h

てっか、WindowsSDK入れてる?

194 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 22:00:45 ]
>>192
WIN32_LEAN_AND_MEAN

195 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 22:02:04 ]
>>191
WM_CREATE等最初に合成したものを
WM_PAINT時に使うということですか?

196 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 22:14:25 ]
>>182
ソースが突込み所満載なんだがまさか釣りじゃないよな?
本気で書いたソースならC言語についてもやばいぞ

197 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 22:20:08 ]
>>196
早く突っ込んでくれ

198 名前:192 mailto:sage [2008/05/21(水) 22:22:28 ]
>>194
自動で定義されていたそれをコメントアウトしたら解決しました。
ありがとうございます。
>>193さんもありがとうございました。

199 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 22:27:37 ]
>>197
なんでやねん

200 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 22:39:34 ]
>>197
じゃあケツ出せよ



201 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 22:41:15 ]
>>156
WM_ACTIVATEでフォーカスを失った時にブレークにはかかったのですが、
カスタムドローするのに必要なパラメータがなかったのでできませんでした。
オーナードローで頑張ればできるのでしょうか?

202 名前:デフォルトの名無しさん [2008/05/21(水) 22:52:33 ]
聞きたいのですが、
BITMAPの合成はどうやればよいのですか?

203 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 23:33:54 ]
>>195
別にWM_CREATE時じゃなくていいよ。
ちらつきを抑えたいからダブルバッファしたいんだろうからBMPは常にメモリ上にあるという仮定で、
WM_CREATEがきたときに別途mallocでもnewでもいいからバッファを確保して
そのバッファに背景BMPと表示したいBMPを合成したものを作成。
それをBitBltやStretchDIBitsのような描画関数で表示。

204 名前:デフォルトの名無しさん [2008/05/22(木) 00:00:22 ]
WindowsX.h にある
HANDLE_MSG() マクロを WM_COMMAND に対して使うとき、なんで return 0; になるんだ?

HANDLE_MSG() に渡すfn は void func(HWND...) でvoid型だし、HANDLE_MSG() 自体も

#define HANDLE_MSG(hwnd, message, fn) ¥
case message):return ((fn)(hwnd,...),0L)

でマクロ展開で「return 0;」が出てくる理由がよく解らん。

case message: return func(hwnd,...); //func() はvoid型

になるんじゃないの?

205 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 00:10:42 ]
カンマ演算子
return a, b;
returnされるのはbの値。

206 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 06:15:18 ]
メッセージクラッカって定義おかしくね?

WM_DRAWITEMとか、
> If an application processes this message, it should return TRUE.
って書かれてるのにvoidでreturn 0;されてるし

207 名前:デフォルトの名無しさん [2008/05/22(木) 06:17:56 ]
さんくす>>205
カンマ演算子、か。K&Rの演算子の表の一番下に確かにそんなのあるな。いままで意識した事無かった

ありがと

208 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 08:01:40 ]
>>205
間違っています。
以上。
↓次の方どうぞ

209 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 08:58:29 ]
キモ

210 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 09:05:15 ]
キモ



211 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 10:19:57 ]
ゲーム作ってるんだけど、メモリ内のデータ書き換え防止する方法とかある?
外部アプリからメモリ内サーチして書き換えるやつ防止したい。助言よろ。

212 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 10:34:36 ]
PCの電源切れ

213 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 11:03:18 ]
>>211
オンラインゲームじゃないなら、改造対策は不要では?

俺もゲーム作ってるんだが、ブログで改造対策のこと書いたら、
「改造対策する時間があるなら、ゲームのボリュームを増やすこととか、
もっとまともなことに使って欲しい」ってコメントが多かったよ。
改造するかはユーザーの自由なんだし、ユーザーとしては当然のコメントだが。

あと、いまどきの改造は、プロセスメモリエディタ+ルートキットで
やるから、改造を防止するなら、ユーザーから非難されることを覚悟のうえで
ルートキットじみたことをするしかないでしょうね。

214 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 12:37:49 ]
VC++のリソースエディタでダイアログボックスが作れますが、
そのような外観の(ダイアログでない)ウィンドウを、
ウィンドウクラスで作ったウィンドウに、コントロールぺたぺた貼って作ろうと思ったら、
(CWndではなく、RegisterClassEx、CreateWindow使って)

・ウィンドウの背景色は何故かCOLOR_BTNSHADOWが(ダイアログと)等しい
・エディットボックスはCreateWindowExの第1引数にWS_EX_CLIENTEDGEにしないと立体の縁にならない
・フォントはWM_SETFONT使ってサイズを変更しないと文字がでかい
・そもそもデフォルトのフォントが当然MS shell dlgではないようで、よくわからない
 (ただ、画面のプロパティから、故意にダイアログとウィンドウのフォントを違うものにした覚えはない…)

実際CreateDialogマクロでダイアログが作られるとき、ここら辺の設定ってどうなっているのですか?
このマクロもCreateWindowExを使ってウィンドウを作ると書いてあるので、
同じようなことが再現できるのではと思ったのですが…

(CreateDialogがウィンドウの大きさを決めるとき、フォントを元に作ってあるのはわかったのですが…)

215 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 13:05:33 ]
Process Explorerで表示できるWindow Titleと同じものを取得したいと思っています。
どうもGetWindowTextで取得できるものとは別物らしく、
Process ExplorerでJuneブラウザのWindow Titleを見ると、
GetWindow〜で取得した名前とは違うものを表示しているのがわかります。

一体Process Explorerで表示できるWindow Titleとは何者か、
どうすれば取得できるのでしょうか?


216 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 13:19:39 ]
>>215
ttp://msdn.microsoft.com/en-us/library/ms633520.aspx
> GetWindowText cannot retrieve the text of a control in another application.

217 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 13:34:18 ]
使えないAPIなんですか。エディットコントロールじゃなければいいはず…ですよね。
そうするとWindow Titleってなんだろうという話になりまして、

たとえばJaneブラウザを表示したとき、以下のようになります。

・キャプションバー、およびProcessExplorer上WindowTile列の表示
 →”Jane Doe Style 【プログラム】 - Win32API質問箱 Build66”

・GetWindowText、およびタスクマネージャ上の表示
 →”Jane”

”Jane Doe Style 【プログラム】 - Win32API質問箱 Build66”の文字列を取得したいわけですが、
その方法はご存知でしょうか?

218 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 13:44:31 ]
Delphiアプリケーションには実は見えないアプリケーションウィンドウがあって・・・

219 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 14:00:33 ]
>>218
VBアプリもそんな感じだったな
だからタスクバーに表示しないプロパティなんてのがあるんだけど

220 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 14:07:52 ]
spy++ とか眺めてみるといいと思う



221 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 14:14:12 ]
あー…なんとなくイメージ掴めてきました
メインウィンドウに見えたのは子ウィンドウで、だから取得できなかったと。

子ウィンドウのウィンドウタイトルの取得とか、そのあたりを調べてみます。

ありがとうございます

222 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 14:14:17 ]
>>217
こんなんでいいのかな?
#include<windows.h>
#include<stdio.h>

int main(void){
char title_buf[256], *class_name="TMainWnd";
int title_len;
HWND hwnd;

hwnd=FindWindow(class_name, NULL);
if(hwnd==NULL){
printf("Window not found. class name [%s]\n", class_name);
return 1;
}

title_len=GetWindowText(hwnd, title_buf, sizeof(title_buf)-1);
if(title_len>=0) printf("%s\n", title_buf);

return 0;
}

223 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 14:59:33 ]
>>222
どうもです
実行結果とSpy++を併せて見て、おおよそ理解できました。

デルファイでもVBでもデフォルトのクラス名でウィンドウを検索したのち、
目的の名前を取得する事ができました

ありがとうございます

224 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 15:05:00 ]
WM_GETTEXTでいいのでは

225 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 16:22:09 ]
> title_len=GetWindowText(hwnd, title_buf, sizeof(title_buf)-1);
今時こんなソース書く奴はJavaか.NETで開発してろよと思う

226 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 16:25:53 ]
>>225
この場合同書くのがいいのかも示して欲しいです

227 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 16:28:58 ]
>>225
>>226に同意
どう書けばよいのでしょう?
TCHARの話でしょうか?

228 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 16:29:51 ]
TCHARじゃないとかARRAYSIZE, _countofを使えとかnullは考慮されてるから-1はいらないとか
あたりじゃない?

229 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 16:54:54 ]
grep で include 内を探したけど ARRAYSIZE と _countof とは無かった
(使用しているのは MinGW)

230 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 16:59:28 ]
>>229
ARRAY_SIZE と countof はあったの?



231 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 17:01:22 ]
>>230
無いです

232 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 17:12:16 ]
_countofはMFCで定義されていてVC2005ぐらいからCRTでも定義されてた気がする
SDKにはwinnt.hにRTL_NUMBER_OFがある

いずれにしろ>>222は人に教えられる立場で無いのは確か

233 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 17:20:27 ]
結局は、どう書くのが模範解答になるんでしょう?

234 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 17:24:19 ]
WinAPIはよく知らんのだが、GetWindowText()の戻り値ってエラーチェックくらいしか使い途ないのかな。
>222もエラーチェックにしか使ってないようだし、>228によればナルターミネートはしてくれているようだし。
つーか、溢れたかどうかは単純には判らないのね。


235 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 17:27:19 ]
>>222
if(title_len>=0) printf("%s\n", title_buf);

if(title_len>0) printf("%s\n", title_buf);
にしないとエラーチェックになってない


236 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 18:18:19 ]
>>234
GetWindowTextLengthで事前にバッファ長を調べておけば済むだろ

237 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 18:27:58 ]
GetGlyphIndices()という、文字列からグリフインデックスに変換するAPIがありますが、
この逆のことをするAPI、つまりグリフインデックスから文字列に変換する方法って解りますか?

238 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 18:28:29 ]
バッファ足りなくてもバッファサイズまでコピーする仕様なの?
そうだとしても戻り値にNULL文字は数えないって書いてあるから
指定サイズ==戻り値ならあふれてるのでは。

239 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 18:31:24 ]
>>238
馬鹿丸出し

240 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 18:37:47 ]
>>236
しかし長さを調べた直後には別のウィンドウタイトルに変わっているかもしれない
そのアプリケーションがどう振舞うか想定できない



241 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 18:50:52 ]
そんな事を気にするなら他プロセスのテキスト取得なんて考えないことだ

(そろそろフックネタ出す奴が現れる頃か)

242 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 18:50:58 ]
仮にバッファ長が100だったとして、GetWindowTextLength()が99を返した後GetWindowText()が99を返しても、
その間にタイトルが書き換わっていたら溢れたかどうかは判らないのね。

243 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 19:10:58 ]
>>240>>242
必要十分なサイズのバッファを渡せば溢れる可能性は無くなる。

LPTSTR buffer = (LPTSTR)malloc(sizeof(TCHAR) * 0x7fffffff);
if (buffer == NULL) {
  MessageBox(NULL, _T("この環境では使用できません"), _T("メモリ買いましょう"), 0);
  exit(-1);
}
GetWindowText(hwnd, buffer, 0x7fffffff);

244 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 20:36:32 ]
32bit環境だと/3GBスイッチ使っても厳しそうだ。
VirtualAllocのMEM_RESERVEでアドレスだけ確保して、
SEHで動的にメモリを割り当てるのが現実解だな。

245 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 20:59:09 ]
ヒント:APIフック

246 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 21:19:35 ]
>>245
ヒント:お前は馬鹿

247 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 21:23:10 ]
たまにはブローとかアッパーとかさぁ

248 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 21:34:08 ]
まずはジャブから

249 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 21:51:37 ]
このスレの質が低下したのは、優秀な人は.NETに移ったからかもな。

250 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 21:58:09 ]
正解



251 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 22:06:48 ]
今頃気付いたのか

252 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 22:25:19 ]
Advanced Windowsの著者だって.NETの本を書くこんな世の中じゃ






[ 続きを読む ] / [ 携帯版 ]

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

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