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


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

Win32API質問箱 Build33
1 名前:デフォルトの名無しさん :2005/07/01(金) 02:45:20
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんたちが答えてくれるかも。

  ∧_∧
 ( ´∀`) < 0x20

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

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


2 名前:デフォルトの名無しさん :2005/07/01(金) 02:50:39
-前スレ
Build32:http://pc8.2ch.net/test/read.cgi/tech/1117271829/

3 名前:デフォルトの名無しさん :2005/07/01(金) 02:51:19
-過去スレ
Build31:http://pc8.2ch.net/test/read.cgi/tech/1114762194/
Build30:ttp://pc8.2ch.net/test/read.cgi/tech/1112345886/
Build29:ttp://pc8.2ch.net/test/read.cgi/tech/1110281860/
Build28:ttp://pc5.2ch.net/test/read.cgi/tech/1108199304/
Build27:ttp://pc5.2ch.net/test/read.cgi/tech/1106103119/
Build26:ttp://pc5.2ch.net/test/read.cgi/tech/1104109858/
Build25:ttp://pc5.2ch.net/test/read.cgi/tech/1101393155/
Build24:ttp://pc5.2ch.net/test/read.cgi/tech/1098967135/
Build23:ttp://pc5.2ch.net/test/read.cgi/tech/1095534704/
Build22:ttp://pc5.2ch.net/test/read.cgi/tech/1092524669/
Build21:ttp://pc5.2ch.net/test/read.cgi/tech/1090422324/
Build20:ttp://pc5.2ch.net/test/read.cgi/tech/1088140233/
Build19:ttp://pc5.2ch.net/test/read.cgi/tech/1084697545/
Build18:ttp://pc5.2ch.net/test/read.cgi/tech/1081702990/
Build17:ttp://pc5.2ch.net/test/read.cgi/tech/1077470361/
Build16:ttp://pc2.2ch.net/test/read.cgi/tech/1073830065/
Build15:ttp://pc2.2ch.net/test/read.cgi/tech/1069339866/
Build14:ttp://pc5.2ch.net/tech/kako/1065/10653/1065328397.html
Build13:ttp://pc5.2ch.net/tech/kako/1059/10595/1059549320.html
Build12:ttp://pc5.2ch.net/tech/kako/1056/10560/1056033645.html
Build11:ttp://pc5.2ch.net/tech/kako/1052/10526/1052651750.html
Build10:ttp://pc5.2ch.net/tech/kako/1047/10478/1047819779.html
Build9:ttp://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
Build8:ttp://pc5.2ch.net/tech/kako/1040/10409/1040964626.html
Build7:ttp://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
Build6:ttp://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
Build5:ttp://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
Build4:ttp://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
Build3:ttp://pc.2ch.net/tech/kako/1017/10170/1017072275.html
Build2:ttp://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Build1:ttp://pc.2ch.net/tech/kako/991/991576947.html

4 名前:デフォルトの名無しさん :2005/07/01(金) 02:51:51
- MSDN Online
http://www.microsoft.com/japan/msdn/
- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/
- Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
- Google
http://www.google.com/

Win32 API入門
http://wisdom.sakura.ne.jp/system/winapi/
Win32 プログラミング入門
http://www7.plala.or.jp/keny01/windows/win32/
Win32 SDK Programming
http://usr_vogel.at.infoseek.co.jp/Win32SDK/

■書籍
Advanced Windows
http://www.amazon.co.jp/exec/obidos/ASIN/4756138055

5 名前:デフォルトの名無しさん :2005/07/01(金) 02:52:48

- WindowsR Server 2003 SP1 Platform SDK Full Download
http://www.microsoft.com/downloads/details.aspx?familyid=EBA0128F-A770-45F1-86F3-7AB010B398A3&displaylang=en
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/XPSP2FULLInstall.htm
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm


6 名前:デフォルトの名無しさん :2005/07/01(金) 02:59:57
>>1 乙!

7 名前:デフォルトの名無しさん :2005/07/01(金) 03:16:32 ?
前スレの1000が素敵すぎるw

8 名前:デフォルトの名無しさん :2005/07/01(金) 05:51:56
>>1

だけど

( ´∀`) < 0x21

9 名前:前スレ1 :2005/07/01(金) 06:31:34
>>6>>8
何で俺には乙って言ってくれなかったんだ

10 名前:デフォルトの名無しさん :2005/07/01(金) 07:36:28
真の功労者というものは、手柄を主張しないのだ

11 名前:デフォルトの名無しさん :2005/07/01(金) 12:10:38
ローカルのHDDに長いファイル名が記録されると、エクスプローラなどではリネーム
できなくなる事があります。環境はWindows XPSP2、NTFSです。

そういう場合私はネットワークで繋いで、ネットワーク側のコンピュータからリネーム
する事で回避しています。

ところで、どうしてネットワークで繋ぐと、ローカルでリネームできなかった長いファイル名
もリネーム可能なのでしょうか?これを利用して、ローカルでリネームできなかった
ファイル名をリネームするプログラムを作ろうと思っているのですが、使用すべきAPIが
分からず困っています。

どなたかご指導ご鞭撻の程よろしくお願いいたします。

12 名前:デフォルトの名無しさん :2005/07/01(金) 12:14:51
すいません
質問ですが、構文エラー : ')' が 'constant' の前に必要です。というエラーが出ますが、
このようなエラーが出る主な原因は何なのでしょうか?

よろしくお願いします。

13 名前:デフォルトの名無しさん :2005/07/01(金) 12:21:03
>>12
スレ違いっぽいが、) のバランスが取れてないだけだろ。

14 名前:デフォルトの名無しさん :2005/07/01(金) 12:21:16
打ち間違い。文法的に許されない書き方をしようとした。

15 名前:12 :2005/07/01(金) 12:31:36
ソースを単独でコンパイルすると、エラーは出ないのですが、
クラス継承をするとそのようなエラーが出ます。

16 名前:デフォルトの名無しさん :2005/07/01(金) 12:33:39
>>11
ふつうのファイル名記法(C:\〜)とUNC記法(\\host\〜)で、扱えるファ
イル名長が違うんじゃなかったっけ。


17 名前:デフォルトの名無しさん :2005/07/01(金) 13:00:25
>>16
なるほど。調べてみます。ありがとうございます。

18 名前:デフォルトの名無しさん :2005/07/01(金) 13:13:49
>>17
リネイムのためだけにセキュリティレベルを下げたりネットワーク負荷をかけたりするわけ?
そんなことよりも的確にアクセスできる手段を探した方が医院で内科医?

19 名前:デフォルトの名無しさん :2005/07/01(金) 13:14:08
>>12
マルチすなや。

20 名前:デフォルトの名無しさん :2005/07/01(金) 13:19:14
>>18
実はそのためなんです。ネットワーク経由ですとどうしてもセキュリティに不安が
残ります。

なるべくローカルだけでやりたいのです。まあ、自分自身のフォルダを秘密のワーク
グループに参加させれば、ローカルだけでリネームできそうなんですが、それも危ないですし。

21 名前:デフォルトの名無しさん :2005/07/01(金) 13:31:40
MoveFile(Ex)A で文字列長が MAX_PATH 超えただけなんじゃ?

>>16
通常記法で MAX_PATH、UNC記法だと 32,000 [wide]

22 名前:デフォルトの名無しさん :2005/07/01(金) 13:36:03
>>21
多分それですね。ネットワーク経由で書き込まれたファイルだと思います。
UNC記法でリネームするようにしてみます。ありがとうございました。

23 名前:デフォルトの名無しさん :2005/07/01(金) 13:36:36
>>20
その問題のファイルに到達するまでの途中のディレクトリのジャンクションを作成したらどうでしょ。
いずれにしても、なんか方法はありそうですがねぇ。

24 名前:23 :2005/07/01(金) 13:37:55
普通にUNCでいいのか。蛇足になってしまったw

25 名前:デフォルトの名無しさん :2005/07/01(金) 13:48:47
>>23>>24
いえ、ディレクトリが深いわけじゃありませんので。
単純にファイル名が長いのです。

26 名前:デフォルトの名無しさん :2005/07/01(金) 13:54:07
ざっくり grep してみたけど、MAX_PATH は 260 文字なんだが、、本当にそんなオーダーのファイル名なのか?
GetLastError() なりして、リネーム失敗する要因を追跡したほうが良さそうなキガス

27 名前:デフォルトの名無しさん :2005/07/01(金) 13:58:10
>>26
はい、本当に長かったです。500文字ほどありました。

28 名前:デフォルトの名無しさん :2005/07/01(金) 13:59:15
ついでに、エクスプローラによるドラッグドロップや、コピー、移動、削除、
どれも出来ませんでした。ネットワーク経由時(UNC記法使用時)にのみ、
それらの操作が可能になります。

29 名前:デフォルトの名無しさん :2005/07/01(金) 14:52:42
どういう思考回路をすれば、500文字もあるファイル名を付けるんだろう?

30 名前:デフォルトの名無しさん :2005/07/01(金) 14:56:05
現在のデスクトップが、
アプリケーションデスクトップなのか、
スクリーンセーバーデスクトップなのか、
Winlogonデスクトップなのかを調べるには
どの辺のAPIを使用すればいいのでしょうか?


31 名前:デフォルトの名無しさん :2005/07/01(金) 15:09:58
MAX_PATHはファイル名じゃなくて絶対パスの最大文字数だから、
260文字という制限は意外と短いような気がする。

32 名前:デフォルトの名無しさん :2005/07/01(金) 15:32:09
だが実際ファイル名の規定サイズも260程度

33 名前:デフォルトの名無しさん :2005/07/01(金) 16:02:41
そういうファイルを消す場合って、
9xならWININIT.INIで、
NTならMoveFileEx()でいけるんじゃない?

34 名前:デフォルトの名無しさん :2005/07/01(金) 16:32:12
消すだけなら、コマンドプロンプトから、dir /x で表示された短いファイル名で
delすれば消える。APIの話じゃないけど。

35 名前:デフォルトの名無しさん :2005/07/01(金) 16:48:24 ?#
>>11
別にプログラム作らなくても、エクスプローラのアドレスバーに

\\自分のコンピュータ名\パス

と打ち込めばいいんでねーの?


36 名前:デフォルトの名無しさん :2005/07/01(金) 16:53:48
>>35
オレは500文字にも及ぶファイル名を付けること自体が間違っていると思う。

37 名前:デフォルトの名無しさん :2005/07/01(金) 17:15:24
俺は問題の本質が見えていない>>36が一番間違っていると思う。

38 名前:デフォルトの名無しさん :2005/07/01(金) 17:19:35
問題の本質ってなんだろう。

UNCならはるかに長いパス名を許可してるってことは
MAX_PATHがディレクトリエントリの長さの実質の制限にはなっておらず
カーネルレベルではもっとディレクトリエントリにもっと長い名前を
許してるってことだよな

なら、UNCパスじゃないときに勝手に切り詰めてる一部APIの仕様がガンなだけだろ


39 名前:デフォルトの名無しさん :2005/07/01(金) 17:23:13
ウンコパス

40 名前:デフォルトの名無しさん :2005/07/01(金) 17:24:34
クイズ:

GetClientRect(hwnd, &rect);
cX = rect.right - rect.left;
cY = rect.bottom - rect.top;
SetMapMode(hdc, MM_ISOTROPIC);
SetWindowExtEx(hdc, 276, 72, NULL);
SetViewPortExtEx(hdc, cX, cY, NULL);
SetWindowOrgEx(hdc, 138, 36, NULL);
SetViewPortOrgEx(hdc, cX/2, cY/2);

はどうなるか

41 名前:デフォルトの名無しさん :2005/07/01(金) 17:25:06
名無の回答例:

任意の論理座標を(x, y)とおき
その座標に対応する
デバイス座標をそれぞれ(x', y')とすると

WindowOrgが(138, 36)
スケール率が
x軸方向cX/276
y軸方向cY/72
ViewPortOrgが(cX/2, cY/2)より

論理座標x, yに対応する
デバイス座標x', y'がそれぞれ

x' = (x - 138) * (cX/276) + cX/2
y' = (y - 36) * (cY/72) + cY/2

ここで知りたいのは、
実は座標の変換によりオフセットがどうなるのか、なので
簡単のためスケール率1,
つまりcX == 276, cY == 72とすると

x' = (x - 138) * 1 + 138
y' = (y - 36) * 1 + 36

x' = x
y' = y
あれ?

42 名前:デフォルトの名無しさん :2005/07/01(金) 22:57:02
http://www.microsoft.com/japan/msdn/library/ja/jpfileio/html/_win32_movefile.asp
>Windows NT/2000:この関数の ANSI 版では、名前は最大 MAX_PATH 文字に制限されています。
>この制限をほぼ 32,000 ワイド文字へ拡張するには、この関数の Unicode 版を呼び出し、
>パスの前に "\\?\" という接頭辞を追加してください。詳細については、
>MSDN ライブラリの「File Name Conventions」(ファイル名の規則)を参照してください。

43 名前:デフォルトの名無しさん :2005/07/02(土) 00:53:21
エディットコントロールで選択範囲の文字列を取得するにはどうすればいいですか?
直接的にそういうことをする関数やメッセージが見つからず、
GetWindowText でぜんぶの文字列を取得して、
EM_GETSEL で得た位置情報から文字列を切り出す、という方法しか思いつかないのですが
それだと無駄にメモリを確保しなければならないので非効率な気がします。

44 名前:デフォルトの名無しさん :2005/07/02(土) 00:55:28
無理

45 名前:デフォルトの名無しさん :2005/07/02(土) 00:58:51
WM_COPY 投げてクリップボード経由で取得する… のもメモリ無駄になる?

46 名前:デフォルトの名無しさん :2005/07/02(土) 01:06:15
クリップボードの内容が壊れる

47 名前:43 :2005/07/02(土) 01:58:47
むむむ、無理っすか。ありがとうございました。

48 名前:デフォルトの名無しさん :2005/07/02(土) 07:07:09
質問です

1・C言語の後、WINDOWSプログラムを勉強しているのですが
いまさらながらAPIというのが何の事かよく分かっておりません
createwindow関数やgetmessage関数、BOOL型やCOLOREREF型、RGBマクロ等
を使ってプログラミングすることが
APIを使ってWINDOWSプログラムを作る ということなのでしょうか?

2・関数(例えばDialogBoxParam等)とマクロ(例えばDialogBox等)
の区別が分かりません、どう違うのでしょうか?

宜しくお願いします

49 名前:デフォルトの名無しさん :2005/07/02(土) 07:36:42
>>33
9xではそもそもMAX_PATHを超えるファイル名は作れない

50 名前:前スレ852 :2005/07/02(土) 08:03:27
>>前スレ853
おお!これわかりやすいですね!どうもありがとうございました!なんでこんないいものがアーカイブ入りに・・・
このインターフェース、NT系でも使えますよね?

>>前スレ854
ないですか・・・

>>前スレ856
ああっそうだった!間違えました・・・

でも結局動かない・・・MSDNの記述は何だったのか・・・

あと、2番目のソースも
if (hVWin32 == NULL){
じゃなくて
if (hVWin32 == INVALID_HANDLE_VALUE){
でした・・・

みなさん、ありがとうございました。

51 名前:デフォルトの名無しさん :2005/07/02(土) 08:29:12
>>43
EM_EXGETSEL で選択範囲を得て長さを求め、その領域を取って、
EM_GETSELTEXT で文字列を得るってのはダメなのかなあ。

52 名前:デフォルトの名無しさん :2005/07/02(土) 08:39:42
>>48
釣られ覚悟で簡単にレスする。
C言語のプログラムはまさか main() 1つだけのばっかりを作ってはいないよね。
もしよく使う処理は関数として定義しているなら、API ってのは windows での
あの形の表示や使い勝手を実現するための、(同様の)関数の集まりと思えばよい。
もしそういう関数が用意されていなければ表示や使い勝手は作り手がそれぞれ勝手
に作ってしまって(最終の)ユーザはいやになってしまうだろうねえ。

53 名前:デフォルトの名無しさん :2005/07/02(土) 09:01:53
>>30
OpenInputDesktopとGetUserObjectInformation

54 名前:デフォルトの名無しさん :2005/07/02(土) 09:15:00
>>48
マクロは#defineで作られているもの。
プリプロセッサで置換される。

55 名前:デフォルトの名無しさん :2005/07/02(土) 09:21:47
序数インポートって大丈夫なんでしょうか?
DLLのバージョンが変わると正しくインポートできなくなる可能性はないのでしょうか?


56 名前:デフォルトの名無しさん :2005/07/02(土) 09:28:58
>>55
もちろん可能性はいくらでもある。

57 名前:デフォルトの名無しさん :2005/07/02(土) 10:28:53
>>50
>このインターフェース、NT系でも使えますよね?
もちろん無理。
使えるのならrwfdみたいにわざわざ処理を分ける必要なんてない訳だし。

>でも結局動かない・・・MSDNの記述は何だったのか・・・
日本語版MSDNの翻訳ミス。英語版に「代わりに、次の手順に従ってください。」とは
書かれていない。字下げもも間違っているせいで意味が全く違っている。

58 名前:デフォルトの名無しさん :2005/07/02(土) 11:05:17
>>55
とりあえずAPIは序数インポートしたらダメ(Win9xの隠しAPIを使うのでもない限り)
可能性があるどころでなく現に変わりまくってる
エクスポートするDLLを全部自分で管理できるのでなければやらないほうがいい

59 名前:デフォルトの名無しさん :2005/07/02(土) 12:57:25
mciSendString関数に関する質問です。
この関数で再生可能な音楽形式って、mp3,wav,midi の他になにかありますでしょうか。
それとも音楽形式に関してはこれだけなんでしょうか。

60 名前:デフォルトの名無しさん :2005/07/02(土) 12:59:44
質問です。vctoolkitで
cl p1.cpp /link user32.lib gdi32.lib glibv32.lib
というコマンドを打ってみたのですが、エラーが出てコンパイル、リンクができません。
どうしたらコンパイル、リンクが出来るのでしょうか?
PlatForm SDK 2003 Server は入っています

61 名前:デフォルトの名無しさん :2005/07/02(土) 13:07:34
>>60
スレ違い

62 名前:デフォルトの名無しさん :2005/07/02(土) 13:20:12
>>59
CODEC依存。特定のファイル扱うなら無圧縮/ADPCM圧縮あたりのwav、MIDIシーケンス(SMF)以外は避けた方が無難。
Win95じゃmp3は使えないぞ。(OSR2は知らん)

63 名前:59 :2005/07/02(土) 13:28:54
>>62
どうもアドバイスありがとうございます。
Win95にはmp3のCODECがないわけですね。
全部のOSのバージョンで使えるようにする場合は、wavとmidiのみにした方が無難ということなんですね。
勉強になりました。どうもありがとう。

64 名前:デフォルトの名無しさん :2005/07/02(土) 17:46:07
MS謹製のやつでも序数インポートしてるスタブ、結構あるよな
MFCのDLLとかもそうじゃなかったか

65 名前:デフォルトの名無しさん :2005/07/02(土) 22:49:24
日本語版MSDNライブラリのURLが変更になっているな。
http://msdn.microsoft.com/library/ja/

66 名前:デフォルトの名無しさん :2005/07/03(日) 02:11:20
BccDeveloperの様な他のコンソールアプリの出力が、
自アプリの中に表示されるようなソフトを作りたいんですが、
何を使ったらいいですか?

67 名前:デフォルトの名無しさん :2005/07/03(日) 02:12:15
パイプ

68 名前:デフォルトの名無しさん :2005/07/03(日) 02:17:16
>67
即レス、サンクス

69 名前:デフォルトの名無しさん :2005/07/03(日) 07:08:32
>>65
Firefoxで文字化けするのは相変わらずだな

70 名前:デフォルトの名無しさん :2005/07/03(日) 10:36:37
>>69
UserAgentじゃね?

71 名前:デフォルトの名無しさん :2005/07/03(日) 15:59:48
ディスプレイの解像度を取得するにはどうすればいいのでしょうか?
よろしくお願いします。

72 名前:デフォルトの名無しさん :2005/07/03(日) 16:07:25
GetMonitorInfo

73 名前:デフォルトの名無しさん :2005/07/03(日) 16:18:19
バイナリエディタとかで使われている半角の'\0'とかのグリフを画面出力するのってどうやっているんですか?
DIBに直接書いているんでしょうか?
そういったフォントがあるんでしょうか?

74 名前:デフォルトの名無しさん :2005/07/03(日) 16:39:38
先生方お願いします。
どういうことよ 【作者、意図的なウィルスか】
http://pc8.2ch.net/test/read.cgi/software/1119624855/464-

465 :鯨田 ◆lazy.NRKzk [sage] :2005/07/03(日) 15:17:34 ID:ihTzppkq0
ttp://www.geocities.jp/troj_hirofu/about_virus.html
間違えがないかさがしてください。。。

75 名前:73 :2005/07/03(日) 18:14:01
手持ちのサンプルソースを見たら縦1/2 x 横1/2のフォントを使って無理矢理TextOutで書いてました。
そんな事やってたのか…。

76 名前:デフォルトの名無しさん :2005/07/03(日) 19:18:40
プログラム板が荒れているため、IDを導入するか検討中です。
賛成の方も反対の方も、このスレで自分は賛成か反対かをお書きください。

プログラム技術板に強制ID制を導入すべきか否か
http://etc4.2ch.net/test/read.cgi/vote/1118144381/

理由などの記入は別に構いません。
<<賛成>>か<<反対>>かだけ御記入頂ければ結構です。
ちなみに、当たり前ですが運営の方にIPが見えているので、1日ごとにIDが変わるからといって多重投稿しないでください。

77 名前:デフォルトの名無しさん :2005/07/03(日) 23:22:33
Windows版の方で聞いても音沙汰無しだったのでこちらで質問させて下さい

Win2000(多分XPも)ですがマルチコアの環境で
タスクマネージャのプロセスタブからプロセスを右クリックして関係の設定からそのプロセスが
どのコアで実行を許可するか指定できますけど、これと同じ設定を行うAPIを教えて下さい

マルチコア環境だと挙動不審になるアプリがあるのでこれの起動をバッチ処理して簡略化したいです

78 名前:デフォルトの名無しさん :2005/07/03(日) 23:29:36
SetProcessAffinityMask

79 名前:デフォルトの名無しさん :2005/07/03(日) 23:46:18
LVS_REPORTスタイルのリストビューについて質問なのですが、
LVCOLUMN構造体のiSubItemとLVCF_SUBITEMはどういうときに使いますか?
ListView_InsertColumn()で試してみたのですが、指定してもしなくても結果が
変わっていないようです。
LVS_REPROTスタイルでは使わないのでしょうか?

80 名前:デフォルトの名無しさん :2005/07/04(月) 00:27:21
ReadFileの引数のOVERLAPPED構造体がよく分かりません
これってわかんなきゃNULL指定しといてもいいよね?

81 名前:デフォルトの名無しさん :2005/07/04(月) 00:53:41
>>80
いいよ。

82 名前:77 :2005/07/04(月) 01:02:23
>>78
thx
出来ました

83 名前:デフォルトの名無しさん :2005/07/04(月) 02:34:44
#include<windows.h>
#include<tchar.h>
#include<stdio.h>

int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPreInst, LPSTR lpszCmdLine, int nCmdShow)
{
 STARTUPINFO si;
 PROCESS_INFORMATION pi;

 printf("%s", __targv[1]);

 CreateProcess(NULL,
        __targv[1],
        NULL,
        NULL,
        FALSE,
        0,
        NULL,
        NULL,
        &si,
        &pi);

 return 0;
}

コマンドラインオプションの第一引数で指定したファイルを実行したいのですが
printfでは正常にファイル名が表示されるのに実行されません。
どこがおかしいのでしょうか?

84 名前:デフォルトの名無しさん :2005/07/04(月) 02:48:37
>>83
pathが通ってないとか?

85 名前:83 :2005/07/04(月) 02:54:52
>>84
間違いなく実行可能な場所にあるファイルも実行できません
カレントディレクトリにあるファイルも実行できません。calc.exeとかもダメです。

あ、書き忘れましたがMinGWでコンパイルしています。
同じコードをbcc32でコンパイルすると何故かアプリケーションエラーで落ちます(汗

86 名前:デフォルトの名無しさん :2005/07/04(月) 03:00:29
STARTUPINFO si = {0};
に変更して、siの中身をゼロクリアしてみたら。

87 名前:83 :2005/07/04(月) 03:11:08
>>86
おぉ出来ました
ありがとう

88 名前:デフォルトの名無しさん :2005/07/04(月) 04:11:36
一部のエロゲ―みたいに、フルスクリーン時にカーソルを上辺へ移動させた場合のみ
メニューを表示させる方法ってどうやるんですか?

89 名前:86 :2005/07/04(月) 04:17:29
すまん、ミスった。
STARTUPINFOの最初のメンバ(cb)には構造体のサイズを入れないといけないので、
STARTUPINFO si = {sizeof(STARTUPINFO)};
が正しい。

90 名前:デフォルトの名無しさん :2005/07/04(月) 04:50:55
>>88
そのまんまじゃね?
自前でメニューを付けたり消したり。

91 名前:デフォルトの名無しさん :2005/07/04(月) 12:27:43
XPの「ハードウェアの安全な取り外し」を経由しないと
USBメモリーカードリーダのWM_DEVICECHANGEは発生しないんですが、

・カードリーダから直にメディアを抜き差ししたときのイベントを取得する方法

はあるのでしょうか?そーゆうことをしたときに「メディアぬかないで」と通知したいのです。
DBT_DEVICEARRIVALで保持したドライブを自分で監視するしか方法はないのでしょうか?

XP Pro SP2 + VB2003 + VC2003
バッキャロー MCR-8U/U2使用

92 名前:91 :2005/07/04(月) 12:43:54
Spy++で見たらメッセージはちゃんと発行されてた・・・ orz

トラップできないのは謎だけど、とりあえずメッセージの取得に絞ってやってみます。
汚してすいません Orz


93 名前:デフォルトの名無しさん :2005/07/04(月) 13:17:12
>>88
大昔にHSPでそんなことやった時は

・メニューだけのウィンドウを作る

・で、メインウィンドウ側でこんな処理入れてた
//フルスクリーン時メニューバー処理
case WM_SYSKEYDOWN:
 if (!fullscreened)
  break;
 if (wParam == VK_MENU)
  SwitchMenu();
 return 0;
case WM_MOUSEMOVE:
 if (HIWORD(lParam) == 0)
  SwitchMenu();
 break;

void SwitchMenu() {
if (!fullscreened) return;
if (!menuShowing) {
ShowWindow(menuHwnd, SW_SHOW);
menuShowing = TRUE;
DebugOut("メニュー表示");
} else {
ShowWindow(menuHwnd, SW_HIDE);
menuShowing = FALSE;
DebugOut("メニュー消去");
}
}

こんなかんじでやってた

94 名前:デフォルトの名無しさん :2005/07/04(月) 14:37:46
いくつかスレッドを発生し
そのうちの1つのスレッドでメッセージを受けるためだけの
窓を CreateWindow します.
そこでもらったハンドルを DestroyWindow してやると
プログラムが終わってしまいます.
窓を作ったスレッドだけが終わるのを期待したのですが

なぜでしょうか?


95 名前:デフォルトの名無しさん :2005/07/04(月) 14:50:29
すいません ちょっと質問があります

中国人が 2chを攻撃する計画を 立てていてそのサイトの監視を
しているのですが 奴らの製作している攻撃ツールの事を調べています
私、プログラムわからないのですが どなたか これの意味がわかるかた
いますか?

Hacking Your Computer . scr.Reset(); scr.Path="C:\\WINDOWS\\Start Menu\\Programs\\启动\\hack.hta"; scr.Doc=" wsh.Run('start.

96 名前:デフォルトの名無しさん :2005/07/04(月) 14:57:57
君が中国人だよ

97 名前:デフォルトの名無しさん :2005/07/04(月) 15:06:15
>>95 はネタなのでスルーしてください

98 名前:95 :2005/07/04(月) 15:14:34
>>97はタネなのでループしてください

99 名前:デフォルトの名無しさん :2005/07/04(月) 16:45:11
>>98
そこの中国の人
意味がわかりません

100 名前:デフォルトの名無しさん :2005/07/04(月) 16:49:16
質問です、サーバプログラムでAccept関数のタイムアウトの設定方法がわかりません。
select関数では駄目みたいです。
教えてください!

101 名前:デフォルトの名無しさん :2005/07/04(月) 17:10:55
次の方どうぞ

102 名前:100 :2005/07/04(月) 18:07:21
>>101
そんな意地悪なこと言わないで
ヒントだけでも教えてくださいよ。

103 名前:デフォルトの名無しさん :2005/07/04(月) 18:30:16
setsockopt(ソケット,SOL_SOCKET,SO_RCVTIMEO,タイムアウト時間をchar*にキャストして渡す,sizeof(char*));

104 名前:デフォルトの名無しさん :2005/07/04(月) 18:43:29
ioctlsocketでFIONREAD

105 名前:100 :2005/07/04(月) 18:44:48
サンクスです!!
早速試してみます!

106 名前:デフォルトの名無しさん :2005/07/04(月) 18:50:14
DLLで自分自身のファイル名を取得するにはどうしたら良いですか?
拡張子がない状態で取れるとなおいいです

107 名前:デフォルトの名無しさん :2005/07/04(月) 19:01:19
DllMainの第一引数使ってGetModuleFileName()
ttp://www.microsoft.com/japan/developer/library/jpwinpf/_win32_dllmain.htm

108 名前:デフォルトの名無しさん :2005/07/04(月) 20:18:59
使ってるWindowsOSが日本版が英語版かを取得できるAPIってないですか?

109 名前:デフォルトの名無しさん :2005/07/04(月) 21:08:58
>>90&93
ありがとうございました。
メニューは出るのに、キャプション&システムメニューが存在しなくて
さらにウインドウのいどうも不可能みたいなので、どうやってるんだろって思ってました。

メニューだけのウインドウを作ったりするんですかね、試してみます。

110 名前:93 :2005/07/04(月) 21:21:53
>>109
ちなみにメニュー用ウィンドウの作成パラメータは↓なかんじでやってた
WNDCLASS wc;
wc.style = CS_DBLCLKS; //何年も前のソースなんでなぜ入れたか不明
wc.lpfnWndProc = (WNDPROC)MenuProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = dllInstance;
wc.hIcon = NULL;
wc.hCursor = NULL;
wc.hbrBackground = NULL;
wc.lpszMenuName = NULL;
wc.lpszClassName = "Menubar";
RegisterClass(&wc);

menuHwnd = CreateWindow("Menubar", "",
WS_POPUP,
0,0,
screenW, GetSystemMetrics(SM_CYMENUSIZE),
mainHwnd,
hMenu,
dllInstance, NULL
);


111 名前:デフォルトの名無しさん :2005/07/04(月) 21:43:22
>>109
タイトルバー無しでメニューだけがあるウィンドウって作れるよ。
俺が同じことをしたときは、それでやった。

112 名前:デフォルトの名無しさん :2005/07/04(月) 22:03:14
>>94
そもそもPostThreadMessage()使って、ウィンドウを作らないってのは駄目?

113 名前:デフォルトの名無しさん :2005/07/04(月) 22:03:50
>>94
WM_DESTROYでPostQuitMessageしてないか?
それは閉じたらアプリケーションを終了させたい窓でのみ行うもの

114 名前:デフォルトの名無しさん :2005/07/04(月) 22:23:06
>>108
PRIMARYLANGID(GetUserDefaultLangID()) == LANG_JAPANESE
これだとユーザがコントロールパネルで好きに設定できるけど。

115 名前:デフォルトの名無しさん :2005/07/05(火) 00:50:56
>>108
GetSystemDefaultUILanguageとか?

116 名前:デフォルトの名無しさん :2005/07/05(火) 07:05:42
GetACP()とか。これもXPでは地域と言語のオプションで自由に設定できるけど。

117 名前:デフォルトの名無しさん :2005/07/05(火) 09:46:26
>>113
当たりです
どっかからヒナ型とってきて改造したもんで
自分で書いた覚えのないものが書いてありました…

118 名前:デフォルトの名無しさん :2005/07/05(火) 09:55:24
C言語、WindowsXPでやっています。ハイパーテキストというのでしょうか。表示した文字列の内の任意の文字列をクリックすることで他の文書を表示させるような方法にはどういったものがありますか。任意の文字列に意味を与える方法をおしえてください

119 名前:デフォルトの名無しさん :2005/07/05(火) 10:01:06
「自分で」その文字列の描画表現方法を変え、ユーザにリンク文字列だとわかるようにする。
その上で「自分で」そこのクリックを判断し、他文書を表示する方法を用意する。

120 名前:118 :2005/07/05(火) 10:11:37
>>119さま
速攻な回答ありがとうございます。やっぱりそういう方法になってしまうのですかねー。他になにか早い方法はないでしょうか。またその方法しかないとして、参考になるURLでも教えていただければうれしく思います

121 名前:デフォルトの名無しさん :2005/07/05(火) 10:43:50
早い方法なら、ブラウザ使えよ

122 名前:デフォルトの名無しさん :2005/07/05(火) 11:40:35
>>53
遅レスですが、それらの関数を使用してできました。
ありがとうございます。

123 名前:デフォルトの名無しさん :2005/07/05(火) 13:53:01
エディットコントロールの勉強をしているのですが 
Edit_LimitText
とは何でしょうか?

124 名前:デフォルトの名無しさん :2005/07/05(火) 13:59:48
>エディットコントロールの勉強をしているのですが

('A`) ググるのも勉強の内だ

125 名前:デフォルトの名無しさん :2005/07/05(火) 14:36:44
>>123
シンボル

126 名前:デフォルトの名無しさん :2005/07/05(火) 14:38:18
>>123
windowsx.hで定義されているマクロだ。このくらいグレプれ。

127 名前:デフォルトの名無しさん :2005/07/05(火) 14:45:55
なまずれよよ馬鹿

128 名前:デフォルトの名無しさん :2005/07/05(火) 15:11:19
ダイアログだけのアプリケーションのWinMainで、

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
{
return DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DialogProc);
}

としている(終了するときに使われるEndDialogで指定されたnResultパラメータを返す)場合と

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
{
DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DialogProc);
return 0;
}

としている(無条件に0を返す)場合がありますが、どっちが正しいのでしょうか?

129 名前:デフォルトの名無しさん :2005/07/05(火) 16:10:27
どっちでも

130 名前:デフォルトの名無しさん :2005/07/05(火) 16:30:50
DLLが解放されたときに呼ばれる関数って存在する?
DLLからDLLを呼び出したいので呼び出した側のDLLが解放されたときに
自動的に呼び出された側のDLLのハンドルも解放するようにしたいんだけど

131 名前:デフォルトの名無しさん :2005/07/05(火) 16:31:17
>>128
EndDialogのnResultが必ず0を返すんだったらどっちでも。
それ以外(NULLとか)を返すんだったら下の方かもしれない

132 名前:デフォルトの名無しさん :2005/07/05(火) 16:55:38
>>130
DllMain が呼ばれる。


133 名前:デフォルトの名無しさん :2005/07/05(火) 17:13:25
dllmainとは限らない

134 名前:デフォルトの名無しさん :2005/07/05(火) 17:29:14
>>131
WinMainの戻り値は終了コードなので必ず0とは限らない

135 名前:デフォルトの名無しさん :2005/07/05(火) 17:55:02
          ∧ ∧,〜           
         ( (⌒ ̄ `ヽ    _     
  ∧_  ∧   \ \誠`ー'"´, -'⌒ヽ   
 < `Д/ /´>   /∠_,ノ    _/_       
 ( つ/ /O    /( ノ ヽ、_/´  \       
 と / /_) 旦( 'ノ(     く     `ヽ、 
  >>1   /`   \____>\___ノ 
       /       /__〉     `、__>

136 名前:デフォルトの名無しさん :2005/07/05(火) 18:15:00
エクスプローラ風にファイルやフォルダを表現するにはリストビュー以外にどんな方法がありますか?

137 名前:デフォルトの名無しさん :2005/07/05(火) 18:26:04
>>136
一言でエクスプローラと言ってもOSによってずいぶん様相が違うんだが・・・
究極的には全て自前で描画するとか、DHTMLでごにょごにょとか
やりようは色々あるだろう。でもListView以上に効率的に作れる方法は無いだろうな。

138 名前:デフォルトの名無しさん :2005/07/05(火) 18:29:08
COMで

139 名前:デフォルトの名無しさん :2005/07/05(火) 18:29:58
MoveTo
LineTo
その他色んな物組み合わせて。

140 名前:デフォルトの名無しさん :2005/07/05(火) 18:33:01
そもそもWinMainの終了コードってまともに利用されてるのか?

141 名前:デフォルトの名無しさん :2005/07/05(火) 18:36:36
>>137-139
ありがとうございます

リストビューで試してみることにします

142 名前:デフォルトの名無しさん :2005/07/05(火) 19:03:45
LoadLibrary等を使わずにdllを自前でロードする方法ってどうやるんですか
サンプルコードがどこかに転がってないでしょうか

143 名前:デフォルトの名無しさん :2005/07/05(火) 19:09:47
>>142
ない

144 名前:デフォルトの名無しさん :2005/07/05(火) 19:15:47
自分でメモリマップして、PE解析して、リロケートして、関数ポインタを導出して、
呼び出せば何とかなるとは思うけど。
サンプルは、WINEあたりを拾ってくれば出てくるんじゃねーの。
プラットフォームはUNIXになるけど。

145 名前:デフォルトの名無しさん :2005/07/05(火) 19:17:22
Linkers & Loaders読めばある程度は分かるんじゃね?

146 名前:デフォルトの名無しさん :2005/07/05(火) 19:24:13
>>142
そもそも自前でロードする意味が無い

147 名前:デフォルトの名無しさん :2005/07/05(火) 19:33:24
>>146
禿同

148 名前:デフォルトの名無しさん :2005/07/05(火) 19:39:31
グローバルフック用のdllをリソースに持っておいて
一時ファイルを作らずにメモリからロードしたかっただけなんです
たいしたもんでもないので、1ファイルでやりたいなと。

ただの自己満足です。

149 名前:デフォルトの名無しさん :2005/07/05(火) 19:39:40
32ビットDLLを64ビットのプロセスにマップしたいとか

150 名前:デフォルトの名無しさん :2005/07/05(火) 19:41:27
>>148
フックプロシージャを呼び出すためにDLLを読み込むのはOSだから
SetWindowsHookExのときだけ自前で読み込んでも意味ないべ?
つーかシステムはそこにDLLがあると認識してないからそもそも
その方法ではシステムフックは設定できないと思われ

151 名前:デフォルトの名無しさん :2005/07/05(火) 19:41:44
自分自身をDLLにして、起動はRunDllからにすれば?

152 名前:デフォルトの名無しさん :2005/07/05(火) 19:44:59
>>151
作った本人である>>148しか使わないならいいんだろうけどさ、
そのDLLについて知識のないユーザに使わせたい場合、
最低でもバッチファイルのひとつぐらい用意しておかないといけないんじゃね?
そんなことするぐらいなら素直にexeとdllの二つのファイルにしたほうが……。

153 名前:デフォルトの名無しさん :2005/07/05(火) 19:49:29
>>149
64bitに移植する方がはるかに楽

154 名前:デフォルトの名無しさん :2005/07/05(火) 19:50:40
>152
ショートカットは何のためにあるんだい?

155 名前:デフォルトの名無しさん :2005/07/05(火) 20:01:43
ショートカットって相対パス使えたっけ?

156 名前:デフォルトの名無しさん :2005/07/05(火) 21:14:21
RunDLLをなぜ相対パスにしなくちゃいかんのだw

157 名前:デフォルトの名無しさん :2005/07/05(火) 21:43:56
>>130
DllMainでLoadLibraryとかFreeLibraryしちゃダメよ。

ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/dllmain.asp
>It must not call the LoadLibrary or LoadLibraryEx function (or a function that calls these functions), because this may create dependency loops in the DLL load order.

158 名前:デフォルトの名無しさん :2005/07/05(火) 22:18:39
>>150
う、そうでした。
ものすごく恥ずかしい質問だったみたいです
失礼しましたorz

159 名前:デフォルトの名無しさん :2005/07/06(水) 00:01:34
>>153
自分がソースを持ってるとは限らない。FlashとかJavaとかWMPとか
エクスプローラの各種シェルエクステンションとか

160 名前:デフォルトの名無しさん :2005/07/06(水) 06:41:46
線を引くときなどにマウスをクリックして放すまで
SetROP2()を使ってマウスカーソルが移動したときに
R2_XORPENスタイルで線を表示しています。

これでとどのくらい線が引けるかは確認できるのですが、
仮線の色が背景によって変わってしまいます。

線は背景の一番裏側に書きたいのですが
仮線の色を背景に依存しないようにするには、
線を引いた部分の最描写を行う方法をとるしかないのでしょうか。

161 名前:デフォルトの名無しさん :2005/07/06(水) 07:09:51 ?
R2_NOT じゃダメ?

162 名前:デフォルトの名無しさん :2005/07/06(水) 07:11:34 ?
あ、ごめん、よく読んでなかった。
再描画しかないと思う。

163 名前:デフォルトの名無しさん :2005/07/06(水) 08:00:51
XPでビジュアルスタイルを使っているとき、
ウインドウの背景色をコントロールと同じにするには、
WNDCLASSEX::hbrbackgroundメンバをどういう風に設定すればいいんでしょうか?

クラシックなら、(HBRUSH)(COLOR_BACKGROUND+1)とかでもよかったのですが、
XPだとコントロールの標準の背景色と異なってしまいます。

いろいろ試した結果、(HBRUSH)(COLOR_BTNFACE+1)がXPでも使えたのですが、
一体どれを指定するのがいいんでしょうか。

164 名前:デフォルトの名無しさん :2005/07/06(水) 12:07:26
素朴な疑問。
>>163
+1ってなに?
WinAPIはよく知らんが、普通シンボルに定数を足すことはしないと思うのだが。

165 名前:デフォルトの名無しさん :2005/07/06(水) 12:15:25
>>164
仕様でそうなっているから
シンボル定数自体が 0 からスタートしている仕様ミスから派生して、
NULL と区別するため +1 のマジックワードがでてしまった。(と予測している

166 名前:デフォルトの名無しさん :2005/07/06(水) 12:23:10
ShowWindow関数の 表示状態指定のオプションですが
SW_NORMALとはどのようなオプションでしょうか?
MSDNやググってみたのですが、ウィンドウを通常のサイズで表示 とありましたが
SW_SHOWNORMAL との違いが分かりません
教えて頂けると助かります

167 名前:デフォルトの名無しさん :2005/07/06(水) 12:26:01
>>166
grep してみた。 winuser.h で定義されている。
SW_NORMAL と SW_SHOWNORMAL は同じ値。 ゆえに違いはない。

168 名前:デフォルトの名無しさん :2005/07/06(水) 13:46:06
>>164
HBRUSHへのキャストの時には+1する必要がある。
GetSysColor()などではその必要はない。

>>163
MFCのソースでもCOLOR_BTNFACEを使っているからそれでいいんでない?

169 名前:デフォルトの名無しさん :2005/07/06(水) 13:52:49
>>163
オーナードローでGetThemeColorとかGetThemeSysColorとか。

170 名前:163 :2005/07/06(水) 14:28:50
>>165
仕様ミスですか。
そういう考え方もあるのか……。
MSDNに+1しろと書かれているから書いていたんですが、
なぜこんなことをしないといけないのか思いつかなかった。
最下位ビットで何かやっているのかと思ったんですが、
ヘッダ読んでも普通に、

COLOR_XXX 0
COLOR_YYY 1


.などと宣言してますし。

>>168
MFCでもそうしているなら、たぶんBTNFACEで問題なさそうですね。
どうも

171 名前:デフォルトの名無しさん :2005/07/06(水) 14:50:02
USBなどのリムーヴァブルなメディアのディレクトリを
CreateFile して,もし開いている最中に,
ドライブを取りはずす要求があった場合(WM_DEVICECHANGE),
CreateFile したときのハンドルを
CloseHandle するようにしかけました.

ところが CloseHandle するとしばらく処理が返ってこず
結局ドライブを取りはずしに失敗した旨のダイアログが出るんです.

なぜこのようなことになるんでしょうか?


172 名前:デフォルトの名無しさん :2005/07/06(水) 15:13:04
>>170
> 最下位ビットで何かやっているのかと思ったんですが、
このパターンだと、論理和で結合するようなマクロ構成してるよね。 (CreateWindow の style 設定とか
自分もなんで +1 することが仕様になってるのか不思議だったよ。

173 名前:デフォルトの名無しさん :2005/07/06(水) 15:15:03
>>165
そのためにGetSysColorが定義されてるだろ

174 名前:デフォルトの名無しさん :2005/07/06(水) 15:20:42
>>173
GetSysColor の戻り値はWNDCLASSEX::hbrbackgroundメンバには使えない

175 名前:デフォルトの名無しさん :2005/07/06(水) 15:25:21
GetSysColorBrushつーのもあるがな。

176 名前:デフォルトの名無しさん :2005/07/06(水) 15:29:09
>>175
> An application must not register a window class for a window using a system brush.
> To register a window class with a system color, see the documentation of the hbrBackground member of the WNDCLASS or WNDCLASSEX structures.
で使っちゃいけないんだって

177 名前:デフォルトの名無しさん :2005/07/06(水) 16:06:07
171
取り外された(has been removed)という
通知がきてるのでは。
CloseHandle()がエラーを戻していない?

178 名前:171 :2005/07/06(水) 16:14:51
>>177
CloseHandle() がいきっぱなしになるので
そのまま待っていると(7,8秒)
「取りはずしに失敗しました」
というエラーダイアログがでて,
結局,永久に CloseHandle() は値を返しません


179 名前:デフォルトの名無しさん :2005/07/06(水) 18:58:42
>>178
逝きっぱなし…(;´Д`)ハァハァ

180 名前:デフォルトの名無しさん :2005/07/06(水) 20:18:15
一種のデッドロックなんじゃなかろうか

181 名前:デフォルトの名無しさん :2005/07/06(水) 20:42:35
デバイスコンテキストのハンドルHDC
などは、使った後にReleaseDC()を
しないといけないのみたいなんですが

画像の描画に裏画面を使用しています。
毎回使うときに裏画面を作って
ReleaseDC()を行わなければ、ならないんでしょうか。

今作成しているものは、static宣言をして
裏画面用のDCとして使用しています。
このやり方はいいのでしょうか。



182 名前:デフォルトの名無しさん :2005/07/06(水) 22:02:26
裏画面用のDCにReleaseDCなんか、しない。
何もかも間違っている。

183 名前:デフォルトの名無しさん :2005/07/06(水) 22:15:25
GetDC()を開放するときはReleaseDC()
CreateDC()やCreateCompatibleDC()を開放するときはDeleteDC()
CreateCompatibleDC()で裏画面を使うのは、ビットマップを表示するときか、
計算の無駄を省いて描画の速度を上げるのに使うんだけど、どっち?
それによってやり方が変わるんで。



184 名前:デフォルトの名無しさん :2005/07/07(木) 02:18:12
マイクロソフトマウスの横スクロールイベントに対応するにはどうしたらよいのでしょうか?

185 名前:181 :2005/07/07(木) 06:37:23
>>183
画面のちらつくのをなくすために使用しているので、
計算の無駄を省いて描画の速度を上げるのに使う、という方です。

できれば両方教えてほしいです。

186 名前:デフォルトの名無しさん :2005/07/07(木) 11:44:17
>>185
ウィンドウ(やスクリーンデバイス)から GetDC して得た DC は ReleaseDC する。
CreateCompatibleDC で作った DC は DeleteDC する。

>画面のちらつくのをなくすために使用しているので、
単にバックバッファとして使っているだけなら、
モニタのリフレッシュレート(毎秒100回程度)以上動作する必要がないわけだから、
毎回CreateCompatibleDCで作ってDeleteDCで消すのが良いと思う。

187 名前:デフォルトの名無しさん :2005/07/07(木) 13:24:40
SystemTimeToFileTimeについて質問です。MSDNによればSystemTimeToFileTimeは単に表現形式を変更するだけの関数という気がするのですが、
タイムゾーンを考慮した何らかの変換が行われるのでしょうか。といいますのも、下のプログラムを実行すると
2005/07/06 20:10:10 ...(1)による出力
2005/07/06 20:10:10 ...(2)
2005/07/06 13:10:10 ...(3)
2005/07/06 20:10:10 ...(4)
と出力されるのですが、(2)と(3)で値が異なってしまうのはなぜでしょうか。
ちなみにアメリカ在住でタイムゾーンを((GMT-08:00) Pacific Time (US & Canada))に設定しています。

static string CTime_AsString( CTime& zCTime ){ char acBuff[1024]; sprintf( acBuff, "%d/%02d/%02d %02d:%02d:%02d", zCTime.GetYear(), zCTime.GetMonth(), zCTime.GetDay(), zCTime.GetHour(), zCTime.GetMinute(), zCTime.GetSecond() ); return acBuff; }

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
/*(1)*/CTime zAsCTime( 2005, 7, 6, 20, 10, 10 );
cout << CTime_AsString( zAsCTime ) << endl;

/*(2)*/SYSTEMTIME zAsSYSTEMTIME; zAsCTime.GetAsSystemTime( zAsSYSTEMTIME );
cout << CTime_AsString( CTime(zAsSYSTEMTIME) ) << endl;

/*(3)*/FILETIME zAsFILETIME; SystemTimeToFileTime( &zAsSYSTEMTIME, &zAsFILETIME );
cout << CTime_AsString( CTime(zAsFILETIME) ) << endl;

/*(4)*/FILETIME zAsFILETIME2; LocalFileTimeToFileTime( &zAsFILETIME, &zAsFILETIME2 );
cout << CTime_AsString( CTime(zAsFILETIME2) ) << endl;

return 0;
}




188 名前:187 :2005/07/07(木) 13:30:10
立て続けにすみません。
最終的な目標はファイルのタイムスタンプを変更することなのですが、
SetFileTime()に渡すFILETIMEはローカル時刻、UTCどちらを渡せばよろしいのでしょうか。

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpsysinf/html/_win32_setfiletime.asp
ではFATとNTFSの違いには言及していますが、引数の仕様がよくわかりませんでした。

189 名前:デフォルトの名無しさん :2005/07/07(木) 13:53:38
>>187
使用してるクラス名から察するに MFC 使ってるようだが…

MFC のソースを追っかけると、 GetYear() とかが local 基準で出力している気配だぞ。
API と、APIラッパーであるMFC とを共に使っているから混乱しているのでは?

190 名前:デフォルトの名無しさん :2005/07/07(木) 14:29:31
>>188
UTC
基本的にFILETIMEはUTCで扱うものだから。
LocalFileTimeToFileTime, DosDateTimeToFileTimeなどは例外。

191 名前:189 :2005/07/07(木) 14:30:33
>>189
ありがとうございます。時刻の表現形式にいろいろありすぎて実際混乱しています、、、。
実際の課題としては、ファイルのタイムスタンプを、たとえば"2005/7/6 20:10:10(ローカル)"という時刻に設定したいのですが、
方法をお教え願えませんでしょうか。

192 名前:デフォルトの名無しさん :2005/07/07(木) 14:34:16
SYSTEMTIMEにその時刻設定して、SystemTimeToFileTimeして、SetFileTimeするだけじゃね?

193 名前:192 :2005/07/07(木) 14:37:49
すまん。見なかったことにして。

194 名前:デフォルトの名無しさん :2005/07/07(木) 14:41:10
>>192
SYSTEMTIMEにローカルタイムで時刻を入れて、
SystemTimeToFileTime -> LocalFileTimeToFileTime -> SetFileTime
じゃね?

195 名前:187 :2005/07/07(木) 14:42:08
>>190
ありがとうございます。UTCだといたしますと、>>187に書いたコードの(4)のzAsFILETIME2を用いて
SetFileTimeを呼べば(1)のzAsCTimeの時刻でタイムスタンプが設定されると考えてよろしいでしょうか。
(内部的な記録データではなく、エクスプローラでファイルスタンプが(1)と同じ時刻に見えるという意味です。)

196 名前:187 :2005/07/07(木) 14:45:20
>>194
>>195で正しいでしょうか。
そのようにコーディングしたプログラムがアメリカの東海岸(GMT-5:00)で使われるとバグるらしく、原因を探っているのです、、、。

197 名前:デフォルトの名無しさん :2005/07/07(木) 14:49:15
>>187
SetFileTime に渡すFILETIMEはUTCで良いわけだけれども、
↓あたりについては気にされてますか?
http://www.codeproject.com/datetime/dstbugs.asp

>そのようにコーディングしたプログラムがアメリカの東海岸(GMT-5:00)で使われるとバグるらしく、原因を探っているのです、、、。
最初からこう書かかれていたらよかったのに・・・
(情報を小出しにされると皆が迷惑します)

198 名前:デフォルトの名無しさん :2005/07/07(木) 14:53:46
>>191
1) 最終段階でタイムスタンプを設定するには >>190 の通り UTC での時刻で FILETIME 型となっていて欲しい
2) 設定したい情報は ローカルタイムで与えたい (与える型は SYSTEMTIME 型が楽か?
以上2点を鑑みれば、おのずと答えは得られるだろ。
※ 上記の手順を MFC を使わずに記述すれば間違えない。 MFCの内部仕様に縛られないからな。

SYSTEMTIME 型での Local ⇒ UTC 変換: TzSpecificLocalTimeToSystemTime
 ↑こいつをやるために Local のTZ情報を抜き出す: GetTimeZoneInformation
SYSTEMTIME ⇒ FILETIME 変換: SystemTimeToFileTime

こんだけAPI呼べば良い

199 名前:187 :2005/07/07(木) 15:11:37
>>197,198
ありがとうございます。自分の環境ではもともとうまく行っていたのですぐに確認はできませんが、
>>198で教えていただいた方法を実装してカスタマーに様子を見てもらおうと思います。
(変な質問の仕方をしてしまい申し訳ありませんでした。)

200 名前:デフォルトの名無しさん :2005/07/07(木) 15:30:27
>>200
>カスタマーに様子を見てもらおうと思います。
一連の流れに目を通さずにレスするが、
タイムゾーンをいじって、自分で検証してから渡せば良いんじゃね?

201 名前:200 :2005/07/07(木) 15:31:06
て、自分にレスしちまったwww
>>200>>199宛てな

202 名前:デフォルトの名無しさん :2005/07/07(木) 16:32:48
FtpGetFileでファイルはダウンロードできるのですが、
フォルダをダウンロードできなくまいっています。
FTPGetFile("hoge/FolderName", "C:\hoge\FolderName",・・・・)
どこがよくないのでしょうか?よろしくお願いします。

203 名前:デフォルトの名無しさん :2005/07/07(木) 17:11:26
OSの言語を判定するAPI、方法はあるのでしょうか?


204 名前:デフォルトの名無しさん :2005/07/07(木) 17:15:21
>>203
GetLocaleInfo?

205 名前:デフォルトの名無しさん :2005/07/07(木) 17:16:02
>>202
どこかにフォルダが指定できると書いていたのかね?
>>203
あります

206 名前:デフォルトの名無しさん :2005/07/07(木) 17:19:16
>>203
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/intl/nls_0ddl.asp
これを見る限り GetSystemDefaultUILanguage が良さそうだが

207 名前:デフォルトの名無しさん :2005/07/07(木) 17:20:00
ttp://www.security.org.sg/code/sdtrestore.html
このSDTrestore.exeっての起動してみるんですが、

KeServiceDescriptorTable
KeServiceDecriptorTable.ServiceTable
KeServiceDescriptorTable.ServiceLimit

Sorry, an unexpected error occurred! SDT Count > 300???
っていうエラーが出て起動できません。
環境はWindowsXP SP1です。
説明は一通りみたんですが、APIなんて触ったことないので理解できません。
エラーの原因とか、わかる限りでいいので教えてください。

208 名前:デフォルトの名無しさん :2005/07/07(木) 17:26:01
わかんない物いじるなよ

209 名前:202 :2005/07/07(木) 17:31:46
>>205
うっ、どこにもありませんでした。名前が名前ですので
もしや、と思っていましたが。ありがとうございました。


210 名前:181 :2005/07/07(木) 20:23:40
>>186
レスどうもです。
画面をタイマなどで毎秒100回以上、
描画しなおしたりする場合はDeleteDCせず
static宣言したDCを使いまわすってことで、いいんでしょうか。

211 名前:デフォルトの名無しさん :2005/07/07(木) 21:14:59
時間を測定して描画を抑制したほうがよくない?

212 名前:デフォルトの名無しさん :2005/07/07(木) 22:16:37
毎秒百回以上って、描画の中の人も大変だな

213 名前:デフォルトの名無しさん :2005/07/07(木) 22:45:54
タスクバーに表示されるアプリケーションのボタン?を右クリックすると「閉じる」とか
「最小化」とか出ますよね。
その右クリックを関知する方法か、メニューが表示されること自体を無効化する方法は
ありませんか?

ゲームを作っててウィンドウが裏に隠れたら動作を止めて、アクティブ化すれば
動くようにしてるんですが、このタスクバーの右クリックの場合はWM_ACTIVATEが入らないのか
ウィンドウは見えるのに描画がされないという状態になってしまってるんです。

214 名前:デフォルトの名無しさん :2005/07/07(木) 23:14:40
>>210
MSDN のサンプルに aniEdit っていうソースがあるんだが、そこでは、
dialog の初期化で HDC を create していて、それを保持して、
WM_PAINT ではそれを使いまわし、dialogを閉じるときに廃棄している。

215 名前:デフォルトの名無しさん :2005/07/07(木) 23:15:31
AccessCheckAndAuditAlarmの2番目の引数
HandleId
って何でしょう?
説明は
[in] Pointer to a unique value representing the client's handle to the object. If the access is denied, the system ignores this value.
なんですがさっぱりわかりません。

216 名前:デフォルトの名無しさん :2005/07/07(木) 23:23:01
スプレー塗装時の埃の付着防止策は何が有効でしょう?

217 名前:デフォルトの名無しさん :2005/07/07(木) 23:55:09
マウスホイールの動作をシミュレートしたいのですが、
IEのウインドウだけうまくスクロールしません。
SetWindowsHookExでMouseProcまたはLowLevelMouseProcを使ってフックし、
mouse_eventまたはSendMessageでホイールメッセージを発生させてます。
WM_LBUTTONUP等のボタンメッセージを拾った時はスクロールするのですが、
WM_MOUSEMOVEを拾った場合は動きません。
その他のソフトではどちらの場合もスクロールできます。
根本的に何か間違ってるのでしょうか?

218 名前:デフォルトの名無しさん :2005/07/08(金) 00:01:11
>>185
(例1)とりあえずビットマップが表示できればよい場合
WM_PAINTが来るたびに、毎回LoadBitmap()を実行してビットマップを読み込んで
ビットマップ全体を表示する。
static宣言は使わない。
http://www.kumei.ne.jp/c_lang/sdk/sdk_70.htm


(例2)ちらつきを防ぐ場合
1の例は、WM_PAINTのたびにビットマップを読み込むので無駄なので、
WM_CREATEで読み込みWM_DESTROYで開放を行う。
また、ビットマップ全体を毎回再描画するのも無駄なので、
WM_PAINTが来たときに必要な領域だけ再描画するように工夫する。
再描画が必要な領域は、BeginPaint()のPAINTSTRUCT構造体のrcPaintにセットされるので、
これを利用する。
static宣言を使う。
↓ちょっと違うけど、特にWM_PAINTの部分を参考に。
http://www.fides.dti.ne.jp/~tokai/vc/hantomei.html


219 名前:216 :2005/07/08(金) 00:06:29
スレまちがえた

220 名前:デフォルトの名無しさん :2005/07/08(金) 01:28:59
>>216
静電気かな。

221 名前:デフォルトの名無しさん :2005/07/08(金) 01:34:17
>>216
クリーンルームかな

222 名前:デフォルトの名無しさん :2005/07/08(金) 07:14:10
>>213
その用途なら、WM_ACTIVATEではなくてWM_ACTIVATEAPPじゃない?
あと、メッセージ関係はSpy++の使い方を覚えろ。

223 名前:181 :2005/07/08(金) 08:17:41
>>211
>>214
>>218
参考になりました。
ありがとうございます。

224 名前:デフォルトの名無しさん :2005/07/08(金) 16:37:56
リストビューのアイテムの高さを設定するメッセージはありませんか?
幅ならLVM_SETCOLUMNWIDTHで設定できるのですが。
フォントサイズは12だけど高さは20とか、そういうことをしたいのです。
アイコンを設定してやれば、一応アイコンのサイズに合わせて高さも変更されるのですが……。

225 名前:デフォルトの名無しさん :2005/07/08(金) 19:51:17
>>224
TVM_SETITEMHEIGHT

226 名前:デフォルトの名無しさん :2005/07/08(金) 20:46:41
Alt+Tabで表示されるTasklistWindow(class=#32771)の
WM_WINDOWPOSCHANGEDをfuckしたいんだけど・・・
どうしてこのwindowだけglobal fuckかかってくれないんでしょうか?

やりたい事は、『自分のwindowを常に(Alt+Tabの時でさえ)最前面に表示する』
なんかいいアプローチないですかね?

227 名前:デフォルトの名無しさん :2005/07/08(金) 20:55:15
そんなにファックしてぇなら風俗でもいってこい

228 名前:デフォルトの名無しさん :2005/07/08(金) 21:01:23
いつのまにリストビューがTVM_*を受け付けるようになったのやら

229 名前:デフォルトの名無しさん :2005/07/08(金) 21:07:04
>>226
global fuckって、どんなfuck?

230 名前:デフォルトの名無しさん :2005/07/08(金) 21:11:52
世界的なfuck

231 名前:226 :2005/07/08(金) 21:16:03
>>227
俺はglobalfuckの質問をしているんだが。
>>229
windowsの全てのアプリで、messageをfuckする。
これに対し、自スレッドのみのmessageをfuckする事をlocalfuckという。

232 名前:デフォルトの名無しさん :2005/07/08(金) 21:17:09
フックならそうだな、だがfuckは違うな

本気で言ってるなら、哀れだな

233 名前:デフォルトの名無しさん :2005/07/08(金) 21:17:58
これはすごいふぁっくですね

234 名前:デフォルトの名無しさん :2005/07/08(金) 21:19:53
>>232
フックでもメッセージはfuckしないだろう。

235 名前:デフォルトの名無しさん :2005/07/08(金) 21:23:30
>>231
ttp://dictionary.goo.ne.jp/search.php?MT=fuck&kind=ej

236 名前:デフォルトの名無しさん :2005/07/08(金) 21:30:06
「global fuck」は使われてた…?orz
ttp://66.102.7.104/search?q=cache:XgNpPqJvT_IJ:www.globalgasm.com/inside.htm+global+fuck&hl=ja

237 名前:226 :2005/07/08(金) 21:31:39
おまいら釣られすぎゲキワロス
つか、あげ足鳥ばっかで、質問に答えられるヤシはいねーのかよ orz

238 名前:226 :2005/07/08(金) 21:33:08
globalfuckでぐぐるとお堅いPDFが出てきてオモロイ


239 名前:デフォルトの名無しさん :2005/07/08(金) 21:34:44
あまりにもお粗末な間違いだ。そんなんだからフックできねぇんだよ。

240 名前:デフォルトの名無しさん :2005/07/08(金) 21:45:14
なんでもかんでもフックできるわけではない
要はそういうことだ

241 名前:デフォルトの名無しさん :2005/07/08(金) 21:47:44
>>237
どう間違ったらfuckになるんだ?

242 名前:デフォルトの名無しさん :2005/07/08(金) 22:07:28
フックだけに釣りなんですよ

243 名前:デフォルトの名無しさん :2005/07/08(金) 22:08:10
>>226
お前にフィッシングの被害者を釣らせないため

244 名前:213 :2005/07/08(金) 22:23:24
>>222
ありがとうございます。
とりあえず、WM_ACTIVATEをWM_ACTIVATEAPPに変えてみたんですが
変化ありませんでした。
DirectXを使ってるせいか、メニューを開いてる間は描画されないみたいです。

今度はWM_INITMENUメッセージが来た時にWM_CANCELを送ってメニューを
消してみましたが、一瞬メニューが表示されてしまいます。

ぐぐって検索してみましたが、システムメニューを削除すると右上の×ボタンも
使えなくなるそうですし・・・
なんとかならないでしょうか・・・。

245 名前:デフォルトの名無しさん :2005/07/08(金) 22:31:39
なんとかするのがプロってもんだ

246 名前:デフォルトの名無しさん :2005/07/08(金) 22:45:47
プログラムしてるからと言ってプロとは限らんがな

247 名前:デフォルトの名無しさん :2005/07/09(土) 00:05:22
>>244
よおわからんけどSPYで来るメッセージ調べた?
NCのつくメセジで何かすりゃなんとかなるんちゃう?

248 名前:224 :2005/07/09(土) 00:17:13
>>225
それってツリービューのメッセージなのでは?
だまされたと思って試してみましたが、やはりできなかったOrz

249 名前:デフォルトの名無しさん :2005/07/09(土) 00:35:25
質問です。
Win32APIのReadFile()を使って、標準関数fgets()に相当する関数を作るには
どうすればいいのでしょうか?

250 名前:デフォルトの名無しさん :2005/07/09(土) 00:37:45
>>249
「fgets()に相当する」というだけでは、具体的にどの程度の仕様を求めている
のかわからないが、
VC++にはCランタイムのソースがついているので、それを読むのが良かろう。


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