Win32API質問箱 Build ..
264:デフォルトの名無しさん
07/05/23 22:12:09
>>261
PrintWindowはXPにはない。
それがアリならVistaとAero有効なPCを買ってこいと回答しておこう
265:デフォルトの名無しさん
07/05/23 22:18:21
>>264
PrintWindowはちゃんとXPにあるから。
266:デフォルトの名無しさん
07/05/23 22:21:43
>>265
ごめん「XP以降にしかない」と書こうとして間違えた。
267:252
07/05/23 23:40:35
>>253
Extract自体ではなくて前後の
COM関係のあーだ、こーだが遅いみたいでした。
>>255
非同期処理ですか、
非同期って全然分からなかったので
試しにマルチスレッドでやってみたんですが
IExtractIcon::Extractが支配的で速度は変わりませんでした。
(自分のプログラムじゃなくてオープンソースを改造してたので)。
上記のマルチスレッドも間違ってると思うので
これを気に勉強したいと思います。
ありがとうございました。
268:デフォルトの名無しさん
07/05/23 23:51:57
>>267
>>>253
>Extract自体ではなくて前後の
>COM関係のあーだ、こーだが遅いみたいでした。
よくある話だ、元気出せ。
269:デフォルトの名無しさん
07/05/23 23:52:48
元気出ました。
270:デフォルトの名無しさん
07/05/24 00:30:21
俺元気!
271:デフォルトの名無しさん
07/05/24 00:32:28
サーバークライアント型のチャットプログラミングをやっています。
クライアント側で接続/切断ボタンを超クリックしまくると、時々表示が変になります。
エラーは何も出ないのですが、最前面に出ているのにアクティブじゃなくなって、ウィンドウの一部が消え
背景にあるウィンドウが少しだけ見えるような状態です。これはログウィンドウに大量の文字がある時に起きるっぽいです。
ログウィンドウの最大サイズを3000バイトに制限したら割と正常に動作し、30000バイトにすると上記の不具合が起きます。
ボタンを連打出来ないような仕様にしてもいいのですが、出来ればあまりしたくありません。
どのようにすればいいでしょうか?
ちなみに接続ボタンを押すと接続/受信用スレッドが立ち上がり、切断ボタンを押すとスレッドが終了します。
272:デフォルトの名無しさん
07/05/24 00:39:06
>>271
ログウィンドウはエディットコントロールのおかん
ママー
273:デフォルトの名無しさん
07/05/24 00:51:54
>>272
つまり・・・どういう事ですか?
274:デフォルトの名無しさん
07/05/24 00:53:03
それは、こっちが聞きたい
275:デフォルトの名無しさん
07/05/24 00:54:25
つまりだね
276:デフォルトの名無しさん
07/05/24 01:16:12
>>271
debug
277:デフォルトの名無しさん
07/05/24 01:19:56
質問させて頂きます。
GetOpenFileNameでファイル選択ダイアログを表示し、ファイルを取得しているのですが
何故か、別のモジュール側の処理を少し追加したらダイアログが表示されなくなりました。
原因が全く分かりません…。GetOpenFileNameを利用する上で何か注意しないといけない事があるのでしょうか?
コンパイラはBCCとVCの両方で試しましたが、ダメでした。
278:デフォルトの名無しさん
07/05/24 01:22:23
追加した処理が原因です
279:デフォルトの名無しさん
07/05/24 01:33:20
>>277
debug
280:デフォルトの名無しさん
07/05/24 01:35:10
その処理を消してみて元に戻るかどうかは試したの?
281:デフォルトの名無しさん
07/05/24 01:48:33
,.イ´| ̄`ヽr<´ ̄  ̄`ヾ´ ̄ `ヽx''´ ̄「`丶、
/ _|ノ ├〈,.-― ;. _ ,ゞ--'、:\___lヽ
,':∨::\ /´ ̄  ̄`ヽ ヽ/´ `ヽ、-.、 \::::::::::',
|、_;/ / /´ ,. 、 、 \. \ \―|
’、 / / ,. / / ,ハ ',. ヽヽヽヽ \ヾ/
\_/:/:/:./ , / .,' / // | l | , l: | ', ',. ! l :',!|
|/:/::/:/:/:! l | { /|:! l l } !ノ|::,!l | :| |::|:::::::|ノ
|:/l/:/:::,|::|:{イ⌒lヾゝ ノノイ⌒lヽ|:::!::}:;!::l::::::/
|::/|/l::/l';:{ヾlー''! lー''!/リノノ/::/:l::/
|| |:/リ、|::l;ゞ ̄´´ ,. ` ̄" ハ:lリノノノ'
リ |' __,⊥!、 " " r===、 " " /ノノ ||
'/´\:: : \ ヽーノ /`ーァ-、 ヾ、
_ / li : . ',.`ヽ、 _ ,.イ´ /.ノ::l| ヽ \____
. /'/ |l ヽ `Y´ / './ . :l| |、 / /
\l |l, \\_!_/ ‐ ´ 、!| | |\ ̄
| /; ´ ` ‐ , ヽヾ ! \|
| / ヽ::/ `ヽ |
| ,' ` ', ! 他のスレに貼り付けると
. | |::: ヾ ヾ .:| .| おっぱいがポロリする
| '、:::.:.. . ― . .:.:::,' ! 不思議なギガバイ子コピペ。
',. \_:::.: : :_二二二:_: : : : .:.:.:.:::/ ,'
':、 ト、 ̄ ´.:.:.::::::::::.:.:.:.` ―┬ '′ /
\ |l ヽ l| /
. `/,' ヽ \ ',/
∧ヽ \ \:.:.:.. ∧
282:デフォルトの名無しさん
07/05/24 01:51:56
レスありがとうございます。
>>280さん
はい、戻ります。
追加した処理の内容ですが、実行パスを取得した後に、設定ファイルのパスを作るだけの処理です^^;
メッセージボックスを出す等すると何故か表示されたりします
283:デフォルトの名無しさん
07/05/24 01:58:11
>>282
エラーコード調べたり、デバッガ使ったり
やる事は色々あるだろ
284:デフォルトの名無しさん
07/05/24 02:49:11
正直、これだけの情報で答えられるのはエスパーだけだと思う。
せめて追加したコードだけでも出すとか・・
285:デフォルトの名無しさん
07/05/24 02:52:53
メッセージボックスを出すとうまくいく、というのがなんか引っかかるな。
OPENFILENAME構造体をちゃんと初期化してるか?
286:デフォルトの名無しさん
07/05/24 03:38:11
レス有難うございます。
追加したコードを記載します。
void GetIniPath( char *p_dis, int size )
{
int point;
GetModuleFileName( NULL,p_dis,size);
// EXE名のスタートポイントを取得
point = GetFilenamePoint( p_dis );
if( point > 0 )
{
p_dis[point] = '\0';
}
wsprintf( p_dis, TEXT("%s%s"),p_dis,INI_PATH);
return;
}
GetFilenamePointでは、for文と2バイト文字、半角カナに注意した比較のみで、APIは全く使用していません
上記のコードで、iniファイルのパスを取得し、ロード処理の前で使用しています。
ロード処理に前にメッセージボックス等、処理を止めるような事をするとたまにダイアログが表示されます。
>>285さん
別のモジュールでもファイル選択ダイアログを呼んでいましたので
そのコードをそのまま持ってきて使っています。
明るくなったらもっと詳しく調べてみます。
287:デフォルトの名無しさん
07/05/24 03:51:12
wsprintf( p_dis, TEXT("%s%s"),p_dis,INI_PATH);
これって同じ領域指定しても良かったっけ?
288:デフォルトの名無しさん
07/05/24 04:02:31
だめだめです
289:デフォルトの名無しさん
07/05/24 06:58:22
だからコンパイルエラーとか挙動不審なのはAPIと関係ないっつーの
290:デフォルトの名無しさん
07/05/24 08:16:54
1.GetModuleFileName
2.結果をバッファにコピー
3.PathRemoveFileSpecでモジュール名を取り除く
4.lstrcatで"\"と設定ファイル名を追加する
(ちなみに3は自作のGetFilenamePointでええんとちゃう?)
だめなのか?
291:デフォルトの名無しさん
07/05/24 08:19:36
std::string strPath
TCHAR szAppPath[MAX_PATH];
::GetModuleFileName(NULL, szAppPath, MAX_PATH);
strPath = szAppPath;
strPath = strPath.substr(0, (strPath.rfind('\\')+1));
strPath += "[ファイル名]"
超簡単
292:デフォルトの名無しさん
07/05/24 12:55:21
std::stringのrfindとかってMBCS対応できてるんだっけ?
293:デフォルトの名無しさん
07/05/24 13:01:23
>>290
3でshlwapi使うなら4はPathAddBackslashとStringCchCatだろ
294:デフォルトの名無しさん
07/05/24 15:00:20
名前解決を行うプログラムを作りたいのですが、
DnsQuery()はPIP_ARRAYを使っており、DNSサーバにIPv4のものしか指定できません。
DNSサーバにIPv6アドレスを指定できるDnsQuery()または同等なものはないでしょうか?
よろしくおねがいいたしますm(_ _)m
295:デフォルトの名無しさん
07/05/24 18:39:44
getaddrinfo じゃ駄目なの?
296:デフォルトの名無しさん
07/05/24 18:46:03
hConnect = CreateWindow(
TEXT("BUTTON") , TEXT("起動") ,
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON ,
308 , 10 , 52 , 52 , hwnd , (HMENU)3 ,
((LPCREATESTRUCT)(lp))->hInstance , NULL
);
こんな感じでCreateWindow()をしているのですが、9番目の引数で指定した数値が
実際にWM_COMMANDに送られて来ず、意図しない数値が送られて来ます。
今は、WM_COMMANDの直後にLOWORD(wp)の値を調べて、その値を拾うことで
対応しているのですが、どうにかして正常な状態に戻したいです。
何故このような事が起こるのでしょうか?原因がわかりません。
297:デフォルトの名無しさん
07/05/24 18:48:44
LOWORD(wp) の値が 3 じゃないの?
298:デフォルトの名無しさん
07/05/24 18:53:02
LOWORD(wp)をMessageBoxで表示させたところ6とか見当違いの数字が入ってます。
299:デフォルトの名無しさん
07/05/24 18:54:44
追記ですが、そのボタンの9番目の引数を(HMENU)30とかに変えると、
LOWORD(wp)に30が送られてきます。これで正常に動作はさせれるのですが、
結局のところ根本の解決になってないのであまり納得が出来ません。
300:デフォルトの名無しさん
07/05/24 18:57:37
Dialog でかつ WM_INITDIALOG のタイミングで >>296 をやろうとしてる?
LOWORD(wp)==6 って IDYES 相当なんだが、、、
ちゃんとコントロール作れてないとか
break し忘れているとか
そっち方面な気配がする
301:デフォルトの名無しさん
07/05/24 18:57:59
#define IDABORT 3
とかぶってるからじゃないの?
302:デフォルトの名無しさん
07/05/24 19:10:27
Dialogは全く使用していないのですが・・・
あと申し訳ないのですが、3とか6とかいうのは適当でした。ごめんなさい。
数値が被ってるとの原因ででる不具合ならば、正しい数値を書くべきでした。
本当にエラーの出る数値は9〜14で、実際に送られてくるのは50、54、58、62、66です。
これらは
for(i=0; i<5; i++){
CreateWindow(,,,,,,,,,(HMENU)9+i,,,,);
}
で作成しています。また、変数を使わずに直接数値を指定して作成したボタンもあるのですが、
それも違う数値が送られてきます。その数値は正常に動作する別の数値に変えたので覚えていません。
303:デフォルトの名無しさん
07/05/24 19:16:21
>>302
(HMENU)9 + i じゃだめさーね
(HMENU)(9 + i) でないとあかん
304:デフォルトの名無しさん
07/05/24 19:17:05
WM_COMMAND の解説ちゃんと読め
305:デフォルトの名無しさん
07/05/24 19:20:03
>>303
頭悪い間違えですね。ごめんなさい。
首吊ってきます。死ぬ前に、直接数値指定してるのに違う数値が来る時のやつ
調べてきます。
306:デフォルトの名無しさん
07/05/24 20:22:00
>>292
たぶん対応していないし、第一TCHARを使うんだったら、
std::stringではなく、std::basic_string<TCHAR>を使うべき。
307:デフォルトの名無しさん
07/05/24 20:57:44
なんかエディットコントロールに文字が増えれば増えるほど、
動作が重くなってくるのですが、これは仕様って事でいいのでしょうか?
特に、winsockの関数周りが遅くなってるような気がします。
308:294
07/05/24 21:10:12
>>295
レスありがとうございます。
getaddrinfoは名前解決をOSに任せる物だと思っております。
(IPv6アドレスを持った)DNSサーバを指定して名前解決を行いたいです。
309:デフォルトの名無しさん
07/05/24 21:29:44
>>307
とりあえず、EM_GETHANDLE, EM_SETHANDLEを使って、
標準のハンドルを差し替えたら?
GlobalAlloc(GPTR, メモリサイズ)で当てはめはめて
なお、標準のハンドルは解放するの
んで、通信側かエディット側か判断してみれば?
パパー
310:デフォルトの名無しさん
07/05/24 21:44:14
URLリンク(msdn2.microsoft.com)
DnsQueryが使えない理由を詳しく
311:デフォルトの名無しさん
07/05/24 21:52:28
よく読めよ。
IPv6レコードではなく、IPv6アドレスしか持たないDNSサーバを扱う話だろ。
312:294
07/05/24 21:55:11
>>310
「IPv6のレコードを取得する」はできます。
「IPv6のアドレスを持ったDNSサーバに接続する」ができません。
(PIP4_ARRAY)
DNS_STATUS WINAPI DnsQuery_A(PCSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORD*,PVOID*);
DNS_STATUS WINAPI DnsQuery_W(PCWSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORD*,PVOID*);
DNS_STATUS WINAPI DnsQuery_UTF8(PCSTR,WORD,DWORD,PIP4_ARRAY,PDNS_RECORD*,PVOID*);
313:デフォルトの名無しさん
07/05/24 22:06:42
IPv6でのDNSクエリの発行自体xpSP2でサポートされたばかりだしなあ。
314:デフォルトの名無しさん
07/05/24 22:08:37
URLリンク(msdn2.microsoft.com)
やっぱりよくわからないな
DNS_STATUS WINAPI DnsQuery(
PCSTR lpstrName,
WORD wType,
DWORD fOptions,
PVOID pExtra,
PDNS_RECORD* ppQueryResultsSet,
PVOID* pReserved
);
315:デフォルトの名無しさん
07/05/24 22:18:42
>>312
そのシグニチャはどこから持ってきたん?
316:デフォルトの名無しさん
07/05/24 22:23:51
Windows CE?
317:デフォルトの名無しさん
07/05/24 22:30:11
XPってv6トランスポートで本当に名前解決できるの?
URLリンク(www.ipv6style.jp)
ここ読むとできない、みたいなはなしがあるけどさ
318:デフォルトの名無しさん
07/05/24 22:30:59
>>312
WinDNS.h見てみたけど無理そうだな。アキラメロ
319:294
07/05/24 22:31:25
WinDNS.h よりです
DNS_STATUS
WINAPI
DnsQuery_A(
IN PCSTR pszName,
IN WORD wType,
IN DWORD Options,
IN PIP4_ARRAY aipServers OPTIONAL,
IN OUT PDNS_RECORD * ppQueryResults OPTIONAL,
IN OUT PVOID * pReserved OPTIONAL
);
DnsQuery_UTF8, DnsQuery_WもPCSTR pszName,PCWSTR pszName以外同じ
#ifdef UNICODE
#define DnsQuery DnsQuery_W
#else
#define DnsQuery DnsQuery_A
#endif
320:294
07/05/24 22:33:14
>>317
Vistaならできるはずです。
XPでできないならAPIでも提供されていないでしょうかね?
>>318
自分でDNSプロトコル話すしかないですかねorz
321:デフォルトの名無しさん
07/05/24 22:42:31
>>320
>自分でDNSプロトコル話すしかないですかねorz
そういう事じゃマイカ?Windowsのリゾルバは糞って有名な話で
dnsapi.dll使う前提なら無理。
322:デフォルトの名無しさん
07/05/25 00:45:58
>>294の参照しているのは、2005付属のもので、
最新のWindowsSDKでは宣言が多少変更されたっぽいな。
で、aipServersの所は予約パラメータ扱いに変更されている。
対応するつもりが、面倒で放置したって感じか。
323:名無し@沢村
07/05/25 05:34:10
256色の画面をクリップボードにコピーして、コピーや貼り付けがしたいのですが、
どのようにすればいいかわかりません。
誰か詳しく教えてくれませんか?
324:デフォルトの名無しさん
07/05/25 08:13:10
>>323
クリップボード側の話は
ChangeClipboardChain関数, CloseClipboard関数,
CountClipboardFormats関数, EmptyClipboard関数,
EnumClipboardFormats関数, GetClipboardData関数,
GetClipboardFormatName関数, GetClipboardOwner関数,
GetClipboardViewer関数, GetOpenClipboardWindow関数,
GetPriorityClipboardFormat関数, IsClipboardFormatAvailable関数,
OpenClipboard関数, RegisterClipboardFormat関数,
SetClipboardData関数, SetClipboardViewer関数,
などの関数で操作する。
あとそれに合わせてWM_COPYなどがある。
ミソはSetClipboardData関数ですかな?
325:デフォルトの名無しさん
07/05/25 10:03:00
256色だとパレットも持ってこないとな
326:294
07/05/25 11:32:09
皆様レスありがとうございます
特に>>317の記事大変参考になりました。
DLLをわざわざ開発するくらいですからAPIでは無理ですね。
BIND(dig,host,nslookup,...)のソースなどを参考に時間があるときにでも作成したいと思います。
327:デフォルトの名無しさん
07/05/25 16:15:08
読み込み違反ってどんな時に起きるんでしょうか?
LoadLibraryでDLLを呼び出してDLL内の関数を実行すると、
「アドレス 00000000 でアドレス 00000000 に対する読み込み違反がおきました。」
となります。そのDLL関数は4つの引数をサポートしていて他の3つの引数では成功します。
328:デフォルトの名無しさん
07/05/25 16:19:40
まさにぬるぽ
329:デフォルトの名無しさん
07/05/25 17:24:14
>>327
デバッグしろよ
「作ったソフトがまともに動きませんどうしてでしょうか?」
みたいな質問が多いけど情報は少ないし、しかもスレ違い
330:デフォルトの名無しさん
07/05/25 17:43:54
とりあえず、APIと関係なさそうなのは間違いない感じだなw
あれじゃね?
渡さなきゃいかん値をNULLで渡してるとか。
渡してるつもりになってる変数が0でしたとか。
331:デフォルトの名無しさん
07/05/25 17:48:23
>>327
> そのDLL関数は4つの引数をサポートしていて他の3つの引数では成功します。
どういう意味?
引数の数が一つで、4種類の値しかとらないってこと?
それとも、DLLが複数の関数をエクスポートしていて、
引数が3つのやつは成功するけど、4つのは失敗するってこと?
332:デフォルトの名無しさん
07/05/25 18:31:40
>>327
わんわん わわわん わんわん わん?
(関数ポインタの宣言がおかしいじゃね?)
333:デフォルトの名無しさん
07/05/25 19:30:13
>>327
その「アドレス 00000000 でアドレス 00000000 に対する読み込み違反がおきました。」
という分かりやすく簡潔なメッセージの何がわからないのか書いてもらわないと・・・
「アドレス」の意味が分からないとか?
334:デフォルトの名無しさん
07/05/25 19:37:12
メッセージが分からないとは書いてないぞ
335:デフォルトの名無しさん
07/05/25 19:46:51
じゃあこれでいいだろ
問い
>読み込み違反ってどんな時に起きるんでしょうか?
答え
「アドレス 00000000 に対する読み込み」を行ったとき、等。
336:デフォルトの名無しさん
07/05/25 19:48:52
( ゚д゚)ポカーン
337:デフォルトの名無しさん
07/05/25 19:50:46
OSが保護している領域に書き込んだ時
「そのアドレスはらめぇ」とWinに言われてる
338:デフォルトの名無しさん
07/05/25 19:53:24
読み込みエラーの話をしているのに書き込みの話をし出す馬鹿。
339:デフォルトの名無しさん
07/05/25 19:56:27
馬鹿馬鹿言うしか能のない馬鹿。
340:デフォルトの名無しさん
07/05/25 20:12:10
OSが保護している領域を読み込んだ時
「そのアドレスはらめぇ」とWinに言われてる
341:デフォルトの名無しさん
07/05/25 20:12:11
まぁたぶん今回のはコールバック関数のアドレスとして NULL を渡したとか
なんかそんなことだろうね。IP もゼロだし。
342:デフォルトの名無しさん
07/05/25 20:44:07
>>341
IP???????????
343:デフォルトの名無しさん
07/05/25 20:50:44
>>342
Instruction Pointer。どこのコードを実行するかを格納しているレジスタ。
「アドレス 00000000 で」の部分が当該コードのアドレスを示している。
それはともかくとして、Win32 とかいう以前の話ばかり・・・
レベル低すぎだろいくらなんでも。
この板には初心者スレとか無いのか?
344:デフォルトの名無しさん
07/05/25 20:55:26
たくさんあります
345:デフォルトの名無しさん
07/05/25 21:04:59
>>343
レベル低いのはお前の方では?
コールバック関数のアドレスとして NULL を渡したとかそんなレベルの話でないと思われ。
レベルの低い奴はレベルの低い事しか考えられないと思われても仕方ない。
346:デフォルトの名無しさん
07/05/25 21:10:02
tabcontrolってデフォルトでフォーカスの四角を表示しない機能って
ありませんでしたか?
もしあったら教えてください。
347:デフォルトの名無しさん
07/05/25 21:18:05
>>327
>読み込み違反ってどんな時に起きるんでしょうか?
>LoadLibraryでDLLを呼び出してDLL内の関数を実行すると、
>「アドレス 00000000 でアドレス 00000000 に対する読み込み違反がおきました。」
>となります。そのDLL関数は4つの引数をサポートしていて他の3つの引数では成功します。
とりあえず、考えられるのはこんなとこか?
考察1.まず、LoadLibraryの戻り値はちゃんと値が入っている?
考察2.Unicode版,ANSI版の関数名の問題
引数に文字列を要求している場合はGetProcAddressには明示的に指定しないいけない。
CreateFile→ANSI版はCreateFileA, Unicode版はCreateFileW
考察3.GetProcAddressの戻り値のキャスト先の問題。
多分>>332のわんこが云う様にGetProcAddressの戻り値FARPROCの代入先が不完全で、
関数コール時できてない。
考察4.引数が3つの関数と引数が4つの関数は同一ライブラリなのか?
例えばLoadLibraryの実験で、
一般的な引数3つの関数(Kernel32.libのCopyFile関数)で確認したが、
引数4つのFloodFill関数は未チェックでKernel32.libをGdi32.libに直してない。
考察5.ライブラリの位置が巧く取得できてない。
考察6.実は、呼び出し元のアプリケーションはVBで、巧くDeclarできてない。
348:デフォルトの名無しさん
07/05/25 21:20:52
僕バッカー!
349:デフォルトの名無しさん
07/05/25 21:22:36
>>346
スタイルのTCS_TABSを外す
350:デフォルトの名無しさん
07/05/25 21:22:51
>>345
>コールバック関数のアドレスとして NULL を渡したとかそんなレベルの話でないと思われ。
おそらくそこまでも行っていないレベルの話だと思われ
NULL をコールしてるんだよね、たぶん。
351:デフォルトの名無しさん
07/05/25 21:25:54
DLL自作なのかな?
352:デフォルトの名無しさん
07/05/25 21:29:06
>>346 TCS_FOCUSNEVER ?
353:名無し@沢村
07/05/25 21:40:29
画面の描画プログラムで、hdcの互換メモリデバイスコンテキストmemdcとmemdc2をつくり、
memdcのほうに黒い線、memdc2のほうに赤い線を描いて、それらをhdcにコピーして
表示するプログラムをつくったんですが、何故かmemdc2のほうの赤い線がWM_PAINTが
送られると消えてしまうんですが、どこが悪いのでしょうか?
プログラムはまったく同じようにmemdcとmemdc2の描画とコピーを並べて書いたんですが…?
354:デフォルトの名無しさん
07/05/25 21:44:35
memdcとmemdc2をSRCPAINTにしてないとか
355:デフォルトの名無しさん
07/05/26 01:08:52
MeteredSection
・パフォーマンスはCriticalSection並で
・セマフォの様にカウンタもあり
・win9x,NT,CEで使える
というステキな同期機構があるようなんですが、
MeteredSectionを作成する関数
CreateMeteredSectionをググっても(日本語)
ヒット数が数件しかありません
これは一般には使われてないんでしょうか
だとしたら理由はなんでしょう
356:デフォルトの名無しさん
07/05/26 01:14:54
そんなに必要じゃないからだろ マイナーだし
357:デフォルトの名無しさん
07/05/26 01:15:52
>>355
単純にみんなが知らないだけだと思われ。
ってか、自分もはじめて知った
358:デフォルトの名無しさん
07/05/26 01:22:24
>>355
URLリンク(msdn.microsoft.com)
マイナーなだけ。
知ってる人は知ってる。
359:デフォルトの名無しさん
07/05/26 01:50:48
唐突な質問すみません。
WAVファイルが使用されているかどうかをチェックするにはどうすればいいでしょうか?
360:デフォルトの名無しさん
07/05/26 02:02:34
アクセス日時でも調べたら?
361:デフォルトの名無しさん
07/05/26 02:09:16
使用とはつまり今使用中なのかどうかを調べたいのですが、
362:デフォルトの名無しさん
07/05/26 02:13:31
そのWAVファイルをごみ箱に投函。
入ってくれなければ使用中。以上
363:デフォルトの名無しさん
07/05/26 02:26:09
さうんどどらいばにおくられているはけいがそのわヴのものならしようちゅう。いじょう。
364:デフォルトの名無しさん
07/05/26 02:31:54
スレ違いでしたら誘導をお願いします
CreateProcessで作成したプロセスを安全に終了させたいと思っています。
メッセージループを持っているプロセスならWM_CLOSEで事足りるのですが、コマンドラインアプリケーションの場合はどうすればいいのでしょうか?
たとえばpingの場合control-Cを送れば終了できるんじゃないかと思い、パイプを作成してETXを送ったのですが終了できません。
また、command.comのプロンプトはCR(control-M)でちゃんと改行と処理されるのですが、パイプを通した場合はLFCRを送らなければ認識されません。
パイプの処理に関して何か根本的な勘違いをしているのでしょうか?
365:デフォルトの名無しさん
07/05/26 02:42:52
>>364
どういう使い方してるの?
ウチの環境ではpingし終わったら勝手に閉じるけど?
366:デフォルトの名無しさん
07/05/26 05:59:02
command.comってことは98・・・か・・・?
367:デフォルトの名無しさん
07/05/26 08:50:30
>>364
URLリンク(support.microsoft.com)
まず、ここのサンプルを試してみ
368:デフォルトの名無しさん
07/05/26 10:16:56
シグナルを送るんだよ
369:デフォルトの名無しさん
07/05/26 11:05:33
>>364
安全に終了させる汎用的な方法は無い。
WM_CLOSEで終了したとしても、それが正規な終了方法でないアプリがあるかもしれない。
結局各アプリを解析して、個別の対応を採らなければならない。
370:デフォルトの名無しさん
07/05/26 11:08:36
ウィンドウクラスのとこで
winc.hIcon = LoadIcon(NULL , (LPCSTR)IDI_ICON2);
で、アイコンを指定しているのですが、何故かふきだしに i マークがついたアイコンになります。
リソースに自分で作成したICONを追加もしているのですが、何か上の式は間違ってるのでしょうか?
371:デフォルトの名無しさん
07/05/26 11:18:46
>>370
MSDNで第一引数の説明を調べるんだ
372:デフォルトの名無しさん
07/05/26 11:37:37
>>371
ああああありがとうございます(泣)
NULLをhInstanceにしたらアイコンが変わりました!
ぬるぬる
373:デフォルトの名無しさん
07/05/26 12:07:52
ぽぽ
374:デフォルトの名無しさん
07/05/26 13:26:33
>>364
GenerateConsoleCtrlEvent
375:364
07/05/26 19:25:12
>>365
現在親プロセスからコマンドラインアプリケーションを起動して標準出力を拾っているのですが、親プロセスを終了したときにそのコマンドラインアプリケーションを安全に終了させたいのです
>>367
拝見したところパイプの接続は私のテスト環境と同じようで、子プロセスの終了も親からでは無くping同様に子プロセスのChild.EXEが勝手に終了するのを待つだけのようでした。
>>369
起動させるプロセスは限られていますので私も個別に対応したいと考えています
たとえばCOMMAND.COMならば'EXIT'を送れば終了でき、pingならばctrl-Cで終了できるはずです。
しかし前者は成功するのですが、後者は失敗しました
パイプでは制御コードを送れないってことはありませんか?
376:デフォルトの名無しさん
07/05/26 19:35:47
>>364
ちょっ話変わるけど、
コンソールリダイレクトの想定先は何?
例えば、コンパイラのキッカーみたいなもの?
バッチ処理の結果を取得したい為?
377:デフォルトの名無しさん
07/05/26 19:35:53
自作アプリケーションにXPスタイルを適用しつつ
一部のコントロール(ステータスバーなど)のみをXPスタイル以外ってできないのかな?
378:デフォルトの名無しさん
07/05/26 20:01:01
>>377 SetWindowTheme
379:355
07/05/26 20:15:21
>>356
>>357
>>358
ありがとうございます
MSDNの記述を読む限り、とても有用な機能だと思ったんですが
何でマイナーになってるんでしょうね・・・
380:デフォルトの名無しさん
07/05/26 20:22:20
>>379
強いて言えば、無くても作れるからかも
URLリンク(msdn.microsoft.com)
381:デフォルトの名無しさん
07/05/26 20:27:33
>>379
自分で作らにゃならんし、メンテナンスや互換性を考えると面倒くさいからでしょ
382:デフォルトの名無しさん
07/05/26 20:27:36
>>379
URLリンク(forums.microsoft.com)
MeteredSectionってもともとはAPIじゃなくて
あるユーザーが勝手に作ったものみたい。
383:デフォルトの名無しさん
07/05/26 21:04:50
>>375
>>374は無視ですか。パイプを作ってCtrl-Cを送る必要自体ないと言ってるんだけど
384:デフォルトの名無しさん
07/05/26 21:13:22
>>383
心配しなくても無視されないよ。
パイプを作ってCtrl-Cを送ってもどうせ効かないから。
385:デフォルトの名無しさん
07/05/26 21:32:05
逆にパイプのデータ経由で死ねるなら、
パイプはバイナリデータを送れない、という話になる
386:デフォルトの名無しさん
07/05/26 21:33:25
その理屈はおかしい
387:デフォルトの名無しさん
07/05/26 23:57:14
ドラッグドロップとImageListについて質問です。
DropTargetの側で
ImageList_BeginDragやImageList_DragMove等のAPIを使って
ドラッグ中の画像を作るのは邪道でしょうか?
実際動いてはいるんですが。
やはりDropSourceの方でやるものなのでしょうか。
あと一つ、
ImageList_BeginDragで始まったあとに
表示されている画像を変更することはできないんでしょうか。
ImageList_Replaceは動作しませんでした。
388:デフォルトの名無しさん
07/05/27 00:11:18
ども。>>364です
>>376
ちょうどそんな感じです
>>383
ご指摘ありがとうございます。完全に見落としていました
>>374
私が探していた方法はまさしくコレです
コマンドラインアプリケーションにもちゃんとExitProcessが標準で実装されていたんですね
プログラム側で入力シーケンスを監視してctrl-C信号を拾っているんだと思っていました
色々とありがとうございました。
389:デフォルトの名無しさん
07/05/27 00:23:29
>>388
だからシグナル送れといっとるだろうが
390:387
07/05/27 00:39:55
自己解決しました。
同スレッドからD&Dされると挙動不審になるみたいです。
別スレッドからなら(一見)問題ないみたいですが。
止めることにしました。
391:デフォルトの名無しさん
07/05/27 02:35:12
猫でもわかるプログラミングってどこにあるんですか?
392:デフォルトの名無しさん
07/05/27 02:36:22
「猫でも」でぐぐれ
393:デフォルトの名無しさん
07/05/27 06:26:12
本屋に有る
394:名無し@沢村
07/05/27 08:40:17
hdc=GetDC(hwnd);
memdc=CreateCompatibleDC(hdc);
memdc2=CreateCompatibleDC(memdc);
hBita=CreateCompatibleBitmap(hdc,maxX,maxY);
SelectObject(memdc,hBita);
SelectObject(memdc2,hBita);
PatBlt(memdc,0,0,maxX,maxY,PATCOPY);
PatBlt(memdc2,0,0,maxX,maxY,PATCOPY);
で、後にSelectObjectしたほうのmemdc2がうまく作成されてないようなのですが、
(hdcにコピーして再描画すると消えてしまうので)
memdc2をうまく作成するにはどうしたらいいでしょうか?
395:デフォルトの名無しさん
07/05/27 10:54:49
ダイアログを、呼び出したアプリケーションのフォームの最前面に表示したいのですがどうすればよいのでしょう?
WS_EX_TOPMOSTや、SetWindowPosでHWND_TOPMOSTだと、他のアプリの前面にも出てしまいます。
あくまで呼び出したアプリの最前面にしたいのです。
396:デフォルトの名無しさん
07/05/27 11:04:26
WM_OVERLAPPED & WM_CHILD & WM_POPUP
397:395
07/05/27 11:10:18
失礼しました。
DialogBox関数の第3引数がうまく設定できていないのが原因でした。
お騒がせしました。
398:デフォルトの名無しさん
07/05/27 11:14:09
>>394 そのSelectObjectは何かのギャグか?
399:デフォルトの名無しさん
07/05/27 12:17:07
>>394
URLリンク(msdn.microsoft.com)
> アプリケーションは、1つのビットマップを一度に複数のデバイスコンテキストで選択することはできません。
400:名無し@沢村
07/05/27 12:52:00
>>399
つまり描画用のデバイスコンテキストを複数つくることはできないということですか?
ペイントソフトのアンドウリドゥとかはどうなっているんだろう?
メモリデバイスコンテキストを複数つくれば、そこにコピーして待避させておいて、簡単に実装できるんだけど…
401:デフォルトの名無しさん
07/05/27 12:54:49
逆にビットマップを複数作ればいい
402:名無し@沢村
07/05/27 12:58:04
私がつくりたいのは、
例えば赤と黒で画面に線を描画して、
あとから赤の線だけを消して、赤の線の下に引かれている黒い線もちゃんと復元できるようなソフトなんですけども…
黒い線と赤の線を別々のデバイスコンテキストに描画すれば簡単だと思ったんですがテ…
403:デフォルトの名無しさん
07/05/27 13:13:53
操作履歴があるなら、それをもとに
「ファイルを開く」から復元できるやろうが。
404:デフォルトの名無しさん
07/05/27 13:19:52
例えば、同じビットマップを複数のDCに選択できたとしたら、
片方のDCに書き込んだ内容はもう片方のDCでも同じ内容になるだけだが・・・
なんでビットマップを複数作ルことを思いつかないんだ?
405:デフォルトの名無しさん
07/05/27 14:23:49
熾烈な首位争いを繰り広げる、日本とハンガリー。
日本は現在ハンガリーに500万クリックほど差をつけているものの、
これで安心してはいけない。
我々のこれまでの最大クリック速度は8万〜9万回/分が限度だが、
ハンガリーはなんと13万回/分を叩き出した実績がある。
実際、1400万の差を一晩でひっくり返されている。
今はハンガリー時間で7時を過ぎたところ。
彼らの動きが活発になり始めるころだ。
おまけに月曜日は祝日だという確定情報もある。
今の戦力では心もとない、まだまだ戦力を募集中だ。
もはやVIPPERだけでは太刀打ちできない。
これはもはや、VIPの枠を超え、2ch全体で立ち向かう以外に勝機はない。
諸君の参戦を切に願う。
現行スレ
【首位奪還】一番クリックした国が優勝 Click82【天王山の決戦!!】
スレリンク(news4vip板)
まとめサイト
URLリンク(www33.atwiki.jp)
406:デフォルトの名無しさん
07/05/27 14:49:49
>例えば赤と黒で画面に線を描画して、
>あとから赤の線だけを消して、赤の線の下に引かれている黒い線もちゃんと復元できるようなソフトなんですけども…
レイヤーのことだろうか?
407:デフォルトの名無しさん
07/05/27 16:23:17
この手のは、BitBltをパワーアップさせて、転送先や転送元に、
HDCだけじゃなくHWNDやHBITMAPも渡せるような
関数を作っておくと楽かな。
408:デフォルトの名無しさん
07/05/27 18:36:53
>>402
スレ違いの回答になるが・・・・
Undo/Redoをやりたいなら、ビットマップレベルで履歴を保存するより
描画内容(座標・色・線種など)で履歴を保存するほうがいいと思うよ。
409:デフォルトの名無しさん
07/05/27 18:42:42
質問です。F1を押したときにある動作をさせたいのですが、
ウィンドウプロシージャでWM_KEYDOWNでメッセージを受け取る事が出来ません。
起動した直後は出来るのですが、その後、エディットコントロールにフォーカスを移動した時とかに
メッセージを拾う事ができなくなります。エディットコントロールやボタンにフォーカスがある状態でも
メッセージを受け取るにはどうすればいいのでしょうか?
410:デフォルトの名無しさん
07/05/27 18:54:56
キー関係のメッセージははフォーカスを持つウィンドウに送られる
メッセージをDispatchする前に、アクセタレータを使うなり何なりすること。
411:デフォルトの名無しさん
07/05/27 18:56:55
ごめtypo
*アクセラレータ
TranslateAcceleratortとかHACCELとかのことです
412:デフォルトの名無しさん
07/05/27 19:56:41
HP見ながら頑張ってみたのですが、上手くいきません。
肝心な部分だけ書いてみました。どこかいけないところはあるでしょうか?
//aaa.rc
IDR_ACCELERATOR1 ACCELERATORS
BEGIN
VK_F1, ID_MYHELP, VIRTKEY, NOINVERT
END
//resource.h
#define ID_MYHELP 40001
//aaa.cpp
WinMain(){
haccel = LoadAccelerators(hInstance, (LPCSTR)IDR_ACCELERATOR1);
}
WndProc(){
case WM_COMMAND:
if(LOWORD(wp)==ID_MYHELP) MessageBox();
return 0;
}
413:デフォルトの名無しさん
07/05/27 20:07:28
LoadAccelerators(hInstance, MAKEINTRESOURCE(IDA_ACCEL1)); とか
TranslateAccelerator(hwnd, hAccel, &msg) 抜けとかかなーといってみる
414:デフォルトの名無しさん
07/05/27 20:12:37
TranslateAcceleratorは?
あと、(LPCSTR)IDR_ACCELERATOR1よりもMAKEINTRESOURCE(IDR_ACCELERATOR1)
LOWORD(wp)よりもGET_WM_COMMAND_ID(wp, lp)お薦め
415:デフォルトの名無しさん
07/05/27 20:32:19
>>413-414
TranslateAccelerator()を入れたら動作しました!
大事なところを見逃してました。ありがとうございます。
416:名無し@沢村
07/05/27 20:39:52
>>404
>なんでビットマップを複数つくることを思いつかないんだ?
memBit1=CreateCompatibleBitmap(hdc,x,y);
memBit2=CreateCompatibleBitmap(hdc,x,y);
のようにでしょうか?
表示用のデバイスは1つ(hdc)しかないので、ちょっと無理っぽい気が…
417:デフォルトの名無しさん
07/05/27 20:40:34
なんで見えない番号があるのかと思ったら
なつかしいな沢村
418:デフォルトの名無しさん
07/05/27 20:42:47
TranslateAcceleratorは>>411でわざわざ言ってあげたのにな
419:名無し@沢村
07/05/27 20:47:02
>>408
描画内容(座標、線種、色)を数値データとしてスタックに保存するのでしょうか?
データを画面に復元するときはどうすれば?
思い付くのはSetPixcelですが、
SetPixcelで1点ずつ画面に点を打っていくのでは、時間がかかりすぎるような気が…
420:名無し@沢村
07/05/27 20:52:27
>>417
なつかしいな。
プログラミングは当分休止。つーかいまプログラミングしてるけど…
いま投稿用の漫画描くためのソフトつくろうと思って質問しまくっているとこ…
これができたら、プログラミングはお休みして漫画に専念する。
421:デフォルトの名無しさん
07/05/27 21:00:41
>>419
既にAPIの質問ではないと思うが
基本的な方法としては、
1、画像そのものを最初にどこかに保存しておいて
2、描画時に使ったコマンドの内容を保存しておく。 点を打った、線を引いた、円を描いたというようなね。
そして、巻き戻すときは、1から順にコマンドを再現して、一つ手前で止めればいい。
422:デフォルトの名無しさん
07/05/27 21:26:41
WM_CHARメッセージで、送られてきた文字を取得することは可能なのでしょうか?
423:デフォルトの名無しさん
07/05/27 21:29:18
>>422
お前が手の届く範囲にいたら殴りたい。
なんで訊く前にちょっと調べてみないわけ?
ほんの少し調べれば分かることなのに。
424:デフォルトの名無しさん
07/05/27 21:37:34
本人にとって、2chで聞く=調べる、なんだろうな
お前の手の届く範囲にはディスプレイがあるだろうから代わりにそれでも殴っとけ
425:デフォルトの名無しさん
07/05/27 21:52:49
いえ、質問の仕方が適当すぎました・・・。
WM_CHARのwpに入ってるっぽいのですが、その取り出し方がわかりません。
MessageBox()で表示させようと、(PTSTR)&wpにしても、文字コード取得しようとして(int)wpで見てみても
なんか全然変な値が入っててわけわかりません。
426:デフォルトの名無しさん
07/05/27 22:01:52
あのさあ、ちゃんと調べてんの?
ぐぐっただけで詳しい使い方なり情報なりわんさか出てくるんだが。
TranslateMessageはちゃんと読んでんよな?
だったらWPARAM型のwpにキャラクタコードが入ってるんだが。
ちなみにキーコードじゃないぞ
俺も殴りたくなってきた
427:デフォルトの名無しさん
07/05/27 22:02:22
殴るなら俺を殴れ
428:デフォルトの名無しさん
07/05/27 22:15:19
>>419
SaveDC, RestoreDCじゃダメか?
429:デフォルトの名無しさん
07/05/27 22:16:38
>>425
Cの文字の扱いをまるで理解していないと見た。
430:デフォルトの名無しさん
07/05/27 22:36:50
いえ、殴るなら僕を殴って下さい。それはそのはず、入ってるわけがありませんでした。
WM_COMMANDで拾ってそのパラメータからWM_CHARの処理やってたので、
そのままWM_CHARを捕まえたような気分になってました。
431:デフォルトの名無しさん
07/05/27 22:44:41
>>430
あんた誰だよ。>>425か?
名乗りもせずいきなり僕などという一人称使うな。殴るぞ
432:412
07/05/27 22:57:40
>>412-415
これでF1はどこにカーソルがあっても機能するようになったのですが、
F2、F3は機能しなくなりました。F2、F3等は、あるエディットコントロール内にカーソルが
ある時のみ有効にしたくて、F1だけ特殊な感じでした。これはF2、F3とかも
アクセラレータに持っていかれてしまってるせいなのでしょうか?
433:デフォルトの名無しさん
07/05/27 22:59:21
>>431
すみません、俺が悪かったです。もう名乗りません。
違う方法でなんとか解決できたのでなんとか出来ました。
434:デフォルトの名無しさん
07/05/27 23:25:20
>>433
だーかーら、名乗りもせず「俺が」なんて言うな、っていってんだよ
>>430です、くらい書けよ
誰だかわからんだろう
435:デフォルトの名無しさん
07/05/27 23:28:17
いえ、それは俺です。
436:デフォルトの名無しさん
07/05/27 23:29:05
>>434
俺だよ俺
437:デフォルトの名無しさん
07/05/27 23:34:17
だから俺が俺なんだって
勝手に人の名前騙るなよ
438:デフォルトの名無しさん
07/05/27 23:36:23
>>437
すまん、お前が俺か。
悪かった。
439:デフォルトの名無しさん
07/05/27 23:54:24
>>412
もしかして: WM_HELP
なんか、ID_MYHELPとか書いているし。
440:412
07/05/28 00:02:55
>>439
いえ、WM_HELPではありません。まぁ同じなんですけど、
F1ボタンを押したら自分で作ったヘルプのウィンドウが出るようにしています。
それはいいんですが、F2〜F8にもその他の機能を用意していて、
あるエディットコントロールをサブクラス化してそのプロシージャで
WM_KEYDOWNで拾っているのですが、それが機能しなくなりました。
F1だけをアクセラレータで変にやったせいなのでしょうか?
441:デフォルトの名無しさん
07/05/28 00:12:26
>>420
コミックスタジオでも買った方が良いぞ
あ、マンガ描くためのソフトから作ったのを作品の
ネタにするのなら恐れ入る
442:名無し@沢村
07/05/28 00:16:43
突然ですが、2つのメモリデバイスコンテキストを合成して描画することに成功しました。
黒い線の画面のほうをBitBltのSRCANDで画面にコピーし、
赤い線の画面のほうをSRCCOPYで画面にコピーしたら、
再描画をかけてもどっちの線も消えませんでした。
ただ、この方法だと、赤い線も黒くなってしまうようです…
赤い線が黒くならないようにするには、どうしたらいいのでしょう?
いくつも組み合わせがあるので、全部ためすのは、気が遠くなるほど時間がかかりそうなので…
443:デフォルトの名無しさん
07/05/28 00:20:18
組み合わせとは何の組み合わせ?
444:デフォルトの名無しさん
07/05/28 00:30:55
ねむい
445:デフォルトの名無しさん
07/05/28 00:58:48
質問です。
CでWindowsプログラム作るため、Win32APIを学ぼうと思っていろいろ調べている途中で気になったことがあります。
テンプレのWin32 API入門というサイトではWin32API学ぶ上で、
windowsの知識とアーキテクチャの知識が必須だと書かれていました。
そこで、「コンピュータの構成と設計」「アーキテクチャ徹底解説MicrosoftWindows2000・・・」
などの書籍でコンピュータアーキテクチャについて学んだ方がいいのでしょうか?
お金に余裕がないので無駄な出費は避けたいです。
ちなみに私は、基本情報技術者試験の知識とCの入門書の知識くらいしかもっていません。
御回答よろしくお願いします。
446:デフォルトの名無しさん
07/05/28 01:02:31
パソコン初心者でもなければ別に要らないと思う
447:デフォルトの名無しさん
07/05/28 01:02:50
いらん
448:デフォルトの名無しさん
07/05/28 01:03:19
その程度は、Win32APIを色々試しているうちに自ずと判ってくるから要らない。
449:445
07/05/28 01:09:36
>>446-448
御回答ありがとうございました。
ではこのままWin32APIの学習に入ろうと思います。
450:デフォルトの名無しさん
07/05/28 02:30:45
Windowsプログラムを作るためならば、APIから学ぶのは止めたほうがいい。
実際開発では窓とかはフレームワーク任せだからな。それで問題ない。
ど〜しても、変態的な非効率な開発を求めるならAPIから始めることを止めはしない。
451:デフォルトの名無しさん
07/05/28 02:59:11
>>449
>>450の意見と思いっきり逆のタイトルですまんが
APIで学ぶWindows徹底理解
URLリンク(www.amazon.co.jp)
この本はまじでおすすめ。
雑誌連載のムック化だから、それぞれのトピックは完全に独立してて
一つ一つ段階的に学習していく、って使い方はできない(想定されてない)けど、
それぞれに読み応えがあるし、なにより文章がとても上手くて面白い。
内容はタイトルどおりで(「徹底」はちと言いすぎか)、
APIの使用例を通してWindowsの仕組みや叩き方が結構クリアに見えてくると思う
ただし、Cの基礎が分かっていることが条件。
あとソースはBCC用だがVCのことも全体に渡ってちゃんと配慮して書かれてる
まぁ服毒本として興味があればどうぞ
452:デフォルトの名無しさん
07/05/28 05:26:58
XPのタスクマネージャのプロセスタブと同じ様な働きをするプログラムを作ってます。
本物のタスクマネージャのプロセス一覧でユーザー名を有効にすると、
LOCAL_SERVICEやNETWORK_SERVICEといったユーザー名の
プロセスが表示されますが、これらのプロセスをOpenProcessTokenで
開こうとするとGetLastError() == 5のアクセス違反でを取得できません。
ログインユーザーやSYSTEMのプロセスなら成功するのですが、
こういった****_SERVICEのプロセスからユーザー名を取得する
方法がありましたら教えてください。
Web検索しても成功してる人の記事が見つかりませんでした。
ぶっちゃけ下の人と同じ事をしたいのですが、
リンク先の回答者が教えているcodeprojectの方法では
取得する事はできない様です。
URLリンク(rararahp.cool.ne.jp)
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4976日前に更新/234 KB
担当:undef