5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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ランタイムのソースがついているので、それを読むのが良かろう。

251 :デフォルトの名無しさん:2005/07/09(土) 00:40:33
>>249
fgets で十分ではないか?

252 :デフォルトの名無しさん:2005/07/09(土) 00:48:37
stdioよりもっと柔軟な(たとえば文字列バッファとの入出力なども可能な)
あるいはマルチスレッド環境で意図的に排他を行わないことにより高速性を
実現した
バッファリングI/Oの層を作りたいのかもしれない

前者はたとえばBSD4.4のfunopen()のようなものがあればFILE*の世界で
実現可能だが、残念ながらMicrosoftのstdioにはそのようなものはない

253 :デフォルトの名無しさん:2005/07/09(土) 01:11:16
char *fgets(char *s, int n, FILE *stream);
ReadFileを1バイトずつn-1回読み込んで、sにセットしていけば。
ファイル終端や改行があったら抜ける。

254 :デフォルトの名無しさん:2005/07/09(土) 01:15:38
>>247
TOOLKITなので、多分SPYはないのです・・・。

255 :デフォルトの名無しさん:2005/07/09(土) 01:20:55
spy++ぐらい、PlatformSDKについてるだろ

256 :デフォルトの名無しさん:2005/07/09(土) 01:21:21
>>251
ランタイムライブラリを使いたくネーンダヨ

257 :デフォルトの名無しさん:2005/07/09(土) 01:26:41
>>256
だからVC++のソース見れと。
PlatformSDKにも確かlibcのソースが不完全ながらついてるから
タダで見れるはずだぞ。

要するにFILE構造体相当の、バッファを保持する構造と、それを使って
入出力する関数を自前で作るだけだ。

258 :デフォルトの名無しさん:2005/07/09(土) 01:29:48
ランタイムをつかいたくねーってのがいかにも厨の考えることだな。

259 :デフォルトの名無しさん:2005/07/09(土) 01:30:57
>>258
そーか?
俺はDLL組むんなら、出来るならランタイムへの依存は避けるがな

260 :デフォルトの名無しさん:2005/07/09(土) 01:37:24
ますますもって意味不明

261 :259:2005/07/09(土) 01:41:53
>>260
言っておくが俺は>>256ではないぞ。
ま、DLLを作る際にLIBCに依存したくないキモチが分からないおまいは
厨以下だな。

262 :デフォルトの名無しさん:2005/07/09(土) 01:59:15
コンパイルの意味を理解してない、としか考えられん

263 :デフォルトの名無しさん:2005/07/09(土) 02:00:56
だから、
LIBCに依存しとるDLLを使う場合、ユーザプログラムもLIBCのバージョンや
変種をあわせないといかんだろ?

それがウザいから、LIBC非依存にできるんならそうしたいという
ただそれだけの話だよ

264 :デフォルトの名無しさん:2005/07/09(土) 02:45:53
DLL側がCRTをスタティックリンクしてれば何の問題もないだろ

265 :デフォルトの名無しさん:2005/07/09(土) 02:51:11
>>264
DLLとユーザプログラムでCRTのオブジェクトを受け渡しする場合、
同じCRTのDLLを使う以外の方法は無いよ。スタティックリンクは論外。

素人は出てこないでね。

266 :デフォルトの名無しさん:2005/07/09(土) 04:16:51
CRTオブジェクトとか、そんなプリミティブなオブジェクトをインターフェイスに使うなよ

267 :デフォルトの名無しさん:2005/07/09(土) 04:25:10
Platform SDKの最新版(2003/SP1)の英語のマニュアルみてるんですが
Functions by Releaseの項目にXPSP2が載ってないんですが
SP1->SP2 で追加されたAPIってないのでしょうか?

268 :デフォルトの名無しさん:2005/07/09(土) 04:47:09
>>266
はあ?
あんた、FILE*をいちいちラップしないと気がすまない人?
そんなら、そもそもCRTなんか、つかわなきゃいいんじゃないの?(w

ま、何にせよUNIX系から出てきたオープンソースのライブラリには、そういうのは
よくあるよ。
FILE*やerrno、ロケールのようなものが絡むようなやつね。

無論、DLLとクライアントプログラムで、片方でmalloc()してもう
片方でfree()、なんてのもダメ。

269 :デフォルトの名無しさん:2005/07/09(土) 05:17:00
DOSでのAX=4B01hみたいな、プロセスの形だけ整えて実行はしない関数は、Win32ではどれですか?


270 :デフォルトの名無しさん:2005/07/09(土) 07:34:56
>>268
「CRTは極力使わない」という話から「UNIX系から出てきた」とか、まったく逆のことを言っているのに自分で気づかないバカか?

271 :デフォルトの名無しさん:2005/07/09(土) 08:42:20
良くいる困ったちゃんだからスルーしたげなさい

272 :デフォルトの名無しさん:2005/07/09(土) 09:13:38
質問です。

自作アプリケーションのフォームにフォーカスが当たらないようにする方法はありますか?
感覚的には、見えていても触れないようになればよいのですが。

273 :デフォルトの名無しさん:2005/07/09(土) 09:16:57
つ[EnableWindow]

274 :272:2005/07/09(土) 10:21:56
後から気付いたんですが
「操作を透過させる」いう言い方をすれば早かったようです。

>273
すいません。説明不足でした。


275 :デフォルトの名無しさん:2005/07/09(土) 10:35:33
操作を透過?


276 :50:2005/07/09(土) 10:45:30
>>57
ありがとうございました。

277 :デフォルトの名無しさん:2005/07/09(土) 10:46:20
サウンドカードがあってもビープ音を出すのにはどうすればいいですか?


278 :デフォルトの名無しさん:2005/07/09(土) 11:07:40
WM_SETFOCUS が来たら、wParamにフォーカスを戻せば?

279 :272:2005/07/09(土) 11:09:44
>ttp://www.forest.impress.co.jp/lib/sys/hrdbnch/hardinfo/mobilemeter.html
>マウス操作を透過させることも可能。
>これにより常にデスクトップに表示していても、
>本ソフトの下に表示されているほかのソフトを自由に操作することができる。
例えばこういうソフトでやられているようなことをしたいわけです。

「WM_NCHITTESTでHTTRANSPARENTを返す」という方法を見つけたんですが
これでも操作を受け付けなくなるだけでした。

280 :デフォルトの名無しさん:2005/07/09(土) 11:22:24
>>279
そのソフトをインストールして、SPYで観察したら?
もしかしたら、ウィンドウじゃないかもしれないし。


281 :デフォルトの名無しさん:2005/07/09(土) 11:23:45
初心者です。質問させてください。
猫でもわかるプログラミング、SDK65章についてです。
case WM_NOTIFY:
switch (((LPNMHDR)lp)->code) {
case TTN_NEEDTEXT:
lptip = (LPTOOLTIPTEXT)lp;
lptip->hinst = hInst;
switch (lptip->hdr.idFrom) {
case IDM_PARENT:
lptip->lpszText
= MAKEINTRESOURCE(IDS_TIPS_PARENT);
break;
〜以下省略〜

WM_NOTIFYを受け取っているのでここでlp(LPARAM)の型はLPNMHDRですよね?
LPTOOLTIPTEXTのlptipにlpを入れるときに、
lptip = (LPTOOLTIPTEXT)lp;というように、
TOOLTIPTEXT構造体のポインタにキャストして代入することが可能らしいのですが、
何故、どのように代入されるのかがよくわかりません。

また、switch (lptip->hdr.idFrom)というようになっていますが、
ただ単にコントロールを調べるだけなので、WPARAMで指定した方が楽ではないかと思うのですが、
それでは何か問題が発生するのでしょうか?

よろしくお願いします。

282 :デフォルトの名無しさん:2005/07/09(土) 11:53:14
>>281
TOOLTIPTEXTの最初のメンバはNMHDRだからlParamはHMHDR *でも受け取れるようになっている。
けどcodeがTTN_NEEDTEXTのときにはTOOLTIPTEXT *を投げているのでTOOLTIPTEXT *として扱える。
ようするにC++の継承もどきみたいなことをしている。

283 :デフォルトの名無しさん:2005/07/09(土) 11:53:58
最初の質問に関しては、C言語の構造体とポインタの関係を勉強しろとしかいいようがない。
http://www.mm2d.net/c/c-14.shtml

http://yokohama.cool.ne.jp/chokuto/urawaza/message/WM_NOTIFY.html
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/common/messages/wm_notify.asp
ここを読めばわかるんだが、wParamはユニークじゃないので、idFormとcodeを使えと書いてある。



284 :281:2005/07/09(土) 12:02:59
>>282-283
なるほど・・・。
理解できました。お二方ともありがとうございます。

C言語はポインタや構造体を含め、ほぼ理解したつまりなんですが、
WinApiに入ってくると、同じことをやってるにしてもなんとなくややこしてくて・・・。
これからも質問する機会があるかもしれませんので、そのときはよろしくお願いいたします。

285 :デフォルトの名無しさん:2005/07/09(土) 12:51:54
>>269
CreateProcessでCREATE_SUSPENDEDフラグを指定すればいいんじゃない?

286 :デフォルトの名無しさん:2005/07/09(土) 12:53:57
初カキコ&携帯から失礼します
IPv4とIPv6の判定ができるAPIってあるのでしょうか?
Linuxでいうinet_ptonだと思うのですが

287 :デフォルトの名無しさん:2005/07/09(土) 12:54:08
>>274
WS_EX_TRANSPARENTってのはどう?

288 :226:2005/07/09(土) 13:09:03
あーあ、一日待ってもマトモな回答はなしか。
本当にスゴイ人はこんな所で初心者の面倒見て優越感に浸ってるヒマないもんな・・・
唯一マトモっぽい回答は240だけ・・・ま、自分でタスクリスト作るかな。マンドクセ


289 :デフォルトの名無しさん:2005/07/09(土) 13:21:46
まだいたのかグローバルファックw

290 :デフォルトの名無しさん:2005/07/09(土) 13:22:11
>>288
まともな質問をしないで、まともな回答を要求するのは
あまりにも自分勝手だと思うぞ。

291 :デフォルトの名無しさん:2005/07/09(土) 13:25:29
まだ一日経ってないしなw

292 :デフォルトの名無しさん:2005/07/09(土) 13:41:53
このスレのwikiをたった今作成しました。
ttp://wiki.livedoor.jp/program1/
もし、よろしければご活用ください。


293 :デフォルトの名無しさん:2005/07/09(土) 14:38:53
書籍やWeb上のサンプルを見ていつも不思議に思うのですが、
パスの最大長MAX_PATHはNULL分も含んでいるのですか?
サンプルにより
TCHAR szPath[MAX_PATH];
TCHAR szPath[MAX_PATH+1];
というのがあるんですけど。

294 :デフォルトの名無しさん:2005/07/09(土) 14:46:19
含んでない

295 :デフォルトの名無しさん:2005/07/09(土) 14:48:35
>>293
含んでいる。
当のMSもTCHAR szPath[MAX_PATH];を使っている。

俺自身としてもどこかでパスの最大は259文字と聞いた記憶がある。(MAX_PATHは260)

296 :デフォルトの名無しさん:2005/07/09(土) 14:54:21
MSがしてるからなど最も信用できないものだが・・・

297 :デフォルトの名無しさん:2005/07/09(土) 15:03:19
MSでもここなんかは
TCHAR szTempName[MAX_PATH + 1];
て書いてあるし・・・・
http://msdn.microsoft.com/library/en-us/http/http/http_server_sample_application.asp?frame=true

298 :デフォルトの名無しさん:2005/07/09(土) 15:12:15
>>226
WM_WINDOWPOSCHANGEDをフックするんじゃなくて
WH_CBTを使ってみては?


299 :デフォルトの名無しさん:2005/07/09(土) 15:20:59
>>292
乙。ぜひ活用しましょう。

300 :デフォルトの名無しさん:2005/07/09(土) 15:45:40
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/naming_a_file.asp

301 :デフォルトの名無しさん:2005/07/09(土) 15:54:42
だからそれが信用ならんのだと・・・

302 :293:2005/07/09(土) 16:04:14
>>300
おおっ。含むようですね。
>>301
とりあえずMAX_PATH+1にしておくことにします。

303 :デフォルトの名無しさん:2005/07/09(土) 16:05:06
>>302
そもそもMAX_PATHでは足りないという話も。

304 :デフォルトの名無しさん:2005/07/09(土) 16:24:02
>>303
それは「階層掘りすぎ」とか「だらだら日本語名付け過ぎ」とかの、また別の話だ

305 :デフォルトの名無しさん:2005/07/09(土) 16:26:29
そーいやUNIX系のOSでmsdosfsで深い階層作ってみた。
Win側に持っていったら途中からアクセスできなかったのはちと萎えた。

306 :デフォルトの名無しさん:2005/07/09(土) 16:28:42
ローカルエリア接続をオン、オフしたいんだけど、ローカルエリア接続に割り当てられた
アダプタ名を取得するにはどうすればいいんでしょうか?教えてください。

iphlpapi.hには無かったです。。

307 :デフォルトの名無しさん:2005/07/09(土) 16:30:36
>>304
> 掘りすぎ

ウホッ?

308 :デフォルトの名無しさん:2005/07/09(土) 16:34:04
304って本質的にバカなんだろうな。

309 :272:2005/07/09(土) 17:23:05
>>280
>>287
助言ありがとうございました。
頑張ってみます。

310 :デフォルトの名無しさん:2005/07/09(土) 18:50:27
ユーザー補助のスクリーンキーボードのような、
自分のウィンドウをクリックしてもアクティブにしないようにするには、どうすればいいのでしょうか?
ご教授おねがいします。

311 :デフォルトの名無しさん:2005/07/09(土) 19:00:51
ツールボックス

312 :310:2005/07/09(土) 19:56:26
Spy++見てたら自己解決しますた
WM_MOUSEACTIVATE で MA_NOACTIVE を返せばいいみたいです
スレ汚しすまそ

313 :デフォルトの名無しさん:2005/07/09(土) 20:29:58
>>305
全然違うシステムから直接触るなんざバカのすることじゃん

314 :デフォルトの名無しさん:2005/07/09(土) 20:36:16
>>313
理解できなかったのね。ゴメンネw

315 :デフォルトの名無しさん:2005/07/09(土) 20:39:13
>>313
FATファイルシステムの出来栄えの話なんだが、頭大丈夫か?

316 :デフォルトの名無しさん:2005/07/09(土) 20:44:32
\\?\をつけてたどればいけるだろ

317 :デフォルトの名無しさん:2005/07/09(土) 20:48:40
>>316
やってみたの?それとも理屈ちゃん?

318 :デフォルトの名無しさん:2005/07/09(土) 20:49:39
つ チラシの裏

319 :デフォルトの名無しさん:2005/07/09(土) 21:04:09
>>315
Windowsで使う限り問題無い

320 :310:2005/07/09(土) 22:20:20
やっぱ無理でした orz
WM_MOUSEACTIVATE で MA_NOACTIVE を返すとそのウィンドウがアクティブにならないのはいいんですが、
前アクティブだったウィンドウが非アクティブになってしまいます。
これをアクティブなウィンドウを変えないようにするにはどうすればいいのでしょうか?

321 :デフォルトの名無しさん:2005/07/09(土) 22:22:51
>>317
どこまで深い階層を作ったのか知らんが、
50階層までなら辿れたぞ
それ以上は面倒だからやってないがな。

322 :デフォルトの名無しさん:2005/07/09(土) 22:30:03
>>320
>>311

323 :デフォルトの名無しさん:2005/07/09(土) 22:31:44
>>293 亀レスですよ
+1する必要はない英語版のMSDNがたぶん(w)正確

そもそも TCHAR なのに +1 ってバカすぎる
+sizeof(TCHAR) にしないと意味ない
TCHAR を分かってない奴大杉

324 :デフォルトの名無しさん:2005/07/09(土) 22:38:01
>>323
おまいさんが恥ずかしい奴だってことだけは分かった

325 :デフォルトの名無しさん:2005/07/09(土) 22:38:56
>>323
最後の3行すげーこっ恥ずかしいな

326 :デフォルトの名無しさん:2005/07/09(土) 22:41:56
>>323は釣りですよ

327 :デフォルトの名無しさん:2005/07/09(土) 22:49:26
>>323
ワロスwwwww

328 :デフォルトの名無しさん:2005/07/09(土) 22:50:49
そんなwww笑ってwwwやるなよwwwwww

329 :デフォルトの名無しさん:2005/07/09(土) 22:52:26
やっちまったな>>323

330 :デフォルトの名無しさん:2005/07/09(土) 22:58:31
バカがいると聞いて駆けつけて来ました

331 :デフォルトの名無しさん:2005/07/09(土) 23:33:11
        j
     /V\
    /◎:::.:..__ヽ
 _ ム::::(   .)::|  ∧∧
ヽツ.( ):::::::::.:::::::...|   (,,゚Д゚) ξ 釣り宣言まで待つとするか
  ヾソ:::::::::::::::::.:ノ   /  ⊃旦.
   ` ー ‐'"‐'   (__)

332 :デフォルトの名無しさん:2005/07/09(土) 23:34:15
これ以上はやめてあげてください!

333 :デフォルトの名無しさん:2005/07/09(土) 23:38:00
この板、ID付けてほしいよなあ

334 :デフォルトの名無しさん:2005/07/09(土) 23:44:57
>>333
そろそろム板もID付けないか?
http://pc8.2ch.net/test/read.cgi/tech/1105878545/l50

335 :デフォルトの名無しさん:2005/07/09(土) 23:47:55
IDつけてもなんも変わらん希ガス

336 :デフォルトの名無しさん:2005/07/09(土) 23:50:25
http://forums.belution.com/ja/vc/000/038/15s.shtml

337 :デフォルトの名無しさん:2005/07/10(日) 03:38:05
>>321
んー、もうちょっと!

338 :デフォルトの名無しさん:2005/07/10(日) 04:18:31
C:\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\
a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\
a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\
a\a\a\a\a\a のディレクトリ
2005/07/10  04:04       <DIR>          .
2005/07/10  04:04       <DIR>          ..
2005/07/10  04:10                   21 aaaaaaaa
2005/07/10  04:10                   21 aaaa.txt

FAT32ドライブでは↑まで作れたのでとりあえず報告。

339 :デフォルトの名無しさん:2005/07/10(日) 04:49:35
乙。
階層の制限ではなく、MAX_PATHの制限って感じだな。
ファイル名まで入れるとちょうと259文字になる。

340 :デフォルトの名無しさん:2005/07/10(日) 06:44:36
IsDBCSLeadByteはマルチバイト文字の1バイト目しかチェックできないのでしょうか?
マルチバイト文字でも2バイト目は普通の1バイト文字が使われている場合がありますから。

341 :デフォルトの名無しさん:2005/07/10(日) 08:11:14
>>340
そうです。あくまで渡されたバイトのみで判定します。

342 :デフォルトの名無しさん:2005/07/10(日) 15:31:52
>>338
途中のフォルダ名を変えると、260文字を越えられるよ。

343 :デフォルトの名無しさん:2005/07/10(日) 16:38:03
CreateProcessで起動したアプリの起動完了を待つにはどうしたら良いですか?

344 :デフォルトの名無しさん:2005/07/10(日) 16:38:17
結局何文字までかというのは、誰も知らないのか。

345 :デフォルトの名無しさん:2005/07/10(日) 17:00:59
>>343
起動完了の定義にもよるが、WaitForInputIdle

346 :343:2005/07/10(日) 17:06:13
>>345
ありがとう。できました。

347 :デフォルトの名無しさん:2005/07/10(日) 17:11:00
>>342
というわけで、c:\a を 出来るだけ長い名前に変えてみたところ 「c:\a^242」
というディレクトリ名に変更できた。その結果

C:\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaa\a\a\a\a\a\a のディレクトリ
2005/07/10  16:41       <DIR>          a

まで辿れるも、それ以上は ディレクトリがあるにも関わらずコマンドが受け付けなかった。
エクスプローラでも「フォルダ名が長すぎます」との事でアクセスできなかった。

なお、ディレクトリの削除も出来ず。(Win2000 / FAT32)

348 :デフォルトの名無しさん:2005/07/10(日) 17:15:04
>>344
知るわけ無い。

349 :デフォルトの名無しさん:2005/07/10(日) 17:22:09
>>344
NT系では最大約32000文字らしい

350 :デフォルトの名無しさん:2005/07/10(日) 17:32:35
他のウインドウの下に隠れてしまっているウインドウを前面に出すメッセージって何?

351 :デフォルトの名無しさん:2005/07/10(日) 17:38:54
BringWindowToTop

352 :デフォルトの名無しさん:2005/07/10(日) 20:50:10
今更FAT32なぞ使ってる人間居るのか・・・

353 :デフォルトの名無しさん:2005/07/10(日) 21:13:01
だめだめな人置いておきますね
http://damedame.monyo.com/ml/archive/200/220.html

354 :デフォルトの名無しさん:2005/07/10(日) 21:43:23
FAT32だったおかげで、FDから起動して貴重なデータをサルベージ出来たことがあったな

355 :デフォルトの名無しさん:2005/07/10(日) 21:53:49
>>354
いつの時代の人ですか?
NTFSでもHDD外して他のパソコンにつなげば普通に読めますよ

356 :デフォルトの名無しさん:2005/07/10(日) 21:55:18
スレ違いかもしれないんだけど
スタートップに登録したアプリケーションはOS終了時にも自動で終了しますか?


357 :デフォルトの名無しさん:2005/07/10(日) 21:59:52
>>356
そりゃそうだろ。
一応スタートアップにあるかどうかに関係なく、OS終了時に起動しているアプリケーションへはそれを通知するメッセージが来る。

358 :!354:2005/07/10(日) 22:02:37
>>355
いちいち外すのめんどい。
PC2台も持ってない。
外付けケースも持ってない。

359 :デフォルトの名無しさん:2005/07/10(日) 22:12:43
もはやFDDがついてない

360 :デフォルトの名無しさん:2005/07/10(日) 22:18:35
FATは必ず壊れて起動しなくなるが、NTFSは絶対壊れない。
だからNTFSでサルベージなんてやる必用ない。

361 :デフォルトの名無しさん:2005/07/10(日) 22:41:22
絶対なんてありえない

362 :デフォルトの名無しさん:2005/07/10(日) 22:45:03
いんや絶対に壊れない
論理的にはな
物理的な問題はシステムなぞ関係無いから除外

363 :デフォルトの名無しさん:2005/07/10(日) 22:59:12
VC++6.0付属の

364 :デフォルトの名無しさん:2005/07/10(日) 22:59:48
やっぱいいです

365 :デフォルトの名無しさん:2005/07/10(日) 23:01:10
>>363-364
わろす

366 :デフォルトの名無しさん:2005/07/10(日) 23:02:39
例えば128GB対策をしないと、いくらでも論理的にファイルが破壊されるが
360様の「絶対」には含まれないんだろうな

367 :デフォルトの名無しさん:2005/07/10(日) 23:08:13
FATだって想定外の自体にならない限りは絶対壊れない
想定外の自体になれば何だろうが壊れる

368 :デフォルトの名無しさん:2005/07/10(日) 23:11:46
自体→事態

369 :デフォルトの名無しさん:2005/07/10(日) 23:23:04
いんや想定外の事態になっても豚利敵には絶対に壊れない

370 :デフォルトの名無しさん:2005/07/10(日) 23:23:37
お前らFATvsNTFSスレで氏ぬまでやってろ

371 :デフォルトの名無しさん:2005/07/10(日) 23:23:41
( ´_ゝ`)へー

372 :デフォルトの名無しさん:2005/07/10(日) 23:25:11
(´・ω・)カワイソス

373 :デフォルトの名無しさん:2005/07/10(日) 23:33:11
NTFSでフォーマットすると壊れるんだよな。俺のUSBメモリ・・・
miniSDもNTFSのフォーマットだと壊れるし。

リムーバルメディアにNTFSでフォーマットして正常に使えたのがない。


つーか基地外が出るたびにIDが欲しいと思う。

374 :デフォルトの名無しさん:2005/07/10(日) 23:39:11
>>355
メイン: Windows2000
サブ/検証用: Windows98
鯖: FreeBSD

そんなわけで読めません(´ω`)

375 :デフォルトの名無しさん:2005/07/11(月) 00:27:44
>>374
ヒント : NTFSforWin98

376 :デフォルトの名無しさん:2005/07/11(月) 00:47:31
普通のパソコン(´ω`)

377 :デフォルトの名無しさん:2005/07/11(月) 00:54:52
>>375
Win98でNTFS読んでいたら結局ファイル壊しそう

378 :デフォルトの名無しさん:2005/07/11(月) 01:59:21
ふっ

379 :226:2005/07/11(月) 10:02:32
>>298
助言ありがとうございます。
WH_CBT使ってみました。
FindWindowではちゃんと補足できるので、#32771で検索したHWNDと
WH_CBTフックで得たHWNDを比較して表示してみました。
が、やっぱりメッセージは来ず・・・謎杉です。
その他にもWH_SHELL、WH_MSGFILTER、WH_SYSMSGFILTERも試してみました。
#32771の正体は一体。

380 :デフォルトの名無しさん:2005/07/11(月) 14:06:47
ボスケテください・・。

メインウィンドウ1つとメインウィンドウの子ダイアログ1つという構成で作っているのですが
ダイアログ内のボタンが押された場合にメッセージボックスを表示するという処理をいれたところ
メッセージボックスが数回表示されてしまい困っています。
ちなみにメッセージボックス関数をprintfにしたところ1回のみのコールになっています。

呼び出し履歴を追ったところ
直接的な原因としては
WM_COMMAND内において
MessageBoxコール時に
MessageBoxA内にてさらにメッセージ処理をしているらしく(SendMessage?)
ダイアログのプロシージャが再度呼び出されて同じメッセージをうけとっており
再度MessageBoxがコールされているという状態でした。

これはどうやったら回避できるのでしょうか?






381 :デフォルトの名無しさん:2005/07/11(月) 14:25:32
>>380
spy使って、何が起こってるのか調べた方がよさげ

あとは、ソースを貼りつけでもしないと分からない

382 :デフォルトの名無しさん:2005/07/11(月) 14:30:31
WM_COMMAND/BN_KILLFOCUSとかでも処理しちゃってるからじゃねーのか?

383 :デフォルトの名無しさん:2005/07/11(月) 15:04:09
BN_KILLFOCUSの処理はしてないですね〜
上の説明では便宜上ボタンとかいたのですが、
コンボボックスとかでも同じですねー
CBN_SELCHANGEしたときにメッセージボックス表示ってやっても同様の結果に・・

さっきspyつかったらWindowsが固まった・・・orz

384 :デフォルトの名無しさん:2005/07/11(月) 15:16:16
自己解決・・・
あまりにアフォなミスに泣けてくる・・
アドバイスくれた人ありがつ

385 :デフォルトの名無しさん:2005/07/11(月) 15:23:22
>>384
WM_COMMANDの上にWM_PAINTとかを書いてて、
breakかreturnしてなかったとかの類かな・・・?

386 :デフォルトの名無しさん:2005/07/11(月) 15:26:14
if ( hiword_wParam == CBN_SELCHANGE ) {
}
なつもりが

if ( hiword_wParam = CBN_SELCHANGE ) {
}

こんなミスはじめてだお・・・

387 :デフォルトの名無しさん:2005/07/11(月) 15:29:45
よくあるミスだな。

388 :デフォルトの名無しさん:2005/07/11(月) 15:30:32
代入だと
if ( (hoge = 1) ) {
}
ってかかないとwarrning出すようにしてたはずなんだけどな・・
何も出てなかったから見事にヌルー


389 :デフォルトの名無しさん:2005/07/11(月) 15:36:08
>>388
> warrning

天性のうっかりさん

390 :デフォルトの名無しさん:2005/07/11(月) 16:28:32
助けてください
Win2kでadmin以外でSetProcessWorkingSetSizeを実行しようとしています

OpenProcess(PROCESS_SET_QUOTA,FALSE,GetCurrentProcessId());
SetProcessWorkingSetSize(GetCurrentProcess(),0x1000000,0x1000000);

とするとSetProcessWorkingSetSizeでエラーが返ってきてしまいます。
どうすればいいんでしょうか


391 :デフォルトの名無しさん:2005/07/11(月) 17:31:23
あれ?OpenProcessで貰ったハンドルは捨ててるの?

392 :デフォルトの名無しさん:2005/07/11(月) 18:01:55
始めまして。
特にこれがわからない、ということではないのですが質問をさせてください。

WinApiには数え切れないほどの関数や構造体がありますが、これらはどのぐらい覚えればよいのでしょう?
特に構造体には、1つの中に10以上ものメンバがあったりします。
私はそんな構造体1つを覚えるだけでも精一杯です。
やはり上級者やプロの方はこれらをかなりの数覚えているのでしょうか?

393 :デフォルトの名無しさん:2005/07/11(月) 18:04:50
学校の宿題じゃないんだから覚える必要なんてないじゃない
その都度引くようにしていれば、使用頻度の高いものは自然と覚えるだろ。

394 :デフォルトの名無しさん:2005/07/11(月) 18:08:26
名前付けの規則を探し出して、類型化しておく。「こんなことしたいな」が
「APIにあったらこういう名前だろうな」と出るようにしておけばいい。

395 :デフォルトの名無しさん:2005/07/11(月) 18:13:56
そんなの覚えなくていいよ。
俺はいまだにCreateWindowの引数すら覚えてない。

俺は新しいことをするときは、いつも翔泳社のAPIバイブルを見てる。
各章の最初にあるAPI一覧が便利。

以前やったことがあることならば、自分の過去のソースからコピペ。

396 :デフォルトの名無しさん:2005/07/11(月) 18:31:19
APIだののあれこれを覚えてるヤツなんて、
居ないとは言わんがそんなに居ないだろう

397 :デフォルトの名無しさん:2005/07/11(月) 18:53:36
>>393-396
貴重な意見、ありがとうございます。
やっぱりあんなの覚え切れませんよね(^^;)
おかげで気が楽になりました。

最近はコントロールのAPIをいじってたんですが、
タブコントロールとかプロパティシートとかステータスバーとかツールバー、
こんなのは構造体ばかりで覚えれないと半分やけになっていました。

となると問題はマイクロソフトのヘルプの解りにくさですかねw
本が欲しいところですが、何故かプログラミング関係の本は値段が・・・。
自分で頑張ってまとめてみようかな。
皆さん、本当にありがとうございました。

398 :デフォルトの名無しさん:2005/07/11(月) 19:18:58
SoftEtherの作者はAPIほとんど覚えとるらしいがな

399 :デフォルトの名無しさん:2005/07/11(月) 19:19:39
分かりにくいのではなくて、必要最低限の情報しか書いてないだけ。

400 :デフォルトの名無しさん:2005/07/11(月) 19:30:50
>>398
誰も居ないとは言ってないじゃろうに

401 :デフォルトの名無しさん:2005/07/11(月) 20:33:27
今、簡単なゲーム(シンプルなタイピング)作ってます。
それがだいたいできてきたので、タイトル画面もつけようと思ってます。
そのとき、ちょっと思ったことがあったので質問させてください。

例えばRPGでいえば、タイトル画面・フィールド・戦闘シーン・メニュー画面などでは
プロシージャの動作が全く違いますよね?
この場合、プロシージャ内の動作はどうすればよいでしょう?
私が考えたのは次のものです。
modeというint型の変数があったとして、それを現在の状況ごとに変化させるとします。

(案1)
if(mode==0)のときは1つ目のswitch文でmsgを処理。
if(mode==1)のときは2つ目のswitch文でmsgを処理。
どの場面でも処理が同じメッセージだけは、if文の外に書きます。

(案2)
必要な場合にそれぞれのメッセージごとに、
if(mode==0)、if(mode==1)などを使って分ける。

(案3)
プロシージャを2つ(以上)つくり、modeによってプロシージャを変える。

まだWinApi始めて間もないので、大規模なプログラムを組んだことがありません。
大規模なプログラムを組む場合はどうするべきか、お教えください。
申し訳ありませんが、よろしくお願いいたします。

402 :デフォルトの名無しさん:2005/07/11(月) 20:43:03
案1が一般的だと思う。っていうか同じように動くならどれでもいい。

っていうか用語は正しく使え。
ウィンドウプロシージャ。

403 :デフォルトの名無しさん:2005/07/11(月) 20:43:46
一つのプロシージャにまとめる必要など米粒ほども無いわけだが

404 :デフォルトの名無しさん:2005/07/11(月) 20:44:34
>>402
プロシージャと付くのはウィンドウプロシージャだけではない

405 :デフォルトの名無しさん:2005/07/11(月) 20:44:37
画面が変わっても基本的にプロシージャーの動作はあまり変わらないと思うが・・・。
俺だったらフィールドや戦闘シーンはできるだけそれ専用のスレッドに任せてプロシージャーの相違点は2の方法で振り分ける。

406 :226:2005/07/11(月) 20:47:48
APIfuckについては、ここでは聞いたらいけんのかのぅ・・・(´・ω・`)

407 :デフォルトの名無しさん:2005/07/11(月) 20:48:51
APIファック?

408 :デフォルトの名無しさん:2005/07/11(月) 20:49:30
>>406
あれだけ煽られたのに何故直さない。呆れる。

409 :デフォルトの名無しさん:2005/07/11(月) 20:52:13
ネタだからさ。

410 :407:2005/07/11(月) 20:54:21
>>226-で既出かorz

411 :デフォルトの名無しさん:2005/07/11(月) 20:57:53
落ち込むな。誰だって突っ込む。

412 :デフォルトの名無しさん:2005/07/11(月) 20:59:07
間違いを指摘されても逆に煽って逃げるヤツに誰が答えるのか・・・

413 :デフォルトの名無しさん:2005/07/11(月) 21:02:35
案3つーか、オブジェクト指向でMVC or Doc-Viewに分離だろ普通。

414 :デフォルトの名無しさん:2005/07/11(月) 21:11:17
>>404
401はウィンドウプロシージャの意味で使っている。

>>405,>>413
初心者に多くを求めすぎ。まずはウィンドウプロシージャベースのゲームでえぇやん。

415 :デフォルトの名無しさん:2005/07/11(月) 21:51:12
フックの正しい綴りを書くまでは誰も答えないだろうな。
もっとも、正しく書いたところで誰かが答える保証もないがwww

416 :デフォルトの名無しさん:2005/07/11(月) 21:52:00
>>226
わたしも「常に最前面」というのをやりたいんですが、
昔、フックでやろうとして挫折したため、
現状では、タイマーで一定時間ごとに監視するという形を取っています。

とりあえず、>>226 さんは TasklistWindow 以外ではできたんでしょうか?
もしそうだとしたら、やり方を教えていただけると嬉しいです。

417 :226:2005/07/11(月) 22:12:41
>>416
完璧ではないですが、とりあえず、
WM_WINDOWPOSCHANGEDをWH_CALLWNDPROCで引っ掛けて、
そこで
SetWindowPos(hWndTarget,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE);
すれば、”書き換えの早いアプリであれば”きにならない程度にはなる様です。

POPUPウインドウ(メニュー含む)は、上記をWM_CREATEのタイミングでやるとキレイに消えます。
システムポップアップメニュー(タスクバーで右クリック)、スタートメニュー時のタスクバーのシャシャリ出
に関しては、更なるキレイに消えるタイミングを調査中。。。

SetWindowPosは思ったより軽いので、結構呼び出しても平気かと(ただし自ウインドウへのループに注意!)

416殿、よければ”キレイに消えるタイミング”の調査協力してください(;;)
#32771に関しては、自分でその部分を作った方が早い気がします。

APIフックででもやってみたいんですけどね〜。
なんかややこしそう&時間無いっつー状況です。


418 :デフォルトの名無しさん:2005/07/11(月) 22:12:47
できてないから聞きにきてんじゃろ

419 :デフォルトの名無しさん:2005/07/11(月) 22:26:15
>>401
おれも同じようなコード書いたことあるけど、そのときはモード4つに対して
ウィンドウプロシージャは5つつくったね。案3?
基本のウィンドウプロシージャーが残りの4つを呼び出すような形で。

LRESULT CALLBACK WndProc(HWND hwnd,UINT iMsg,WPARAM wParam,LPARAM lParam){
switch(mode){
 case 1:
  return Proc1(hwnd,iMsg,wParam,lParam);
 case 2:
  return Proc2(hwnd,iMsg,wParam,lParam);
 case 3:
  return Proc3(hwnd,iMsg,wParam,lParam);
 case r:
  return Proc4(hwnd,iMsg,wParam,lParam);
}


420 :デフォルトの名無しさん:2005/07/11(月) 22:35:27
modeを保持する変数を関数ポインタにしとけばswitchが省けるわけだ。

421 :298:2005/07/11(月) 22:39:39
>>417
タスク切り替えのウィンドウを出したくないだけなら
キーフックで[ALT]+[TAB]を捕まえてしまうのはどう?

確信のない案ばっかですまんが・・・



422 :416:2005/07/12(火) 00:29:41
>>417
ありがとうございます。
早速取り入れてみましたが、かなりいい感じですね。

とりあえず、SetWindowPos 関数に、SWP_NOSENDCHANGING を加えたり、
WM_WINDOWPOSCHANGED をフックする部分で、
if(((((WINDOWPOS *)pcwp->lParam)->flags & SWP_NOZORDER) != SWP_NOZORDER) && (((WINDOWPOS *)pcwp->lParam)->hwndInsertAfter == HWND_TOP || ((WINDOWPOS *)pcwp->lParam)->hwndInsertAfter == HWND_TOPMOST))
    SetWindowPos(hwndTarget, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOSENDCHANGING);
などと書くと良さそうです。

それでは、引き続き検証してみますね。

423 :デフォルトの名無しさん:2005/07/12(火) 01:31:24
こんばんわ

オープンダイアログがありますけども、
通常はファイルを選択してダイアログを閉じますけど、
フォルダだけを選ぶということはできるのでしょうか?

424 :デフォルトの名無しさん:2005/07/12(火) 01:35:51
つ SHBrowseForFolder

425 :401:2005/07/12(火) 08:03:19
こんなに多くの方に答えていただけるとは思いませんでした。
ありがとうございます。

私はスレッドやオブジェクト指向についての知識はほとんどないので、
419さんのようなやり方を使わせていただきます。

ほんとうにありがとうございました。

426 :226:2005/07/12(火) 09:29:53
>>417
用途を説明してませんでした。Viewが特殊なWindowsにしたいんですよ。
たとえばデスクトップをレンズ状にして表示したりとか。
で、今のところ一番現実的な方法が、TOPMOST+のタイルウインドウにレイヤード+透過
属性つけて、デスクトップからBltかな、と。

>>422
おおお、ありがとうございます。早速やってみます!
ちなみに、昨日書いてた
>POPUPウインドウ(メニュー含む)は、上記をWM_CREATEのタイミングでやるとキレイに消えます。
は勘違いだったようです、スイマセン。VCのメニューはなぜかコレでキレイに消えますね。

・・・それにしてもHookデバッグ歯肉杉 orz


427 :デフォルトの名無しさん:2005/07/12(火) 09:43:21
たかが最前面やるのに何故 fuck だの hook だの timer だの持ち出してくるのか。
WM_ACTIVATEAPP の wParam が FALSE の時に

SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);

でいいだろうに


428 :デフォルトの名無しさん:2005/07/12(火) 09:46:36
WM_ACTIVATEAPP だけじゃなく、WM_ACTIVATE も処理しないといけないか。

429 :226:2005/07/12(火) 10:13:57
>>427
不思議とその方法ではうまくいかないんですよ。
あと、最前面ウインドウが常に最前面にいるからといってアクティブになってるわけじゃあありません。

430 :226:2005/07/12(火) 10:19:31
(゚ν゚)ニホンゴムズカスィネー

×最前面ウインドウが常に最前面にいるからといってアクティブになってるわけじゃあありません。
○最前面ウインドウは常にアクティブになってるわけでなく、他のウインドウにフォーカスがある時は
 最前面に表示されていても非アクティブ。その状態で他のウインドウがTOPMOSTで表示された時はメッセージの
 通知無しで上書きされます。


431 :デフォルトの名無しさん:2005/07/12(火) 10:40:19
みんなヘッダファイルはどのぐらい作ってるの?
俺は昔は1つのソースファイルに1つのヘッダファイル作ってたけど、
最近はめんどくさいからいくつソースファイルがあってもヘッダファイルは1つにしてる。
これってあんまり良くないのかな?

432 :デフォルトの名無しさん:2005/07/12(火) 10:46:41
「Win32APIのついての質問」

433 :デフォルトの名無しさん:2005/07/12(火) 11:01:28
WMIでProxyの値を取得するにはどのクラスをみたらいいのでしょうか?
ネットワーク関連一通りみたけどわからないっす・・

434 :デフォルトの名無しさん:2005/07/12(火) 11:03:26
>>432
あ、ゴメン。よく考えたら微妙にスレ違いか。
このスレの人がやけに親切に質問に答えてるから、
このまま俺の質問にも快く答えてくれそうな気がしたから・・・。
できればこのまま勢いで答えて欲しい。

435 :デフォルトの名無しさん:2005/07/12(火) 11:04:39
>>434
無理

436 :デフォルトの名無しさん:2005/07/12(火) 11:14:25
こんにちは

ListCtrlにおいて、選択された項目の色を変更するにはどうすればいいのでしょうか?

437 :デフォルトの名無しさん:2005/07/12(火) 11:29:10
>>431
ヘッダを使う側が不満を持たないなら良いだろう

438 :デフォルトの名無しさん:2005/07/12(火) 12:14:11
CreateWindow関数のウィンドウスタイルの
WM_CHILDとはどのような指定でしょうか?
MSDN等で調べたのですが、初歩的すぎるせいか
スタイル:WM_CHILD=意味:WM_CHILD
と書かれていてさっぱりです><
教えて頂けると助かります 宜しくお願いします

439 :192:2005/07/12(火) 12:20:33
>>438
とりあえずWindows Overviewsとこ熟読しとけ。
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/aboutwindows.asp


440 :デフォルトの名無しさん:2005/07/12(火) 12:24:50
>>438
CHILD指定

441 :デフォルトの名無しさん:2005/07/12(火) 12:30:27
>>436
カスタムドロー

442 :192:2005/07/12(火) 13:39:55
カスタードどろ〜

443 :デフォルトの名無しさん:2005/07/12(火) 13:46:07
>>431
俺はヘッダファイルを複数使ってる。
なんか1つだけヘッダファイルを使うと必要のないものまで
読み込まれることがあるからコンパイルや動作の速度に影響あると思ってたけど違うんかな?
俺、独学でやってるから詳しいことわからん。

444 :デフォルトの名無しさん:2005/07/12(火) 14:34:04
>>438
質問するときに絵文字いれんな馬鹿

445 :デフォルトの名無しさん:2005/07/12(火) 14:38:11
しいましぇーん
ぐすん

446 :デフォルトの名無しさん:2005/07/12(火) 14:38:26
きっと比較演算子

447 :デフォルトの名無しさん:2005/07/12(火) 15:03:17
テンプレートの出来損ないかも

448 :デフォルトの名無しさん:2005/07/12(火) 16:49:10
OSのシリアルナンバーを取得する関数はありますか?

449 :デフォルトの名無しさん:2005/07/12(火) 16:54:07
OpenProcessとかReadProcessMemoryを行われた際に
された側のプロセスでそれを検知する事は可能でしょうか?

450 :デフォルトの名無しさん:2005/07/12(火) 17:29:23
APIをフックして監視。

451 :デフォルトの名無しさん:2005/07/12(火) 17:52:21
APIをフック・・・なんだかとても難しそうですね。
頑張って調べてみます。

ありがとうございました!

452 :デフォルトの名無しさん:2005/07/12(火) 18:31:40
>>444
絵文字がどこに有るというのかこのバカは

453 :デフォルトの名無しさん:2005/07/12(火) 18:40:27
>>452
顔文字だよゴミ

454 :デフォルトの名無しさん:2005/07/12(火) 18:44:15
>>453
>>444には絵文字と書いてあるが?

455 :デフォルトの名無しさん:2005/07/12(火) 18:48:41
うまく動きませんorz
どうか教えてください

456 :デフォルトの名無しさん:2005/07/12(火) 18:51:03
>>455
回線切って首吊るといいよ。

457 :デフォルトの名無しさん:2005/07/12(火) 19:03:45
>>455
質問すんのに orz とかやめろ

458 :デフォルトの名無しさん:2005/07/12(火) 20:14:15
>>451
とりあえず定型句置いておきますね

っ[ AdvancedWindows嫁 ]

459 :226:2005/07/12(火) 20:16:00
APIfuckできました!

460 :デフォルトの名無しさん:2005/07/12(火) 20:17:03
あっそう、よかったね

461 :デフォルトの名無しさん:2005/07/12(火) 21:04:50
>>459
詳細きぼん

462 :デフォルトの名無しさん:2005/07/12(火) 21:07:10
InitCommonControlSex?

463 :デフォルトの名無しさん:2005/07/12(火) 22:49:29
WindowsのAPIのほとんどが
リターン値BOOL、しかもBOOLなのに「成功時は0以外が返ります」とか
引数が馬鹿みたいに多い、しかも「一つ目の引数がこれこれの場合2番目の引数は無視されます」とか
なのはなぜ?

464 :デフォルトの名無しさん:2005/07/12(火) 23:00:41
気に入らんかったらMFCみたいにapiを呼ぶ関数でも作っとけ

465 :デフォルトの名無しさん:2005/07/12(火) 23:11:43
一番あれなのはGetMessageの戻り値BOOLで3ステートなとこだけどな。
あと、BOOLは昔から扱いも1ビットの変数じゃなかったから FALSE or !FALSE てのは常識では。


466 :デフォルトの名無しさん:2005/07/12(火) 23:13:21
引数の多さには慣れたから、逆にWrite/ReadFileの引数が大して多くないのが気になる。

467 :デフォルトの名無しさん:2005/07/12(火) 23:30:47
引数多すぎて覚えられんよ

468 :デフォルトの名無しさん:2005/07/12(火) 23:34:02
Win32APIの中でいちばん引数が多いのはCreateFont?

469 :デフォルトの名無しさん:2005/07/12(火) 23:47:10
CreateFontは引数多いが大部分は0でいい

470 :デフォルトの名無しさん:2005/07/13(水) 01:40:53
>>466
そうじゃなくて直接GetLastErrorのリターン値返してくれたら手間はぶけるのになと。

471 :デフォルトの名無しさん:2005/07/13(水) 01:44:46
>>470
詳細なエラー情報を取得できなかったWin16との互換性のために
そうなっちゃったんだろうな。
ネイティブAPIのレベルではNTSTATUSを直接返してくれるし

472 :デフォルトの名無しさん:2005/07/13(水) 01:54:14
ReadFile()/WriteFile()は
そもそもWin16では存在しないAPIなんだから互換性なんて要らないのでは?

473 :デフォルトの名無しさん:2005/07/13(水) 01:54:16
CRTはCRTでerrnoとか使うし。

474 :デフォルトの名無しさん:2005/07/13(水) 02:34:55
JavaはJavaでぬるぽとか使うし。

475 :デフォルトの名無しさん:2005/07/13(水) 06:49:05
>>474
ガッ

476 :デフォルトの名無しさん:2005/07/13(水) 06:56:35
変に内部で状態を持たれるよりは、引数が多い方がいいな。
でも、最近できたAPIはみんなパラメータを構造体で渡すから
引数少ないね。

477 :デフォルトの名無しさん:2005/07/13(水) 07:34:57
>>470
レジストリ関係はそんなんだったな。

478 :デフォルトの名無しさん:2005/07/13(水) 08:09:24
>>463
BOOL型はBooleanではない

479 :デフォルトの名無しさん:2005/07/13(水) 09:54:21
今、簡単なテキストエディタつくってるんだが、
指定行に移動、ってどうやるんだろう?
ずっと試行錯誤してるがよくわからない。
レベルが低い質問で悪いが、よろしく頼む。

480 :デフォルトの名無しさん:2005/07/13(水) 09:56:39
「Win32APIのついての質問」

481 :デフォルトの名無しさん:2005/07/13(水) 10:02:53
>>479
GetWindowText して '\n' カウントして EM_SETSEL するしかなかった気がする…

482 :デフォルトの名無しさん:2005/07/13(水) 10:04:20
>>480
いや、479はWinApiでテキストエディタ作ってるんじゃないのか?
あんまりそのワード連呼すると人が寄らなくなるんじゃね?
ちなみに俺は分からん。

483 :479:2005/07/13(水) 10:08:14
>>481
ま、まじで?
重くなったりしないかなぁ・・・。
とりあえずやってみるよ。ありがとう。

484 :デフォルトの名無しさん:2005/07/13(水) 10:18:03
EM_LINEINDEXとかあるじゃん

485 :デフォルトの名無しさん:2005/07/13(水) 10:22:57
EM_LINELENGTH
EM_SETSEL

オマエらもうちょっとメッセージ勉強しる

486 :デフォルトの名無しさん:2005/07/13(水) 12:59:54
このスレはエディットコントロールでエディタ作る阿呆の集まりだったのか。

487 :デフォルトの名無しさん:2005/07/13(水) 13:12:42
分不相応に背伸びする奴よりはマシ

488 :デフォルトの名無しさん:2005/07/13(水) 13:46:01
>>486
つ ノートパッド

489 :デフォルトの名無しさん:2005/07/13(水) 14:06:29
EnableWindowで入力を無効にしたウィンドウをユーザーがクリックした場合
そのウィンドウにはWM_LBUTTONDOWNとかは送られてこないんですか?

490 :デフォルトの名無しさん:2005/07/13(水) 14:20:03
やってみりゃわかるだろ

491 :デフォルトの名無しさん:2005/07/13(水) 14:20:18
送られてこないが、外部アプリからメッセージを送ることもできなくないので、
フラグを立てておいたほうが安全。

492 :489:2005/07/13(水) 14:48:11
ありがとうございました


493 :416:2005/07/13(水) 15:34:23
>>459
詳細きぼん

494 :デフォルトの名無しさん:2005/07/13(水) 20:36:09
マウスクリックで線を選択するにはどうしたらよいのでしょうか?
HDCにLineTo()で描画してるだけなんですが、
始点-終点の座標から求められるのか?
もしくはレイヤーみたいな機能があって自動で判別してくれるとうれしいのですが。


495 :デフォルトの名無しさん:2005/07/13(水) 20:57:47
>>494
一時方程式

496 :デフォルトの名無しさん:2005/07/13(水) 21:16:41
富豪的な方法だと、メタファイルに描画してリージョンに変換してPtInRegionとか。

497 :494:2005/07/13(水) 21:24:04
すみません、自己解決しました。
LineDDA()というAPIがありました。


498 :デフォルトの名無しさん:2005/07/13(水) 21:29:43
偉い

499 :226:2005/07/13(水) 21:54:57
>>493
すみませんネタでした。所詮便所の落書きw
やりたいけど時間ないです。

えー、申し訳ないので、APIfuckで参考にする予定のサイトのURLでも。
ttp://www.tokyodownstairs.com/cgi-bin/article.pl?select=tips&toparticle=03102530.nws
日本語且つソースもある様でかなり( ゚Д゚)ウマーです。まだ見てないけど。

500 :デフォルトの名無しさん:2005/07/13(水) 22:10:12
>>499
お前もう質問するなよ。
回答する側としてはチラシの裏的な書き方でもいいけどさ
質問するからには最低限のマナーがあるだろ。

501 :デフォルトの名無しさん:2005/07/13(水) 23:09:55
まあ、fuckのまま直そうとしないヤツには何を言っても無駄だな。

502 :デフォルトの名無しさん:2005/07/13(水) 23:20:33
#define fuck Hook

503 :デフォルトの名無しさん:2005/07/14(木) 00:18:15
教えてください。
プログラム動作中にPCがサスペンドに入らないようにしたいのですが、
どうすればよいのでしょうか?

504 :デフォルトの名無しさん:2005/07/14(木) 00:18:59
見張る

505 :デフォルトの名無しさん:2005/07/14(木) 00:24:36
PBT_APMQUERYSUSPEND属性のWM_POWERBROADCASTメッセージを受け取ったら、BROADCAST_QUERY_DENYを返す

506 :デフォルトの名無しさん:2005/07/14(木) 00:24:46
CreateProcessが成功しません。仕方ないのでsystem関数使ってますが、コマンドライン引数にディレクトリのパスを入れたりする場合、デスクトップ上で動かすと失敗するという欠点があります。(※パスに空白があるからパスが分断される)
似たような失敗した経験のある方はいませんか?いれば、アドバイスをお願いします。

507 :デフォルトの名無しさん:2005/07/14(木) 00:35:54
SDKですがダイアログアプリでボタンがあるときに
ダイアログでKEYイベントが回ってきません。
PreTranslateMessageで回避できるような記述を見かけたのですが、
これはMFCでないと使えないのでしょうか?
使えない場合、SDKではどうすればよいのでしょうか?
(ボタン無効化は無しで)

508 :デフォルトの名無しさん:2005/07/14(木) 01:14:53
>>506
パスを " で括ってる?

509 :デフォルトの名無しさん:2005/07/14(木) 03:26:14
>>506
ヘルプに書いてるやん

510 :デフォルトの名無しさん:2005/07/14(木) 03:53:56
ちと教えてください。

親ウィンドウのWM_CREATEでCreateDialogを呼び出して
ダイアログを親ウィンドウの子として表示させているのですが、
ダイアログ内のEditBoxでtabキーを押してもフォーカスが移動しません。
tabキーでフォーカスを移動できるようにするには、ウィンドウスタイルをどのように設定すればいいのでしょうか?

現在、
親ウィンドウには子になるダイアログとCreateWindowで作成した複数のStaticコントロールがあり、CreateWindowExで
WS_EX_WINDOWEDGE, WS_EX_CONTROLPARENT, WS_OVERLAPPEDWINDOWを設定してます。

ダイアログの方には複数のStaticとEditBoxがあり
WS_EX_CONTROLPARENT, DS_CONTROL, WS_CHILDを設定してます。
また、ダイアログ内のEditBoxにはすべてWS_TABSTOPを設定してます。

将来的には親ウィンドウ内にWS_TABSTOPを持つもう一つの子ウィンドウを作って、
子ウィンドウとダイアログ内のコントロール間をtabキーでフォーカスが行き来するようにしたいと考えてます。


Spyで似たような構成になっているウィンドウのスタイルを調べてみたけど、
フォーカスが移動しない原因がさっぱり分かりませんでしたorz

511 :デフォルトの名無しさん:2005/07/14(木) 04:28:01
>>510
IsDialogMessage?

512 :デフォルトの名無しさん:2005/07/14(木) 10:35:31
今、猫でもわかるプログラミングのSDK77章やっております。
その中に、win.iniの中にプリンタのドライバ名やデバイス名が書いてる、とあるのですが
どう探しても、そんなものは書いてありませんでした。
最近のパソコンは違うのでしょうか?(当方XP)

なんとか調べる方法を教えていただけませんか?

513 :512:2005/07/14(木) 10:47:25
申し訳ありません。
自己解決しました。
GetProfileString関数を使えば良かったんですね・・・。
どうもありがとうございました。

514 :デフォルトの名無しさん:2005/07/14(木) 10:55:55
>>512
MSDN

515 :デフォルトの名無しさん:2005/07/14(木) 11:26:46
リストボックスコントロールの項目名を変更する方法はありませんか?
LB_DELETESTRINGとLB_INSERTSTRINGを使うしかないのでしょうか。

516 :デフォルトの名無しさん:2005/07/14(木) 11:31:51
LVITEM構造体使った変更方法があったはず
LVM_SETITEM

517 :デフォルトの名無しさん:2005/07/14(木) 11:32:27
ってリストボックスか、スマソ

518 :デフォルトの名無しさん:2005/07/14(木) 11:38:05
SetWindowText()でできたら便利だと思うがどうかな

519 :515:2005/07/14(木) 11:50:34
>>518
選択されている項目のハンドルって取れますっけ?
取れればそれでいけそうな気が。

520 :518:2005/07/14(木) 12:12:19
無理でした・・
MFCのCListBoxでも文字列置換の関数がなかった

521 :デフォルトの名無しさん:2005/07/14(木) 13:57:50
こんにちは。

ListCtrlのカラム部分のタイトル文字列を変えたい場合は、どうすればいいのでしょうか?

522 :515:2005/07/14(木) 14:15:17
>>520
ありがとうございます。
別のコントロールで代用することにします。

523 :510:2005/07/14(木) 14:58:27
>>511
それでしたorz
こんな初歩的なミスくらい気付よ俺orz

524 :デフォルトの名無しさん:2005/07/14(木) 15:28:45
ツールバーの作り方を勉強しているのですが
TBBUTTON tbb[]={{0, IDM_MARU, TBSTATE_ENABLED, BTNS_BUTTON}};
のようにTBBUTTON構造体のfsStylオプションを
BTNS_BUTTONやBTNS_SEPに指定してビルドすると、
「error C2065: 'BTNS_BUTTON':定義されていない識別子です」
とエラーが出てしまいます
プログラム自体は初歩本のサンプルそのままですので、設定の問題だと思うのですが
どのように設定すればよいか教えていただけませんか?

comct32.libをリンクせよ、と書いてあったので、
プロジェクトの設定>リンク>オブジェクト/ライブラリモジュールの最後に
comct32.libを書き加えましたがダメでした
環境は VC++6.0、WINXPです、comct32.dllはHDD内を検索した所8個あり
c\WINDOWS\system32にバージョン5.82が1つ
c\WINDOWS\WINDOWS\WinSxS\〜〜〜 に6.0が2つ
C\WINDOWS\SoftwareDistribution\Download に5.82が2つ、6.0に5つあります

宜しくお願いします

525 :524訂正:2005/07/14(木) 15:31:01
C\WINDOWS\SoftwareDistribution\Download に5.82が2つ、6.0に5つあります
>C\WINDOWS\SoftwareDistribution\Download に5.82が2つ、6.0が3つあります

526 :デフォルトの名無しさん:2005/07/14(木) 15:32:51
>>524
コンパイルエラーが、
リンクにライブラリを追加して解決するわけがない

commctrl.hをインクルードすりゃいいと思うぞ

527 :524:2005/07/14(木) 15:42:41
526様、レスありがとうございます

ただ・・commctrl.hはインクルードしてますがダメでした・・・・
インクルードは
#include <windows.h>
#include <commctl.h>
#include "resource.h"
となっております

528 :デフォルトの名無しさん:2005/07/14(木) 15:46:39
Platform SDK

529 :デフォルトの名無しさん:2005/07/14(木) 15:58:55
>>527
定義くらい読め

#if (_WIN32_IE >= 0x0500)
#define BTNS_BUTTON TBSTYLE_BUTTON // 0x0000

530 :デフォルトの名無しさん:2005/07/14(木) 17:32:52
VC6付属のCommCtrl.hには、何万年探してもそんな部分は無い。

531 :524:2005/07/14(木) 17:43:38
レスありがとうございます
色々調べてみたのですが分からないので再度質問させてください

Platform SDK ですがインストールしてみましたが、ビルドできませんでした
http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en
のPSDK-amd64.exeとPSDK-ia64.exeは32ビット環境ではダメとメッセージが出たので
PSDK-x86.exeをダウンロード・インストールしました
CPUはペンティアムV800MHZですが、ダウンロードするのが違いましたでしょうか?

529様のレスについてですが
正直知識不足で、せっかくレスして頂いたのに申し訳ありませんが
どういう意味か全く理解できませんでした、ググって見て関係ありそうなのを探し
プログラムの最初に #define _WIN32_IE 0x〜〜〜を色々な数字で加えてみたのですが
ビルドできず、「定義されていない識別子です」エラーが増えるだけでした

お手数おかけしますが、もう少々詳しく教えていただけませんか?
宜しくお願いします

532 :デフォルトの名無しさん:2005/07/14(木) 18:24:45
MouseProcでWH_MOUSEをフックし、WM_MOUSEWHEELを
つかまえたのですが、wParamにWM_MOUSEWHEELが入っているため
デルタの値がわかりません。
ホイールのデルタ値はどうやったら取得出来ますか?

533 :デフォルトの名無しさん:2005/07/14(木) 18:44:02
>>524
まずは grep の使い方を覚えろ。
そして、問題の識別子を grep で検索汁。

534 :デフォルトの名無しさん:2005/07/14(木) 18:45:28
>>531
そのSDKは、VC6.0をサポートしてないと書いてあるやうな・・・

535 :デフォルトの名無しさん:2005/07/14(木) 18:46:42
>>532
WH_MOUSE_LL で Low Level mouse hook すれば、
MSLLHOOKSTRUCT::mouseData で取得できるっぽい

536 :デフォルトの名無しさん:2005/07/14(木) 19:13:19
>>534
げ、いつのまに…

537 :デフォルトの名無しさん:2005/07/14(木) 20:32:04
CreateWindow()を使って、子ウィンドウを親ウインドウ上に貼り付けて
主に描画用として使用しています。
プロシージャはそれぞれ独立させています。

子ウィンドウの上ではWM_KEYDOWNが反応しなかったり、
親ウィンドウはWM_LBUTTONDOWNが反応ないこと
が起こってしまいます。

こういう場合は親子間のウィンドウでメッセージ
をやり取りするしかないんでしょうか。

538 :デフォルトの名無しさん:2005/07/14(木) 20:33:46
GetClassInfoExが動きません。
自プロセスのウインドウなら動作するのですが、
FindWindowで見つけた他プロセスのウインドウでは全て失敗してしまいます。
MSDNに特に明記は無いのですが、こういうものなのでしょうか?

hWndTar=FindWindow("IEFrame",NULL); //IEの場合
TCHAR wclass[1024];
GetClassName(hWndTar,wclass,1024-1);
HINSTANCE hInstTar=(HINSTANCE)GetWindowLong(hWndTar,GWL_HINSTANCE);
WNDCLASSEX wcex;
ZeroMemory(&wcex,sizeof(WNDCLASSEX));
wcex.cbSize = sizeof(WNDCLASSEX);
if (GetClassInfoEx(hInstTar,wclass,&wcex)) {
} else {
GetLastErrorで"そのクラスはありません"と出る
}

ご存知の方ぜひご教授ください。宜しくお願いします。


539 :デフォルトの名無しさん:2005/07/14(木) 20:38:58
>>537
子ウインドウを親のクライアント領域いっぱいに貼り付けてるのか?
だったら、WM_LBUTTONDOWNは子ウインドウにいくし
WM_KEYDOWNは、(フォーカスを子ウインドウに設定しなければ)親に行く。

540 :デフォルトの名無しさん:2005/07/14(木) 21:24:40
>>538
各APIは成功してるか確認した?

541 :416:2005/07/14(木) 21:25:36
>499
なんだ、そうですか。
>>459 を見てから、
もうやらなくていいんだーと思って休憩してたので、
また色々と調べてみますね。

542 :532:2005/07/14(木) 21:34:08
>>535
LowLevelフックですか、ありがとうございます
やってみます

543 :538:2005/07/14(木) 22:24:49
>540
もちろん、GetClassInfoEx()以外はすべて成功しています。


544 :デフォルトの名無しさん:2005/07/14(木) 22:38:48
The Old New Thingには、
http://blogs.msdn.com/oldnewthing/archive/2005/04/18/409205.aspx
>Each process has its own window class list
とあるね。

545 :デフォルトの名無しさん:2005/07/14(木) 22:58:19
質問です

546 :デフォルトの名無しさん:2005/07/14(木) 22:59:54
>>545
何を__?

547 :545:2005/07/14(木) 23:02:08
自己解決しました

548 :538:2005/07/14(木) 23:17:25
>544
「プロセス毎にクラスリストをもっている」って事なんですかね???
すみません、英語苦手なんで明日会社で翻訳してみます。
ありがとうございました。

549 :デフォルトの名無しさん:2005/07/14(木) 23:37:31
ダイアログ作るためにリソーススクリプト書いて
BCCのBRC32コマンドでリンクしたら
Error ****.exe 1 5: Bad character in source input
とでます。
最初でたときは、「どこかで変な文字入れたかな」と思い、書き直したのですが
2度目もやっぱりでました。どうすればいいというんだ・・・orz

550 :デフォルトの名無しさん:2005/07/14(木) 23:42:20
>>549
問題が出たスクリプトを書かないとなんとも言えない。
エラーの内容からは変な文字入れたということしか判断つかない。

ま、ありがちなのは全角空白使ってるとかだな。

551 :デフォルトの名無しさん:2005/07/14(木) 23:48:44
>>550
IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 319, 600
STYLE WS_POPUP | WS_VISIBLE
EXSTYLE WS_EX_APPWINDOW
FONT 9, "MS Pゴシック"
BEGIN
END

IDD_DIALOG2 DIALOG DISCARDABLE 0, 0, 319, 200
STYLE WS_POPUP | WS_VISIBLE
EXSTYLE WS_EX_APPWINDOW
FONT 9, "MS Pゴシック"
BEGIN
END

といった感じなのですが・・・

552 :デフォルトの名無しさん:2005/07/14(木) 23:55:42
漢字コードかな?

553 :デフォルトの名無しさん:2005/07/14(木) 23:58:13
>>549
ファイル名が***.exeってのはおかしいな。
コマンドラインの指定は合ってる?

554 :デフォルトの名無しさん:2005/07/14(木) 23:59:06
リストビューに関する質問です。
ENTERキーの入力を検出したくて
NM_RETURN通知メッセージを待つようにしたのですが、
なぜかENTERキーを押しても通知されません。
LVN_KEYDOWN通知メッセージでNMLVKEYDOWN構造体の
wVKeyメンバを調べる方法も試したのですが、
なぜかENTERキーだけが通知されませんでした。
ENTERキーの入力はどのようにして
検出すればよいのでしょうか?

555 :デフォルトの名無しさん:2005/07/15(金) 00:01:25
>>553
ごめん、それ実行ファイル名隠してるだけです
分かりづらかったっすね^^;

556 :デフォルトの名無しさん:2005/07/15(金) 00:02:21
>>536
ちなみに古いSDKは>>5にあるのでまだ落とせるうちに落としておくこと激しく推奨

557 :デフォルトの名無しさん:2005/07/15(金) 00:18:32
>>555
リソーススクリプトじゃなくてexeファイルが
入力になってるんじゃないかってこと。
ちなみにbrc32のコマンドラインは
brc32 [options] <filename>.RC [<filename>.EXE]
だが、EXEを先にしてみたら同じエラーが出たよ。

558 :デフォルトの名無しさん:2005/07/15(金) 00:22:02
>>557
やってみたらできた・・・orz
ありがとうございます。なんかもう、やってらんね('A`)

559 :デフォルトの名無しさん:2005/07/15(金) 06:05:54
CreateFileでテキストファイルを開き
ReadFileで一行づつテキストを読み込むにはどうしたらいいのか教えてください

ReadFileの引数には読み込みバイト数を渡せるのですが
一行の長さは決まっているわけではありませんし
どうしたらいいのか分かりません

宜しくお願いします

560 :デフォルトの名無しさん:2005/07/15(金) 06:10:33
MFCのCStdioFile::ReadStringのソースを参考にする

561 :デフォルトの名無しさん:2005/07/15(金) 06:43:06
一バイトずつ読み込んでCRやLFが出たらやめる

562 :デフォルトの名無しさん:2005/07/15(金) 07:23:15
>>559
ReadFileはバイト単位でしか読み込むサイズを指定できないから1行毎の読み込みには向いていない。
std::ifstreamとstd::getlineなんかを使うほうが楽。

563 :デフォルトの名無しさん:2005/07/15(金) 08:02:33
1バイトずつapi呼んでたら遅くてかなわんな

564 :デフォルトの名無しさん:2005/07/15(金) 08:14:03
>>559
バッファリングすれば?

何でもAPIでやれると思ってしまうのが最近の初学者の悪い癖。
WinAPIみたいな低レベル層では、APIで何をするかではなく、
APIで何を実装するか、を考えるべき。

565 :デフォルトの名無しさん:2005/07/15(金) 08:57:40
ファイルハンドルから、オープンしているファイルのパス名を取得する方法ってありませんか?

566 :デフォルトの名無しさん:2005/07/15(金) 09:07:38
ファイルのパス名知らないとオープンできないような気がするが

567 :デフォルトの名無しさん:2005/07/15(金) 09:11:40
そもそもそのオープンしているものがファイルだという保障が無いです。

568 :538:2005/07/15(金) 09:30:40
>544
「インスタンスハンドルとクラス名の組み合わせで判定してるので、クラス名が重なっても平気」
って事でしょうか。
やはりGetClassInfoExが動かない理由がいまいちよくわかりません。

569 :デフォルトの名無しさん:2005/07/15(金) 10:08:47
インスタンスハンドルって他プロセスでは使えなかった希ガス。
つまりGetWindowLongで取得したHINSTANCEは
そのウィンドウが所属するプロセスのみで有効な値ってこと。

570 :デフォルトの名無しさん:2005/07/15(金) 10:32:21
>>566-567
つまり不可能ってことですか?
(オープンしてるのが、HDDのファイルなのは間違いないんですが)

571 :デフォルトの名無しさん:2005/07/15(金) 10:36:45
実質的には
・HINSTANCE=HMODULEの値はモジュールがプロセスにマップされたアドレス
・.exeのHINSTANCEは常に固定
じゃなかったか?

572 :デフォルトの名無しさん:2005/07/15(金) 11:30:52
>>560-564
有難う御座います

APIだけだと一文字づつ読んでいくしかないようですね

std::ifstreamやfopenよりもWin32APIでファイル入出力した方が
安全というような話を聞いた事があったのでAPIでやりたかったのです

とりあえずReadFileで改行まで一文字づつ読むコードを書いてみて
速度的に問題が無いか検討してみます

573 :デフォルトの名無しさん:2005/07/15(金) 12:16:05
getosfhandle
みたいな名前のやつ

574 :デフォルトの名無しさん:2005/07/15(金) 12:42:14
>>572
fopenとかも、結局は中でAPI呼んでるだけ

妙ちきりんなコードを書くよりは安全だと思うなw

575 :デフォルトの名無しさん:2005/07/15(金) 12:44:32
何が安全なのか分かってない希ガス。

576 :デフォルトの名無しさん:2005/07/15(金) 12:44:38
>>572
>std::ifstreamやfopenよりもWin32APIでファイル入出力した方が
>安全というような話を聞いた事があったのでAPIでやりたかったのです
>
>とりあえずReadFileで改行まで一文字づつ読むコードを書いてみて
>速度的に問題が無いか検討してみます

どうしてもWin32APIだけで高速に処理したいならファイルマッピングを勧める。
そうじゃなくて単にバッファリングするなら、おとなしくifstream使った方が良いし。

577 :デフォルトの名無しさん:2005/07/15(金) 12:47:14
ウィンドウクラスやインスタンスハンドルは
プロセス毎に持っていることを考えれば
GetClassInfoEx で別プロセスのクラス情報取得
できないことぐらい分かるだろうに。


578 :538:2005/07/15(金) 13:53:07
>577
そうなんですか。ありがとうございます。
インスタンスハンドルやモジュールハンドルについて根本的に勉強する必要がありそうですね。
インスタンスハンドルとは一言で言うと何なんでしょうか?
ご教授よろしくお願いします。
また、これらについて詳しく書かれたサイト等ご存知ないでしょうか?


579 :デフォルトの名無しさん:2005/07/15(金) 13:55:30
>>577
SPY++ はどうやって抜き出してるのか気になるトコロ… (プロパティで WNDCLASS とれてるし)
HELPER あたりになにかあるんかな?

580 :デフォルトの名無しさん:2005/07/15(金) 14:42:41
フックじゃね?

581 :デフォルトの名無しさん:2005/07/15(金) 15:51:20
俺は過去に改行にぶち当たるまで1バイトずつReadFileするプログラムを作ったことがあるが速度的に全く気にならなかったぞ

582 :デフォルトの名無しさん:2005/07/15(金) 15:53:43
>>581
俺も似たようなことしたことがあるよ。
WinApiって思ったより動作速いよね、描画以外。

583 :デフォルトの名無しさん:2005/07/15(金) 16:14:26
API

584 :デフォルトの名無しさん:2005/07/15(金) 16:51:47
>>582
> WinApiって思ったより動作速いよね、描画以外。

( ゚д゚)ポカーン

585 :554:2005/07/15(金) 20:03:32
自己解決しますた
ttp://www.codeguru.com/forum/archive/index.php/t-126755.html

586 :デフォルトの名無しさん:2005/07/15(金) 20:20:58
>>572
常識的に、そういうケースではバッファリングという手法を使う。
これは、一度手元の一時保管領域(バッファ)に一気にデータを(ReadFile()で)取得しておき、
必要に応じて必要な分(今回のケースでは1バイト)づつデータを取りだして本来の作業を行う。
バッファの分を使い切ったら、また一気にバッファにデータを取得して作業・・・を繰り返す。

APIを呼ぶのはローカルの関数を呼ぶのよりコストがかかるので、API呼び出しを極力行わなわず、
ローカル関数の呼び出しで代替する、という高速化手法なわけ。
これを自動的に行ってくれるのが、Cのf〜ファイル関数や、C++のiostream等のライブラリ。
> Win32APIでファイル入出力した方が安全
なんてのは根拠無しで言うのはナンセンス。普通は素直に標準ライブラリを使うべき。


587 :デフォルトの名無しさん:2005/07/15(金) 21:03:10
CreateFileでFILE_FLAG_NO_BUFFERINGを指定しない限りはデフォルトでReadFileの内部のスタティック変数にバッファリングされてる。
1バイトずつ読む場合でもReadFileの内部では一回目で既にファイルの内容がいくらかメモリに読み込まれてしまってる。
つまりReadFileの二回目以降はしばらくメモリへのアクセスになると思われ。

588 :デフォルトの名無しさん:2005/07/15(金) 21:09:22
そんなんに頼るくらいなら最初から必要と思われるだけバッファリングした方がはるかにマシ

589 :デフォルトの名無しさん:2005/07/15(金) 21:14:37
ま、やりたきゃ自分でバッファリングI/O実装してみるのもいいんじゃないの?
BSDのfunopen()やfgetln()のような機能はstdioには無いし

読み取りのみ・seek()なし・scanf()なし
程度なら屁みたいなもんだ


590 :デフォルトの名無しさん:2005/07/15(金) 21:20:38
>>588
わざわざ最初から天下のWindows様が用意してくださってる機能を信用せず変な意地だけ張ってバグ発生率を上げるのですか?

591 :デフォルトの名無しさん:2005/07/15(金) 21:22:42
>>590
ReadFile()は曲がりなりにもAPIコールだからな
一文字入力とかだと、stdioのgetc()
(無論マクロのヤツだ)に比べて格段に遅いのは免れんだろ

getc()したいときはungetc()も欲しくなるケースが多いしな


592 :デフォルトの名無しさん:2005/07/15(金) 21:49:38
天下のWindows様が聞いてあきれる

593 :デフォルトの名無しさん:2005/07/15(金) 23:27:27
あきれるに一票。API の引数の設定など、だらだら並べたのがあるかと思うと
構造体使っているのもある。設計に統一性がないみたい。みんなで好き好きに
やっているを集めたのではと疑いたくなることがある。

594 :デフォルトの名無しさん:2005/07/15(金) 23:35:10
CreateFontとCreateFontIndirectみたいに選べるのもある。

595 :デフォルトの名無しさん:2005/07/15(金) 23:36:39
>>593
ヒント:互換性

596 :デフォルトの名無しさん:2005/07/15(金) 23:52:34
>>593
その通りだと思ってたけど。
AdvancedWindowsに書いてあった気が。_beginthreadのあたりかな。

597 :デフォルトの名無しさん:2005/07/15(金) 23:58:31
好き勝手っつーか、APIが出来た時期によって流行が違う感じがする

598 :デフォルトの名無しさん:2005/07/16(土) 02:32:04
そりゃ実装時期によってCPUパワーもメモリ量も、プログラミングのトレンドも違う。
STDCALL、COM、.netの差とか考えれば、引数の数なんて些細。

599 :デフォルトの名無しさん:2005/07/16(土) 05:46:11
プログラミングのトレンドも違う
プログラミングのトレンドも違う
プログラミングのトレンドも違う
プログラミングのトレンドも違う
プログラミングのトレンドも違う
プログラミングのトレンドも違う


トレンドなんぞに左右されるようじゃな・・・

600 :デフォルトの名無しさん:2005/07/16(土) 05:47:11
アドレス0x400000あたりを空ける方法ってあるんでしょうか?
ブログラムのリンク時にベースアドレスを別の場所に指定してもスタックやらシステムヒープやらで埋められてしまうんですが・・・

601 :デフォルトの名無しさん:2005/07/16(土) 06:42:52 ?##
>>599
むしろトレンドを左右している気が。

602 :デフォルトの名無しさん:2005/07/16(土) 06:55:40
>>593
確かにWinAPIの関数はあまり統一性がない。
shlwapi.dllはバグも多いみたいだし。
でもそれはそれでM$社員の個性が出てていいじゃないか。

603 :デフォルトの名無しさん:2005/07/16(土) 07:05:49
そんなとこに社員が個性出してるような企業製品なんて価値0

604 :デフォルトの名無しさん:2005/07/16(土) 07:19:46
>>599
トレンドに左右されない硬直化したシステムなんざ使い物にならんよ。

いろいろあって今となっては当たり前の技術になったオブジェクト指向はおろか、
モジュール化手法や関数ですら、計算機技術の当初から存在したものじゃあないし、
技術的必然性だけで生き残ってるわけでもない。

Cだって最初から標準的言語だったわけじゃない。
今じゃマイナー言語でしかないPascalが標準言語になると信じられていた時代すらある。
(int PASCAL WinMain()とか若い人は知らないか)

第一、Win32APIですら成功したトレンドの1種にすぎない。
最近OS/2のサポート打ち切りが決まったらしいけど、
あるいはWindowsNTがその立場にあった可能性だってある。

近年はOSのシステムコールレベルでオブジェクト指向をサポートする方向に向かってる。
MSのCOMやWinFX(.net Framework)しかり、Mac OSのX Codeしかり。
(歴史を眺めれば、NeXTやBeOSなんてのもある)

要するに、トレンドは重要だってこと。良くも悪くもね。

605 :デフォルトの名無しさん:2005/07/16(土) 07:23:30
WinAPIはほとんどstdcallだが中にはcdeclを使ってるものもあるのか?

606 :デフォルトの名無しさん:2005/07/16(土) 07:30:09
>>605
wsprintfとか可変個引数をとるものはcdecl。

607 :デフォルトの名無しさん:2005/07/16(土) 07:30:48
そもそもなんで呼び出し規約違うのが混在してんの?
UNIXみたいにさっぱりできんのか

608 :269:2005/07/16(土) 07:44:07
>>285
どうもありがとうございます。
CREATE_SUSPENDで実行を再開するのにはResumeThread()でできました。
次に、任意の場所で止めたくなりました。そこでDEBUG_PROCESSというオプションを使ってみたらCREATE_SUSPENDEDと同じように止まっているみたいです。
しかしこれはResumeThread()で再開できないみたいです。そして再開できたとしてもSuspendThread()では好きな場所で停止することはできません。
自由に止めたり動かしたりするにはどうしたらよいのでしょうか・・・


609 :デフォルトの名無しさん:2005/07/16(土) 07:50:54
>>607
stdcallが速いからなのか・・・
x86の特権移行なんかはスタックも切り替わるから、機械語レベルでstdcallになってしまっている。

610 :デフォルトの名無しさん:2005/07/16(土) 07:50:57
>>607
C標準ライブラリは当然Cの規約に従う必要があるけど、
WinAPIは別にCだけから呼び出すわけじゃないし。

UNIXはシステム記述するためだけにCを作ったくらいだから、
そのへんの統一はしやすかっただろうけどね。

611 :デフォルトの名無しさん:2005/07/16(土) 07:54:10
C標準ライブラリだって別にCの規約に従う必要は別にないし、
C/C++の規格だって呼び出し規約については何も書いていない。

612 :デフォルトの名無しさん:2005/07/16(土) 07:56:05
wsrpintf()やlstrlen()なんかはまんまCをモデルにしてるのに・・・

613 :デフォルトの名無しさん:2005/07/16(土) 07:58:37
>>604
うっは、すごいデムパ

614 :277:2005/07/16(土) 07:58:51
試したところ、ポート61hを叩いて使えるみたいなのですが、TSSを調査してI/O仮想化を調べたら、どういうタイミングでかはわからないけど、61hがマスクされたりされなかったりしているみたいです。
それにWindowsでじかにポートを叩くのは行儀が悪いと思うので・・・
正しい方法を教えて下さい。


615 :デフォルトの名無しさん:2005/07/16(土) 08:08:15
質問です
waveInOpenでコールバックスレッドを指定したとき、
スレッド内ではどのようにしてメッセージ(MM_WIM_DATA等)を受け取ればいいのでしょうか?

616 :デフォルトの名無しさん:2005/07/16(土) 09:10:29
普通にGetMessageでできますた orz
スレ汚しすまそ

617 :デフォルトの名無しさん:2005/07/16(土) 09:17:49
TSSを調査してって、TV局を調査すんのかと思った広島県民

618 :デフォルトの名無しさん:2005/07/16(土) 12:41:52
MFCでDoModalってありますよね。
それをWin32APIで実現したいのですが、
ただ、”ダイアログ”ではなくて、”ウィンドウ”で実現したいのです。

よき方法はありますでしょうか?
おそらく、表示されてるウィンドウ以外の親ウィンドウ領域のクリックを、その対象となるウィンドウが表示している間はイベント(クリック)を受け付けないようにすればいいと思うのですが。

619 :デフォルトの名無しさん:2005/07/16(土) 12:58:39
>>614
Beep()じゃ不満?
そこまで低レベルな方法でビープスピーカーを鳴らしたいの?

620 :デフォルトの名無しさん:2005/07/16(土) 13:01:57
>>618
Advanced WindowsにDialogBoxParamはEnableWindow(親, FALSE);を実行すると書いてあったような気がする。

621 :デフォルトの名無しさん:2005/07/16(土) 13:14:39
解凍・圧縮ソフトは、その実行中にプログレスバーで処理状況を表示しますが、
そのプログレスバーがあるダイアログには必ず「キャンセル」ボタンが表示されているソフトが多いと思います。

解凍・圧縮機能の機能処理中に「キャンセル」ボタンのClickを受け付けるというのは、プログラミングの側面でどのように記述すればいいのでしょうか?

処理アルゴリズム(ループ)の中に、イベントを拾うAPIを入れるのでしょうか?

622 :デフォルトの名無しさん:2005/07/16(土) 13:18:31
>>621
つスレッド

623 :デフォルトの名無しさん:2005/07/16(土) 13:31:04
>>621
Yes
プログレスバー更新のタイミングもいるでしょ。

624 :デフォルトの名無しさん:2005/07/16(土) 14:01:19
Modalという考えはダイアログにしかないのだが・・・

625 :デフォルトの名無しさん:2005/07/16(土) 14:31:19
パケットキャプチャツールとかはどうやってパケットを取得してるのでしょう?
ネットワークインターフェイスにたいしてトリガー設けるAPIがあるのですか?

626 :デフォルトの名無しさん:2005/07/16(土) 14:49:10
たいていはそういうことをするための、どこぞで公開されているライブラリを使用している
ツール自身が取ってきてることはほとんど無い

627 :デフォルトの名無しさん:2005/07/16(土) 16:02:18
>>625
ドライバ

628 :デフォルトの名無しさん:2005/07/16(土) 17:29:22
>>603
その個性の価値ではなく、製品価値が0ですか
なんでWinのスレにいんの?

629 :デフォルトの名無しさん:2005/07/16(土) 17:38:03
夏だから勘弁してやれ。

630 :625:2005/07/16(土) 19:17:31
ドライバ?もちょっと詳しく。
Cマガのバックナンバに特集のってるなあ。本屋いくか。

631 :デフォルトの名無しさん:2005/07/16(土) 19:20:07
ちったぁ足りない頭使いやがれ
あとAPI関係ねぇ

632 :デフォルトの名無しさん:2005/07/16(土) 19:25:10
Win○cap

一文字伏せてみました。


633 :デフォルトの名無しさん:2005/07/16(土) 19:57:03
Winぴーcap

ちゃんと音で伏せろよ。


634 :デフォルトの名無しさん:2005/07/16(土) 20:27:32
Winぴぃcap

音で伏せるならこうだろ

635 :デフォルトの名無しさん:2005/07/16(土) 20:43:36
>>633-634
おまいら、厨にもやさしいな。


636 :デフォルトの名無しさん:2005/07/16(土) 21:27:58
ソケットにRAWモードなかった?

637 :デフォルトの名無しさん:2005/07/16(土) 21:34:43
それはライブラリでしょ。得意そうに.。わからんやつは黙っとけば?

638 :デフォルトの名無しさん:2005/07/16(土) 22:28:38
お前がなww

639 :デフォルトの名無しさん:2005/07/16(土) 22:29:50
お前もなwwwうぇw

640 :デフォルトの名無しさん:2005/07/16(土) 22:36:38
急速にスレの質が低下してまいりました(ry

641 :デフォルトの名無しさん:2005/07/16(土) 22:48:44
すまん素人がいっちょまえの口きいてるからついカッとなった。

642 :デフォルトの名無しさん:2005/07/16(土) 22:52:10
つか今日はあちこちのスレで夏の香りが急に強まってるな

643 :デフォルトの名無しさん:2005/07/16(土) 22:55:40
同類にしか分からない臭いってのがあるんだねw

644 :デフォルトの名無しさん:2005/07/16(土) 23:12:38
スレッドがサスペンド状態か否かを調べるときってGetExitCodeThread(hThread , &dwParam);で出来るんですか?
その値はなんなんですか?


645 :デフォルトの名無しさん:2005/07/16(土) 23:20:04
できない

646 :644:2005/07/16(土) 23:22:10
スレッドがサスペンド状態か否かってどうやって調べるんですか?



647 :デフォルトの名無しさん:2005/07/16(土) 23:31:06
ResumeThreadを呼び出してみて再開したらサスペンド状態だった
とかいう無理やりな判定方法をどっかで見たな

648 :デフォルトの名無しさん:2005/07/16(土) 23:34:00
SuspendThread()の返り値が1以上だったら、サスペンド中。すぐに
ResumeThread()すれば元に戻る。
というか、ふつうスレッドをサスペンドなんてさせない。



649 :644:2005/07/16(土) 23:36:54
ありがとう

650 :デフォルトの名無しさん:2005/07/17(日) 01:27:36
複数のCD-ROMドライブがついているマシンで、
一番初めのCD-ROMドライブではないドライブにCDを入れたところ、
ゲームの音がなりませんでした。

Win9xでは「音楽CDを再生する規定のCD-ROMドライブ」を設定することで
どのドライブに入れても音を鳴らすことができるのですが、
Win2K(NT系?)にはこの設定項目がありません。

ドライブレターを変更するのが面倒なので、パッチを当てようと思うのですが、
「音楽CDを再生する規定のCD-ROMドライブ」の設定が影響するAPIが何か知りませんか?

651 :デフォルトの名無しさん:2005/07/17(日) 01:45:14
>>650
mciGetDeviceId("cdaudio") とか、mciSendCommand(..., MCI_OPEN,
...) とか mciSendString() とか。



652 :デフォルトの名無しさん:2005/07/17(日) 01:53:26
設定項目が無くなっただけでレジストリ直は有効だと言う話

653 :デフォルトの名無しさん:2005/07/17(日) 01:53:35
>>650
ディスクアドミニストレータでドライブレター変更するのそんなに面倒か?

654 :デフォルトの名無しさん:2005/07/17(日) 01:55:17
>>651
最初、mciSendStringかと思ったんですけど、
Dependency Walkerで調べたところ無かったんですよ。

WINMM.DLLを調べてみると使用しているmci〜系APIは一つもなかったんですけど、
良く調べてみると、MSVFW32.DLLにMCIWndCreateがあって
これでもCD鳴らせるようですね。多分これでしょう。

DirectSoundも使っているようなんですけど、
「音楽CDを再生する規定のCD-ROMドライブ」が関係するのはMCIだけで、
DirectSoundでは関係ないですよね?

あとあやしげな、WINMM.DLLのmmio〜系API。
これでは設定が関係ないどころかCDを再生できませんよね?
CDを再生するためのAPIはこれだけなんだろうか?

とりあえず、MCIWndCreateを弄くってみます。

655 :デフォルトの名無しさん:2005/07/17(日) 01:55:46
\HKLM\SYSTEM\CurrentControlSet\Control\MediaResources\mci\cdaudio\Default Drive
の予感。


656 :デフォルトの名無しさん:2005/07/17(日) 01:56:15
>>652
レジストリわかりますか?

>>653
はい。面倒です。

657 :デフォルトの名無しさん:2005/07/17(日) 02:06:03
>>655
そのキーないです。
データ型と値(どのドライブがどの値かも)わかりませんか?

一応、ここみてDWORD値かと思ってやったんですけど鳴らない。
http://forum.alcohol-soft.com/index.php?showtopic=15687

658 :デフォルトの名無しさん:2005/07/17(日) 11:54:55
'INITCOMMONCONTROLSEX' : 定義されていない識別子です。と出ますが、
何がたりないのでしょうか?

659 :デフォルトの名無しさん:2005/07/17(日) 11:55:56


660 :デフォルトの名無しさん:2005/07/17(日) 12:14:56
>>658
SEXまで読んだ

661 :デフォルトの名無しさん:2005/07/17(日) 12:49:11
>>658
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceshellui5/html/wce50lrfInitCommonControlsEx157.asp

662 :デフォルトの名無しさん:2005/07/17(日) 21:55:07
当方初心者ですが質問です。(C++相談室 part41より誘導されました)
ファイルの一覧を取得したくて下記のfindfirstを使ったのですが引数の*filespecって絶対パスでなければ使用不可能なんでしょうか。
MSDNには「ターゲット ファイルの指定 (ワイルドカードも使えます)」なんて書いてあるんですが、
ためしに相対パスを使用したらEINVAL(Invalid argument)が返ってきちゃいました。
みなさんは相対パスで指定したいときってどうされていますか?
そもそも相対パスなんか使わずに、まず絶対パスを取得して、その後findfirstを使用するのが一般的なんでしょうか。
ご教授ください。


long _findfirst( char *filespec、struct _finddata_t *fileinfo );

663 :デフォルトの名無しさん:2005/07/17(日) 21:58:00
Win32APIならFindFirstFileだろ

664 :デフォルトの名無しさん:2005/07/17(日) 22:01:18
>>662
カレントディレクトリからの相対パスでOKなず。キミがどんなコードを
書いたのかを開示すべき。



665 :デフォルトの名無しさん:2005/07/17(日) 23:30:20
>>664
役立たずのコードを見たがるなんて、おまえ病気だよ。

666 :デフォルトの名無しさん:2005/07/18(月) 04:52:29
ディレクトリの \ をエスケープしわすれたんじゃないの?

667 :デフォルトの名無しさん:2005/07/18(月) 16:40:44
申し訳ありませんが、1つ質問させてください。

今、簡単なアドベンチャーを作っています。
PeekMessage関数を使って、メッセージがないときにはMainLoop関数を呼ぶようにしています。
しかし、これを実行すると、休むことなくMainLoopを繰り返すためか、
CPU使用率が100%になってしまいます。

そこで試しに、MainLoop関数の中にSleep(1)を入れてみると、
CPU使用率はかなり減少しました。

しかし、Sleep関数はPCをフリーズさせているのと同じだと聞いたことがあります。
MainLoop関数の中にSleepを入れてよいのでしょうか?
また、その他にいい方法があればお教えください。

668 :デフォルトの名無しさん:2005/07/18(月) 16:43:08
Win32APIというかWindowsのコントロールの質問なんだけど、
EditBoxのカレントのカーソル位置を知る方法ってありますか?

MFCを使ってないんでWM_GETTEXTやらと同じ方法で取得するんだと思うのだけど。

669 :デフォルトの名無しさん:2005/07/18(月) 16:58:27
>>667
それでもいいしタイマーとかスレッドとかゲ板とか
>Sleep関数はPCをフリーズ
むしろ逆

670 :デフォルトの名無しさん:2005/07/18(月) 17:00:29
>>667
読んでみた?
ttp://msdn.microsoft.com/library/en-us/dllproc/base/sleep.asp

671 :デフォルトの名無しさん:2005/07/18(月) 17:06:59
>それでもいいし
あほ?

672 :デフォルトの名無しさん:2005/07/18(月) 17:16:00
>>667
ビジーループ氏ね。

673 :デフォルトの名無しさん:2005/07/18(月) 17:23:06
Sleepは一応ある意味フリーズだろ。
メインスレッドでそれを使うのはナンセンスかと。
素直に他スレッド使え。

674 :デフォルトの名無しさん:2005/07/18(月) 17:25:58
長年の論争にけりを付けるため
誰かWindowsゲームで使える、完璧なフレームワーク書いてくれよ

675 :デフォルトの名無しさん:2005/07/18(月) 17:32:31
ゲームなら全画面表示でやれよ

676 :デフォルトの名無しさん:2005/07/18(月) 17:42:20
>>667
そういう用途ならSleep(0);で十分。

677 :デフォルトの名無しさん:2005/07/18(月) 17:49:33
>>675
何の話?

678 :デフォルトの名無しさん:2005/07/18(月) 18:09:36
>>668
EM_GETSET

>>677
他アプリ使えなきゃゲーム側で独占しても問題無いってことだろ
つーかそもそもPCゲーはそうやるもんだ

679 :デフォルトの名無しさん:2005/07/18(月) 18:14:56
久々に大物のヴァカ登場か

680 :デフォルトの名無しさん:2005/07/18(月) 18:19:07
>>678
あ、そういうことか

俺も全画面のみのゲームは好きじゃないが
DirectXでのフラグの旧名称が、「全画面」ではなく、「排他」な以上、そういう方向なんだろうな

681 :667:2005/07/18(月) 18:28:33
皆さん、ありがとうございます。
とても参考になりました。

682 :デフォルトの名無しさん:2005/07/18(月) 19:06:56
>>679
自虐乙

>>680
排他って言った方が理解しやすいしな

683 :デフォルトの名無しさん:2005/07/18(月) 20:19:36
マルチタスクOSたるWindowsの存在価値を否定する概念だよな、デバイスの排他利用って。

684 :デフォルトの名無しさん:2005/07/18(月) 20:23:28
キーボードだって排他的に利用してるじゃん。

685 :デフォルトの名無しさん:2005/07/18(月) 20:30:36
>>684
は?
キーボードは排他利用されていない。
本当に排他利用しているなら全角/半角キー入力による全角変換ウィンドウが出ない。

686 :デフォルトの名無しさん:2005/07/18(月) 20:42:12
1tくらいはありそうだな > 大物

687 :デフォルトの名無しさん:2005/07/18(月) 20:47:32
素人は回答を控えてください

688 :デフォルトの名無しさん:2005/07/18(月) 20:48:03
その大物ってのはなんだ?
>>676か?

689 :デフォルトの名無しさん:2005/07/18(月) 20:52:38
なつかしいエロゲ板ネタだナ

690 :デフォルトの名無しさん:2005/07/18(月) 20:56:44
>>683
ゲーム中にマルチタスクも無いもんだ

691 :デフォルトの名無しさん:2005/07/18(月) 20:58:22
ゲーム作ってるやつらってのはこんなににもアフォばかりなのか…

692 :デフォルトの名無しさん:2005/07/18(月) 21:07:23
このループは以前葱板で見た気がする‥‥

693 :デフォルトの名無しさん:2005/07/18(月) 21:20:57
自分の考えに合わないものは全てアフォ扱い
さすが自称スーパープログラマはスバラシイですね

694 :デフォルトの名無しさん:2005/07/18(月) 21:24:31
そんな言い返ししかできないとはかわいそうなニート君でつね(プゲラ

695 :デフォルトの名無しさん:2005/07/18(月) 21:33:27
ものの考え方が明らかに変だな。
日本人じゃないかも知れないなあ。

696 :デフォルトの名無しさん:2005/07/18(月) 21:39:52
>>693-695
ここ逝け。
http://pc8.2ch.net/test/read.cgi/tech/1115830336/l50

697 :デフォルトの名無しさん:2005/07/18(月) 21:45:14
HSPの話なんてして無いじゃん。
アフォ?

698 :デフォルトの名無しさん:2005/07/18(月) 21:54:30
タイトルはHSPスレだが実際は基地外の雑談スレ

699 :デフォルトの名無しさん:2005/07/18(月) 22:00:42
>>690
オンライン状態でゲームをしている際に、
別プロセスのファイアウォールが通信許可を求めるダイアログを出す場合もある。
排他所有を当然と考える発想は、世間では通じない。

700 :デフォルトの名無しさん:2005/07/18(月) 22:15:47
>>689
これ?
http://pie.bbspink.com/test/read.cgi/erog/1055673723/l50

701 :デフォルトの名無しさん:2005/07/18(月) 22:22:49
>>699
FFなんて激しく排他ですよw

702 :デフォルトの名無しさん:2005/07/18(月) 22:28:05
>>700
報告だけじゃなくて、以前は議論っぽいことをやってた
Sleep(0)以外の方法はダメだと主張する御仁が暴れてた
実はWaitFor系のAPIを知らなかっただけらしい

703 :デフォルトの名無しさん:2005/07/18(月) 22:44:04
>>685
排他「的」って書いたんだが…
「A」って打ったときに2つのアプリに入力されることはないでしょ、て。


704 :デフォルトの名無しさん:2005/07/18(月) 22:48:47
>>703
フォーカス持ちのアプリとキーロガー

705 :デフォルトの名無しさん:2005/07/18(月) 22:56:39
>>703
・・・君なぁ。
出力デバイスであるスクリーンの排他の話をしてたのに、
入力デバイスに排他性があることを主張して自己正当化するのは苦しいだろ?

そもそも、複数のアプリに入力が通知されるように作ることは可能。
正規のAPIでキーボードフックを使えばいい。
任意のアプリの入力を別アプリで取得できる以上、排他ではない。
ホットキーも存在するでしょ。

706 :デフォルトの名無しさん:2005/07/18(月) 23:00:27
ちょっとお尋ねしたいのですが
CreateFileで既存のファイルを開く時、
開く作業自体はファイルサイズに影響されないんでしょうか?
ファイルサイズが大きいと時間かかるとか・・・

707 :デフォルトの名無しさん:2005/07/18(月) 23:13:10
ファイルサイズが大きいと時間がかかるのは当たり前じゃないの?
ファイルサイズが大きいと小さいのと比べて同じ量をバッファする時間がかかるってこと?

708 :デフォルトの名無しさん:2005/07/18(月) 23:17:29
ただ開くだけでも?

709 :デフォルトの名無しさん:2005/07/18(月) 23:29:59
計ってみろ。おれは同じな気がする。

710 :707:2005/07/18(月) 23:54:50
CreateFileか・・・Readじゃないのね・・・
俺も同じな気がする。

711 :デフォルトの名無しさん:2005/07/18(月) 23:59:29
デバイスによる気がする。

712 :デフォルトの名無しさん:2005/07/19(火) 00:08:53
ファイル開くだけで読まないならディレクトリエントリ読んでるだけだろ

713 :デフォルトの名無しさん:2005/07/19(火) 00:10:47
ファイルサイズよりもデバイスの種類に影響されそう。

714 :デフォルトの名無しさん:2005/07/19(火) 00:13:45
そんな当たり前のこと言われても

715 :デフォルトの名無しさん:2005/07/19(火) 00:23:44
NTFSならMFTも読みそうだけどやっぱりサイズは関係ないと思う

716 :706:2005/07/19(火) 00:33:00
ここの連中は本当に無能ですね。
〜気がする
〜だろう
〜されそう
〜と思う
アホさ加減に涙が出そうです。
マトモな返答をオネガイします。

717 :デフォルトの名無しさん:2005/07/19(火) 00:34:34
バレバレの騙り荒らし乙

718 :デフォルトの名無しさん:2005/07/19(火) 00:36:13
本人ではなさそうだな。>>716
つーか、簡単に確認できることを人に聞くなと・・・

719 :デフォルトの名無しさん:2005/07/19(火) 01:11:56
日本語版MSDNでapi関数の検索ってどうやってやるの?

720 :デフォルトの名無しさん:2005/07/19(火) 01:14:27
つ[Google]

721 :719:2005/07/19(火) 01:17:00
おおほんとだありがとう。基本的なことですれ汚しごめんでした。

722 :デフォルトの名無しさん:2005/07/19(火) 01:42:50
つーかMSDNの検索機能使うよりぐぐったほうが早いというのがなんとも…

723 :デフォルトの名無しさん:2005/07/19(火) 01:59:21
error C2262: 壊せません。
ってエラーが出ます。
MSDN入れてないんでGoogleで探したんですが
情報みつけられません。
探し方OR回答おしえてくらさい。

724 :デフォルトの名無しさん:2005/07/19(火) 02:20:19
それは本当にAPIの問題なのだな?

725 :デフォルトの名無しさん:2005/07/19(火) 02:23:51
VC++のランタイムライブラリのエラーに見えるな

726 :デフォルトの名無しさん:2005/07/19(火) 02:26:21
適切なデストラクタが定義されましたが、アクセス可能でないため、オブジェクトをインスタンス化できません。

だって

727 :デフォルトの名無しさん:2005/07/19(火) 03:44:11
SYSTEMとHIDDENの設定されたファイルを削除したいのですが
DeleteFileで失敗、GetLastErrorで2(ファイルが見つからない)になります。
SetFileAttributesでFILE_ATTRIBUTE_NORMALも失敗します。
手順等判りましたら教えてください

728 :デフォルトの名無しさん:2005/07/19(火) 03:49:14
属性は関係ない
おおかた \ を二重にするのを忘れてるとかそんなとこだろ

729 :デフォルトの名無しさん:2005/07/19(火) 09:51:02
>>578-580
亀レスだが GetClassLongPtr で取れるだろ。
ウィンドウハンドルはグローバルで有効、インスタンスハンドルはプロセスローカル。
GetClassInfoEx では無理と書いたのはそういうこと。

他の人も書いてるがインスタンスハンドルはメモリにマップされた EXE や DLL の識別子で
具体的な値はマップされたメモリ番地(WinCE なんかじゃ違うらしい)で、API の内部では
EXE や DLL のヘッダを辿ってリソースや TLS 初期化子にアクセスしたりする。

メモリ空間はプロセス毎に分かれてるってのは聞いたことないかい?
メモリ空間が分かれてるってことはインスタンスハンドルもそのプロセス内でのみ有効に
なってしまうってこと。すなわちインスタンスハンドルだけでは「どのプロセスの」っていう
情報が抜けてるから別プロセスのウィンドウクラスを取得することが無理。


730 :デフォルトの名無しさん:2005/07/19(火) 10:14:35
補足すると WNDCLASS(EX) で hInstance を指定するのは EXE や DLL から情報をとるため
ではなく、インスタンスとウィンドウクラスを関連付けるため。
関連付けがなされるから GetClassInfoEx みたいな API が使えたり、プロシージャを含む
インスタンスを解放するとウィンドウが破棄される。


731 :デフォルトの名無しさん:2005/07/19(火) 10:26:33
☆沖川君の憂鬱について☆
http://yasushikondo.no-ip.info/prog/all/non-job/okikawa/index.html
☆沖川君の憂鬱について☆感想文掲示板
http://yasushikondo.no-ip.info/prog/all/non-job/okikawa_bbs/aska.cgi


732 :デフォルトの名無しさん:2005/07/19(火) 10:36:23
ログオンユーザが、ローカルユーザかドメインユーザかを判断するAPIってありますか?

ログオンしたユーザがadministratorsグループだったら処理を行わないようにしたいのですが、
netuser/netgroup/netlocalgroup と GetUserName の組み合わせだと、ローカルユーザとドメ
インユーザが同一名の場合うまく判断できません。

判断するAPI、もしくは上手な判断方法なのありましたら教えてください。

733 :デフォルトの名無しさん:2005/07/19(火) 11:44:17
>>729-730
部外者だがとてもためになった。ありがとう(´ー`)

734 :デフォルトの名無しさん:2005/07/19(火) 17:43:10
732
OpenProcessToken();
GetTokenInformation();
LookupAccountSid():

735 :デフォルトの名無しさん:2005/07/20(水) 01:12:39
かなり初歩的なことかと思うのですがご教授下さい
新たに作ったプロジェクトに過去に作ったソースをコピペしたのですが
DefWindowProcが呼ばれていないのか、ウィンドウの移動や×印を押しての終了ができません。
ソース以外の部分に問題があったりすることもあるんでしょうか?

プロシージャの最後で
return DefWindowProc(hWnd,msg,wParam,lParam);
と書くと移動や最小化等ができず
DefWindowProc(hWnd,msg,wParam,lParam);
return 0;
と書くとできます
以前に作ったプロジェクトはreturn DefWindowProc(hWnd,msg,wParam,lParam);で正しく動作していて
ソースは全く同じなのですが…

736 :デフォルトの名無しさん:2005/07/20(水) 06:48:11
ソースいじって変わる現象なら、ソースに問題があるんだろ

前に動いていたというのも疑わしいと考えて、見直した方がいいんじゃないか?

737 :デフォルトの名無しさん:2005/07/20(水) 09:18:43
俺はスタックオーバーフローしてるんだと予想。
前はデバッグ版で今回はリリース版だとか。
後、些細なことでスタックの alignment 変わったりするからね。

配列のサイズ2倍にするとかポインタ経由で書き込みしてたら本当に書き込みできるサイズのものかチェック汁。

738 :732:2005/07/20(水) 09:33:14
>734 レスありがとうございます。
OpenProcessToken でアクセストークン取得して
GetTokenInformation でグループ情報取得して
LookupAccountSid でSIDからユーザがドメインかローカルかを判断する
という流れですね。ありがとうございます、コレでやってみます。

739 :デフォルトの名無しさん:2005/07/20(水) 10:15:05
お初ですが、よろしくお願いします。
ウインドウに描画された内容をビットマップ化し扱うプログラムを作ろうとしています。
具体的には、HWNDからHBITMAPにもってこようとしてるのですが、知識が乏しくうまく行ってません。
よろしくお願いします。


740 :デフォルトの名無しさん:2005/07/20(水) 11:14:22
>>739
MSDN読んで知識を付けよう。
MSのインシデントを使って質問すると手取り足取り教えてくれる。

741 :デフォルトの名無しさん:2005/07/20(水) 11:14:59
>>739
ここで説明できるほど簡単ではない。
http://www.sm.rim.or.jp/~shishido/wincap.html

742 :デフォルトの名無しさん:2005/07/20(水) 12:21:16
>>739
ttp://forums.belution.com/ja/vc/000/315/83.shtml
マルチポストうざ

743 :デフォルトの名無しさん:2005/07/20(水) 13:44:41
SIDでドメインユーザかどうかなんてわかるの?
SIDからドメインとってプログラムが走ってるPCのドメインと比較するの?
でもそれはドメインかローカルを区別したことにはならんよね。

744 :デフォルトの名無しさん:2005/07/20(水) 16:15:44
>>743
LookupAccountSid()にドメイン名が入ってくるかどうかで判断できるんじゃね

745 :デフォルトの名無しさん:2005/07/20(水) 17:20:21
>>744
テストプログラム作ってローカルログインしたユーザで実行したらドメイン名にコンピュータ名が返ってきたよ。
>>734はプログラムをドメインコントローラで実行するという前提なのかな?

NTの機能でAdminグループに実行権を付与するのが楽な気がするのだが。

746 :デフォルトの名無しさん:2005/07/20(水) 17:34:39
ReferencedDomainNameに入ってくるのが
 ドメイン → ドメイン名
 ローカル → ドメイン名にコンピュータ名
なら、コンピュータ名取っておいて比較すれば
>>745の前提は関係なく切り分けられるのでは?

747 :デフォルトの名無しさん:2005/07/20(水) 18:15:54
CPUの負荷を%で取得するにはどうすればいいですか?

748 :デフォルトの名無しさん:2005/07/20(水) 19:06:58
Win32APIでPainは出来ないですか?
疑似しか無理ですかね?


749 :デフォルトの名無しさん:2005/07/20(水) 19:26:09
>>746
「ドメイン名にコンピュータ名」とは"ドメイン名\コンピュータ名"
ってこと?
単にコンピュータ名です。ローカルログインしてるんだかだからあたりまえだけど。

>GetTokenInformation でグループ情報取得して
>LookupAccountSid でSIDからユーザがドメインかローカルかを判断する

属してるグループ列挙してドメインコントローラのアドミンズグループに属してるか調べるってことかいな?

750 :デフォルトの名無しさん:2005/07/20(水) 19:26:43
APIで痛みを出すのは難しいから疑似にとどめておけ。

751 :デフォルトの名無しさん:2005/07/20(水) 20:46:03
749
WSコンピュータ: WS1
DCコンピュータ: SERVER1
ドメイン名: DOM
ユーザはそれぞれ
WS1\ADMINSATRATOR
SERVER1\ADMINSATRATOR
DOM\ADMINSATRATOR
とすると

LookupAccontSid()のReferenceDomainNameの返り値は
WS1上のローカルユーザ WS1
WS1上のドメインユーザ DOM
SERVER1上のローカルユーザ SERVER1
SERVER1上のドメインユーザ DOM
となる思うぞ(だれかDC試した?)

Nameはいずれも ADMINSTRATORが返る。
ドメイン名とDCコンピュータ名が同じ場合はどうなるか知らん。

752 :デフォルトの名無しさん:2005/07/20(水) 22:40:07
>>751
SERVER1\ADMINSATRATOR はないのとちがうか。
で、例えばWS1\ADMINSATRATOR の場合
「WS1」というのがドメイン名かコンピュータ名か判別できるんかいな?


753 :デフォルトの名無しさん:2005/07/21(木) 00:12:27
MS IME プロパティ・色設定・背景色で指定している色を取り出す API は分らない
でしょうか。(rich edit control では(default では)0x808080 で見にくいので
連動させたいと思っています。あるいは、もともと連動していて 0x808080 がおかしい
ということってあるでしょうか。ご教示いただければ助かります。)

754 :デフォルトの名無しさん:2005/07/21(木) 00:37:34
>>747
パフォーマンスモニタ
あれ?パフォーマンスカウンタだっけ?

755 :デフォルトの名無しさん:2005/07/21(木) 01:03:07
W2k以降ならAPIつーかWMIでCPU使用率とれる。

756 :デフォルトの名無しさん:2005/07/21(木) 01:15:00
タスクマネージャを起動禁止にするのってどうやるんでしょうか?
二重起動防止にミューテックスを使ってるなら同じ名前で先に作ってしまえばいいかな、とも思うのですが。
ソースが無いとわからないし。

757 :デフォルトの名無しさん:2005/07/21(木) 01:22:09
(´-`).。oO(何でそんなことするんだろぅ…)

758 :デフォルトの名無しさん:2005/07/21(木) 01:43:01
レジストリでしかできなさそうですね。

759 :デフォルトの名無しさん:2005/07/21(木) 02:05:42
レジストリって言うかグループポリシーエディタじゃね

760 :756:2005/07/21(木) 02:08:08
キー:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System
値:DisableTaskMgr (REG_DWORD)
データ:1で実行不可、 0で実行可能

これで一応できるようですが、できればプログラム起動中のみリアルタイムで禁止したいのですが。

761 :デフォルトの名無しさん:2005/07/21(木) 02:11:29
taskkill /im taskmgr.exeでも回しとけ

762 :735:2005/07/21(木) 02:21:32
>>736-737
自己解決しました
古いほうのリソースを使うと正常に動いたので確認したら
リソースのダイアログの所にクラス名を書いてないのが問題でした

763 :デフォルトの名無しさん:2005/07/21(木) 02:50:11
>>756
ObjectWalker とかその手のツールで見れないかな?
今、自宅でMacなんで試せないが。

764 :デフォルトの名無しさん:2005/07/21(木) 02:53:44
質問なのですが、お願いします。
現在リストビュー勉強中なのですが、
lvcol.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
lvcol.fmt = LVCFMT_LEFT;
lvcol.cx = 100;
lvcol.pszText = "名前";
lvcol.iSubItem = 0;
ListView_InsertColumn(hList, 0, &lvcol);

lvcol.cx = 200;
///      wsprintf(lvcol.pszText,"%d",i);
lvcol.iSubItem = 1;
ListView_InsertColumn(hList, 1, &lvcol);
で、wsprintfの部分でエラーが出てしまっています。iはint型です。
数値を数字に変換したいのですが、うまくいかないのです。。
itoa、sprintfもつかってみたのですが、
'System.NullReferenceException' のハンドルされていない例外が ほにゃ.exe で発生しました。
とでます。。どなたかお力添えお願いします。VC,sdkで作成しております。
随分長い間悩んでおります。。

765 :デフォルトの名無しさん:2005/07/21(木) 02:58:13
>>764
wsprintf(lvcol.pszText,L"%d",i);
でないとワーニングでないか?



766 :デフォルトの名無しさん:2005/07/21(木) 03:03:25
>>765
レスありがとう。
試してみましたが、でないです。。

767 :デフォルトの名無しさん:2005/07/21(木) 03:17:19
>>765さん!どうもありがとうございます!ほんと感謝です。
>>765さんの答えがヒントになりました。一度、wsprintfにコピーし、
コピーしたアドレスをlvcol.pszTextに代入したらうまく行きました!
1週間近く、試行錯誤してたんですよ・・・。ありがとう。>>765さん。

768 :デフォルトの名無しさん:2005/07/21(木) 03:53:09
>>757
スパイウェアでも作りたいんでしょ

769 :デフォルトの名無しさん:2005/07/21(木) 05:34:08
lvcol.pszText = "名前";
wsprintf(lvcol.pszText,"%d",i);
これだと読み取り専用の所にかきこんでるもんな

770 :デフォルトの名無しさん:2005/07/21(木) 06:19:00
リテラルの型が char* っていう言語仕様が悪いんだよな…

771 :デフォルトの名無しさん:2005/07/21(木) 06:36:32
アンチはお帰りくださいな

772 :デフォルトの名無しさん:2005/07/21(木) 06:38:34
インポはお帰りくださいな

773 :デフォルトの名無しさん:2005/07/21(木) 07:55:14
実は根本的にポインタの取り扱いが良くわかっていない悪寒。

774 :デフォルトの名無しさん:2005/07/21(木) 11:22:22
ActiveXで描画された内容をUpdateLayeredWindowで綺麗にアルファー抜きして表示したいのだけど、UpdateLayeredWindow用のアルファーチャンネルのBMPの生成の仕方がわかりません。
SVGやFlashのIEプラグインをembedタグで呼び出すときは、パラメータwmodeを"transparent"にする事でIEで指定した背景と綺麗に合成されアルファー抜きで表示する事が出来るんですが
これを実現できればと思ってます。
そもそもUpdateLayeredWindow使う方法が間違ってますかねぇ〜
何方かわかる方お願いします。


775 :デフォルトの名無しさん:2005/07/21(木) 11:44:08
>>764
char szBuf[256];
wsprintf(szBuf, "%d", i);
lvcol.pszText = szBuf;

776 :デフォルトの名無しさん:2005/07/21(木) 13:08:18
>>774
αチャネル付きのHBITMAPは、GDI+ か DirectX を利用して作るのが簡単。

>SVGやFlashのIEプラグインをembedタグで〜これを実現できればと思ってます。
これは難しい。

777 :デフォルトの名無しさん:2005/07/21(木) 19:59:29
ListCtrlで文字列をSetする場合って、
文字列の長さに制限がありますか?

778 :デフォルトの名無しさん:2005/07/21(木) 21:29:58
>>774
ヒント: windowlessモード
UpdateLayeredWindowは関係ない
って質問の意味を誤解してるかもしれんが

779 :デフォルトの名無しさん:2005/07/21(木) 23:47:37
板違いだったら申し訳ないです。

今、課題でファイルを分割・結合するソフトを作るというのをやっているんですが、
今までC言語を勉強していて、いきなりAPIに入って全くわからないです。
自分で調べたところ、ファイルをバイナリファイルで読みこんで、分割するという
方法でよろしいのでしょうか。
そもそもこういった場合何から始めればよいのかどなたか優しい方、
一般的手順を教えていただけないでしょうか。


780 :デフォルトの名無しさん:2005/07/21(木) 23:48:17
APIなんて必要ないです。

781 :デフォルトの名無しさん:2005/07/21(木) 23:48:37
好きなようにやったらええよ
Win32API使わなくてもできるでしょ

782 :デフォルトの名無しさん:2005/07/21(木) 23:50:42
こんな状態の学生にいきなりWinAPIをやらせる学校(専門学校?)があるのか。

783 :デフォルトの名無しさん:2005/07/21(木) 23:59:46
>>782
学校のレベルと学生のレベルが一致するとは限らんぞw

こんなとこに聞きに来るようなやつだ。
授業をサボりまくった末に、
課題だけ出せば何とかなるだろうってやつだろー

784 :デフォルトの名無しさん:2005/07/22(金) 00:06:30
>>779
ファイル開いて、読んで書いて、閉じるだけ

785 :デフォルトの名無しさん:2005/07/22(金) 00:21:23
>今、課題でファイルを分割・結合するソフトを作るというのをやっているんですが

>今までC言語を勉強していて

WinAPIを使えなんて、学校側から一言も言われてない悪寒

786 :デフォルトの名無しさん:2005/07/22(金) 11:18:39
標準関数とOSのAPIの区別が付いてない予感

787 :デフォルトの名無しさん:2005/07/22(金) 11:59:29
処理系の標準関数使うよりAPI使ったほうが簡単だと思う

788 :デフォルトの名無しさん:2005/07/22(金) 15:30:30
どして?
標準関数のほうが簡単じゃね?

789 :デフォルトの名無しさん:2005/07/22(金) 15:59:54
fopenよりもCreateFileのほうが簡単
fseekよりもSetFilePointerのほうが簡単
freadよりもReadFileのほうが簡単
fwriteよりもWriteFileのほうが簡単
fcloseよりもCloseHandleのほうが簡単
FILE構造体よりもただのハンドルのほうが簡単

790 :デフォルトの名無しさん:2005/07/22(金) 16:14:04

(´ _ゝ`)・・・・・・・・

(´ ,_ゝ`)プ

791 :デフォルトの名無しさん:2005/07/22(金) 16:38:41
CreateProcessした物を強制的に停止・再開させるのはどうすればいいですか?

792 :デフォルトの名無しさん:2005/07/22(金) 17:14:06
>>791
SuspendThread, ResumeThread
ただし、対象がマルチスレッドだと面倒なことになる。

793 :779:2005/07/22(金) 19:22:22
779です。皆様有難う御座います。
確かにAPIなんです。今日の進捗を報告します。

まずはバイナリファイルで読み込むことが分かり、fopenの"rb"で開いて、
、freadでバッファに読み取り、fwriteでファイル"wb"で一度バイナリにして復元する
という流はわかりました。
ただ、分割して出力するっていうのがわからないです。。。
どうやったらいいのかわからず、今から家で考えるところです。

と、まぁ思いっきりCで考えているのですが、789さんを見ると
API関数でも同じことができるってことですか?
貴重なヒントを有難う御座います。あと無知で申し訳ないです。

794 :774:2005/07/22(金) 19:44:56
>>778

レスありがとうございます。

>>>774
>ヒント: windowlessモード
>UpdateLayeredWindowは関係ない
>って質問の意味を誤解してるかもしれんが

ヒントを元に調査してみました。
ttp://www.kaede-software.com/2005/04/flash_1.html
ttp://kikyou.info/diary/?200312#i14_1
ttp://www.denpa.org/~go/denpa/200304/atlflash.txt
とりあえず、ここらあたりが参考になりそうで、今ATLでテストし始めたんですが、
ウインドウレスにする方法が見つかってないです。
ActiveXの描画をウインドウレスする方法はヒットするんですが、
肝心の呼び出す側?(EXEの方)をUpdateLayeredWindow無しでウインドウレスにする方法が見つからないです。
出来ましたらもう少しヒントを。。。


795 :デフォルトの名無しさん:2005/07/22(金) 19:45:46
>>793
分割:MoveMemory

796 :デフォルトの名無しさん:2005/07/22(金) 20:00:32
分割バイト分出力したらクローズして次のファイルへ


797 :デフォルトの名無しさん:2005/07/22(金) 20:10:51
>>793
完璧にスレ違いですのでよろしく。

798 :デフォルトの名無しさん:2005/07/22(金) 20:20:51
いやAPIの勉強、始めたんだろ。
標準関数を>789に置き換えれば出来るだろうけど
何か間違ってる気もする。

799 :デフォルトの名無しさん:2005/07/22(金) 20:26:07
APIがどうこう以前の引っ掛かり方だろ。

800 :デフォルトの名無しさん:2005/07/22(金) 20:35:24
エクスプローラでファイルを右クリックして「名前の変更」を選択したり、
もしくは、ファイルを選択した状態で左クリック長押しで名前が変更できる状態になりますよね。
あの状態を呼び出す関数とかありませんか?
今現在、右クリック→「名前の変更」というポップアップまでは出来ていて、あとはそのイベントハンドラで
名前を変えられる状態にするだけなんですが・・・。

801 :デフォルトの名無しさん:2005/07/22(金) 20:40:22
renameっていう関数でおkですか?

802 :デフォルトの名無しさん:2005/07/22(金) 21:11:25
>>800
ありゃ関数関係無い

803 :デフォルトの名無しさん:2005/07/22(金) 21:11:43
ウインドウをフルスクリーン化しようと、

const DWORD DEFAULT_FULL_SCREEN_STYLE = WS_POPUP;

// ウインドウスタイル変更
SetWindowLong(mWindowHandle, GWL_STYLE, DEFAULT_FULL_SCREEN_STYLE);
// 画面全体にウインドウサイズを広げる
SetWindowPos(mWindowHandle, HWND_TOPMOST,
 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), 0);

としたのですが、
ウインドウスタイルは変更されても、ウインドウサイズが画面全体になりません。
SetWindowLongをコメントすると、全画面になることから、双方が絡んだ現象だと思います。
両方とも動作させるにはどうしたらよいでしょうか。

804 :デフォルトの名無しさん:2005/07/22(金) 21:22:37
800
HWND hWnd = エクスプローラの子SysListView32のハンドル
PostMessage( hWnd, WM_ACTIVATE, MAKEWORD( WA_CLICKACTIVE,0), 0);
PostMessage( hWnd, WM_KEYDOWN, VK_F2, 0);
あたり。つかSpy++

805 :803:2005/07/22(金) 21:25:33
他の言語の同じコードだとうまく行っているので、開発環境依存の問題のようなんですが、困った・・・。

806 :779:2005/07/22(金) 21:34:07
あっ標準関数ってそういうことなんですね。だから普通に使えるのか!
>798
外見はWINプログラムじゃなきゃいけないですが、中身は別に
API関数じゃなくてもいいっちゃいいんです。
でも標準関数とAPIで簡単の意見が二分するのは何故だろう?
>796
MoveMemoryで一度分割したところからまた始められるのですか?

807 :デフォルトの名無しさん:2005/07/22(金) 23:00:39
ファイル分割でMoveMemory?


808 :デフォルトの名無しさん:2005/07/22(金) 23:50:33
>>806
そりゃぁ、ここで質問しているからだ。
他で質問してたら違う結果になったかもな。

809 :デフォルトの名無しさん:2005/07/22(金) 23:57:20
>>804
サンクス

810 :779:2005/07/23(土) 00:27:08
確かに(^^ゞ
じゃぁ簡単な方の標準関数でがんばってみたいと思います。

811 :デフォルトの名無しさん:2005/07/23(土) 01:53:46
読み込みファイルオープン
書き込みファイルを2つオープン
ファイル先頭から分割サイズ分を1つのファイルに書き込む
続きから最後までをもう1つのファイルに書き込む

連結も同じように考える。

812 :デフォルトの名無しさん:2005/07/23(土) 04:26:58
ファイルの出力を普通に書くとNTFSでフラグメントおきまくり(100kbで3,4箇所とか)なんだけど
アプリ側でなるべく抑制する方法ってないんですか?
mmapで最初に確保するとかしかないのかな。

813 :614:2005/07/23(土) 07:15:39
>>619
サウンドカードの出力をスピーカーでなくて、イヤホンにつなげてあるので、長い作業の終わりをしらせたい場合、Beep()だと、困るのです。
一応、MessageBeep(-1)でビープ音は出るのですが、短い変な音です。長さを変えられるといいのかもしれませんが・・・

814 :デフォルトの名無しさん:2005/07/23(土) 07:21:24
メモリ上の値が他のプロセスやスレッドによって変化させられるのですが、これが特定の値になったかどうかをキャッチしたいのです。
しかし、
volatile int *a = ...;
while(*a != ...){}
などとすると、CPUタイムが無駄に使われてしまいます。
これを避ける方法は何でしょうか?

815 :デフォルトの名無しさん:2005/07/23(土) 07:28:36
簡易デバッガ作って、DR0とかにメモリブレークポイントを仕掛けるとか。
他のプロセスとやらの変更がきくなら、値を変更したのち、SetEvent
なんかで変更通知を出すとか。

816 :デフォルトの名無しさん:2005/07/23(土) 07:44:23
>>813
プロンプトが一瞬出るが、system("\a");

817 :デフォルトの名無しさん:2005/07/23(土) 07:47:09
>>814
よく分からずに書いてみるが、書き込んだら構造化例外が発生する
ように保護するってできないかな。

818 :デフォルトの名無しさん:2005/07/23(土) 07:49:47
>>814
Sleep(0)でも入れたら?

819 :デフォルトの名無しさん:2005/07/23(土) 07:57:26
>817
ページ単位ならできそう。つまり、周辺の他の変数も巻き添えになる。
あとは、書き込んだプロセスで発生した構造化例外を、変更を
捕まえたいプロセスで捕まえる方法だな。

820 :デフォルトの名無しさん:2005/07/23(土) 09:57:47
メモリ上の値を直接書き換えてしまうという原始的な構造をやめる。

821 :デフォルトの名無しさん:2005/07/23(土) 10:34:05
2つのスレッドで↓のように処理の待ち合わせ(?)を行いたいのですが

スレッドA {
 while(1) {
  SetEvent(hEvent);
  処理A;
  処理Bの終了待ち;
  処理C;
 }
}

スレッドB {
 while(1) {
  WaitForSingleObject(hEvent);
  処理B;
  ResetEvent(hEvent);
 }
}
WaitForSingleObjectの逆(非シグナル状態になるまで待機)みたいなのがあると
hEvent一つで済む気がするのですが、やはり処理Bの完了通知用のイベントを、
別途用意しないといけないのでしょうか?

822 :デフォルトの名無しさん:2005/07/23(土) 11:19:04
>>813
NT系だとBeep使った場合POST時に使われるビープのほうが鳴るはずだが‥‥(環境: 440BX + YMF724PCI Win2k)

823 :デフォルトの名無しさん:2005/07/23(土) 12:54:59
>>821
スレッドを2つにする理由がさっぱりわからん。
スレッドAで処理A、処理B、処理Cの順で処理すればいいように思える。
それはさておき、少しオーバーヘッドが大きくても構わないなら、
while (WaitForSingleObject(hEvent, 0) == WAIT_OBJECT_0)
Sleep(10);
って事でイベント1つだけにする事はできる。
しかし、タイムアウトを考慮すると却って面倒なだけだろう。

824 :デフォルトの名無しさん:2005/07/23(土) 13:26:10
>>823
処理Aと処理Bを平行で処理させたいんじゃないの?
個人的には処理A用のスレッドと処理B用のスレッドを作って、
それぞれのイベントを待ってから処理Cを行うが。

825 :デフォルトの名無しさん:2005/07/23(土) 14:46:03
>>812
mmapなんてAPIはWindowsにはありません
MapViewOfFileでそんなことができるのかどうかは知りません

826 :779:2005/07/23(土) 15:23:21
バイナリファイルを結合する標準関数ってありますか?

827 :デフォルトの名無しさん:2005/07/23(土) 15:34:56
>>826
fopenのときに第2引数にaを指定すること。

828 :デフォルトの名無しさん:2005/07/23(土) 15:37:58
最後までseekすりゃいいだけだけどね。

829 :デフォルトの名無しさん:2005/07/23(土) 15:38:19
バイナリファイルを結合する関数、じゃねぇなそれ
まぁ、バイナリファイルを結合する処理を作れる関数、だけどな

830 :デフォルトの名無しさん:2005/07/23(土) 15:41:46
NtCreateFileにはfopenの"a"パラメータ相当の機能があるのに
CreateFileから使えないのはどうして? POSIXサブシステムで使うため?

831 :デフォルトの名無しさん:2005/07/23(土) 15:54:16
>>830
CreateFile()ができたときにはNtCreateFile()はなかったから。
NtCreateFile()にその機能があるのは、POSIX合わせかもね。しらんけど。

832 :デフォルトの名無しさん:2005/07/23(土) 15:56:55
>>831
本当に? CreateFileってWin16にはなかったAPIでしょ?

833 :デフォルトの名無しさん:2005/07/23(土) 15:58:42
おいおい、名前見れば NtCreateFile が後にできたくらい想像つくだろ

834 :デフォルトの名無しさん:2005/07/23(土) 16:06:02
>>832
Win16に無かったなぞなんの理由にもならんのじゃが

835 :デフォルトの名無しさん:2005/07/23(土) 16:14:42
>>833
それこそなんの理由にもなってない
>>834
Win16にあったAPIはWindows NT以前の16ビットのWindowsから存在してたけど
Win32用に新規に設計されたAPIはWindows NTが最初だからNt〜と同時のはず

836 :デフォルトの名無しさん:2005/07/23(土) 16:24:22
まさかだけど
http://msdn.microsoft.com/library/en-us/devnotes/winprog/ntcreatefile.asp
を見てNtCreateFileはWindows 2000が初出だとか思ってないよね
非公開APIとしては遥か以前から存在してた

837 :デフォルトの名無しさん:2005/07/23(土) 16:26:09
CreateFile より前からか?

838 :デフォルトの名無しさん:2005/07/23(土) 16:28:58
>>837
だから「同時」って言ってるやん。
Windows NT 3.1の現物は持ってないからあったとは断言できないけど
POSIX合わせならNT 3.1から存在してないとつじつまが合わないし

839 :デフォルトの名無しさん:2005/07/23(土) 16:34:44
確証も無いのに否定だけされてもなぁ・・・

840 :デフォルトの名無しさん:2005/07/23(土) 16:36:58
だったらむしろ「CreateFile()ができたとき」が正確にいつでNtCreateFile()は
いつなのか>>831に聞いてみたいんだけど。
それだけ自信満々に言うんだから当然知ってるんだよね

841 :デフォルトの名無しさん:2005/07/23(土) 16:40:08
>>831を見ると、「同時」と言ってるようには見えないが。

842 :デフォルトの名無しさん:2005/07/23(土) 16:42:30
「同時でない」って言えるからにはいつできたか知ってるんでしょ、って意味なんだけど。

843 :デフォルトの名無しさん:2005/07/23(土) 16:43:25
>>836
非公開APIってことはあとから仕様が変わったってこともありえるのでは?
昔(つまりCreateFileができる前)は追記仕様がなかったからCreateFileにもなくて
後々追記機能が追加されてから公開APIになったとか

POSIXうんぬんはopenがその仕様をサポートしてればいいわけだから
あんまり関係ないきがする

844 :デフォルトの名無しさん:2005/07/23(土) 16:48:53
>>843
ZwCreateFileの仕様が変わったって話は聞かないけどなあ
やっぱりNT 3.1 DDKは手元にないから確証はないけど

アトミックな追記はシステムコールレベルでサポートしてないとできないでしょ?

845 :831:2005/07/23(土) 17:02:02
>>840
んな自信満々に断定されても困るんだが。

俺だってSDKに書いてある以上のことは知らんよ。つまり、winternl.hにヘッダに
#if (_WIN32_WINNT >= 0x0500)
と書いてある以上、NtCreateFile()がCreateFile()より古いなんて証拠は
(少なくとも俺の手元には)ない。

NtCreateFile()が非公開APIとして存在してたこと自体を疑う気はないが(なにせMSだ)、
非公開APIと公開APIでどっちが先に成立したか?なんて水掛け論には俺は興味はないな。

846 :デフォルトの名無しさん:2005/07/23(土) 17:03:40
>>844
>アトミックな追記

そうそう、これが重要だな。
単にオープンして末尾にseekするのと同じではない。

847 :デフォルトの名無しさん:2005/07/23(土) 17:04:27
> アトミックな追記はシステムコールレベルでサポートしてないとできないでしょ?
なんか意味不明になってるけど
NtCreateFileが追記をサポートしてなかったとしたら、どうやってopenで
追記を(アトミックに)サポートできますか? って話

848 :デフォルトの名無しさん:2005/07/23(土) 17:07:12
>>845
すまん
確証もないのに否定されてもとか言われちゃったから
確証ないのはお互い様でしょうがと言いたかっただけ

849 :デフォルトの名無しさん:2005/07/23(土) 17:13:22
NtCreateFileは今でも非公開APIなんだがな

850 :デフォルトの名無しさん:2005/07/23(土) 17:18:05
NtCreateFileはよう知らんが、CreateFileがNT3.1、Win95から有るのは確実

851 :デフォルトの名無しさん:2005/07/23(土) 17:19:53
>>849
>>836は?

852 :デフォルトの名無しさん:2005/07/23(土) 17:21:29
は?
>>836は非公開として遥か以前からあった言うてるだけ
>>849は今でも非公開言うてるだけ


853 :デフォルトの名無しさん:2005/07/23(土) 17:23:40
>>852
>>836にあるのは「公開」とは言わないの?
だったら「公開」の定義は?

854 :831:2005/07/23(土) 17:30:04
「非公開」というよりは、「使用非推奨」くらいが適切

855 :デフォルトの名無しさん:2005/07/23(土) 17:32:47
なんか名前残ってた(死
暇だったら実際に winternl.h 眺めてみると面白いぞ。ご丁寧に使い方まで書いてある。

856 :デフォルトの名無しさん:2005/07/23(土) 17:44:14
winternl.hのプロトタイプにWINAPIだかNTAPIだかが抜けてるから
そのまま使うとスタックエラーでコケるという問題は最新のPlatform SDKでも
直ってないな。
いくら使用非推奨でもこれはあんまりだと思う

857 :デフォルトの名無しさん:2005/07/23(土) 18:11:53
851は836のリンク先にあるように、
今ではMSが普通にNtCreateFileの情報を公開してるのでは?といいたいのでは。
852の突っ込みの意味が分からない。。。

858 :デフォルトの名無しさん:2005/07/23(土) 18:25:55
>>836は遥か昔からあったとか言うけどさ、実際いつからあったんだよ?
MSDN見る限りじゃもっとも古いOSは2000だしよ・・・
証拠もなしに2000が初出じゃないと言われてもなぁ

859 :デフォルトの名無しさん:2005/07/23(土) 18:39:28
とりあえずNT 4.0には100%確実にあった。仕様も同じ。
だからMSDNの「2000が初出」という情報はあてにならない。
仕様の変わったAPIも一部にあるから(そのためリソースキットの
NT4用tlistが動かなくなったり)2000で区切っていると思われ

860 :デフォルトの名無しさん:2005/07/23(土) 20:19:44
NT 3.1リソースキットを漁ってみたところ、NTDLL.DLLにリンクしているものは
いくつかあったけどNtCreateFileを使っているものは見つけられなかった。残念

861 :デフォルトの名無しさん:2005/07/23(土) 20:48:52
サービスパックからNT 3.51 SP5にもあったことを確認。
もっと古いのはないかな

862 :デフォルトの名無しさん:2005/07/24(日) 01:54:23
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/using_thread_local_storage.asp

このページのサンプルプログラムをコピペ & ビルドして動かしてみたのですが、おかしな
結果を得ました。結果は次の出力です。

thread -531845: lpvData=53000c
common: thread -531845: lpvData=53000c
common: thread -531845: lpvData=53000c
thread -531049: lpvData=530110
thread -530525: lpvData=530214
common: thread -530525: lpvData=530214
thread -530525: lpvData=530214
thread -525985: lpvData=530318
common: thread -525985: lpvData=530318
common: thread -531049: lpvData=530110

プライマリスレッドを除くと、スレッドは4つ作られ、そのそれぞれのスレッドは
printf を2回呼び出すので、4 * 2 = 8行の出力となるはずだと思うのですが、
結果は見ての通り10行の出力です。これはなぜでしょうか。

863 :デフォルトの名無しさん:2005/07/24(日) 02:22:47
>>862
多分、マルチスレッドなのに、スレッドセーフなライブラリ関数(printf)が使われてないから。
コンパイルオプションの問題だと思う。
libc.libじゃだめで、libcmt.libを使え。

cl sample.cpp /MT

864 :862:2005/07/24(日) 02:49:18
>>863
ありがとうございます。/MT オプションで期待する結果が得られました。
苦労した問題なのに一発で答えが帰ってくると、すごいなと思わずにいられません。

865 :デフォルトの名無しさん:2005/07/24(日) 02:59:26
>>864
強引にprintfを排他制御するという方法もある。
クリティカルセクションとかセマフォとか。

866 :デフォルトの名無しさん:2005/07/24(日) 13:04:13
>>865
車輪のry

867 :デフォルトの名無しさん:2005/07/24(日) 13:33:37
>>866
それはそれで必要なんだが・・・。

868 :デフォルトの名無しさん:2005/07/24(日) 13:36:15
>>867
まぁこの業界の流行の言葉は何かのアーキテクチャに新しい名前を付けて
新技術でござい、ということもあるからな。
商売やっていくには欠かせませんなw

869 :デフォルトの名無しさん:2005/07/24(日) 19:41:22
>>867
リンクさせるCライブラリが間違ってる時点で(ry

870 :デフォルトの名無しさん:2005/07/24(日) 20:09:07
すべてのライブラリがマルチスレッド対応しているとは限らないってことだろ
学習目的ならprintfで車輪の再発明したってよかろうし

871 :デフォルトの名無しさん:2005/07/24(日) 20:35:18
>>870
MSVCのC標準ライブラリ(libcmt.lib)、C++標準ライブラリ(libcpmt.lib)の中で
スレッドセーフじゃない関数があるの?
それって何?

872 :デフォルトの名無しさん:2005/07/24(日) 20:59:33
テンプレ
学習目的なら○○したっていいだろう

873 :デフォルトの名無しさん:2005/07/24(日) 21:13:28
>すべてのライブラリがマルチスレッド対応しているとは限らないってことだろ
これ気になる。
詳細よろしく!

874 :デフォルトの名無しさん:2005/07/24(日) 22:38:40
商用や標準ライブラリなら兎も角、
個人で配布してるような小規模・特定目的のライブラリならいちいち対応してないだろ。

875 :デフォルトの名無しさん:2005/07/24(日) 22:43:38
>>871
標準ライブラリなんて一言も言ってないわけだが

876 :デフォルトの名無しさん:2005/07/24(日) 22:55:52
>>875
じゃあ、もともとそんなこと言うな。紛らわしいだろ。
心配してくれなくても、
普通、自分で作った関数で排他制御しなきゃならなくなるから
そんなことならわざわざ忠告してもらわなくてかまわん。

単にいちゃもんつけただけじゃん。

877 :デフォルトの名無しさん:2005/07/24(日) 23:02:56
「己の誤りを認めたくないあまり恥の上塗りをする輩」を囲んで楽しむスレはここですか?

878 :デフォルトの名無しさん:2005/07/24(日) 23:09:28
>>874
おまえ、さいてーだな。

879 :デフォルトの名無しさん:2005/07/24(日) 23:20:45
すみません質問があるのですが

アプリケーションの途中でWINDOWS の設定を変更して、
アプリケーション終了時に前の設定に戻してから終了させるような処理を
作りたいのですが。
アプリケーションの実行中に、PCの電源を落とすなどした場合、
終了時の処理が行えず、実行前の設定に戻せない状態ができてしまいます。

故意に電源を落とすなどの行為をアプリケーション側で感知して、
直前に終了処理を行うというようなことは、APIを使ってできるのでしょうか?


880 :デフォルトの名無しさん:2005/07/24(日) 23:22:55
>>879
可能ですがその前にポリシーのお勉強をしてほうがいいかもしれません。

881 :デフォルトの名無しさん:2005/07/24(日) 23:27:02
>>879
そんなことで悩む前に、そんな馬鹿なことするのはやめなさい。
大抵のことは設定なんて変更しなくても実現できるから。

882 :デフォルトの名無しさん:2005/07/24(日) 23:31:25
>>879
Windowsの終了するときにはメッセージがやってくる。
でも、プロセスが直接ころされたり、ブルースクリーンなんかでPCの電源を直接落とされたりしたときにはどうしようもない。

883 :879:2005/07/24(日) 23:43:05
>>880-882
なるほど、ありがとうございます。

具体的に言いますと、SHIFT を5回連打した時に出る固定キー機能をころしたく
起動時に、固定キー機能無効と前設定保持、デストロイ時に前設定復帰のような感じで
やってみたのですが、電源ボタン長押しで電源を切るとデストロイ時の処理が行われて
いないようなのです。

ちょっと↑のような考え方で悩むのは辞めて、固定キー機能をころす別の方法を
探ってみたいと思います。
ありがとうございました。

884 :デフォルトの名無しさん:2005/07/24(日) 23:45:02
そもそも何でそんなことしたいんだ

885 :デフォルトの名無しさん:2005/07/24(日) 23:47:59
アプリにSHIFT を5回連打する操作があるとか?

886 :デフォルトの名無しさん:2005/07/24(日) 23:49:45
キーフックしてシフトキーがそもそも5回連打することがないようにするとか?

887 :879:2005/07/24(日) 23:51:11
フルスクリーンで動く、キーボード入力練習のソフトなんですが、
固定キーウィンドウが出てしまうと、練習中にスコープが持ってかれるので
なんか嫌だそうです。

888 :デフォルトの名無しさん:2005/07/24(日) 23:51:25
>>883
アプリケーションのヘルプリファレンスに説明をつけるなどして、
ユーザー自身に設定をお願いするのが正しい。
アプリケーション起動時にTip of The Day表示で設定方法を説明するとか。

889 :879:2005/07/24(日) 23:53:17
>>886
有難うございます。キーフックですか?
調べてみます。

890 :879:2005/07/24(日) 23:55:44
>>888
ありがとうございます。検討してみます。

891 :デフォルトの名無しさん:2005/07/25(月) 05:10:21
質問です。
APIHookを活用して、ファイル操作、レジストリ操作の監視や、ソケット操作の監視を行いたいと考えています。
APIHookへの手段としては、メッセージフックによりDLLを注入させ、インポートテーブルの書き換えを行おうと思っています。
ですが、アプリケーションの中には、起動後にLoadModuleとGetProcAddress等で動的に関数を得るものがあります。
その為、それらの関数については、APIHookによって、偽の関数アドレスを返すようにしなければならないと思います。

ここで問題が発生しました。
以下のプログラム(有名なwinnyです。)
http://up.dojin.com/up/img/subupload.cgi/0012.exe
のインポートテーブルをDependencyWalkerで確認したところ、
GetModuleHandleA と MessageBoxA しか呼ばれないことになっています。
しかしそんなわけはありません。
通信を行うためにはws2_32.dllがロードされているはずだと思うのです。
一体、このプログラムはどうやって、LoadModule等、必要と思われる関数を隠蔽しているのでしょうか?
matcodeのAPISpy32で動作を覗いてみようと思いましたが、
クラック対策と思われるCRCチェックにより、実行に写れませんでした。

私は、AdvancedWindowsは高価なため、申し訳ないのですがまだ読んでいません。
ですが、どうか、ご教授いただけませんでしょうか?よろしくお願いいたします。

892 :デフォルトの名無しさん:2005/07/25(月) 05:39:39
ヒント: packer

893 :デフォルトの名無しさん:2005/07/25(月) 05:50:07
>>891
tElockだったかなぁ。(昔はUPX)
海外のクラック防止ツール(packer)で暗号化されている。
unpackerという種類のソフトで解除できるかもしれない。

インポートテーブルは、そのクラック防止ツールによって
実行時に確保したメモリ領域に暗号解除して生成などと言ったことをしている。

894 :デフォルトの名無しさん:2005/07/25(月) 06:41:43
>>892
>>893
どうもありがとうございます。
unpack-telockを使ってみました。
凄い、これがwinny.exeの本体なのですね。

しかし・・、このようにpackerにより圧縮又は暗号化されたプログラムに対し
(unpackerを使わずに)
それ自体の解凍又は復号化時に、動的にインポートテーブルのアドレスを得る、
といったことをするのは、不可能に近いでしょうか?
もしそうなら、私はpackerにより処理されたプログラムに対しては、今回は諦めようと思います。

ただ、そういった特殊なプログラムにも対応する場合は、デバイスドライバ?か何かによってAPIの監視を行うことが出来るのでしょうか?

895 :デフォルトの名無しさん:2005/07/25(月) 07:37:58
>>894
どの時点で解凍終了かわかれば何とかなりそうだけど
そのためには自分で解凍しないとだめだと思われ

896 :デフォルトの名無しさん:2005/07/25(月) 11:57:44
エクスプローラの右クリックで『名前の変更』ってありますよね?
あれと同じようにユーザーに名前を変更させる状態にするにはどうすればいいですか?
つい先日同じ質問をしたら、

HANDLE hWnd = エクスプローラの子SysListView32のハンドル。
PostMessage(hWnd, WM_ACTIVATE, MAKEWORD(WA_CLICKACTIVE, 0), 0);
PostMessage(hWnd, WM_KEYDOWN, VK_F2, 0);

これで出来るという答えが返ってきて、試してみたのですが、出来ません。

よろしくお願いします。

897 :896:2005/07/25(月) 12:00:44
ちなみに、ツリービュー上で名前の変更をさせたいので、ハンドルはツリービューのものとノードのものとノードのリストのものとで試しましたが全部だめでした。

898 :デフォルトの名無しさん:2005/07/25(月) 12:10:57
>>897
別に難しく考える必要はない。
所定の位置にテキストボックスを配置し、必要なくなったら消す、ただそれだけの話。

899 :デフォルトの名無しさん:2005/07/25(月) 12:15:17
>>896
TreeView_EditLabel

900 :896:2005/07/25(月) 12:42:13
>>899

TreeView_EditLabel( TreeView1->Handle, TreeView_GetSelection(TreeView1->Handle) );

これで出来ました。ありがとうございました。

901 :デフォルトの名無しさん:2005/07/25(月) 12:48:18
>>896-900

902 :デフォルトの名無しさん:2005/07/25(月) 18:23:43
ディレクトリの変更を監視する
::ReadDirectoryChangesW()
についてなんですが,
これを呼び出すと,監視対象の変更が実際に起きなければ
制御が返りません.

ところがあるイヴェントが起きたときに
この関数を終わらす必要があるのですが
何かうまい方法はありますか?

もちろん,監視対象のディレクトリをわざと変更させれば
終了するのですがそれをしてはいけない状況なので
ただ何も変えずに終わらせたいのです.


903 :デフォルトの名無しさん:2005/07/25(月) 18:26:59
APIHookでSetCurrentDirectoryを無効にする

904 :デフォルトの名無しさん:2005/07/25(月) 18:47:30
>>902
非同期にすればいいのでは?

905 :デフォルトの名無しさん:2005/07/25(月) 18:48:40
>>894
他プロセスのメモリ情報とかは取得できるから、
たとえばWinnyが起動したあとでAPIをフックするということは可能かもしれない。
ただし、APIをフックする前にAPIを使われるかもとか完璧にやるには難しそう。
生成したインポートテーブルの書き換えを検出するpackerもある見たいだし、
起動した後のフックするタイミングをいつにするかとか
汎用的なツールにするとしたらpackerやプログラムごとに
いろいろカスタマイズできるようなツールにしなくてはいけないかも。
まあ完璧じゃなくてもある程度でも、それなりに使えるとは思うけどね。

906 :902:2005/07/25(月) 18:52:04
>>904
どのようにすればいいのですか?

907 :デフォルトの名無しさん:2005/07/25(月) 19:18:30
>>906
試してないけどこんな感じ?
面倒だから省略しまくっているけど。

HANDLE hEvents[2] ;

//ReadDirectoryChangesW()の通知を待つイベントハンドル
hEvents[0] = CreatEvent(NULL, FALSE, FALSE, NULL) ;
//待機を終わらすべき「あるイヴェント」がおきたときにシグナルになるイベントハンドル
hEvents[1] = CreateEvent(NULL, FALSE, FALSE, "SomeEvent") ;

OVERLAPPED ol ;
memset(&ol, 0, sizeof(ol)) ;
ol.hEvent = hEvents[0] ;
DWORD waitret ;


ReadDirectoryChangesW(hDir, buf, buflen, TRUE, FILE_NOTIFY_CHANGE_CREATION, &nRet, &ol, NULL) ;
waitret = WaitForMultipleObjects(2, hEvents, FALSE, INFINITE) ;
waitret -= WAIT_OBJECT_0 ;
//waitretは配列の何番目の要素がシグナルになったかをさす。
//この場合、0ならReadDirectoryChangesW()がシグナル、1なら「あるイヴェント」がおきた。
//何かの処理。。。


908 :デフォルトの名無しさん:2005/07/25(月) 21:11:15
>>894
> デバイスドライバ?か何かによってAPIの監視を行うことが出来るのでしょうか?
アンチウィルスソフトやアンチスパイウェアソフトが(さらにはステルス型のウィルスや
スパイウェアも)やってるな。

909 :デフォルトの名無しさん:2005/07/25(月) 23:41:19
>>891
↓ここのスレで作られているツールが参考になると思う。

WinnyからHDDを守るツールを作ろう Part1.3
http://tmp5.2ch.net/test/read.cgi/download/1116770018/

あまり具体的なことは書いていないが、
ウィンドウが作られたタイミングを検知してフックしているそうだ。

910 :デフォルトの名無しさん:2005/07/26(火) 11:48:55
ウインドウプロシージャの使い方がわからなくて質問させていただきます。
プログラムの動作は 画面全体を真っ黒なウィンドウで覆い、
ファイルからデータを完全に読み込んだ後、計算を行います。
計算には数分かかるため、計算途中でウィンドウ上でクリックすることで
プログラムを終了させるようにしたいのです。
下記のプログラムでは計算終了後にプログラムが終了するようになっています。
どうかご指導よろしくお願いいたします。


LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
void keisan (HWND);

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpCmdLine, int nCmdShow) {
(省略)
hwnd = CreateWindow ("BlackWindow", NULL,WS_POPUP, 0, 0, W, H, HWND_DESKTOP, NULL, hInstance, NULL);
keisan (hwnd);
while (GetMessage (&msg, NULL, 0, 0)) {TranslateMessage (&msg);DispatchMessage (&msg); }
return 0;
}

void keisan (HWND hwnd) {
(略 ここで一気にファイルからデータを読み込んで
(  後はひたすら数分間計算と表示
}

LRESULT CALLBACK WndProc (HWND hwndBlack, UINT msg, WPARAM wp, LPARAM lp) {
switch (msg) {
case WM_LBUTTONDOWN: PostQuitMessage (0); return 0;//* 画面上を左クリックで終了
}
return DefWindowProc (hwndBlack, msg, wp, lp);
}

911 :デフォルトの名無しさん:2005/07/26(火) 12:16:13
>>910
演算処理を別スレッドにして、何らかの方法でループ脱出を行なえるようにする。
本スレッドの方では普通にウィンドウを作り、イベント発生で別スレッドに終了を通知する。
ぶっちゃけ面倒なら、別スレッドを強制終了してしまってもいいかも知らん。

912 :デフォルトの名無しさん:2005/07/26(火) 13:14:56
質問です。
デバッグ用にAllocConsoleでコンソールを出してそこにデバッグ情報を出力しているのですが、
間違ってコンソールを閉じてしまうとプロセスが終了してしまいます。
これの対策で、コンソールウィンドウのxボタンをSetWindowLongで無効にしようとしたのですが失敗してしまいます。
GetLastErrorでは アクセスが拒否されました と出ました。
これの回避法、または他にコンソールウィンドウを閉じなくする方法があればご教授願います。

913 :デフォルトの名無しさん:2005/07/26(火) 13:56:24
たぶんデバッグの方法を変えたほうが効率いいよ。

914 :デフォルトの名無しさん:2005/07/26(火) 15:53:10
OutputDebugString

915 :912:2005/07/26(火) 17:00:26
普通に使っていてデバッガを起動してないときも気軽に状況を確認できるし、
大量の情報を出力するのにOutputDebugStringは不便なのでコンソールを使っています。

916 :デフォルトの名無しさん:2005/07/26(火) 17:15:18
自分で作ったウインドウに出せばいいじゃん

917 :906:2005/07/26(火) 18:18:21
>>907

おっしゃる通りに書いて

::SetEvent(hEvents[0]);
::SetEvent(hEvents[1]);

としたんですが,やはり

::ReadDirectoryChangesW()

が終わってくれません.
監視ファイルを変更すると終わるんですが…

なぜなんでしょうか?


918 :デフォルトの名無しさん:2005/07/26(火) 19:00:31
> 普通に使っていてデバッガを起動してないときも気軽に状況を確認できるし、
ヒント: DebugView

919 :デフォルトの名無しさん:2005/07/26(火) 19:41:02
>>917
スレッド作って、そいつに監視させれば?

920 :デフォルトの名無しさん:2005/07/26(火) 19:48:03
hEvents[0]がシグナルされてないのにReadDirectoryChangesWを呼び出しちゃダメだよ

921 :デフォルトの名無しさん:2005/07/26(火) 19:49:10
つーか自分で
::SetEvent(hEvents[0]);
したらダメだろ。変更があったときReadDirectoryChangesWが設定してくれるの。
意味分かってる?

922 :デフォルトの名無しさん:2005/07/26(火) 19:56:10
ゲットシスメニューの逆襲からではあかんの?
>コンソール

923 :デフォルトの名無しさん:2005/07/26(火) 20:31:09
コンソールの方が不便でないかい?
スクロール・アウトするし

924 :912:2005/07/26(火) 22:39:24
>>922
dくす これだけでできました
hMenu = GetSystemMenu(hWnd, false);
RemoveMenu(hMenu, SC_CLOSE, MF_BYCOMMAND);

925 :912:2005/07/26(火) 22:40:05
>>922
dくす これだけでできました
hMenu = GetSystemMenu(hWnd, false);
RemoveMenu(hMenu, SC_CLOSE, MF_BYCOMMAND);

926 :デフォルトの名無しさん:2005/07/26(火) 23:07:38
やっと出てきたと思ったら連投 orz

927 :906:2005/07/27(水) 11:09:32
すいません
やっぱしわからないんですが

>>907 のコードで
なぜ hEvents[1] をシグナルにすると
即座に ReadDirectoryChangesW() が終了するんですか?
# 実行したところ何も終わりません
解説ねがえないでしょうか?

また,スレッド使えというのがありましたが
スレッドは最初から使っているんです
イヴェントが起きたらスレッドを強制終了しろ,ということでしょうか?
それならばできるかもしれませんが
かなり乱暴な気がするんですが


928 :デフォルトの名無しさん:2005/07/27(水) 12:09:57
強制終了させなくても「終わってね(はぁと」という合図を出して
スレッドがその合図を見て終わるようにすればいいじゃない。

929 :デフォルトの名無しさん:2005/07/27(水) 12:41:24
APIコールから戻ってこない、というのが発端なわけだが。

930 :515:2005/07/27(水) 13:00:48
上下反転、90度回転してメモリDCから表示用のDCに転送したい
のですが、デバイスコンテキストを回転させてBitBltするようなAPI
はありますか?

931 :デフォルトの名無しさん:2005/07/27(水) 13:24:11
PlgBlt

932 :デフォルトの名無しさん:2005/07/27(水) 15:41:37
>>906
公式のドキュメントにあるようなことを一々説明するのは質問者をバカにしている
みたいなので嫌なんだけど・・・

OVERLAPPED ol;
ol.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL)

と OVERLAPPED 構造体を用意しておいて、FILE_FLAGS_OVERLAPPED 付きで
作成した hDirectory と供に ReadDirectoryChanges を呼ぶと、即座に帰ってきて、
帰り値はエラー、エラーコード(GetLastErrorで得られる)は、ERROR_IO_PENDING
になる(と思う)。

んでその後 WaitForMultipleObject で、任意の hEvent と先の ol.hEvent の2つを
待つと、ReadDirectoryChanges が完了したとき、あるいは任意の hEvent が他の
スレッドからsetされたとき、のいずれかの場合にwaitが完了する。

っていうか >>907 にサンプルコードがあるから、どの行がわからないのかを書いて
みると良いと思う。

933 :906:2005/07/27(水) 15:58:33
>>932
> と OVERLAPPED 構造体を用意しておいて、FILE_FLAGS_OVERLAPPED 付きで
> 作成した hDirectory と供に ReadDirectoryChanges を呼ぶと、即座に帰ってきて、
> 帰り値はエラー、エラーコード(GetLastErrorで得られる)は、ERROR_IO_PENDING
> になる(と思う)。

実験したところ
こうはならずに
ReadDirectoryChangesW() は値を返しません
監視ファイルに変更がありしだい返します
これは &ol を NULL とした場合と同じ動作です

934 :デフォルトの名無しさん:2005/07/27(水) 16:02:16
>>932
ReadDirectoryChangesW() をわざと失敗させて
WaitForMultipleObject() でイベントを
待つようにしたのが >>907 ということでしょうか?

この方法で ReadDirectoryChangesW() の
本来の機能である監視ファイルの変更情報を
とることができるのでしょうか?

935 :デフォルトの名無しさん:2005/07/27(水) 17:04:05
>>933
漏れも実験したけどドキュメントにあるようにちゃんと動作したよ。
CreateFileするときに FILE_FLAG_OVERLAPPED を忘れてるんだろ。

936 :デフォルトの名無しさん:2005/07/27(水) 17:09:22
>>933
ほらサンプルだよ。っていうか人の説明とかドキュメントの文書が読めないなら、
ここでいくら質問してもムダなような気が・・・

HANDLE hDir = CreateFile("D:\\", FILE_LIST_DIRECTORY,
 FILE_SHARE_READ|FILE_SHARE_DELETE, NULL, OPEN_EXISTING,
 FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED , NULL);

OVERLAPPED ol;
ol.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);

// 非同期に実行。すぐ帰ってくる。
BYTE buffer[65536];
DWORD dwByte;
BOOL bRet = ReadDirectoryChangesW( hDir, buffer, sizeof(buffer), FALSE,
 FILE_NOTIFY_CHANGE_LAST_WRITE, &dwByte, &ol, NULL);

// 完了を待つ。他スレッドからの停止要求を受け取りたいなら、
// WaitForMultipleObjectsで。
::WaitForSingleObject( ol.hEvent, INFINITE );

// 完了した ReadDirectoryChangesW の結果を取得
bRet = GetOverlappedResult(hDir, &ol, &dwByte, TRUE );

937 :デフォルトの名無しさん:2005/07/27(水) 17:13:07
>>935
まさにその通りでした
ありがとうございます

938 :デフォルトの名無しさん:2005/07/27(水) 17:33:57
どうしてこう、自分が言われた通りやってないだけなのに、できませんできません言う無能ばっかり・・・

939 :デフォルトの名無しさん:2005/07/27(水) 20:21:35
教えて君で申し訳ございませんがご教授ください。

Vb6.0のPrinterオブジェクトを使い横印刷の設定のまま
縦に文字を書きたいのですが、うまくいきません。

CreatFontで90度の設定を行い、TextOutで出力しているのですが、
TextOutのX,Y座標にはVBのどの単位の座標位置を入れればいいのでしょうか?
ちなみに他の描画はスケールをミリに変えて描画を行っております。
ミリの単位をTWIPに変換してX,Y座標に入れたのですが駄目みたいでした。

ご教授お願いいたします。

940 :デフォルトの名無しさん:2005/07/27(水) 21:20:06
「どう」うまくいかねんだ。

941 :デフォルトの名無しさん:2005/07/27(水) 21:25:05
>>940
左上を始点として値を渡しているのですがずれて表示されています。

もちろんオブジェクトの解放も他の描画もうまくいっているのですが
この部分だけがずれてる感じです。

942 :デフォルトの名無しさん:2005/07/27(水) 21:35:30
「どう」ずれて(ry

縦書きの場合は行(フォント)の高さ分左にずれて見えるのは仕様だ。

943 :デフォルトの名無しさん:2005/07/28(木) 02:01:43
質問です。
同一CPU上でアカウントAからアカウントBで動いている、COMサーバーに
接続することは可能ですか?

やってみた事:
1.RunAsの設定変更
 上手くいくが、COMサーバーの動くアカウントが固定になってしまう。

2.ImpersonateLoggedOnUser後、CoCreateInstance
 失敗。アカウントAでCOMサーバーが起動する。

3.CoCreateInstanceExでユーザー名とか指定。
 失敗。アカウントAでCOMサーバーが起動する。

944 :デフォルトの名無しさん:2005/07/28(木) 02:04:35
まだ本も読んでないしヘルプも読んでないしネットで検索もしてないのですが
動きません。
丸投げしますので丁寧に答えてください。
あと教えて君ですいません。


945 :デフォルトの名無しさん:2005/07/28(木) 02:56:52
>>943
セキュリティ関連しらべろ。CoInitializeSecurityとか
あとそのサーバはEXEかサービスかDLLか

946 :デフォルトの名無しさん:2005/07/28(木) 03:22:23
>>845
サンクス。
明日、COMのセキュリティがらみをしらべなおしてみます。

なお、サーバーはEXEです。


947 :945:2005/07/28(木) 04:30:00
>同一CPU上でアカウントAからアカウントBで動いている、COMサーバーに
>接続することは可能ですか?
これは認証が問題なのかCOMサーバースレッドの権限が問題なのかどっち?
多分後者だと思うけどスレッドのユーザが問題でプロセスのユーザは問題ではないとおもうのだが。
DCOM関連の本とか見ればわかると思う。

948 :デフォルトの名無しさん:2005/07/28(木) 07:45:27
strftimeと同じことをするWinAPI関数はありますか?

949 :デフォルトの名無しさん:2005/07/28(木) 08:11:14
>>948
ないでしょ、strftime()はstruct tm使う時点でモロにCRTの世界だもの

950 :デフォルトの名無しさん:2005/07/28(木) 08:19:07
>>949
ありがとうございます。
strftimeはそれほど難しくなさそうなので自前で作成します。

951 :デフォルトの名無しさん:2005/07/28(木) 08:37:31
>>948>>950
CRT使っちゃ駄目なのか?

952 :デフォルトの名無しさん:2005/07/28(木) 11:22:35
DrawFrameControlを使ってcheckboxを描画しようとしています。
SDKが描画する□(チェックマーク)のデフォルトサイズが
取得できれば参照したいのですが、そういうAPIはありますか?

953 :デフォルトの名無しさん:2005/07/28(木) 11:29:12
GetWindowRect

954 :デフォルトの名無しさん:2005/07/28(木) 11:57:36
>>953
ありがとう。


955 :デフォルトの名無しさん:2005/07/28(木) 12:00:06
嘘に礼言ってどうする。

956 :デフォルトの名無しさん:2005/07/28(木) 12:00:40
違う気が・・・

957 :デフォルトの名無しさん:2005/07/28(木) 12:12:27
騙されたと気がついた俺が帰ってきましたよ。
ちと悩んでしまったじゃないかorz

958 :デフォルトの名無しさん:2005/07/28(木) 13:33:52
>>957
お帰り。↓こういうのがあるよ。
ttp://forums.belution.com/ja/vc/000/247/40.shtml

959 :デフォルトの名無しさん:2005/07/28(木) 15:04:21
>>958
ありがd。
やっぱ□とテキストの間の幅が不明なのね。
ついでだが、他の問題も解決できそうなヒントも見つかってよかったよ。

960 :デフォルトの名無しさん:2005/07/28(木) 19:16:48
なんだ結局GetWindowRectかよ

961 :デフォルトの名無しさん:2005/07/28(木) 19:17:48
>>948,950
スレに沿って言うならば、Win32なら、CRTの古臭いtime_tなんぞ使わずに
SYSTEMTIME,FILETIME,あるいはOLE VARIANTのVT_DATEでも使えばよかろう

最後のものに関してはVarFormatDateTime()やVarDateFromStr()で
パースやフォーマットができるし、相互変換のAPIもある。

962 :デフォルトの名無しさん:2005/07/28(木) 22:37:31
>>951,>>961
VarFormatDateTime、VarDateFromStrは使い方がよくわからなかったので素直にmsvcrt.dllの関数を使うことにします。
ありがとうございました。

963 :デフォルトの名無しさん:2005/07/29(金) 09:46:57
>>944
あれをこうすれば動くよ。

964 :デフォルトの名無しさん:2005/07/29(金) 16:36:38
マウスカーソルの位置で一番手前にあるアプリケーションがエクスプローラだったら、エクスプローラが表示しているディレクトリのアドレスを取得するにはどうすればいいですか?
今作っているツールで、ツール上のアイコンからエクスプローラに落とす処理が必要なのです。
コピーする先のアドレスがわからないとコピー出来ません。

よろしくお願いします。

965 :デフォルトの名無しさん:2005/07/29(金) 17:03:18
>>964
いま超能力者呼んで来るからちょっと待ってて

966 :デフォルトの名無しさん:2005/07/29(金) 17:08:24
>>965

待ってる。

967 :デフォルトの名無しさん:2005/07/29(金) 18:27:36
>>964
お前は作っているツールからエクスプローラへドラッグアンドドロップできるようにするにはどうしたらいいのか
と質問していると俺は理解した。
OLEドラッグアンドドロップを調べろ。特にIDropSource側の方だ。

968 :デフォルトの名無しさん:2005/07/29(金) 19:34:42
>>77
超遅レスだが・・・

SetProcessAffinityMaskの使い方は要注意だよ。

CreateProcessした後に、
そのプロセスのハンドルに対してSetProcessAffinityMaskする場合は、
CreateProcessでCREATE_SUSPENDEDを指定してね。
SetProcessAffinityMaskした後にメインスレッドをResumeThreadしてね。

それがメンドクサイ場合は、
自分のプロセスに対してSetProcessAffinityMaskしてから、
CreateProcessしてね。

969 :デフォルトの名無しさん:2005/07/29(金) 20:15:44
>>964
BCBスレの>>842か?

970 :デフォルトの名無しさん:2005/07/29(金) 23:10:47
>>967
いや、ドロップしたときにTargetのフォルダをSource側が取得したいのだと理解した。
それなら俺も知りたい。
単なるコピーならそんなややこしいことは必要ないのだけど、
今作ってるソフトでファイルの内容を変換しながらTargetに出力したい。
いくつかのアーカイバではいったんテンポラリに出力してから移動してるみたいだけど、
これってなんだか今ひとつな感がある。

971 :デフォルトの名無しさん:2005/07/30(土) 00:45:21
>>967
処理の実行はタイマーでもスレッドでもフックでも好きなのでやるとよい
まずマウスカーソルの位置をGetCursorPosで取得
WindowFromPointにてマウスカーソルの位置を取得
GetClassNameでエクスプローラかどうか比較する(もっときちんと確認したい場合は好きにするとよい)
タイトルバーまたはアドレスバーをフォルダオプションで「フルパスで表示」にするようにしておき
GetWindowTextで取得する。フルパスで表示が不可能な場合は適当に考えて。

972 :デフォルトの名無しさん:2005/07/30(土) 00:45:56
>>967 -> >>964

973 :デフォルトの名無しさん:2005/07/30(土) 01:03:33
1.親ウィンドウがexplorer.exeであることを確認してから、EnumChildWindows()で子ウィンドウの列挙開始。
2.ウィンドウ名をGetClassName()で取得。ウィンドウ名が"Edit"と合致するものを探す。
3.2で合致したウィンドウにSendMessage(hwnd, WM_GETTEXT,..)を実行。

これで大丈夫なはず。
質問者>>964は、これを責任もって試せ。そしてこのスレに報告せよ。

974 :891:2005/07/30(土) 01:41:17
皆様お久しぶりです。APIフックの件で相談させていただいた者です。

あの後、取り敢えずIEのレジストリ操作の監視をしてみようと思い
TokyoDownstairsで公開されていたAPIHOOKのソースを参考に試していたのですが、
一応フックは成功しているようなのに、何故かシステムDLLの内部でアクセス違反が発生したり
IE自体が強制終了してしまう、という現象が起こってしまいます。
こちらにそのソースをアップしました、度々申し訳ありませんがご教授願えませんでしょうか。
http://www.fileup.org/file/fup33618.zip

InternetExplorerが動作中に、apihookexe_を実行することで
IEのRegOpenKeyExA、RegOpenKeyAの呼び出しをフックします。
各フックした関数は、apihooklog.txtへログを書き出す動作を付加しています。

私の環境(Windows2000 & VC6Standard)で発生する異常は以下のとおりです。

・IEのフック開始後、IE上でボタンやメニューをクリックする等のアクションを行うとIEが強制終了します。
|IEXPLORE.EXE - アプリケーション エラー
|"0x03e91f80" の命令が "0x00000000" のメモリを参照しました。
私には原因がよく分かりません。
もしやスタック領域を壊してしまったのでしょうか?どこで・・

・apihook.cppの中のフック関数dummy_RegOpenKeyExAの内部で
MessageBoxAPIを呼ぶよう書き換えビルドしたDLLを用いて動作させると
apihookexe_が勝手に終了してしまいます。そんなはずは、と思い
VCのデバッガで、DLL側を検査していたところ、どうやらシステムDLL内部で
|ハンドルされていない例外 は apihookexe_.exe (USER32.DLL) にあります: 0xC0000005: Access Violation。
クラッシュしているようなのです。
またBeepAPIは、かなり頑張って耐えているようですが、(よく鳴ります)
やはり最終的には、先に述べたIEの強制終了を起こしてしまいます。

以上です。よろしくお願いいたします。

975 :デフォルトの名無しさん:2005/07/30(土) 02:38:37
       //
     /  /   
     //⌒)∩__∩
    /.| .| ノ     ヽ
    / | |  ●   ● |
   /  | 彡  ( _●_) ミ  ヌルポ!!
   /  | ヽ  |∪|  /_
  // │   ヽノ  \/
  " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ

976 :デフォルトの名無しさん:2005/07/30(土) 05:57:48
>>974
とりあえず見た限りではCSingleProcessHookがあやしいな
DLLのCSingleProcessHookの宣言をコメントアウトして実行させると
もちろんHOOKはしないがエラーも無い
もう一度見直してみるべし
俺はこんなの作ってみますた↓
http://www.vector.co.jp/soft/winnt/prog/se373068.html
特定のアプリでは動かなかったりするけど・・・

977 :891:2005/07/30(土) 06:36:14
>>976
素晴らしいですね、こういうツールを待ち望んでいました。
プロセスの起動から開始しているところを見ると、これはデバッガ起動によるフックアプローチを用いているのでしょうか?
ただ、IEで試してみましたが、特定のAPIをフックした時に、IEのメニューバーが消えてしまったりしていました。
このプログラムも基本的に、フック関数はオリジナル関数をコールして、その戻り値を返しているのですよね?
だとしたら、なぜ元々の動きが再現されないのでしょうね・・不思議でたまりません。

あやしいのは、IAT書き換え部分であるAPIHookInProcess関数ということですね。
IAT書き換え部分のソースは、他にもcode project等で公開されていたものがあったので
そちらで書き換えて試してみたいと思います。

#今から寝るのでレスが遅くなるかも知れません

978 :デフォルトの名無しさん:2005/07/30(土) 06:45:00
デスクトップ画面を右クリックすると、
「アイコンの整列」〜「プロパティ」の項目が表示されますよね?
これはポップアップメニューとでも呼ぶんでしょうか?
これを作成するには、どんなAPIを使うんでしょうか?


979 :デフォルトの名無しさん:2005/07/30(土) 06:59:29
>>977
それはただのバグでつ。。

>>978
TrackPopupMenu
http://wisdom.sakura.ne.jp/system/winapi/win32/win78.html
参考にしる

980 :デフォルトの名無しさん:2005/07/30(土) 08:45:16
クライアントエリア内でマウスカーソルが動く度に、WM_PAINTが発行され「無い」のは何故なのでしょうか。
今まで何の疑問もなくやってきたのですが、急に気になってしまいました。

981 :デフォルトの名無しさん:2005/07/30(土) 08:52:22
マウスカーソルは画面に影響しないから

982 :デフォルトの名無しさん:2005/07/30(土) 09:02:42
ほぼすべてのビデオカードでハードウェアマウスカーソルを使ってるし
万一サポートされていなくてもマウスカーソルを合成した後のピクセルの復元は
システムが責任を持ってやってくれる

983 :デフォルトの名無しさん:2005/07/30(土) 09:03:17
>>981
それはそうなんですが…

984 :デフォルトの名無しさん:2005/07/30(土) 09:04:45
書いている間に
>>982
ありがとうございます。納得しました。
ハードウェアマウスカーソルをキーワードに更に調べてみます。

985 :デフォルトの名無しさん:2005/07/30(土) 13:33:12
>>975
ありがとうございました。

986 :970:2005/07/30(土) 16:35:56
>>973
デスクトップにはドロップできないんでは?

987 :デフォルトの名無しさん:2005/07/30(土) 16:39:20
>質問者>>964は、これを責任もって試せ

何でこいつはこんなに偉そうなの?
970みたいなことをやりたければ、IAdviseSink周りをやるべきだが。

988 :デフォルトの名無しさん:2005/07/30(土) 16:53:40
<チラシの裏>
昔のMacのAPIにはそのものずばり>>970的データソースがあった。
PromisedHFSだったかな?
「パス指定されたらファイル作ります」っていうデータソース。

お絵かきソフトやワープロでなんかで絵や文書の一部を選択して、
そのままフォルダにドロップするとClipboardファイルができる、とか
そんな風に使われてますた。
</チラシの裏>

989 :デフォルトの名無しさん:2005/07/30(土) 17:53:20
ウィンドウの枠線をつかんでサイズを変更させることをできなくさせたいのですけど、
・・・

どうすればいいか教えてください^^

990 :デフォルトの名無しさん:2005/07/30(土) 18:33:01
・ウィンドウスタイルからWS_THICKFRAMEを除く
・WM_WINDOWPOSCHANGINGあるいはそこから呼ばれるメッセージを適切に処理する

991 :デフォルトの名無しさん:2005/07/30(土) 18:34:56
>>989
style & ~WS_THICKFRAME

case WM_SIZING:
*(RECT*)lp = rc_window;
break;


992 :デフォルトの名無しさん:2005/07/30(土) 19:16:53
こんばんわ

プロパティーシートの「OK」「キャンセル」「適用」「ヘルプ」ボタンを無効にしたいのですが、
どうすればよろしいのでしょうか?

よろしくお願いします。

993 :デフォルトの名無しさん:2005/07/30(土) 19:28:42
コンバンワ。僕です。(≧Q≦)ノ~ 質問です。

24bitのDIBからRGB情報を全て抜き出して配列に収めたいのですが、美味く行きません。
画像が上下逆になってしまったり、歪んでしまったり、色が可笑しくなったりします。
幅は4バイツに固定されているとかは解ったのですが、駄目です。
コードはこんな感じです。

 // imgはDIBデータの先頭を指すポインタ
 // mWidthは4の倍数に補正された列のバイト数
  char* last = img + mWidth * height;
  char* pixel;
  int x = 0, y = 0;
  while(y < height) {
   pixel = last - mWidth * ++y;
   for(x=0; x < width; x++) {
    fputc(0, out);
    fputc((pixel[2]) & 0xff, out);
    fputc((pixel[1]) & 0xff, out);
    fputc((pixel[0]) & 0xff, out);
    pixel += 3;
   }
  }

ご指摘お願いします。

994 :デフォルトの名無しさん:2005/07/30(土) 19:59:36
ちなみにこんな感じです。m(_@_)m

元画像:
http://kore.name/x/upboard/files/1121941399314.jpg
失敗したの:
http://kore.name/x/upboard/files/1121941399552.jpg

995 :デフォルトの名無しさん:2005/07/30(土) 20:04:16
ヒント: テキストモード
かな?

996 :デフォルトの名無しさん:2005/07/30(土) 20:09:08
もももしかしてパイプ経由で表示してたのが問題だったのですかね?
stdoutをビンモードにする方法はありませんか?

997 :デフォルトの名無しさん:2005/07/30(土) 20:16:04
事故壊血しました。>>995さん本当にありがとう。

998 :デフォルトの名無しさん:2005/07/30(土) 20:17:15
わざと誤変換するのが楽しい年頃なんですかね?

999 :デフォルトの名無しさん:2005/07/30(土) 20:21:02
初めて2chに来たんだろ

1000 :デフォルトの名無しさん:2005/07/30(土) 20:23:34
バカ一覧
http://www.google.com/search?num=50&hl=ja&c2coff=1&q=%22%E4%BA%8B%E6%95%85%E6%80%AA%E5%82%91%22&lr=lang_ja

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

243 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)