トップページ⇒tech
1001コメント266KB

Win32API質問箱 Build84

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2009/11/29(日) 16:14:56
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。
「知らないならレスしないで下さい。ウザイだけです。 」なんて言わないでねっ!

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

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

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

Win32API質問箱 Build83
http://pc12.2ch.net/test/read.cgi/tech/1256891725/
0002デフォルトの名無しさん2009/11/29(日) 16:16:10
83 ttp://pc12.2ch.net/test/read.cgi/tech/1256891725/
82 ttp://pc12.2ch.net/test/read.cgi/tech/1253699773/
81 ttp://pc12.2ch.net/test/read.cgi/tech/1249140049/
80 ttp://pc12.2ch.net/test/read.cgi/tech/1244057140/
79 ttp://pc12.2ch.net/test/read.cgi/tech/1240411224/
78 ttp://pc12.2ch.net/test/read.cgi/tech/1238289377/
77 ttp://pc12.2ch.net/test/read.cgi/tech/1235494464/
76 ttp://pc11.2ch.net/test/read.cgi/tech/1233622578/
75 ttp://pc11.2ch.net/test/read.cgi/tech/1231423602/
74 ttp://pc11.2ch.net/test/read.cgi/tech/1229239827/
73 ttp://pc11.2ch.net/test/read.cgi/tech/1227934931/
72 ttp://pc11.2ch.net/test/read.cgi/tech/1226575789/
71 ttp://pc11.2ch.net/test/read.cgi/tech/1224745158/
70 ttp://pc11.2ch.net/test/read.cgi/tech/1221446107/
69 ttp://pc11.2ch.net/test/read.cgi/tech/1217687038/
68 ttp://pc11.2ch.net/test/read.cgi/tech/1215348804/
67 ttp://pc11.2ch.net/test/read.cgi/tech/1212931246/
66 ttp://pc11.2ch.net/test/read.cgi/tech/1210775622/
65 ttp://pc11.2ch.net/test/read.cgi/tech/1208847084/
64 ttp://pc11.2ch.net/test/read.cgi/tech/1207099291/
63 ttp://pc11.2ch.net/test/read.cgi/tech/1204600558/
62 ttp://pc11.2ch.net/test/read.cgi/tech/1202060403/
61 ttp://pc11.2ch.net/test/read.cgi/tech/1199514664/
0003デフォルトの名無しさん2009/11/29(日) 16:16:32
60 ttp://pc11.2ch.net/test/read.cgi/tech/1196874830/
59 ttp://pc11.2ch.net/test/read.cgi/tech/1194701996/
58 ttp://pc11.2ch.net/test/read.cgi/tech/1191781463/
57 ttp://pc11.2ch.net/test/read.cgi/tech/1189255282/
56 ttp://pc11.2ch.net/test/read.cgi/tech/1186989201/
55 ttp://pc11.2ch.net/test/read.cgi/tech/1184853465/
54 ttp://pc11.2ch.net/test/read.cgi/tech/1181645965/
53 ttp://pc11.2ch.net/test/read.cgi/tech/1178882828/
52 ttp://pc11.2ch.net/test/read.cgi/tech/1176828891/
51 ttp://pc11.2ch.net/test/read.cgi/tech/1174416295/
50 ttp://pc11.2ch.net/test/read.cgi/tech/1171721448/
49 ttp://pc10.2ch.net/test/read.cgi/tech/1168708801/
48 ttp://pc10.2ch.net/test/read.cgi/tech/1166172047/
47 ttp://pc8.2ch.net/test/read.cgi/tech/1163375772/
46 ttp://pc8.2ch.net/test/read.cgi/tech/1159158014/
45 ttp://pc8.2ch.net/test/read.cgi/tech/1156032806/
44 ttp://pc8.2ch.net/test/read.cgi/tech/1151501925/
43 ttp://pc8.2ch.net/test/read.cgi/tech/1148005509/
42 ttp://pc8.2ch.net/test/read.cgi/tech/1144962549/
41 ttp://pc8.2ch.net/test/read.cgi/tech/1141392216/
40 ttp://pc8.2ch.net/test/read.cgi/tech/1138893959/
39 ttp://pc8.2ch.net/test/read.cgi/tech/1136673250/
38 ttp://pc8.2ch.net/test/read.cgi/tech/1133798345/
37 ttp://pc8.2ch.net/test/read.cgi/tech/1131884991/
36 ttp://pc8.2ch.net/test/read.cgi/tech/1128951330/
35 ttp://pc8.2ch.net/test/read.cgi/tech/1125850096/
34 ttp://pc8.2ch.net/test/read.cgi/tech/1122723009/
33 ttp://pc8.2ch.net/test/read.cgi/tech/1120153520/
32 ttp://pc8.2ch.net/test/read.cgi/tech/1117271829/
31 ttp://pc8.2ch.net/test/read.cgi/tech/1114762194/
0004デフォルトの名無しさん2009/11/29(日) 16:16:51
30 ttp://pc8.2ch.net/test/read.cgi/tech/1112345886/
29 ttp://pc8.2ch.net/test/read.cgi/tech/1110281860/
28 ttp://pc5.2ch.net/test/read.cgi/tech/1108199304/
27 ttp://pc5.2ch.net/test/read.cgi/tech/1106103119/
26 ttp://pc5.2ch.net/test/read.cgi/tech/1104109858/
25 ttp://pc5.2ch.net/test/read.cgi/tech/1101393155/
24 ttp://pc5.2ch.net/test/read.cgi/tech/1098967135/
23 ttp://pc5.2ch.net/test/read.cgi/tech/1095534704/
22 ttp://pc5.2ch.net/test/read.cgi/tech/1092524669/
21 ttp://pc5.2ch.net/test/read.cgi/tech/1090422324/
20 ttp://pc5.2ch.net/test/read.cgi/tech/1088140233/
19 ttp://pc5.2ch.net/test/read.cgi/tech/1084697545/
18 ttp://pc5.2ch.net/test/read.cgi/tech/1081702990/
17 ttp://pc5.2ch.net/test/read.cgi/tech/1077470361/
16 ttp://pc2.2ch.net/test/read.cgi/tech/1073830065/★
15 ttp://pc2.2ch.net/test/read.cgi/tech/1069339866/★
14 ttp://pc5.2ch.net/tech/kako/1065/10653/1065328397.html
13 ttp://pc5.2ch.net/tech/kako/1059/10595/1059549320.html
12 ttp://pc5.2ch.net/tech/kako/1056/10560/1056033645.html
11 ttp://pc5.2ch.net/tech/kako/1052/10526/1052651750.html
10 ttp://pc5.2ch.net/tech/kako/1047/10478/1047819779.html
9 ttp://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
8 ttp://pc5.2ch.net/tech/kako/1040/10409/1040964626.html
7 ttp://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
6 ttp://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
5 ttp://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
4 ttp://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
3 ttp://pc.2ch.net/tech/kako/1017/10170/1017072275.html
2 ttp://pc.2ch.net/tech/kako/1006/10067/1006783012.html
1 ttp://pc.2ch.net/tech/kako/991/991576947.html
0005デフォルトの名無しさん2009/11/29(日) 16:17:44
SDK最新版
Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1 (ISO)
http://www.microsoft.com/downloads/details.aspx?familyid=71DEB800-C591-4F97-A900-BEA146E4FAE1&displaylang=en

●以下のサイトは間違いが多いのでこのスレでは超超超不評です●
http://www.geocities.jp/ky_webid/win32c/
0006デフォルトの名無しさん2009/11/29(日) 16:22:53
乙
0007デフォルトの名無しさん2009/11/29(日) 16:39:13
   ┌─┐
   │●│
   └─┤
   _   ∩
  ( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘      おっぱい!おっぱい!
0008デフォルトの名無しさん2009/11/29(日) 16:42:27
おまえらもう喧嘩するなよ
Windowsプログラマが日本で一番性格が悪いと言われるぞ
0009デフォルトの名無しさん2009/11/29(日) 16:45:44
犬糞コミュニティの閉鎖性以上に性格悪いのなんて無いから大丈夫
0010デフォルトの名無しさん2009/11/29(日) 16:52:29
BSDは?
0011デフォルトの名無しさん2009/11/29(日) 17:11:40
BSE?
0012デフォルトの名無しさん2009/11/29(日) 17:18:09
そんなことすら分からない頭の悪さはどうしようもないな。
0013デフォルトの名無しさん2009/11/29(日) 17:19:29
どれだけ阿呆なんだ?
どれだけ頭が悪ければ気が済むんだろう?
何も知らないお馬鹿さん。
無知だったのが理解できて良かったね。
これだけ論破されれば少しは反省できたろう。
0014デフォルトの名無しさん2009/11/29(日) 17:21:15
          ____
        /      \
       /  ─    ─\
     /    ⌒  ⌒  \
     |       ,ノ(、_, )ヽ    |
      \      トェェェイ   / 
       /   _ ヽニソ,  く
   三. i!   ゙ヽ、 Y"  r‐!、 ヽ.
    三 ヽ. 、 ''´⌒ゝ-‐'" _ィ》 Y!
       \_|!_二|一"f ,  !゙\  三
         〈, l|゙》-i|┴ーi´ / イ ´ i! 三
      ♪   ゙ー-ニ二__,/  / / 三       ♪
               /゙ У   / /  三
            //,/-‐、  /
            i! _{!   j!'〈   ♪
          / ,,.ノ \'' ヽ \
            〈 ーぐ     \   ヽ
          ゙ー″      〉ー- 〉
                   〈___ノ
0015デフォルトの名無しさん2009/11/30(月) 18:56:13
ほす
0016デフォルトの名無しさん2009/11/30(月) 20:02:47
サウンドボードを使って8bitサウンドを鳴らす(サンプリング再生やwaveファイル再生じゃない)にはどうすればいいんでしょうか?
プログラミング方法を教えていただけないでしょうか。
0017デフォルトの名無しさん2009/11/30(月) 20:07:37
HBRUSH burasi;
という変数を作ったら「萎えるからこういう変数名はやめてくれ」と言われた
0018デフォルトの名無しさん2009/11/30(月) 20:11:52
>>16
waveout
0019デフォルトの名無しさん2009/11/30(月) 20:15:47
DirectSoundで勘弁してやれよw
0020デフォルトの名無しさん2009/11/30(月) 20:26:11
8bitサウンドというのが8bitPCMじゃなくてFM音源やPSGのことならそんなものはない、が正解だろ。
どっかから音源エミュレータ拾ってくるとか。
0021デフォルトの名無しさん2009/11/30(月) 20:26:23
DirectSoundはWin32APIじゃないからなぁ
0022デフォルトの名無しさん2009/11/30(月) 20:27:15
>>20
>8bitPCMじゃなくてFM音源やPSGのことなら

自分でエミュレータを書きたいって話では?
0023デフォルトの名無しさん2009/11/30(月) 22:45:00
vista32bit、VS2008のwin32プロジェクトで作成したプログラムが
ネットブック(XP-home sp3) で動きませんでした。

ところが、こっちにもVS2008をインストールしただけで動作しました。
win32プロジェクトで作成したプログラムは、
特別なランタイムなどを必要としないと思っていましたが、
私は何か勘違いをしているのでしょうか?orz

ゲームのコンフィグ系のプログラムなので、わりと焦っていますorz
0024デフォルトの名無しさん2009/11/30(月) 22:51:46
VC2008 のランタイムが必要。MS のサイトからダウンロードできるよ。
0025デフォルトの名無しさん2009/11/30(月) 23:42:33
>>23
おおかたC/C++ランタイムをDLLにしてたんだろ。
そっから先はAPIじゃなくてコンパイラの問題なので該当スレに
0026デフォルトの名無しさん2009/12/01(火) 01:45:18
> ゲームのコンフィグ系のプログラムなので、わりと焦っていますorz
意味が分からない
0027デフォルトの名無しさん2009/12/01(火) 01:49:04
何も知らないお馬鹿さん。
0028デフォルトの名無しさん2009/12/01(火) 01:56:42
そんなことすら分からない頭の悪さはどうしようもないな。
0029デフォルトの名無しさん2009/12/01(火) 02:01:19
コマンドの出力を英語で取りたいのでCreateProcessでアプリを起動する時に
一時的にコードページを英語へ変更する方法を探しています
システムのロケールを変更してしまうと途中で落ちたようなときに元に戻らないので
起動するプロセスのみコードページを変更する方法ってありますか?
0030デフォルトの名無しさん2009/12/01(火) 03:53:48
LoadStringで失敗したときバッファにNUL文字がセットされるのは保証されてますか?
つまりこういうプログラムでコンソールに 0 と出力されるのが保証されているか?ということです。

wchar_t str[16];
memset(str,0xcc,sizeof(str));
LoadStringW((HINSTANCE)0xdeadbeef,0x12345678,str,_countof(str));//わざと失敗させる
cout<<wcslen(str);
0031デフォルトの名無しさん2009/12/01(火) 07:08:45
>>26
ひとつひとつの単語の意味は判るが
どうしてそれが焦りになるのかがわからん
0032デフォルトの名無しさん2009/12/01(火) 07:11:56
>>30
memsetせずに呼んでみれば?
0033デフォルトの名無しさん2009/12/01(火) 07:22:30
Return Value

If the function succeeds, the return value is the number of TCHARs copied into the buffer,
not including the terminating NULL character, or zero if the string resource does not exist.

とは書いてあるな。実際に 0 が返ってくるのか知らんけど。
0034デフォルトの名無しさん2009/12/01(火) 07:24:01
あ。これバッファじゃないじゃん。ごめんごめん。
0035デフォルトの名無しさん2009/12/01(火) 08:30:44
LPCWSTR _S(UINT nID);
実行ファイルのStringTableリソースに埋まってるUnicode文字列のアドレスをダイレクトに得る。
見つからなければ空文字列を返す。
例: MessageBoxW(hwnd, _S(IDS_HELP), _S(IDS_TITLE), MB_OK);

という関数を作ればいい。
0036デフォルトの名無しさん2009/12/02(水) 12:30:24
ディレクトリ操作で、ハードリンクがあると無限ループしたりしますか?
ループしていたり、リンクの部分を除いたり出来ますか
0037デフォルトの名無しさん2009/12/02(水) 13:56:13
FindFirstFile()からのツリー辿りならよくやるが全然意識してないで使ってるわ
0038デフォルトの名無しさん2009/12/02(水) 20:05:20
FILE_ATTRIBUTE_REPARSE_POINTで蹴るとか、
フルパス長や再帰レベルに制限を付けておくとか、そんな感じ?
0039デフォルトの名無しさん2009/12/02(水) 22:35:06
windows apiを使用して、linuxの命令が動くヘッダ作成する人いますか?
wikiにして、できたやつを誰でもうpしていく形式で。
0040デフォルトの名無しさん2009/12/02(水) 22:40:23
>>39
1行目と2行目の繋がりが見えないけど、
GCCとBinutilsをクロスコンパイル用にビルドして、
Windows上でLinuxで動く実行ファイルをコンパイルする環境を作ることはできる。
まあスレ違い。
0041デフォルトの名無しさん2009/12/02(水) 22:49:51
最終的にcygwinと同じものが出来上がるんじゃね
0042デフォルトの名無しさん2009/12/02(水) 22:59:26
ネイティブで、linuxソースがビルド可能にするんです。
windows apiが標準 = linux, unixから外れているのでそれを保管するんです。
0043デフォルトの名無しさん2009/12/02(水) 23:00:32
まあスレ違い。
0044デフォルトの名無しさん2009/12/02(水) 23:55:08
>>42
つSubsystem for UNIX-based Applications (旧Services for UNIX)
0045422009/12/03(木) 00:26:44
さっそく作ってみたよ うpしていってね

http://namama.net84.net/?dirent.h

>>44
それでできるんですか。wikiは無意味だったんですか
0046デフォルトの名無しさん2009/12/03(木) 06:37:11
SUA はVista 以降標準装備だし、無駄な努力だな。
0047デフォルトの名無しさん2009/12/03(木) 08:38:25
携帯から失礼します。
質問させて頂きます。
たまにサンプルプログラムを見るとAPIの頭に::が付いていることがあります。
有る無しではどう違うんでしょうか?

(例)
MessageBox(...);
::MessageBox(...);

ご回答宜しくお願いします。
0048デフォルトの名無しさん2009/12/03(木) 08:44:45
それはAPIの質問ではなく、言語仕様の話。
スレ違い。
0049デフォルトの名無しさん2009/12/03(木) 09:40:48
C++ でいうところのクラスのメンバ関数なんじゃないかな。
よくわかんないけど。
0050デフォルトの名無しさん2009/12/03(木) 09:57:48
わかってたらスレ違いだとわかるから質問しらしないだろw
例えば
::MessageBoxはどのクラスにも属さない関数であるところの
MessageBoxを表し、クラスメソッドと区別する為に
使われたりする。(無名クラスに所属しているという説もあるが)
0051デフォルトの名無しさん2009/12/03(木) 17:41:51
>>47
インテリセンスを効かせる為に::を付けてるだけと、どこかのスレで見たことある気がする
完全にうろ覚えだが・・・
0052デフォルトの名無しさん2009/12/03(木) 17:44:22
どんなサンプルかにもよるだろう
MFCだとCWnd::MessageBox()と区別するのに必要なこともあるし。
0053デフォルトの名無しさん2009/12/03(木) 17:49:13
>インテリセンスを効かせる為

俺の書き込みの予感
0054デフォルトの名無しさん2009/12/04(金) 05:59:26
>インテリセンスを効かせる為

VC6時代が始まった10年以上前から常識ですが
0055472009/12/04(金) 09:13:50
みなさん色々レスありがとうございます。
また、携帯から失礼します。

要はC++でいうところのthisポインタと一緒でthisが省略出来るように::を付けても付けなくても動作は一緒ってことですね。

class foo {
private:
int a;

public:
foo() { a = 0; }
~foo() { }

int func1() {
return this->a;
}

int func2() {
return a;
}
};
0056デフォルトの名無しさん2009/12/04(金) 10:00:01
ちげーよ馬鹿
つーかC++スレ行け
0057デフォルトの名無しさん2009/12/04(金) 10:02:36
DelphiでWindowsプログラミングする奴って少ないのは
どして?
0058デフォルトの名無しさん2009/12/04(金) 10:06:54
>>57
Delphiを使うメリットとデメリットを考察して、メリットが少ないと判
断する人が多いから。もしくはDelphiを知らないから候補にもならない。

0059デフォルトの名無しさん2009/12/04(金) 10:12:32
Delphiを知らない人や、使うメリットとデメリットを差し引きして
メリットが少ないと判断する人が多いのはどして?
か >>58が答えてくれるんで期待
0060デフォルトの名無しさん2009/12/04(金) 10:35:36
Windowsプログラマに限った場合
Delphiを知らない人はC++も実はたいして知らない人だ
しその逆も言えるのかもな
0061デフォルトの名無しさん2009/12/04(金) 10:53:30
新規にDelphiやるのは高いし参考書も少ないし
ってのがあるんじゃないのかな。


ところで、ウィンドウ関数内で使うオブジェクトはグローバス変数じゃなくて
やっぱりウィンドウ関数内で static な変数にするのがいいのかな。
その場合、プログラム終了したとき、メモリの解放忘れとか気にしなくていいんだよね?

やっぱり DeleteObject() やらないとだめなのかな。
0062デフォルトの名無しさん2009/12/04(金) 11:28:26
INITCOMMONCONTROLSEX

INIT COMMON CONTROL SEX
0063デフォルトの名無しさん2009/12/04(金) 12:49:09
>>55
携帯のテンキーで入力のだろうか・・・
0064デフォルトの名無しさん2009/12/04(金) 12:54:22
グローバス変数というものは存じ上げないのでアドバイスできません。
0065デフォルトの名無しさん2009/12/04(金) 13:11:17
バックアップツールを作りたいです。
ReadDirectoryChangesWで削除・更新を察知できるのですが
削除が判明した時点でファイルが無くなってしまいます。
消される前に、バックアップする方法ありますか。
0066デフォルトの名無しさん2009/12/04(金) 13:12:35
OSの全ての削除ルーチン、ファイル更新ルーチンを乗っ取って
削除の前にはバックアップとか出来ればいいのですが。
これは無理ですよね。
0067デフォルトの名無しさん2009/12/04(金) 13:14:52
ファイルが作成された時点でバックアップを取っておけばよろしい
0068デフォルトの名無しさん2009/12/04(金) 13:15:41
全てのファイルの過去データを、はじめにコピーしておけば解決しますが
場所食うのがいやなんです。
Em、秀丸のバックアップのように更新前だけ保存する方法無いですか。
0069デフォルトの名無しさん2009/12/04(金) 14:06:15
そんな明らかに危険そうなブツがAPIとして整備されるはず無いだろが
APIを何だと思ってるんだ?
0070デフォルトの名無しさん2009/12/04(金) 14:08:34
ない
0071デフォルトの名無しさん2009/12/04(金) 14:13:16
>>69
非公開APIの8割型以上は、作成者内輪以外の呼び出しは危険
コンテキスト依存なんで。
公開APIも仕様が100%公開されているわけでもないので
100%の安全性の保証は無いものと思うべし。
断片情報だけが公開されたものを公開APIというのも何だか
な〜だが。APIを何だと思ってた?
0072デフォルトの名無しさん2009/12/04(金) 14:13:21
ゲームなんかが一時的に作成するファイルを
自動で別フォルダにコピーしてゴニョゴニョしたい

とかそういう理由か?
0073デフォルトの名無しさん2009/12/04(金) 14:17:03
>断片情報だけが公開されたものを公開APIというのも何だか

オープンソースにしない限り、"公開"APIといえないとでも思ってるのか
どれだけ阿呆なんだ?
0074デフォルトの名無しさん2009/12/04(金) 14:21:21
非公開 API は使用しない
公開 API は公開された情報の範囲内で使用する

こんなの 常 識 です
0075デフォルトの名無しさん2009/12/04(金) 15:34:03
リストコントロールについて質問です。
レポート形式で使用しています。(VC2005)

(1)
リスト行数100で1ページ表示5行で
現在10ページ目の1番目の項目が選択されています。
この状態で一度全ての項目を削除し再入力して
新たに10ページ目の1番目の項目を選択させたいので
SetItemStateなどで選びなおしました。
しかし、10ページ目の1番目が選択されているようですが
表示は1ページ目になっています。
これを10ページ目にしたくてSetScrollPosをしましたが
うまくいかず、表示が変になります
どうやったら10ページ目の表示にできるのでしょうか?

(2)
拡張スタイルにLVS_EX_GRIDLINESを使用していますが
スクロールしたときにグリッドラインの残像が残ってしまいます
この残像を綺麗にけすのはどうしたらいいのでしょうか?
0076デフォルトの名無しさん2009/12/04(金) 15:52:13
公開された情報とて拘束性は全くなく例えば
CreateProcessの戻り値がOK(成功)でも
実際のプロセスの起動が30分後になるよう
なケースが無いとも言い切れない。
0077デフォルトの名無しさん2009/12/04(金) 18:27:18
エディットコントロールにSetWindowTextで文字を入力すると
スクロールが初期位置まで戻ってしまうんですが、
この時どういったメッセージがポストされているのでしょうか?

WM_SETTEXT
(何か)
WM_PAINT
という順で処理されていると思うのですが・・・
0078472009/12/04(金) 19:27:18
>>56
すいません、違うんですか
>>63
テンキーです、分け合ってインターネット繋がってないので携帯オンリーで2chやってます。

自分の無知、勉強不足でスレを汚してしまいすいませんでした。
もう一度、レスを参考にしっかり調べ直してから出直してきます。
レス下さった方々ありがとうございました。
0079デフォルトの名無しさん2009/12/04(金) 20:08:46
>>77
WM_SETTEXTの内部処理の途中で戻っているだけだろ。
別のメッセージがポストされたとかいう話じゃない。
一旦中身をクリアしていると考えれば、初期位置に戻っても不思議じゃない。
0080デフォルトの名無しさん2009/12/04(金) 22:40:39
>>79
どうも。
解決しました。
0081デフォルトの名無しさん2009/12/04(金) 22:47:54
>CreateProcessの戻り値がOK(成功)でも
>実際のプロセスの起動が30分後になるよう

CreateProcessから戻ってきた時点でまだ起動してないと思ってるのか。
どれだけ頭が悪ければ気が済むんだろう?
0082デフォルトの名無しさん2009/12/04(金) 23:14:58
数個コードが実行されて30分止まって再開されても
立派なスケジューリングでありプロセスは起動されてる
ことになるな
0083デフォルトの名無しさん2009/12/04(金) 23:29:00
PROCESS_INFORMATIONにプロセスのハンドルが得られている
= OSのプロセス生成処理は完了している

「実際のプロセスの起動」って何だよ
画面にウィンドウ等が出るまで実際にプロセスは起動してないとでも言いたいのか
0084デフォルトの名無しさん2009/12/04(金) 23:42:35
>>78
テンキーでソースコードって打てるものなのか?
0085デフォルトの名無しさん2009/12/05(土) 00:10:41
>>83
プロセスハンドルが作られて実行が確約さてれいても、
そのプロセスのコードが本当にいつ実行されるかは「勝手でしょ?」な話。これはWindowsに限らずUnix でも同じようなこと
が言えるけど...
0086デフォルトの名無しさん2009/12/05(土) 00:23:12
>プロセスハンドルが作られて実行が確約さてれいても、
この時点がプロセスの起動だろ
0087デフォルトの名無しさん2009/12/05(土) 00:30:18
ウィルスチェッカーとかがOSレベルで正式サポートに
なって、実行直前スクリーニングとかが行われると
したらシステムがビジーな場合やデータダウンロード
が必要な場合とかには、実プロセス実行まで相当待たされる
ってことは現実問題ありそう。
0088デフォルトの名無しさん2009/12/05(土) 00:34:33
CreateProcessから返ってきたらプロセスは"起動"している
ただしいつ"実行"されるかは未知数

つまり>>76がバカ
0089デフォルトの名無しさん2009/12/05(土) 00:47:45
ExecuteProcessではなくCreateProcessであって
実行まで担保しないのはAPIの名前から読んで字の如く
0090デフォルトの名無しさん2009/12/05(土) 00:54:24
CreateHogeってのは"Hogeカーネルオブジェクトを生成する"って意味だぞ?

CreateEvent → Eventオブジェクトを生成する
CreateFile → Fileオブジェクトを生成する
CreateProcess → Processオブジェクトを生成する

これを理解して無いとCreateProcessで実行云々とか
既存ファイルをオープンする場合でも"Create"Fileなんて変だ
などと頓珍漢な発言をする。
0091232009/12/05(土) 02:46:33
>>25
その通りでした☆

また、最後の1行は意味不明すぎると自分でも思います。
失礼しました。はずかしい><
0092デフォルトの名無しさん2009/12/05(土) 07:19:08
WDKのコンパイラでビルドすればいい。
0093デフォルトの名無しさん2009/12/05(土) 08:33:51
ハンドルは数値にすぎず、ユーザー空間のメモリアドレス
と直接の対応はない。あくまでもDLL内部やドライバなど
で管理する情報のID。
これを理解して無いとCreateProcessでファイル作成云々とか
既存ファイルをオープンする場合でも"Create"Processなんて変だ
などと頓珍漢な発言をする。
0094デフォルトの名無しさん2009/12/05(土) 09:30:36
失敗したときLastErrorにセットされるエラーコードの一覧ぐらい書いとけって思う。
拡張エラー情報を取得するにはGetLastErrorを使え、みたいな説明だけでは不十分。
0095デフォルトの名無しさん2009/12/05(土) 09:33:10
決まってないし、決めるつもりもないし、変わっていく筈
バージョン依存。しかもマイナーバージョンレベルでコロコロ
変わる筈。だから書かないし書けない。そういうところがあるだろな
0096デフォルトの名無しさん2009/12/05(土) 09:40:35
同じようなエラーコードがあるのがさっぱり分からん。
例えば
ERROR_NOT_ENOUGH_MEMORY
ERROR_OUTOFMEMORY
メモリ不足のときにどっちが設定されるんだ?
0097デフォルトの名無しさん2009/12/05(土) 10:01:22
関数型がvoidで失敗するとSEHを投げるという糞仕様のAPIもあるけどな
0098デフォルトの名無しさん2009/12/05(土) 13:00:11
BOOLを返すといいながら3種振り分けが必要な糞仕様のAPIもあったな
0099デフォルトの名無しさん2009/12/05(土) 13:05:24
>>98
必要ないよ
お前が分かってないだけ
0100デフォルトの名無しさん2009/12/05(土) 13:12:59
ド素人は黙ってた方が身のためですよ?
0101デフォルトの名無しさん2009/12/05(土) 13:18:07
馬鹿がGetMessageについて語ると無知を晒すだけだからやめとけ。
0102デフォルトの名無しさん2009/12/05(土) 18:31:34
> BOOLを返す

return BOOL;

???
0103デフォルトの名無しさん2009/12/05(土) 18:44:14
自分のプロセスのヒープを、他のプロセスからReadProcessMemory()されるのを検知するか拒否する方法はありますか?
0104デフォルトの名無しさん2009/12/05(土) 18:46:43
ヒープは氏らね
VirtualAllocで取った奴ならVirtualProtect使えるが
0105デフォルトの名無しさん2009/12/05(土) 18:50:21
拒否なら名前付mutexで同期するだけでいいだろうけど検知はできるのかすら知らん
0106デフォルトの名無しさん2009/12/05(土) 19:00:43
つ nPro
0107デフォルトの名無しさん2009/12/06(日) 04:04:34
>>104-105
ありがとうございます
詳しく調べてきます
アトミック操作で隠すのは気づきませんでした
>>106
秘密鍵をできるだけ見られたくないので、nProもどきをカーネルドライバ等作らずできないかと思って聞きに来ました
0108デフォルトの名無しさん2009/12/06(日) 10:37:56
>>107
生のデータがメモリ中に存在してる限りそんな物は不可能だし無意味
仮想PC上でソフトを動かしてホストOSからメモリをダンプするとか方法は幾らでもある
0109デフォルトの名無しさん2009/12/06(日) 12:01:12
移動型ガベージコレクタみたいなものを使えばデータが頻繁にあちこち移動して読まれにくくなるかも (たぶん)
0110デフォルトの名無しさん2009/12/06(日) 14:04:11
自分のウィンドウがWM_MOUSELEAVEを受け取りつつも自分の一つ裏側にあるウィンドウに
マウス系統のメッセージが行くようにするにはどうすればいいでしょうか?

やりたいのはデスクトップの最前面に常にキャラクターを表示し、マウスが重なってるときだけ半透明にしたいんです。
それでも、マウス系メッセージは裏のウィンドウに飛ばして普通に操作できるようにしたい。

今のところWS_EX_TRANSPARENTで試しましたが、一度これを設定してしまうと
マウスがウィンドウから退いた時にそのイベントを受け取れなくて困っています・・・。
0111デフォルトの名無しさん2009/12/06(日) 14:17:22
昔似たような動作をする時計を作ったときはWS_EX_LAYERED|WS_EX_TRANSPARENTでマウス透過。
透明度の制御はタイマでマウスカーソルの現在位置を取得する方法でいったな。
時計だったからどのみち一定時間ごとに書き換える必要があったし。

まあ、一切マウスでの操作ができなくていいならそんな感じでいいんじゃね
0112デフォルトの名無しさん2009/12/06(日) 14:25:01
>>111なるほど、ちょうどこちらも描画しまくるタイプだったので、それで行けそうです。ありがとうございました。
(フックとか調べちゃったけどなんか上手くできる気がしてなかったので助かりました^^;)
0113デフォルトの名無しさん2009/12/06(日) 23:08:51
CreateWineoExまじめんどくせえええええええええ
お前らいつもこのめんどくささどう解消してる?
0114デフォルトの名無しさん2009/12/06(日) 23:14:36
>>113
そんな関数使ったことないから分かりません。
01151132009/12/06(日) 23:20:49
>>114
申し訳ありません
CreateWindowExです。
0116デフォルトの名無しさん2009/12/07(月) 00:39:45
適当なGUIフレームワーク使っとけ
0117デフォルトの名無しさん2009/12/07(月) 00:50:20
とりあえず CreateWindowExIndirect っつーありそうで無かった関数は自作してみた
0118デフォルトの名無しさん2009/12/07(月) 00:53:49
考えてみたら、RegisterClassExはWNDCLASSEX構造体にセットするのに、
CreateWindowExは引数にセットって、なんか統一感無くて気持ち悪くないか?(*;;^^;;;;*
0119デフォルトの名無しさん2009/12/07(月) 06:56:46
どれだけ頭が悪ければ気が済むんだろう?
0120デフォルトの名無しさん2009/12/07(月) 10:40:22
Win32API に気持ち良さなんて期待しても無駄なので、あきらめてください
0121デフォルトの名無しさん2009/12/07(月) 11:10:10
昔、某歌舞伎町に、覗き部屋という風俗があって、
窓から女の子の裸を覗くことが出来て、下には小さな
窓が。穴から万札を投げ込んから窓にティンポ
を入れると気持ちイイことしてくれるって奴
これと似たところあるって?
決して無いよ。
大抵女の子じゃなくておばあさんで、ティンポも
マイクロソフト状態を保ったままで速攻逃げ出すのが
常だった
0122デフォルトの名無しさん2009/12/07(月) 15:37:33
今時Win32APIをベタ書きする人っているんだ・・・
0123デフォルトの名無しさん2009/12/07(月) 15:40:11
>>122
今時って言うのが意味がワカラン、何が今時なの?
0124デフォルトの名無しさん2009/12/07(月) 15:43:05
暮れも押し詰まったこの時期にってことじゃないかな
0125デフォルトの名無しさん2009/12/07(月) 16:31:52
.NET時代って意味だろjk
0126デフォルトの名無しさん2009/12/07(月) 16:36:55
Vista以降で新設された最近のAPIの情報って殆ど無いねぇ
どこ見てもWin98の頃の情報ばっか
古いわ間違ってるわ全然役に立たないのに検索で上位に来てウザイ
0127デフォルトの名無しさん2009/12/07(月) 16:52:34
Googleの検索結果って日付準とかできなかったっけ
0128デフォルトの名無しさん2009/12/07(月) 17:06:48
日付が新しいからといって新しい情報とは限らないだろ
0129デフォルトの名無しさん2009/12/07(月) 17:21:45
.NETはいちいちランタイムインストールを強要させるのが嫌だ
0130デフォルトの名無しさん2009/12/07(月) 17:32:21
.NET2.0相当で作っとけばVista以降は何もしなくても動くだろ
VC++だってダイナミックリンクにすればランタイムに依存するのは一緒
0131デフォルトの名無しさん2009/12/07(月) 17:53:15
XPユーザーもまだ多いよ
0132デフォルトの名無しさん2009/12/07(月) 17:56:25
そうですか死んどけ
0133デフォルトの名無しさん2009/12/07(月) 18:00:07
XPなんて企業ユースとネットブックで残ってるだけだろ
0134デフォルトの名無しさん2009/12/07(月) 18:21:46
それは無知ってやつだぜ
個人ゆーざーでXPのやつなんていくらでもいる
0135デフォルトの名無しさん2009/12/07(月) 18:22:12
個人とかさらにどうでも良いよ
0136デフォルトの名無しさん2009/12/07(月) 18:46:31
そんなお前がどうでもいいよ
0137デフォルトの名無しさん2009/12/07(月) 19:06:10
お前だよお前
0138●2009/12/07(月) 19:16:43
え?俺?
0139デフォルトの名無しさん2009/12/07(月) 20:16:55
俺だよ俺!
0140デフォルトの名無しさん2009/12/07(月) 20:45:38
.NETじゃランタイムの追加インストール不要!Windows95〜7まで全てで動作!とかのカコイイアプリが作れないからね
0141デフォルトの名無しさん2009/12/07(月) 20:48:37
Win32sも忘れずになw
01421132009/12/07(月) 21:47:31
おいおいおいおいおいおいおいVisual Studio2010 3月22日かよ
MSDN会員期限2月までなんだけど死んで良いかな・・
0143デフォルトの名無しさん2009/12/07(月) 21:52:41
>>140
正直どうでもよくなってきた。最近。
0144デフォルトの名無しさん2009/12/07(月) 22:09:33
一月くらい余裕あったろ。
0145デフォルトの名無しさん2009/12/07(月) 22:58:37
>ランタイムの追加インストール不要!Windows95〜7まで全てで動作!
Win32でそういうソフト作ってるがAPIの遅延ロードの山で大変だよ・・・
0146デフォルトの名無しさん2009/12/07(月) 23:40:32
#define WINVER 0x400
#define _WIN32_WINNT 0
#define _WIN32_IE 0x200

こんな制限だと古臭いソフトしか作れんだろ
0147デフォルトの名無しさん2009/12/08(火) 01:10:33
Win95くらいで自慢すんな。Win32sまでサポートしろ。
0148デフォルトの名無しさん2009/12/08(火) 02:12:04
STRICTを定義するとハンドルの代入ミスなどが分かると知りましたが
コンパイラ側でこの機能は実装されてはいないのでしょうか?
STRICTを定義する手法については今知ったので、今まで作ったプログラムに
そういったところで危ない記述がされているのではないかと不安です。
0149デフォルトの名無しさん2009/12/08(火) 07:35:40
windef.hを見れば一目瞭然だけど、
NO_STRICTが宣言されていない限り勝手にSTRICTは定義される。
STRICTがどうのこうのというのはWin16時代の話じゃなかったかなあ。
0150デフォルトの名無しさん2009/12/08(火) 08:06:04
VC6だろ
0151デフォルトの名無しさん2009/12/08(火) 12:14:25
仕事でWinMain使ってゴリゴリやる案件ってある?
0152デフォルトの名無しさん2009/12/08(火) 13:12:57
ゲームやパッケージソフトの開発
0153デフォルトの名無しさん2009/12/08(火) 14:21:32
マルチスレッド化して超高速演算が求められるシミュレートなど
0154デフォルトの名無しさん2009/12/08(火) 14:31:18
それに求められるのはmainであってWinMainじゃないような気がするなぁ
0155デフォルトの名無しさん2009/12/08(火) 14:46:05
意外とあるんじゃないか。潜在的には。きびきびとした
動作のアプリ開発で本当に完成度を高めたいというので
あればは未だVC6が最高と。(.NETは難しいので
発注者がリスクヘッジの為に必ずと言って良いほど
Webアプリ版も作り、そちらのほうが開発の進捗が
解りやすいので、結局大抵ポシャる)
ただVC6はただでさえ難しいC++のWindows版を
扱うわけで新参者が入れる世界じゃなくなってるし
新参者も激減してる。
0156デフォルトの名無しさん2009/12/08(火) 15:04:48
VC6よりVC2008やintel c++の動作上だろ
最新cpuに対応しつつ、過去のcpu用コードも埋め込める。
過去用部分ですら、vc6を上回るだろ。
0157デフォルトの名無しさん2009/12/08(火) 15:06:55
> 新参者も激減してる

いらんツールから撤退してるだけ。vc6で可能なことはvc2008で出来る
わざわざいらんツール使うのが変
0158デフォルトの名無しさん2009/12/08(火) 15:11:54
もうVC6って11年前なんだな
なんか感慨深い
0159デフォルトの名無しさん2009/12/08(火) 15:25:48
WinMainから始まるアプリはまだある程度あると思うが
apiをじかに呼び出しまくる案件はまずないと思う
基本的に仕事に求められるのがスピードと安定性だから
実績のあるベンダーのライブラリを使うことが多い
案件の応募条件にライブラリの実務経験が問われるくらいだから
大量のapiを覚えるよりライブラリの使い方を覚えたほうがいいのが実際のところ
Advenced Windowsで覚えたapiもフリーソフトを作ったときには役に立ったが
仕事で役に立ったと実感したことはない
0160デフォルトの名無しさん2009/12/08(火) 15:29:23
GUIやるのにHSPは簡単で優れていると思う。
これで開発してコードをC++にコンバート出来ればいいと思う。
0161デフォルトの名無しさん2009/12/08(火) 15:31:40
HSPとかお呼びじゃ無いから学校でノベルゲー作ってろ
0162デフォルトの名無しさん2009/12/08(火) 15:36:20
HSP使ってないやつは駄目だな。
これは開発効率良いよ。
コンパイルがC++コンパイラの50倍は速いな。
あと標準でいろいろincludeファイルが付いてて
中身もC++より記述が簡単で手を加えることも出来る。
0163デフォルトの名無しさん2009/12/08(火) 15:43:54
軽さ追求のテキストエディタとかはまだ API でゴリゴリなんじゃないかな。
0164デフォルトの名無しさん2009/12/08(火) 15:45:19
たとえばメニュー付きウィンドウがこれだけのコードでかける。
サンプル 拡張子はexe
http://kineko.dyndns.org/~touhou/up/source/up3156.jpg


#include "mod_menu.as"
oncmd gosub *OnCommand, WM_COMMAND ; メッセージ割り込み
; サブメニュー作成
newmenu hfilemenu,1
addmenu hfilemenu, "開く(&O)", 1
addmenu hfilemenu, "終了(&Q)", 2
; トップメニュー作成
newmenu hmenu,0
addmenu hmenu, "ファイル(&F)", hfilemenu, 0x10
applymenu hmenu
stop

; メッセージの処理
*OnCommand
cmd=wparam & 0xFFFF
if cmd=1
dialog "メニューを選択しました。"
if cmd=2 {
end }
return
0165デフォルトの名無しさん2009/12/08(火) 15:50:44
やっぱAPIでゴリる案件ってないんだね
せいぜいWin版ゲーム関係だろうなぁ
まあDirectXも絡むんだろうけど

いやあ、仕事でそういうの無くって温くてつまらないんだよね…。
一度でいいから身震いするぐらいコアなwindowsプログラム組みたいな
趣味じゃなくて仕事でね
0166デフォルトの名無しさん2009/12/08(火) 15:51:38
その程度ならIDE使えばコーディングする必要性すらねーな
MessageBox(0,"aaaaa",0,0)だけ書ければOK
0167デフォルトの名無しさん2009/12/08(火) 15:56:17
スレチ
0168デフォルトの名無しさん2009/12/08(火) 16:03:34
APIで身震いするってのは少し変
内輪でも無い人間にはまともに相手できたものじゃない池沼さん
扱ってる位の感覚でよろ
0169デフォルトの名無しさん2009/12/08(火) 16:15:01
なんでHSP厨が紛れ込んでるんだろう
0170デフォルトの名無しさん2009/12/08(火) 16:17:23
虫の居所でも悪かったんじゃないか
0171デフォルトの名無しさん2009/12/08(火) 16:18:29
gosubてw
こんな馬鹿丸出しの言語よく使えるな
0172デフォルトの名無しさん2009/12/08(火) 16:24:42
ていうかHSPは馬鹿しか使えない言語だから。
0173デフォルトの名無しさん2009/12/08(火) 16:42:06
はいはいそろそろすれ違いでぷ
0174デフォルトの名無しさん2009/12/08(火) 18:40:38
GUIだけはC#使っています。スレ違いでごめんなさい。でも楽です。
で、メインの処理やWin32APIが必要なところをC++でDLLで作る、いいとこ取りです。
0175デフォルトの名無しさん2009/12/08(火) 20:34:16
.NETアプリは起動が遅いのとOffice2003の劣化コピーみたいなUIがイヤ
0176デフォルトの名無しさん2009/12/08(火) 20:39:21
HSPのGUIは速いよ
0177デフォルトの名無しさん2009/12/08(火) 21:16:04
しつけーんだよ
0178デフォルトの名無しさん2009/12/08(火) 21:54:15
.NETアプリの起動は遅いね…。
0179デフォルトの名無しさん2009/12/08(火) 21:55:27
そのうち早くなるって
0180デフォルトの名無しさん2009/12/08(火) 23:21:07
.NETは極力.NETで閉じさせたほうがいいと思われ
API混ぜるとロクなこと無いと
0181デフォルトの名無しさん2009/12/09(水) 00:01:07
シフト演算(主に論理右シフトとか論理左シフトとか)のAPIってありますか?
VB6にシフト演算の処理が無いみたいで
0182デフォルトの名無しさん2009/12/09(水) 00:05:54
んなもの作らんで、配列に用意しておけばいいだろ

Dim shr(65536) as integer,shl(65536) as integer
for i=1 to 65536
shr(i)=i ¥ 2
next
for i=1 to 65536
shl(i)=i*2
next
とか(文法適当だからね)
01831812009/12/09(水) 00:12:15
つまりシフト演算のAPIは無いから自分で作れってことですね・・・わかりました。ありがとうございました。
0184デフォルトの名無しさん2009/12/09(水) 00:16:46
>>182
間違っとるぞw
0185デフォルトの名無しさん2009/12/09(水) 00:43:38
昔の名残で、RtlLargeIntegerShiftLeftとかある事はあるんだけどねえ。
WDKにしか載っていないような奴だし、そこでも既にObsolute扱い。
0186デフォルトの名無しさん2009/12/09(水) 00:55:09
Int64ShrlMod32
Int64ShllMod32
0187デフォルトの名無しさん2009/12/09(水) 10:10:32
VB6以外にゃ言語レベルで備わってるものをわざわざAPIとして用意する意味ないし無くて当然でしょ
加減乗除のAPIはありますか?と同レベル
0188デフォルトの名無しさん2009/12/09(水) 10:32:49
一部のAPIはC言語のマクロを含むのでC開発者向けに「ある」としても
それがVBで使えるとは限らない。APIという用語が拡大解釈されて久しい
0189デフォルトの名無しさん2009/12/09(水) 11:34:48
Imm関連の質問なのですがこちらでもよろしいでしょうか?
0190デフォルトの名無しさん2009/12/09(水) 11:36:14
どうでしょうね?
0191デフォルトの名無しさん2009/12/09(水) 13:44:30
メッセージとAPIだしいいんじゃね
0192デフォルトの名無しさん2009/12/09(水) 20:46:33
独自フォーマットのファイル(拡張子を仮に.xxxとします)の内容を表示する
ビューワアプリを作っています。

仕様としては、

A: 対象ファイルをアプリexeにD&Dする
B: .xxxファイルをビューワアプリに関連付けして、ダブルクリックする

AあるいはBの操作によって、ビューワアプリはWinMain関数のコマンドライン引数の
ファイルパスを見て、それをオープンし、内容を読み取り・表示する、という算段です。

Aに関しては動作するようにできましたが、
Bに関しては、うまく動作してくれません・・・
MessageBoxを使って、ファイルオープン直前に、ファイルパスがどのようになっているかを
表示させてみましたが、Aの時と同様、何ら問題がありません。

AのケースとBのケースとで、Win32apiレベルの違いは何かあるのでしょうか?
それをヒントに原因究明と対策を考えたいと思います。

よろしくお願いします。 m(_ _)m
0193デフォルトの名無しさん2009/12/09(水) 20:53:57
パスに空白が含まれてるとかそんなの?

hoge.exe "%1" って登録してある?
01941922009/12/09(水) 20:58:00
>>193
いえ、試したパスには空白は含まれていませんでした。

>hoge.exe "%1" って登録してある?
すみません、"%1"とはどういうことでしょうか??
登録というのは・・・??
分からないことばかりですみません。
0195デフォルトの名無しさん2009/12/09(水) 21:21:29
じゃ、違うね。

関連づけすると、レジストリにそういう風に登録されるのよ。
たまに、ダブルクォートが付かない形で登録されてて、空白を含むパスで動かないと。

うまく動作しない、ってことだけど、その辺もう少し具体的に説明したほうがいいよ。
01961922009/12/09(水) 21:37:15
>>195
そういうことでしたか。
ありがとうございます。

うまく動作しないということの詳細ですが、
表示はDirectXのAPIを使って行っています。
その表示が初っ端から出てこず、Windowのグレーの背景のままで、
アプリが固まって操作を受け付けなくなります。
こうなると、タスクバーで右クリック->「閉じる」とするか、タスクマネージャで終了を指示するなどして、
強制終了させるしかなくなります。

ファイルの読み込みはwhile(1)でまわして行い、区切りのトークンが得られたらbreakで
抜けるようにしています。
やはりファイルの読み込みがうまくいかず、そのwhile(1)から抜けられないのでは・・・

明日、会社でもうちょっと調べてみます。
VC++上でデバッグできないので、しんどいですが・・・ orz
0197デフォルトの名無しさん2009/12/09(水) 21:47:05
うーん。IDE 上のデバッグで引数与えても起きないんだよね?

一緒のはずなんだけどな。
0198デフォルトの名無しさん2009/12/09(水) 21:50:00
こういう時は伝統のログファイルだな。
うっかりバッファリングで吐き出し損ねないように注意。
0199デフォルトの名無しさん2009/12/09(水) 22:05:16
バグは、夜遅くまで悩んでても時間の無駄
明日の朝になればあっさり解決!

と言うパターンになりそうだな
02001922009/12/09(水) 22:14:37
>>197
はい、IDE上のオプションで引数を与えてシミュレーションして確認しましたし、
ファイルをアプリにD&Dしての起動ではうまくいっています。
関連付けでファイルダブルクリックでもいっしょですよね・・・
(引数も同じものがきているのを確認していますし)

>>198
なるほど。
ログファイル出力も検討します。

>>199
そうなることを期待しますw
0201デフォルトの名無しさん2009/12/09(水) 22:16:11
引数受け取る部分のソース上げれば速いがな・。
コードの問題か、他所かは判明する。
0202デフォルトの名無しさん2009/12/09(水) 22:17:45
自分もそういう経験があった気がする。
ロング、ショートとか。括弧の有無とか。
DDのときだけ違う形式とかあるな。
0203デフォルトの名無しさん2009/12/09(水) 22:23:47
自分はおさげが好きです。
0204デフォルトの名無しさん2009/12/09(水) 22:26:03
たぶん絶対パスと、カレントにないのに勝手にカレントとして
送ってるとかだろ。
0205デフォルトの名無しさん2009/12/09(水) 22:27:34
>WinMain関数のコマンドライン引数の
これがバグの元

コマンドライン引数は__argcと__targvで解釈しないとうまくいかないよ
0206デフォルトの名無しさん2009/12/09(水) 22:29:28
引数名は関係ないだろ。 cとvでも良いし。 観衆でしょ。
0207デフォルトの名無しさん2009/12/09(水) 22:57:23
__argcと__targvはCRTのグローバル変数だろ。

そんなことすら分からない頭の悪さはどうしようもないな。
0208デフォルトの名無しさん2009/12/09(水) 22:59:17
そうなんか
0209デフォルトの名無しさん2009/12/09(水) 23:00:23
SDK プログラミングで ActiveX コントロールを使うにはどうすればいいですか?
0210デフォルトの名無しさん2009/12/09(水) 23:01:59
素直にATL使っとけ
0211デフォルトの名無しさん2009/12/09(水) 23:02:45
COMの仕様に沿って利用する
0212デフォルトの名無しさん2009/12/09(水) 23:50:59
サービスのプログラムからSH系のAPIって呼んでも大丈夫でしょうか?
シェルっていうくらいだからなんかExplorerとかに依存してるか、ないのかなとか?
サービスはExplorerより先に起動しますし。
0213デフォルトの名無しさん2009/12/09(水) 23:54:02
>>192
関連付けの時にDDEを使うにチェックが入ってるとかは?
関係ない?
0214デフォルトの名無しさん2009/12/10(木) 00:58:02
>>212
全然大丈夫
0215デフォルトの名無しさん2009/12/10(木) 11:38:41
もしかしたらC++の質問かもしれないけど
Aというクラス内でウィンドウを作成し、他にクラスBがある
クラスBは、クラスAのインスタンスは知らないけれど
クラスA内で作成されたウィンドウのハンドルは知っている

以上の条件で、クラスBからクラスAのインスタンスを取得
する方法はないだろうか?
0216デフォルトの名無しさん2009/12/10(木) 11:44:52
無い
0217デフォルトの名無しさん2009/12/10(木) 11:48:01
ウインドウハンドルとインスタンスを関連づけるデータを別に持っておけばいい。
0218デフォルトの名無しさん2009/12/10(木) 11:53:06
SendMessage でやりとりすればできたりするかも
よくわかんないけど。
独自のメッセージって遅れるのかな
0219デフォルトの名無しさん2009/12/10(木) 12:51:35
SendMessageしてthisを返してもらう
0220デフォルトの名無しさん2009/12/10(木) 12:58:20
SetProp使えよ
0221デフォルトの名無しさん2009/12/10(木) 13:00:02
>独自のメッセージって遅れるのかな

この程度で無理に回答しなくていいよ。
0222デフォルトの名無しさん2009/12/10(木) 14:13:47
ATLはコントロールIDをキャストしてインスタンスが取れるようになってるな
なんて無茶苦茶な・・・
0223デフォルトの名無しさん2009/12/10(木) 14:58:40
>>192
コマンドライン引数文字列の文字セットで W と A の差に嵌っているとか?
0224デフォルトの名無しさん2009/12/10(木) 15:01:01
>>192
関連付けの仕方が間違ってるとか無い?
フォルダオプションとか開いて確認してみたの?
0225デフォルトの名無しさん2009/12/10(木) 15:08:07
>>205が答えだろ
WinMain関数第3引数を使うのが悪い
0226デフォルトの名無しさん2009/12/10(木) 15:12:08
GUIプログラムならDDE通信
0227デフォルトの名無しさん2009/12/10(木) 15:16:22
WinMain関数の引数って全部無くていいよなw
0228デフォルトの名無しさん2009/12/10(木) 15:26:02
VC6 のエントリーポイントそのものは 引数無しだしな
そこでがんばって WinMain の引数作って WinMain 呼び出ししてる (CRTEXE.c / mainCRTStartup)
0229デフォルトの名無しさん2009/12/10(木) 15:31:43
DDE通信って何だ?
0230デフォルトの名無しさん2009/12/10(木) 15:41:58
HINSTANCEは__ImageBaseから取得できるし
コマンドライン文字列は__argcと__targvで良いし
ShowWindowにはSW_SHOWDEFAULTで良いし
4つも引数あるのに全くもって無用の長物だよなw
0231デフォルトの名無しさん2009/12/10(木) 15:44:49
Microsoftは無駄が好きなんです
0232デフォルトの名無しさん2009/12/10(木) 15:47:17
>>229
ウィンドウメッセージを使った他アプリケーションとのデータ交換
0233デフォルトの名無しさん2009/12/10(木) 16:06:34
スクリーンキーボードのような動きをするウインドウを
作るのって簡単でしょうか?
0234デフォルトの名無しさん2009/12/10(木) 16:09:57
とてもとても難しいです
0235デフォルトの名無しさん2009/12/10(木) 16:12:50
スクリーンキーボードはウィンドウズの非公開技術によって作られています
0236デフォルトの名無しさん2009/12/10(木) 16:20:45
JavaScriptとHTMLでA,B,C,D...とかついたボタンをクリックすると
テキストエリアにその文字が追加されていくようなプログラムって
非公開技術なの?(やさしいHTMLとかいう名のエロ本で読んだことあるような..)
0237デフォルトの名無しさん2009/12/10(木) 16:24:43
おしっこだけしたいのにおならが出ちゃうのと同じ技術
うんこだけしたいのにおしっこも出ちゃうのとは少し違う
0238デフォルトの名無しさん2009/12/10(木) 16:26:18
>>236
え?そんなの簡単じゃん
0239デフォルトの名無しさん2009/12/10(木) 16:29:23
任意のアプリのキー入力情報を書き換えるプログラムが
公開技術なわきゃないだろ
0240デフォルトの名無しさん2009/12/10(木) 16:39:31
カレントのアプリケーションってことにすると
スクリーンキーボードをクリックしたらカレントがスクリーンキーボードに移るから
一つ前にカレントだったアプリケーションを記憶しておき
それにSendKeysで文字送ればええんとちゃう?APIいらなくない?
0241デフォルトの名無しさん2009/12/10(木) 16:41:56
keybd_event
SetKeyboardState
SendInput
0242デフォルトの名無しさん2009/12/10(木) 16:47:24
?
0243デフォルトの名無しさん2009/12/10(木) 17:02:31
!
0244デフォルトの名無しさん2009/12/10(木) 17:13:32
ああ無情
0245デフォルトの名無しさん2009/12/10(木) 17:28:07
>>233と>>236は同一人物?
0246233=2362009/12/10(木) 17:50:28
呼んだ?
0247デフォルトの名無しさん2009/12/10(木) 18:00:38
もし、そのテキストエリアがHTML上にあるなら、
DOM経由でいじればいいだけのこと。
ややスレ違い。
http://msdn.microsoft.com/en-us/library/aa741682.aspx
http://msdn.microsoft.com/en-us/library/ms535904.aspx
0248デフォルトの名無しさん2009/12/10(木) 20:18:17
そのHTMLをIEでオープンしてるとは限らないだろ。
0249デフォルトの名無しさん2009/12/10(木) 21:02:40
わざわざ作らなくても最初からMS-IMEについてるし、他にもソフトが出回ってると思う。
自分で作る前に既存のものを研究しとけ
0250デフォルトの名無しさん2009/12/10(木) 21:18:15
別に DOM は IE だけの技術じゃないわけだが。
02511922009/12/10(木) 21:49:51
解決しました!

・やはりファイル読み込みのwhile(1)ループでハマってしまっていた
 ↓
・CreateFile関数の戻り値を調べると-1(失敗)に
 ↓
・GetLastErrorでエラーの意味を取得すると123が得られた
 ・意味は「ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています」
 ↓
・CreateFileに与えるファイル名を改めてよく見てみると・・・
 なんと、ダブルクリックで開いた場合は、パスが""で囲まれていて、
 その他D&D等、成功していたときは囲まれていなかった!
 (昨日は動揺のためか、気付けなかった・・・ orz)
 ↓
・""を取り除いて与えるようにしたら、ダブルクリックでも正常動作!感動した!

ということでした。
何でダブルクリックで開いたときは""が付くんでしょうね^^;

みなさん、たくさんのアドバイスを下さってありがとうございました!
0252デフォルトの名無しさん2009/12/10(木) 21:52:04
いや、だから、レジストリでそういう風に登録されてるんだろ?
0253デフォルトの名無しさん2009/12/10(木) 22:03:41
D&Dとかでも、パスに空白を含んでいたらクォートされると思うぞ。
CommandLineToArgvWでも使っとけ。
0254デフォルトの名無しさん2009/12/10(木) 23:25:36
LCMapStringで半角→全角変換するとき\だけ半角のまま・・・
\以外にも全角変換できない文字ってあんのかな?
0255デフォルトの名無しさん2009/12/10(木) 23:37:59
>>251
だから__argcと__targvを使えと散々出てるだろが
どうせ今度は複数ファイルをD&Dした時にハマって質問するんだろ
0256デフォルトの名無しさん2009/12/11(金) 08:30:27
ファイルオープン失敗してるのに無限ループに突入しちゃうプログラムてどうなのよ
0257デフォルトの名無しさん2009/12/11(金) 10:16:53
>>256
if(INVALID_HANDLE_VALUE == CreateFile(...))
{
  while(1);
}
0258デフォルトの名無しさん2009/12/11(金) 11:44:20
>>257
成功したハンドルはどこにも保存しないのか
0259デフォルトの名無しさん2009/12/11(金) 12:50:12
>>258
if(INVALID_HANDLE_VALUE == CreateFile(...))
{
  while(1);
}
else
{
  int i = 0;
  while(++i)
  {
    CloseHandle((HANDLE)i);
  }
}
0260デフォルトの名無しさん2009/12/11(金) 17:54:24
無差別に閉じんなよwww
0261デフォルトの名無しさん2009/12/11(金) 17:56:10
DLLとの引数や返り値のやり取りの件なんですけど
1:アロケータ・デアロケータを公開してPOD構造のみでやり取り(C)
2:1に加えてインターフェース・生成関数・破棄関数をセットでやりとり(C++)
これでとりあえず間違いは起こりませんよね?
0262デフォルトの名無しさん2009/12/11(金) 18:15:48
COMみたいにReleaseを呼んで参照カウンタがゼロになったら開放しとけ
02631922009/12/11(金) 18:44:05
すみません、ご指摘通り、__argvを使って難なく処理できました。
ありがとうございました。
0264デフォルトの名無しさん2009/12/11(金) 23:37:59
WinMainとWinProcでデータを共有したいと思ったらグローバル変数とか使わないとだめ?
WinProcにパラメータで渡す方法とかないんだろうか
0265デフォルトの名無しさん2009/12/11(金) 23:42:48
ウィンドウに対してデータを関連付けて、WinProcのHWND引数から取り出す。
SetPropとか。
0266デフォルトの名無しさん2009/12/11(金) 23:45:09
SetPropというのがあったのね知らなかった。ありがとう
0267デフォルトの名無しさん2009/12/11(金) 23:49:07
それってSetWindowLongとは違うの?^^
0268デフォルトの名無しさん2009/12/11(金) 23:51:14
違わない
SetWindowLongでGWL_USERDATA渡したときと一緒
0269デフォルトの名無しさん2009/12/11(金) 23:53:14
え?
違うよバカ。
MSDN読めハゲ。
そして死ねよクソブタ。
0270デフォルトの名無しさん2009/12/11(金) 23:54:31
ども。サンクスです^^
0271デフォルトの名無しさん2009/12/11(金) 23:55:56
SetPropは値にアトムか文字列を紐付けられるので複数の値を保存できる
SetWindowLong+GWL_USERDATAだと保存できる値は1個だけ
0272デフォルトの名無しさん2009/12/12(土) 00:09:50
ATOMっていまいち意味わからないんだよね。
MSDNのどこを調べても抽象的な説明ばかり…
0273デフォルトの名無しさん2009/12/12(土) 02:05:10
アトムテーブルに文字列や識別子を登録した際に返される16bit値がアトム。
……とAtomsの所に思いっきりベタに書いてあるように見える。

で、この値からは逆に文字列等を取り出すことができる。
ちなみにアトムテーブルの特徴として、同じ文字列や識別子を二つ以上は追加できず、
追加しようとした時は以前登録した時のと同じアトムを返す、というのがある。
0274デフォルトの名無しさん2009/12/12(土) 02:22:38
WM_CREATEのとき、CREATESTRUCTのlpCreateParamsに
WinMainと共有する変数のアドレス渡してWndProc内のstatic変数にそのアドレス
保存するってのは?
0275デフォルトの名無しさん2009/12/12(土) 02:27:45
あるウィンドウのスクリーンショットをクリップボードにコピーして、
PowerPointに貼り付けるVBAコードを作ってます。
下記のkeybd_eventを使って、出来たのは出来たのですが、
たまに画面全体がコピーされることがあり、Sleepを入れて対応せざるおえません。

Call keybd_event(VK_LMENU, &H56, KEYEVENTF_EXTENDEDKEY Or 0, 0)
Call keybd_event(VK_SNAPSHOT, &H79, KEYEVENTF_EXTENDEDKEY Or 0, 0)
Call keybd_event(VK_SNAPSHOT, &H79, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)
Call keybd_event(VK_LMENU, &H56, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)

貼り付ける枚数が多いので、PrintWindowの勉強をして
処理を早くしたいと思ってるのですが、
以下のコードだと、クリップボードにデータが入っていない様です。
ご教授頂けると助かります。宜しくお願いします。

hOwner = GetDesktopWindow()
hdc = GetDC(hOwner)
hClipDC = CreateCompatibleDC(hdc)
hBit = CreateCompatibleBitmap(hdc, 845, 553)
hOldBit = SelectObject(hClipDC, hBit)
Call PrintWindow(|コピーしたいウィンドウのハンドル|, hClipDC, 0)
Call OpenClipboard(0)
Call EmptyClipboard
Call SetClipboardData(CF_BITMAP, hClipDC)
Call CloseClipboard

・hBitまでは成功している様に見えるのですが、
 hOldBitには0が返されます。
・Call PrintWindowの時は、Trueが返されます。
0276デフォルトの名無しさん2009/12/12(土) 09:36:29
SetClipboardDataで第一引数にCF_BITMAPを指定したとき
第二引数には何を指定すべきか調べよう
0277デフォルトの名無しさん2009/12/12(土) 09:37:42
MSDNは英語版読めよ
0278デフォルトの名無しさん2009/12/12(土) 11:12:28
残念ながら、そのとおりだな。
日本語版MSDNは穴だらけ。
0279デフォルトの名無しさん2009/12/12(土) 12:56:04
>>275
OpenClipboardのhwndにNULLを渡した時は、
EmptyClipboardでクリップボードのオーナーがNULLが設定され、
その結果SetClipboardData呼び出しは失敗する。

と書いてあるな。
FindWindowか何かでPowerPointのメインウィンドウハンドルを取得して、
そいつを渡してやればいいんじゃないか?
バージョンに拠っては、既にプロパティとして用意されているかもな。
0280デフォルトの名無しさん2009/12/12(土) 15:19:29
>>275
指定のフォルダにファイル保存できるスクリーンキャプチャソフトがあるだろ。
そいつを使ってスクリーンショットを次々に保存していって
後でそのフォルダの画像ファイルを一括してPowerPointに貼り付ければいい。
0281デフォルトの名無しさん2009/12/12(土) 20:00:22
SetClipboardViewer APIを使って簡単なクリップボード拡張プログラムを作ってます
初回起動時にクリップボードの内容が取得できないことがあります
わかっているのはファイル名を指定して実行でCLIPBRD.EXEを起動後にソフトを起動したら正常に内容が取得できます
クリップボードチェインが取得できないときはMessageBox APIでエラーを通知するようにしているのですがエラーも出ないで起動するときがあります
クリップボードの中身はテキストなのですが、クリップボードの内容が取得できない原因として何が考えられますか?
02822812009/12/12(土) 20:03:40
ソースはこんな感じですが
case WM_CREATE:
memset(szBuffer, '\0', sizeof(szBuffer));
hNextWnd = SetClipboardViewer(hWnd);
if(hNextWnd) MessageBox(hWnd,"Viewer Hanle Error","Error",MB_OK);
GetClientRect(hWnd, &rc);
hEdit = CreateWindow(
"EDIT",
NULL,
WS_CHILD | WS_VISIBLE |
ES_WANTRETURN | ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL |
ES_AUTOHSCROLL | WS_HSCROLL,
0, 0,
rc.right, rc.bottom,
hWnd,
(HMENU)ID_EDIT,
hInst,
NULL);
SendMessage(hEdit, EM_SETLIMITTEXT, (WPARAM)1024*1024, 0);
if(OpenClipboard(hWnd) && (hg = GetClipboardData(CF_TEXT))) {
strText = (PTSTR)GlobalLock(hg);
strcpy(szBuffer, strText);
Edit_SetText(hEdit, szBuffer);
GlobalUnlock(hg);
CloseClipboard();
}
break;
0283デフォルトの名無しさん2009/12/12(土) 20:08:03
Hanle Error
0284デフォルトの名無しさん2009/12/12(土) 20:09:49
クリップボードに sizeof(szBuffer) を超える文字列をセットしたら
簡単にバッファオーバーランできるぞw
02852812009/12/12(土) 21:12:23
�d
>>283
ハンドルエラーですか
GetLastError()で探ってみますね

>>284
私的に使うので問題ないですよ
まだ完成ではないので問題があったら修正しますね
0286デフォルトの名無しさん2009/12/12(土) 22:00:23
"Hanle"に突っ込んだだけだろ馬鹿w
0287デフォルトの名無しさん2009/12/12(土) 22:04:52
CLIPBRD.EXEってWin98のクリップボードビューアのことか?
凄い環境で開発してるんだな
02882812009/12/12(土) 22:10:57
>>287
開発環境はNT4.0/VC++5.0です
CLIPBRD.exeはXPでも動作しますよ
互換性を考えてC言語で作ってるのですが
0289デフォルトの名無しさん2009/12/12(土) 22:14:05
OS付属のプログラムを他のOSに持って行ったらライセンス違反ですよ
0290デフォルトの名無しさん2009/12/12(土) 22:15:49
バッファオーバーランする糞コードを平気で書いてるぐらいだから
どうせ他の部分でもトチ狂ったコード書いてるんだろ
02912812009/12/12(土) 22:21:44
>>289
いあ、実際試してみろって、ライセンスとか問題じゃないから
CLIPBRD.EXEが動くの俺だけなのか?
02922812009/12/12(土) 22:23:01
ちなみにXP Proだけど
0293デフォルトの名無しさん2009/12/12(土) 22:26:25
> ライセンスとか問題じゃないから
死ね
0294デフォルトの名無しさん2009/12/12(土) 22:27:01
ウザイから放置で
0295デフォルトの名無しさん2009/12/12(土) 23:13:53
チェックボックスに対してBS_ICON属性を指定し
そのチェックボックスにアイコンを表示させてるものを作っているのですが
このときアイコンのサイズとチェックボックスコントロールの縦と横サイズを
自動で計算して合わせるのに有効なやり方などはありますか?

CreateWindow時に固定でサイズを指定するやり方は
なんとなくナンセンスな気がするので教えていただきたいです。
0296デフォルトの名無しさん2009/12/12(土) 23:19:58
BCM_SETIMAGELISTとBCM_GETIDEALSIZEでどうにかなるんじゃね?
0297デフォルトの名無しさん2009/12/13(日) 11:17:01
>>295
RECT rc, rcClient;
SIZE siz, siz2, sizClient;
GetWindowRect(hWnd, &rc);
GetClientRect(hWnd, &rcClient);
siz.cx = rc.right - rc.left;
siz.cy = rc.bottom - rc.top;
sizClient.cx = rcClient.right - rcClient.left;
sizClient.cy = rcClient.bottom - rcClient.top;
siz2.cx = (...) + (siz.cx - sizClient.cx);
siz2.cy = (...) + (siz.cy - sizClient.cy);
SetWindowPos(hWnd, NULL, 0, 0, siz2.cx, siz2.cy, SWP_NOMOVE | SWP_NOZORDER);
0298デフォルトの名無しさん2009/12/13(日) 11:22:36
//dll.cpp
#include <windows.h>
extern "C"
{
__declspec(dllexport) void CALLBACK hello(void){
MessageBox(0, "hello", "world", MB_OK);
}
}

//main.cpp
#include <windows.h>
typedef void (CALLBACK *hello_func)(void);
int main(void)
{
HMODULE module = LoadLibrary("dll.dll");
if(!module) {
MessageBox(0, "LoadLibrary", "Error", MB_OK);
return -1;
}
hello_func hello = (hello_func)GetProcAddress(module, "hello");
if(!hello){
MessageBox(0, "GetProcAddress", "Error", MB_OK);
FreeLibrary(module);
return -1;
}
hello();
FreeLibrary(module);
return 0;
}

GetProcAddressのところで失敗してしまいます。何が問題なんでしょうか?
0299デフォルトの名無しさん2009/12/13(日) 11:25:59
ちゃんとエクスポートされてるか確認したのか?
0300デフォルトの名無しさん2009/12/13(日) 11:27:36
GetLastError() って便利な関数があってだな・・・。
0301デフォルトの名無しさん2009/12/13(日) 11:28:56
CALLBACKといことはstdcallだから、hello@0という名前でエクスポートされてるのでは?
0302デフォルトの名無しさん2009/12/13(日) 12:01:48
まずはDependency Walker使ってみようぜ
0303デフォルトの名無しさん2009/12/13(日) 12:27:50
漢は黙って dumpbin /exports だ。
0304デフォルトの名無しさん2009/12/13(日) 13:24:47
俺はこれだな。
ttp://homepage3.nifty.com/k-takata/mysoft/ijexp32.html
03052982009/12/13(日) 13:43:41
レスありがとうございます
dumpbinを使ってみたところ_hello@0という名前になってました
ゲームエンジンプログラミングという本のサンプルだと関数名そのままで扱っていたのですが・・・これは本が間違ってるんでしょうかね?
0306デフォルトの名無しさん2009/12/13(日) 13:52:39
>>305
その本は知らないけど、コンパイラがBCCの奴じゃないかな。
ネットで調べたら、BCCだと__stdcallを同名でエクスポートするって情報があった(VCしか知らないので逆に驚き)。
VCだとdefファイル作成して
 EXPORTS
 hello=hello
とでもしないと同名ではエクスポートできなかったと思う。
APIは問題なかったみたいね。

>>304
これいいね。
0307デフォルトの名無しさん2009/12/13(日) 16:56:46
ShellExecuteすると特に終了待ちするわけでもないのに
アプリが起動して入力受け付けるまで(かどうかはよくわからないけど)
呼び出し元のアプリがフリーズしてしまうんだけど
サブスレッドから呼ばない限りブロックされるのを防ぐ方法ってないですかね。
0308デフォルトの名無しさん2009/12/13(日) 17:35:43
275です。みなさん、ご回答をありがとう御座います。
大変勉強になります。
しかしながら、未だ解決出来ずにいます。
なんとか、PrintWindowを使って、クリップボードにBitmapを入れたいので、
ご教授をお願いします。
成功が望めるなら、BitBltを使ったやり方でもいいです。
こっちでもうまくいってません。

>>276
冷静な回答をありがとう御座います。
CreateCompatibleBitmapしたオブジェクトのハンドル hBit で実行して、
うまくいかなかったので、色々試して(初心者なので)いて、
そのうちの間違ったままのソースを載せてました。

>>279
PowerPointのハンドルでOpenClipboardするということでしょうか?
その認識で試してみましたが、どこか違う様です。

>>280
以前はそれに近い方法で運用していましたが、
クリップボードから貼り付ける方法の方が早いので、
今のソースコードを完成させたいと思っています。

新しい情報です。
・SetClipboardData(CF_BITMAP, hBit)で実行したところ、
 データのハンドルは返されています。
・IsClipboardFormatAvailable(CF_BITMAP)で確認しても、
 NULLが返されます。
0309デフォルトの名無しさん2009/12/13(日) 20:11:19
#define DEBUG_API(expr) \
{if(!(expr)){ _tprintf(_T("%s failed, ::GetLastError()=%#lx\n"), _T(#expr), ::GetLastError()); __debugbreak();}}

if(HWND hTarget = FindWindow(_T("Notepad"), NULL)){
// hTarget = ::GetDesktopWindow();
RECT rect; DEBUG_API(::GetWindowRect(hTarget, &rect));
HDC hdc = ::GetDC(hTarget);
HDC hClipDC = ::CreateCompatibleDC(hdc);
HBITMAP hBit = ::CreateCompatibleBitmap(hdc, rect.right-rect.left, rect.bottom-rect.top);
HGDIOBJ hOldBit = ::SelectObject(hClipDC, hBit);
// hTargetがデスクトップだとPrintWindow()が失敗する。理由は知らない。
DEBUG_API(::PrintWindow(hTarget, hClipDC, 0)); // ::GetLastError()は意味なしっぽい。
DEBUG_API(::OpenClipboard(NULL));
DEBUG_API(::EmptyClipboard());
DEBUG_API(::SetClipboardData(CF_BITMAP, hBit));
DEBUG_API(::CloseClipboard());
::SelectObject(hClipDC, hOldBit);
DEBUG_API(::DeleteBitmap(hBit));
DEBUG_API(::DeleteDC(hClipDC));
DEBUG_API(::ReleaseDC(hTarget, hdc));

return ::IsClipboardFormatAvailable(CF_BITMAP);
}

return FALSE;

上の検証コードでIsClipboardFormatAvailable()はゼロ以外を返したよ。
::GetDesktopWindow()のハンドルが指定できるか調べてみれば?
0310デフォルトの名無しさん2009/12/13(日) 20:19:03
RegisterHotKey で登録したホットキーを経由して、別ウィンドウがアクティブでも
音楽再生アプリでのplay/stopをしたいと思ったのですが、
nProtectGameGuardのオンラインゲーム上では登録したホットキー使用が不可能でした。
不正行為防止用にそうなっているのは予想が付いたのですが、
他のホットキー登録の方法、代替APIなど有りませんか?
0311デフォルトの名無しさん2009/12/13(日) 20:50:02
そんな特殊な人のため用にわざわざ代替API用意するほどMSがお人よしだと思ってるの
0312デフォルトの名無しさん2009/12/13(日) 21:16:23
思ってるから聞いてるんです。知らないならレスしないで下さい。
0313デフォルトの名無しさん2009/12/13(日) 21:18:58
ローレベルフックでもすれば?
0314デフォルトの名無しさん2009/12/13(日) 21:20:37
またオンラインゲームをチートしたい馬鹿が質問してるのか
03153102009/12/13(日) 21:26:42
>>312は私ではありません
>>313
やはり、ローレベルフックしか無いですよね・・・勉強してきます
>>314
やろうと思えば出来るのでしょうけれど、アングラな世界には入りたくないですね。
と言った所で無駄でしょうね、そう思うならそう思っててください。
0316デフォルトの名無しさん2009/12/13(日) 21:28:53
ローレベルじゃない普通のフックとか、フィルタドライバ書くとか、
他にもいろいろあるよ。
0317デフォルトの名無しさん2009/12/13(日) 21:31:52
単純にタイマー廻してGetAsyncKeyStateなんかは?
0318デフォルトの名無しさん2009/12/13(日) 21:49:31
どうせ
nPro上では無理でした、代替APIなど有りませんか?
で無限ループだろ
03193102009/12/13(日) 23:08:22
フィルタドライバでどうやら実装出来そうです
ありがとうございました
0320デフォルトの名無しさん2009/12/13(日) 23:11:05
あら本気?
0321デフォルトの名無しさん2009/12/13(日) 23:20:26
フィルタドライバが入っていることを認識されてあぼ〜んてオチじゃね?
0322デフォルトの名無しさん2009/12/13(日) 23:30:11
結局チートが目的だったようだ
0323デフォルトの名無しさん2009/12/13(日) 23:33:39
>>321
以前友人が書いていたコードを流用して、
取りあえずフィルタドライバを通して起動してみたところ正常に動作しました。

>>322
何を言っても無駄なようですね、別に構いません。
nProをすり抜けようとする行為自体、nProが望む行為じゃないんでしょうからね。
0324デフォルトの名無しさん2009/12/13(日) 23:35:08
まあそりゃあね
nPro自体行儀いいもんだとも思わないけど
0325デフォルトの名無しさん2009/12/13(日) 23:38:54
Win32APIってC#で使えますか?
0326デフォルトの名無しさん2009/12/13(日) 23:39:57
P/Invoke
0327デフォルトの名無しさん2009/12/13(日) 23:40:09
はい。
0328デフォルトの名無しさん2009/12/13(日) 23:40:17
一々宣言しないといけないから糞面倒だけど使える
0329デフォルトの名無しさん2009/12/13(日) 23:41:57
めんどくさかったらpinvoke.netからコピーして来るのが手軽
0330デフォルトの名無しさん2009/12/13(日) 23:43:52
C#で、他に起動してある特定のアプリウィンドウのタイトルテキストを変更したいのですが、
APIでその動作は可能ですか?
0331デフォルトの名無しさん2009/12/13(日) 23:44:20
そろそろ誰かwindows.csにまとめてくれ
0332デフォルトの名無しさん2009/12/13(日) 23:46:42
可能だからC#スレで聞いてくれ。
0333デフォルトの名無しさん2009/12/14(月) 17:19:47
DirectXとか無しでWinAPIでゲーム作ろうとしたら
WinProcは生成と破棄のみ、入力・更新・描画はメインループで
という形で十分ですかね?
それともメインループでは更新と画面無効化だけ、キーボード入力と描画はプロシージャで〜みたいな感じにした方がいいんでしょうか?
0334デフォルトの名無しさん2009/12/14(月) 18:16:57
前者がよろしいかと
0335デフォルトの名無しさん2009/12/14(月) 19:21:11
おれも前者推奨
0336デフォルトの名無しさん2009/12/14(月) 21:37:43
前者だな
0337デフォルトの名無しさん2009/12/14(月) 21:46:02
レスサンクスです
DxLIBとかしかやってこなかったんでプロシージャみたいな設計だと戸惑ってしまいまして
今まで通りのやりかたでいいみたいですね
0338デフォルトの名無しさん2009/12/14(月) 22:20:45
ゲームは別スレッドでループした方がいいんじゃないの?
作ったことないけど
0339デフォルトの名無しさん2009/12/14(月) 23:02:31
GDIはスレッドセーフじゃないから無闇にマルチスレッド化しない方がいいのでは?
0340デフォルトの名無しさん2009/12/15(火) 04:54:29
ファイルハンドルなどはアプリケーション終了時に解放し忘れても
OSが後片付けしてくれますが、MSDNのDestroyMenuの項に

>アプリケーションを終了する前に、DestroyMenu 関数を使って、
>どのウィンドウにも割り当てられていないメニューを破棄しなければなりません。

と、書いてあるので、メニューハンドルだけは例外で
もしかして破棄しないままアプリケーションが終了すると
OSにすら回収不能なメモリリークになるのですか?
0341デフォルトの名無しさん2009/12/15(火) 07:04:24
>>339
スレッドセーフに作られているがいったい何を言っているんだ?
0342デフォルトの名無しさん2009/12/15(火) 07:04:40
はい
よく気付きましたね
0343デフォルトの名無しさん2009/12/15(火) 07:06:27
>>341
ttp://msdn.microsoft.com/en-us/library/ms684256.aspx
MSDNぐらい読んだら?
0344デフォルトの名無しさん2009/12/15(火) 07:13:18
>>341
何も知らないお馬鹿さん。
0345デフォルトの名無しさん2009/12/15(火) 07:14:15
利用中に削除したら問題が起こるのはスレッドセーフ以前の問題だろ。
それを言ったら同期用のオブジェクトですら、使用中に削除したら問題が起こるだろ。
0346デフォルトの名無しさん2009/12/15(火) 07:16:20
起こらねーよ馬鹿
何のための参照カウンタなんだよ
0347デフォルトの名無しさん2009/12/15(火) 07:17:35
馬鹿でも理解できるように削除を例にしたMSの配慮が裏目に
0348デフォルトの名無しさん2009/12/15(火) 07:26:23
まとめるとこんな感じ。

Cのランタイムでマルチスレッドを選択しました。
ファイルをオープンしました。
別スレッドを開始しました。
ファイルをクローズしました。
別スレッドでファイルにアクセスしようとしました。
エラーが出ました。
スレッドセーフじゃねえよ、このやろう。
0349デフォルトの名無しさん2009/12/15(火) 07:32:16
名前          速度 プロセス間 リソース カウント機能   プラットフォーム
クリティカルセクション 高  なし    なし(排他アクセス)    95/NT/CE
ミューテックス     低  あり    なし(排他アクセス)    95/NT/CE
セマフォ        低  あり    あり            95/NT
イベント        低  あり    あり*            95/NT/CE
メータードセクション  高  あり    あり            95/NT/CE
0350デフォルトの名無しさん2009/12/15(火) 07:32:47
何のためにDuplicateHandleがあるんだよ
どれだけ頭が悪ければ気が済むんだろう?
0351デフォルトの名無しさん2009/12/15(火) 07:38:13
>>349
SRWLockとかOne-Time InitializationとかCondition variableとかも追加よろ
0352デフォルトの名無しさん2009/12/15(火) 07:47:22
DuplicateHandleを使うなら、HDCなら個別にGetDCをすればいいということになるだろ。
0353デフォルトの名無しさん2009/12/15(火) 07:50:20
ならない
DuplicateHandleとGetDCでは全然意味が違う
0354デフォルトの名無しさん2009/12/15(火) 07:52:17
STAとMTAの違いを分かってない馬鹿は黙っとけよ・・・
0355デフォルトの名無しさん2009/12/15(火) 07:54:33
参照カウンタがスレッドセーフの条件だと思っている時点で阿呆としか言いようがないんだが、頭は大丈夫か?
0356デフォルトの名無しさん2009/12/15(火) 07:56:06
誰もそんなこと言ってねーだろ
日本語も読めないのか
0357デフォルトの名無しさん2009/12/15(火) 07:57:47
ウインドウハンドルも参照カウンタを持っていないが、
スレッドセーフの条件から外れるんだよね。
単一スレッド以外からのウインドウ操作は以ての外。
ましては別プロセスからいじるなどあり得ない。
0358デフォルトの名無しさん2009/12/15(火) 08:01:04
>>357
当然だろ。
あるスレッドでwhile(hwnd=GetWindow(hwnd...))のループ中に
別スレッドで弄ると無限ループする可能性がある。
0359デフォルトの名無しさん2009/12/15(火) 08:02:35
この口調は前スレの最後で論破されてた馬鹿だなw 間違いない
相変わらずの無知っぷりでワロタw
0360デフォルトの名無しさん2009/12/15(火) 08:05:47
>>358
当然ときたか、ボロを出しまくりだね。
つまり現在目の前に描画されているウインドウシステムは幻想なんだね。
何のためにウインドウメッセージがあるのかまったく理解していない。
0361デフォルトの名無しさん2009/12/15(火) 08:10:07
まーた得意の話題逸らしが始まった
まずは「GDIスレッドセーフに作られている」のソースを提示しろよ
0362デフォルトの名無しさん2009/12/15(火) 08:10:37
朝から元気だね
おまえらってフリーランサーのプログラマー?
0363デフォルトの名無しさん2009/12/15(火) 08:14:19
>>358
ヘルプにEnumChildWindows使えと書いてあるだろ。
0364デフォルトの名無しさん2009/12/15(火) 08:15:27
そんな事は分かってるんだが
0365デフォルトの名無しさん2009/12/15(火) 08:16:59
シングルスレッドでも破棄したリソースを使おうとすればエラーになるのに、
何でマルチスレッドのせいになっているんだろう?
0366デフォルトの名無しさん2009/12/15(火) 08:18:21
バカはほっとけよ

どうせ前スレの
>.NETはWindows以外でも利用可能
みたいにうやむやにして逃げるだけだろ。
0367デフォルトの名無しさん2009/12/15(火) 08:21:55
Windows7以前はGDIを複数のスレッドから同時にアクセスするとロックが発生して処理速度が低下、
以降では改善されて平行に動くという話はOK?
0368デフォルトの名無しさん2009/12/15(火) 08:23:09
そんな話関係ないから
0369デフォルトの名無しさん2009/12/15(火) 08:24:20
話が高度すぎて初心者の俺にはついてゆけん
0370デフォルトの名無しさん2009/12/15(火) 08:24:57
何のためにロックしているのかというのは、関係ないのか。
都合がいいなあ。
0371デフォルトの名無しさん2009/12/15(火) 08:27:08
http://blogs.msdn.com/e7/archive/2009/04/25/engineering-windows-7-for-graphics-performance.aspx
0372デフォルトの名無しさん2009/12/15(火) 08:28:05
ちゃんと読めよ
GDIオブジェクトがスレッドセーフでないという話とは全く関係ない
0373デフォルトの名無しさん2009/12/15(火) 08:28:57
自演?
0374デフォルトの名無しさん2009/12/15(火) 08:44:50
GDIをマルチスレッドで使う場合というと、メッセージループを回しつつ、
描画処理が別スレッドで動いている場合だよね。
描画用のスレッドでGetDCをしていらなくなったらReleaseDC、
そしてウエイトが入るような形になるだろうけど、
この場合どこに問題が起こるのかが重要。
0375デフォルトの名無しさん2009/12/15(火) 08:51:19
COMでいうところのSTAとMTAを理解していれば
>>343のリンク先に書いてある事が理解できるはず。
もう少し勉強しましょう。
0376デフォルトの名無しさん2009/12/15(火) 10:05:12
>>374
>GDIはスレッドセーフじゃないから無闇にマルチスレッド化しない方がいいのでは?
きっとメインスレッドからHDCを消し飛ばすんだろ。
常人にはさっぱり理解できないが。
0377デフォルトの名無しさん2009/12/15(火) 13:58:09
ゲーム機のサウンドのように音楽を途切れなく無限ループするにはどうすればいいの?
プログラムサウンドって奴?直接音源操作するにはどうすればいいんだろうなぁ・・・
0378デフォルトの名無しさん2009/12/15(火) 14:12:34
常人(笑)
0379デフォルトの名無しさん2009/12/15(火) 15:05:25
>>377
環境と開発言語がわからんと何も言えんが
0380デフォルトの名無しさん2009/12/15(火) 15:26:26
>377
自分でやるなら、ダブルバッファリングして波形データを送り続ける。
0381デフォルトの名無しさん2009/12/15(火) 15:28:32
DirectX
0382デフォルトの名無しさん2009/12/15(火) 15:44:56
SendInputで複数のキーを同時押ししたようにしたいのですが、
どのようにすればいいのでしょうか?
0383デフォルトの名無しさん2009/12/15(火) 15:58:40
>>382
SetKeyboardState

これで調べるのはだめでしょうか?
0384デフォルトの名無しさん2009/12/15(火) 16:13:47
DLL内の関数で、コールバック関数とそうでないものがあるのですが、これらの違いは何なのでしょうか?
両方試しましたが、これといった違いが分かりません

そもそもコールバック関数とは、どういった場面で使うのでしょうか
ユーザーが独自にコールバック関数を作ってもいいのですか?
0385デフォルトの名無しさん2009/12/15(火) 16:17:24
コールバックってのは、呼び出してもらう関数だよ?
EnumWindows() に対する、EnumWindowsProc() みたいな。

なんか勘違いしてるんじゃない?
0386デフォルトの名無しさん2009/12/15(火) 16:47:49
つくづくなんにもわかってないバカだな・・・。
0387デフォルトの名無しさん2009/12/15(火) 16:56:06
>>385
言ってることがさっぱり分かりません
0388デフォルトの名無しさん2009/12/15(火) 16:57:11
じゃ、あきらめろよ。
0389デフォルトの名無しさん2009/12/15(火) 16:58:04
まず 「一般的な意味のコールバック関数」 と 「CALLBACK呼び出し規約の関数」 を区別することから始めるべき
03903842009/12/15(火) 17:32:21
#include <windows.h>
int WINAPI DllMain(HINSTANCE, DWORD, PVOID) {return TRUE;}

#define EXPORT extern "C" __declspec(dllexport)
EXPORT void Func1(void) {/*...*/}
EXPORT void CALLBACK Func2(void) {/*...*/}

DLL作成について解説しているサイトで、上のように呼び出し規約のあるものとないものが見受けられました
これらの違いについての質問でした

>>385
呼び出される、呼び戻されるという意味がいまいち……

>>389
コールバック関数の実装法が複数あると言うことでしょうか?
0391デフォルトの名無しさん2009/12/15(火) 17:36:28
コールバック関数ってのは
ユーザーが指定の書式に乗っ取ってその関数を書いてその関数ポインタを
Win32APIの引数に渡してその中からコールバック関数を呼び出してもらうような使い方をする。

というか何のためにその知識を得たいのかを書いたほうが手っ取り早い悪寒…
0392デフォルトの名無しさん2009/12/15(火) 17:39:32
CALLBACKの#defineを確認してみろよ。
0393デフォルトの名無しさん2009/12/15(火) 17:42:27
とりあえずEnumWindowsなりEnumFontsなりのサンプル書いて試してみりゃ
なんとなくわかるだろ
0394デフォルトの名無しさん2009/12/15(火) 17:46:31
CALLBACKについては環境にもよるけど書いてあっても無くても同じ
あったりなかったりするのは何をする関数か読む人にわかるように付け足してるか、
どっかからコピペしただけかどっちかだろう。
03953842009/12/15(火) 17:47:03
>>391
目的は、DLL内の関数をコールバック関数にすべきかどうかの判断です
ウィンドウプロシージャ等、用意されてあるものについては触れたことがあるのですが、
独自の関数では、どういう場合にコールバック関数にすべきかと

>>393
MSDNライブラリ見てみます
0396デフォルトの名無しさん2009/12/15(火) 17:48:48
すでにキーワードとして出てるけど、「呼び出し規約」について調べてみような。
0397デフォルトの名無しさん2009/12/15(火) 17:50:04
VCなら右クリックして定義を参照すればわかるけど__stdcall だったり空だったりするぞ
03983842009/12/15(火) 17:53:27
WINAPIやCALLBACKが__stdcallなのは知っていましたが、形式的に使っていただけでした
この機会にちゃんと調べてみます
0399デフォルトの名無しさん2009/12/15(火) 17:53:54
>>395
例えば
DLLの関数を呼ぶと勝手に処理はじめて
その進捗状況を教えてくれる
てのは?
0400デフォルトの名無しさん2009/12/15(火) 17:54:50
DLLとDLL呼び出し側でデフォルトの関数の呼び出し方が違うかもしれない
↓
DLLからDLL呼び出し側(逆も)の関数をポインタ経由で呼び出すときに呼び出し規約が違うとバグるかも
↓
仕方が無いので明示的に呼び出し規約を指定する


俺はこういうふうに考えてるんだがいいんだろうか?
0401デフォルトの名無しさん2009/12/15(火) 17:59:24
呼び出し規約を明示するのはいいけれど、
コールバックでないものにCALLBACKと書くのはいかがなものか
WINAPIとかの方がいいのでは
いやまぁWinAPIじゃないんだけどさ
じゃあ #define OreOreAPI __stdcall あたりでどうよ
0402デフォルトの名無しさん2009/12/15(火) 17:59:45
C/C++使ってる限りてきとーでいいよw
0403デフォルトの名無しさん2009/12/15(火) 18:00:27
x64移行しようぜ
0404デフォルトの名無しさん2009/12/15(火) 18:01:47
スタックポインタを呼出元が戻すか呼出先が戻すかの違いだろ。
0405デフォルトの名無しさん2009/12/15(火) 18:09:26
pascalとcdeclのいいとこ取り
0406デフォルトの名無しさん2009/12/15(火) 18:14:06
コンパイラオプションに/Gzを追加しとけ
0407デフォルトの名無しさん2009/12/15(火) 18:32:49
APIのコールバック関数は呼出規約が間違ってても動作上問題ないので気にしなくていい

と言ってみる
0408デフォルトの名無しさん2009/12/15(火) 18:34:50
APIのコールバック関数は呼出規約が間違ってても動作上問題ないと思われるので、気にしなくていい
0409デフォルトの名無しさん2009/12/15(火) 18:41:36
冗談はよしこさん
0410デフォルトの名無しさん2009/12/15(火) 18:42:19
問題が起きないようにAPI側で対策してあるんだよ。凄いでしょ。
0411デフォルトの名無しさん2009/12/15(火) 19:19:35
じゃあ自作DLLだとちゃんと動かないんだ?
0412デフォルトの名無しさん2009/12/15(火) 19:20:33
>>410
馬鹿なの
0413デフォルトの名無しさん2009/12/15(火) 19:38:34
ttp://blogs.msdn.com/oldnewthing/archive/2004/01/15/58973.aspx
馬鹿の為に対策してある例
つーか粂井のHPが紹介されててわろた
0414デフォルトの名無しさん2009/12/15(火) 19:44:56
こんなコードでも一応動くのなw

int __cdecl main(HWND h,int u,int w,long l)
{
  extern int __ImageBase;
  static ATOM a;
  WNDCLASS c={0,(WNDPROC)main,0,0,&__ImageBase,0,0,6,0,1};
  if(a)return(u-2)?DefWindowProc(h,u,w,l):exit(0);
  else if(CreateWindow(a=RegisterClass(&c),0,537<<19,0,0,99,99,0,0,0,0))
  while(GetMessage(&c,0,0,0))DispatchMessage(&c);
}
0415デフォルトの名無しさん2009/12/15(火) 19:52:27
>>413
釣りかと思ったら本当だった
わろすwwwww
0416デフォルトの名無しさん2009/12/15(火) 21:37:18
>>413
超有名人に晒し上げしてもらえるとはw
羨ましい奴めwww
0417デフォルトの名無しさん2009/12/15(火) 21:38:49
何が面白いのか教えて。
元から古いとか誤りが多いとか言われてた気がするんだけど。
0418デフォルトの名無しさん2009/12/15(火) 22:32:55
関数ポインタをキャストするのはキチガイの所業
0419デフォルトの名無しさん2009/12/15(火) 23:09:43
>>417
それが分からんうちはあんたも素人だ
それなりにまともな開発実績積めば
自ずと答えに辿り着くぜ
0420デフォルトの名無しさん2009/12/15(火) 23:14:00
>>418
EM_SETWORDBREAKPROC とかは?
0421デフォルトの名無しさん2009/12/16(水) 00:46:22
>>420
ハズレ
0422デフォルトの名無しさん2009/12/16(水) 01:25:37
キャストは避けられないがwindowsx.hのEdit_SetWordBreakProcマクロを使え
0423デフォルトの名無しさん2009/12/17(木) 04:09:22
嫌だ
0424デフォルトの名無しさん2009/12/17(木) 10:08:18
ListCtrlでレポートビューで表示してますが
1項目の値が大きくて入りきらなくなりお尻に”…”がつきます

例)
表示したい項目はABCDEFなのに
下のようにDまで表示され後は…です

-------
ABCD...|
-------

これを改行して表示したいのですが
オーナードローとか使わずに簡単にできませんか?

-------
ABCD |
EF   |
-------
0425デフォルトの名無しさん2009/12/17(木) 12:13:22
オーナードロー使わないとダメだと思うけど
あれめんどうだよな
0426デフォルトの名無しさん2009/12/17(木) 12:57:06
一度書いてしまえばいいんだから最初から避けなくてもいいのに
04274242009/12/17(木) 16:03:41
ありがとうございます
無理そうなので枠をひろげることにしました

それで次の質問なんですが
1000という数字をprintfとかで1,000と表示する簡単な方法ありませんか?
1000未満ならカンマなし、1000以上なカンマつけるとか
判定してもいいのですが100万こえるとまた判定いりますし
ここは何か関数(API)とか用意されてませんか?
0428デフォルトの名無しさん2009/12/17(木) 16:13:56
GetCurrencyFormat
0429デフォルトの名無しさん2009/12/17(木) 16:21:16
GetNumberFormat
04304242009/12/17(木) 16:21:23
ありがとうございます
あるもんですね
難しそうですがヘルプ参照してみます
0431デフォルトの名無しさん2009/12/17(木) 19:57:54
>428,429
そんな便利なAPIがあったんだ。
今まで自分で作ってた...orz
0432デフォルトの名無しさん2009/12/17(木) 20:21:47
NLSは意外と便利な機能が多いからな。
普段扱わないロケールとか出てくるから、
どうしても難しそうに見えるんだよなあ。
0433デフォルトの名無しさん2009/12/17(木) 22:47:00
NLSを調べようとしたつもりが
なぜかアダルトグッズサイトでオナホールを探していた。
何をいってい(ry
0434デフォルトの名無しさん2009/12/18(金) 09:39:54
わかるよ・・・
0435デフォルトの名無しさん2009/12/18(金) 09:53:47
立方メートルと入力して変換すると出てくるこの文字ですが
↓
?

3がつぶれて醜いです
フォントを26とかの大きさにしたらいい感じになりますが
12とかのサイズではつぶれてて醜いです
これはプログラムではどうにもなりませんか?
綺麗なフォントとかあるんでしょうか?
DrawTextとかでmと3を分けて書くしかないのでしょうか?
0436デフォルトの名無しさん2009/12/18(金) 14:10:22
㎥
ブラウザから書き込み
0437デフォルトの名無しさん2009/12/18(金) 14:12:35
どういうソフトで入力するか次第だけど、
mを↓付け、3を小さいフォントで↑付けの書式にすればそれっぽく見えるかも。
0438デフォルトの名無しさん2009/12/18(金) 14:27:37
基本的にはMS〜フォントのビットマップ部分の見栄えがよろしくないって話だから。
メイリオ使うとかGDI+等で強制的にアンチエイリアスかけるとか
0439デフォルトの名無しさん2009/12/18(金) 16:28:13
スレッド内でShowCursor()を読んで、戻り値が負の値になっているのに
ウィンドウ上のカーソルが消えてくれないんですが、なぜでしょうか?
int func(void *arg) {
 while(1) {ShowCursor(0); Sleep(1000); ShowCursor(1); Sleep(1000);}
 return 0;
}
アプリの最初で_beginthread(funcを起動)

みたいな感じでやっても何も起こりませんよ?
0440デフォルトの名無しさん2009/12/18(金) 16:43:39
カーソルの設定はスレッドごとに別々らしいです
そのスレッドに所属するウィンドウにしか効きません
AttachThreadInputしてみると何かいいことがあるかもしれません
0441デフォルトの名無しさん2009/12/18(金) 16:52:54
439じゃないけどへぇ
0442デフォルトの名無しさん2009/12/18(金) 17:02:10
オレも参考になった。
0443デフォルトの名無しさん2009/12/18(金) 18:01:54
今、別に起動中のプログラム(ウインドウ)の画面をキャプチャする
プログラムを作成しようと考えています。

ただ、手順が分りませんの教えて頂きたく思います。

1.キャプチャしたいウインドウのタイトルから、
FindWindow関数で、ウインドウハンドルを取得する。

2.そのハンドルから、GetDCで、DCを取得。

3.そのDCからBitBltで転送する。


という手順で行ったのですが、真っ黒がキャプチャされてしまいます。

また、CreateDC(L"DISPLAY", NULL, NULL, NULL);
で作成したDCからBitBltで転送すると、
画面キャプチャは出来たので、
DCをキャプチャしたいウインドウのDCにするだけで出来るかなと思ったのですが、
出来ないのでしょうか。
それとも、手順自体は間違っていないのでしょうか。

お手数ですが、教えて頂ければ助かります。
04444392009/12/18(金) 19:32:00
別スレッドだとダメなんですね。
試しにAttachThreadInputを使ってみましたがうまくいきませんでした。
HANDLE cursorThread = _beginthreadex(マウス制御する関数);
DWORD winThread;
GetWindowThreadProcessId(hWnd, &winThread);
if (! AttachThreadInput((DWORD)cursorThread , winThread, TRUE)) {
 失敗
}
MSDN (http://msdn.microsoft.com/ja-jp/library/cc429027.aspx)
によればAttachThreadInputに渡すスレッドIDにはウィンドウプロシージャが関連付けられてないといけないから、
上記みたいに第1引数がウィンドウと無関係な場合は失敗するみたいです。
スレッド使わないで実装するようにしてみます。どうもありがとう
0445デフォルトの名無しさん2009/12/18(金) 20:06:48
関連
http://blogs.msdn.com/oldnewthing/archive/2009/12/17/9937972.aspx
0446デフォルトの名無しさん2009/12/18(金) 20:09:08
>>443
XP以降のみ対応でいいならPrintWindowでも使っとけばいいんじゃなかったか。
0447デフォルトの名無しさん2009/12/19(土) 12:05:26
windowsx.hを使ってメッセージクラッカという技法を試そうと思ったのですが、
例えばメモリデバイスコンテキストのように、WM_CREATEとWM_PAINTでstaticなデバイスコンテキストハンドル
を使うものはグローバル変数にしなければ扱えないのではないでしょうか?

つまり、
http://ja.pastebin.ca/1720068
上記のようなコードを
http://pastebin.ca/1720075
このように変えるためにはグローバル変数を用いるしかないのでしょうか?
0448デフォルトの名無しさん2009/12/19(土) 12:10:24
static変数もどうかと思うが・・・
SetProp/GetPropやSetWindowLongPtr/GetWindowLongPtrを使うという手もある
0449デフォルトの名無しさん2009/12/19(土) 15:00:53
>>447
static な変数ってグローバルみたいなもんだしな。
0450デフォルトの名無しさん2009/12/19(土) 15:03:03
MDIの子ウィンドウが、
別のアプリケーションによって隠された時は再描画されるのですが、
他のMDI子ウィンドウに隠された時に再描画されません。
子ウィンドウの方から親ウィンドウにWM_PAINTメッセージを送った再も何も反応がありません。
どなたか、問題点もしくは解決策をご教授願います。
0451デフォルトの名無しさん2009/12/19(土) 23:44:04
WindowsXP付属電卓のボタンがどうやって赤青文字にしてるかわかる人いる?
あとフォーカス矩形が描画されないし
オーナードローかと思ったらspy++で見てもオーナードロースタイルが無いんだよ
0452デフォルトの名無しさん2009/12/19(土) 23:48:04
>>446さん

返事が遅くなりまして申し訳ございません。
PrintWindowで調べましたところ、
WindowsのGDIが単一サーフェスであることを初めて知りました。
画面が黒くキャプチャされたのも納得です。
PrintWindowで再描画した後、キャプチャすれば出来そうな気がしますので、
これから試して見ます。

どうも、有難うございます。
0453デフォルトの名無しさん2009/12/20(日) 00:34:30
>>451
カスタムドローだろ
0454デフォルトの名無しさん2009/12/20(日) 02:03:08
>>451
普通にWM_CTLCOLORBTNじゃないのか?

>>452
いやPrintWindowは自分が作ったビットマップを選択したDCを引数にしてそこに描画させるもんだろう普通。
04554512009/12/20(日) 02:21:12
>>453
カスタムドローってリストビューとかコモンコントロールだけじゃないっけ?

>>454
プッシュボタンだけはWM_CTLCOLORBTNが利かないんだよ
これはMSDNでも確認済み
誰か電卓で気になった人いねえ?
0456デフォルトの名無しさん2009/12/20(日) 03:37:05
マニフェストを置いても無理か?
0457デフォルトの名無しさん2009/12/20(日) 03:49:59
VistaでAeroが有効になっている環境なのですが、
RedrawWindowしても、タイトルバーや枠が再描画されません。
何とか任意のタイミングで、全体を再描画させる方法は無いでしょうか。
0458デフォルトの名無しさん2009/12/20(日) 04:00:03
>>455
XP以降はボタンにもカスタムドローの通知が来るんだが、
これはMSDNで確認してないのか?
0459デフォルトの名無しさん2009/12/20(日) 04:15:01
>>457
なんとかリージョンを送るのは基本だったと思うけど
04604512009/12/20(日) 04:32:36
>>458
マジで???確認してなかった
調べてみるわどうも
0461デフォルトの名無しさん2009/12/20(日) 04:39:47
>>457
一時的にDWMを無効にして有効にするしか無いんじゃねぇの?

てかWin7でタイトルバーのフォントを変更してもたまに再ログオンするまで更新が反映されなかったりするし
DWM周りは動作がよく分からんね
0462デフォルトの名無しさん2009/12/20(日) 09:50:43
超初心者の質問ですが、プログラムのウィンドウ上に表示されているピクセルデータは、どこの変数(構造体)に入ってるのでしょうか?
malloc変数に格納するには、どの構造体からデータをもってくればいいですか?
0463デフォルトの名無しさん2009/12/20(日) 10:18:28
オーナードローじゃなけりゃサブクラス化とかも
0464デフォルトの名無しさん2009/12/20(日) 11:12:54
>>462
HDC bmp = コピー先ビットマップが設定されたHDC
HDC hdc = GetDC(対象のウィンドウハンドル);
::BitBlt(bmp,0,0,幅,高さ,hdc,0,0,
SRCCOPY | ((拡張スタイル & WS_EX_LAYERED) ? CAPTUREBLT : 0) );//レイヤードウィンドウならCAPTUREBLT追加
ReleaseDC(対象のウィンドウハンドル,hdc);
0465デフォルトの名無しさん2009/12/20(日) 11:56:43
>>463
すみません、C++はまだノータッチなんです。勉強して出直してきます

>>464
いや、BitBltを使ってコピーするのではなく、そのコピーされる大元のビットマップデータを、たとえば数値で表示する、とかするときは(まあそんなことまずしないけど)どうしたらいいのでしょうか?
とにかくピクセルごとのデータをmalloc変数に入れときたいです。
0466デフォルトの名無しさん2009/12/20(日) 12:04:59
GetDIBits
0467デフォルトの名無しさん2009/12/20(日) 12:06:00
XP以前では他のウィンドウを避けながら直接画面に描かれるので触れません
他のウィンドウが覆いかぶさって隠れてる部分はそもそも描かれてすらいません
Vista以降はシラネ
どこかにあるはずだが、アプリケーションから触れるのだろうか
0468デフォルトの名無しさん2009/12/20(日) 12:25:36
>>467
そうなのか。
じゃあプログラム内で(ランダム、またはユーザーにより)書かれたものを保存するなら、画像とは別にその書いた動作を全部記録しないといけない、ということですか?
0469デフォルトの名無しさん2009/12/20(日) 12:30:16
Scribeサンプルとか見てみると、その通りだな。
0470デフォルトの名無しさん2009/12/20(日) 12:32:26
DWMならピクセルデータが取ってこれたような

0471デフォルトの名無しさん2009/12/20(日) 12:32:42
>>469
まぢですかあ・・・
がんばろ


あと、>>466のGetDIBitsって使い方が良くわからないんだけど、どうもbmpファイルとして保存されたものじゃないとできないようなかんじだった気がします。
0472デフォルトの名無しさん2009/12/20(日) 12:45:42
昔はGetDesktopWindow→GetDIBitsでスクリーンショット撮ってたのにそんなわけねーだろ
0473デフォルトの名無しさん2009/12/20(日) 15:01:17
…
0474デフォルトの名無しさん2009/12/20(日) 15:52:41
なんでbmpファイルの話が出てくるのかさっぱり理解できない。
0475デフォルトの名無しさん2009/12/20(日) 16:25:47
>>474
じゃあbmpファイルじゃなく、ウィンドウに表示されている画面のピクセルデータを読み込むには、どうしたらいいんですか?
まさかGetPixelしかないわけじゃないでしょう。
0476デフォルトの名無しさん2009/12/20(日) 16:27:24
構成によってフォーマットが違うよ
直接サーフェースのデータがとりたいならDirectXとか使ってみては
0477デフォルトの名無しさん2009/12/20(日) 16:29:25
まあフォーマット違ってもいいならGetBitmapBitsで持ってきてもいいけど
そもそもhBitmapは取れてるの?
0478デフォルトの名無しさん2009/12/20(日) 16:34:47
>>465
>いや、BitBltを使ってコピーするのではなく、そのコピーされる大元のビットマップデータを、たとえば数値で表示する

「いや」じゃねえよ、なめてんのか?
コピーしろと言われているんだから素直に従えばいいだろ。
ぐだぐだぐだぐだ何を言ってるんだ?
0479デフォルトの名無しさん2009/12/20(日) 16:37:07
275、308です。
>>309
ご回答ありがとう御座います。
どうやらクリップボードに何か入ってるのは間違い無いですね。

あれから色々調べ、色々やりましたが、(初心者なので)うまくいきません。
クリップボードに入っているものは、BITMAP形式ではない様です。
Keybd_eventだとクリップブックで確認した際に表示されているのに、に下記のソースだと駄目です。
何か良い助言をいただければと思います。

'◇今のソースコード
hdc = GetDC([コピーしたいウィンドウのハンドル])
hClipDC = CreateCompatibleDC(hdc)
Call GetWindowRect([コピーしたいウィンドウのハンドル], Rect1)
hBit = CreateCompatibleBitmap(hdc, Rect1.Right - Rect1.Left, Rect1.Bottom - Rect1.Top)
hOldBit = SelectObject(hClipDC, hBit)
'Call BitBlt(hClipDC, 0, 0 _
' , Rect1.Right - Rect1.Left, Rect1.Bottom - Rect1.Top _
' , hdc, 0, 0, SRCCOPY) '※これも試しました
Call PrintWindow([コピーしたいウィンドウのハンドル], hClipDC, 0)
Call OpenClipboard([pptのハンドル])
Call EmptyClipboard
Call SetClipboardData(CF_BITMAP, hClipDC)
fmt = EnumClipboardFormats(0)
Call CloseClipboard
Call SelectObject(hClipDC, hOldBit)
isfmt = IsClipboardFormatAvailable(fmt)

・上記だと「isfmt]には「1」が返されます。
・「fmt」には、何度やっても一定の7桁の数値が返されます。
 ⇒keybd_eventでキャプチャした場合は、必ず「2」が返されます。ここがヒントだと思っています。
0480デフォルトの名無しさん2009/12/20(日) 16:37:21
>>476
DirectXを使えという根拠は?
やったこともないのに適当なことを吹かすのはやめろ。
0481デフォルトの名無しさん2009/12/20(日) 16:39:44
>>479
プログラムがどうこう以前にDDBとDIBの意味は理解しているのか?
0482デフォルトの名無しさん2009/12/20(日) 16:44:40
>>480
VRAMの中身を直接取り出したいという可能性を考えただけ
というか、質問者がそれくらい曖昧だと言ってるのさ
0483デフォルトの名無しさん2009/12/20(日) 16:48:50
曖昧も何もDirectXに自分の管理外のサーフェイスのデータを取り出す機能も、
ウインドウモード時にVRAMのデータを直接取り出す機能も存在しないんだが、
いったい何の可能性だと言うんだ?
04844572009/12/20(日) 19:10:02
>>459
>>461
すみません。結局諦めました('A`;
0485デフォルトの名無しさん2009/12/20(日) 21:55:02
工工エエエエ(´Д`)エエエエ工工
0486デフォルトの名無しさん2009/12/20(日) 22:57:03
YOU、ソース晒しちゃいなYO!
0487デフォルトの名無しさん2009/12/21(月) 00:33:10
>>479
...
DEBUG_API(::SetClipboardData(CF_BITMAP, hBit));
for(UINT uiFormat(0); ; ){
 if(!(uiFormat = ::EnumClipboardFormats(uiFormat))){
  DWORD dwResult(::GetLastError());

  if(dwResult != NOERROR){
   DEBUG_OUT(dwResult);
  }

  break;
 }

 DEBUG_OUT(uiFormat);
}
DEBUG_API(::CloseClipboard());
...
'ClipBoardTestFor2ch.exe': 'C:\WINDOWS\system32\mfc42.dll' を読み込みました。...
clipboardtestfor2ch.cpp(72) : uiFormat = 2 (0x2) ...
'ClipBoardTestFor2ch.exe': 'C:\WINDOWS\system32\mfc42loc.dll' を読み込みました。...

C++では問題ないみたいだし、ペイントとかのプログラムにも
ペーストできてるけど。悪いが俺にできるのはここまでかもしれん。
それにしても、7桁の数字ってヘッダ見たけどあり得ない気が。
0488デフォルトの名無しさん2009/12/21(月) 03:13:48
ここ最近、立て続けに画面キャプチャの質問ばっか来てるけど流行ってるのか?
0489デフォルトの名無しさん2009/12/21(月) 03:43:19
スクリーンキャプチャソフト大会

必須要件
・Windows XP/Vista/7の何れかで動作すること
・画面全体、指定領域、ウィンドウ領域のキャプチャ
・クリップボードへコピー、BMP形式で保存

開発言語は不問
技術点・構成点・芸術点の総合得点で評価
優勝賞金30万円、その他特別賞など
0490デフォルトの名無しさん2009/12/21(月) 03:51:54
応募するにはどこに提出すればいいんですか
0491デフォルトの名無しさん2009/12/21(月) 03:52:35
コンピュータの専門学校の大会か何か?
0492デフォルトの名無しさん2009/12/21(月) 03:56:44
流行ってるってか、同一人物だろ。

つーか
>クリップボードから貼り付ける方法の方が早いので、
>今のソースコードを完成させたいと思っています。

とか言ってるくせに一週間以上経っても全く進歩ねーじゃんwww
卒論なのか仕事でキャプってるのか知らんが物凄く能率悪い奴だね
0493デフォルトの名無しさん2009/12/21(月) 04:05:39
SendKeyとかkybd_eventとかでスクリーンプリントキーを押せばクリップボードに
0494デフォルトの名無しさん2009/12/21(月) 04:06:49
>>275にパワポと連携できるキャプチャソフトを作ってあげろよ
ここ見てる天才プログラマーの皆様には朝飯前だろ?
0495デフォルトの名無しさん2009/12/21(月) 04:10:29
連携というとDDE通信だな?
0496デフォルトの名無しさん2009/12/21(月) 04:14:58
フックのほうだろ?
0497デフォルトの名無しさん2009/12/21(月) 04:19:22
画面全体がコピーって・・・ALT+PRTSCじゃないの?
0498デフォルトの名無しさん2009/12/21(月) 04:24:49
初心者を言い訳にしてる馬鹿にアドバイスしても無駄
スルーしとけばいい
0499デフォルトの名無しさん2009/12/21(月) 11:42:25
>>496
いやいやグローバル変数だろ
0500デフォルトの名無しさん2009/12/21(月) 15:19:08
alt を押すとアクティブなウィンドウだけコピーされたような
0501デフォルトの名無しさん2009/12/21(月) 17:41:13
そんなの常識だから。
0502デフォルトの名無しさん2009/12/21(月) 19:27:59
ぱっぱぱらりら
0503デフォルトの名無しさん2009/12/22(火) 07:24:29
一週間以上を費やしても全然出来ないのに
それでもキャプチャソフトを自作した方が>>280の方法より「早い」のかねぇ
状況がサッパリ理解できないんだが
0504デフォルトの名無しさん2009/12/22(火) 15:29:45
ウィンドウをクラスにしたいんですがプロシージャとインスタンスを対応させるにはどうすればいいでしょうか?
0505デフォルトの名無しさん2009/12/22(火) 15:32:59
超頻出
SetPropでも使え
0506デフォルトの名無しさん2009/12/22(火) 16:27:52
WinMainの第二引数なんですが、ぐぐると現在は使われていないらしいことがわかりました。
では、WNDCLASSに情報をセットする前に if (!第二引数) { のような条件は不要ということでしょうか?

WNDCLASS myProg;
if (!hPreInst) {  ←★これ★
 myProg.style = CS_HREDRAW | CS_VREDRAW;
 myProg.lpfnWndProc = WndProc;
 myProg.cbClsExtra =0;
 myProg.cbWndExtra =0;
   ・
   ・
0507デフォルトの名無しさん2009/12/22(火) 17:09:32
んなこたーない
0508デフォルトの名無しさん2009/12/22(火) 20:01:35
>>506
常にNULLであるとMSDNに書かれている。
Win16時代の名残でしょ。
0509デフォルトの名無しさん2009/12/22(火) 20:05:54
Win16でしか通用しない話だし、要らないと俺は思う。
ランタイムがでっち上げているだけの引数だから、
OSが変わっても影響がでることはあり得ないし。
0510デフォルトの名無しさん2009/12/22(火) 20:39:03
>>275、>>308、>>479です。

・先ず、この質問で気分を悪くされた方々、申し訳ありません。
 十分な勉強をしていない素人が簡単に知識を得ようというのは
 良くないことですよね。
 マクロの延長線で考えていたので、これ以上は諦めてkeybd_eventで
 満足しよう思います。

>>481
存在は知っていましたが、言われて初めて検索しました。
不勉強を実感しています。今後の参考にしていこうと思います。

>>487
何度も丁寧にご回答頂きありがとう御座います。
非常に勉強になり、助かりました。
どうやらクリップボードに入れる以前の問題の様に思います
また時間があればこつこつ勉強しようと思います。

>>488-502
話題にしていただきありがとう御座います。

>>492、>>503
毎日の仕事中で、非常に忙しい時間帯に実行する必要があるものなので、
少しでも「処理時間が早い」ものを と考えていました。
あるウィンドウを画面遷移させ、その画面のスナップショットと、
ウィンドウタイトルをpptに貼り付け、また画面を遷移する繰り返しを
100枚以上やるものです。
元々先述の[keybd_event]を使ったマクロで大きく短縮出来ていたのですが、
欲張って[Sleep]が少なくて済む方法が無いかと考えていました。

以上です。長文になり申し訳ありません。
0511デフォルトの名無しさん2009/12/22(火) 22:03:57
>>505
�d
WinAPI始めたばかりでさっぱりだったんだ
0512デフォルトの名無しさん2009/12/23(水) 00:14:32
質問する前にせめて最新100レス以内ぐらいは探そうよ
WinAPIどころか人間を始めたばかりとしか
0513デフォルトの名無しさん2009/12/23(水) 00:24:50
はいはい、煽らない煽らない
0514デフォルトの名無しさん2009/12/23(水) 01:16:56
はいはい、煽りレスを煽らない煽らない
0515デフォルトの名無しさん2009/12/23(水) 01:24:36
質問系スレの最近の回答時効は20レス程度なんで
昔のように500レスぐらい読み返しても重複話題が
全くなかった古き良き時代はとっくに過ぎてる。
0516デフォルトの名無しさん2009/12/23(水) 01:27:44
キーの同時押しをSendInputで表現することができるようですが、
どのようにコードを組んでいいか分からないので教えてください。
0517デフォルトの名無しさん2009/12/23(水) 01:39:02
MSDN
0518デフォルトの名無しさん2009/12/23(水) 02:31:40
WM_GETMINMAXINFOについてなんですが、
SetWindowPos等の関数でWS_THICKFRAMEを持たないウィンドウのサイズを変更した際には、
WM_GETMINMAXINFOメッセージが送られきません。
このような場合は、どのようにウィンドウのサイズを制限すればいいのでしょうか。
0519デフォルトの名無しさん2009/12/23(水) 03:14:58
古き良き時代て
検索もできない馬鹿が増えただけだろ
0520デフォルトの名無しさん2009/12/23(水) 03:24:10
人間始めたばかりのチンパンジーに検索もできないとか言っちゃうお前が馬鹿だよ
0521デフォルトの名無しさん2009/12/23(水) 13:06:08
//--Module.cpp--
#include <iostream>
struct Hoge
{
    static void __stdcall Func(void)
    {
        std::cout << __FUNCTION__ << std::endl;
    }
};

//--Module.def--
LIBRARY "Module"
EXPORTS
    Func = Hoge::Func @1

上記のようにC++のクラス内静的関数、あるいは名前空間内の関数をエクスポートすることは不可能でしょうか?
0522デフォルトの名無しさん2009/12/23(水) 13:23:06
スレ違い
0523デフォルトの名無しさん2009/12/23(水) 16:24:59
>>510
 自分の勉強のため、Excel2000 VBA(On Win2K)で動くコードを書いてみた。
EnumWindows()でキャプチャできそうなウィンドウを列挙して、BitBlt()で
転送、ワークシートの各ページに貼り付けてる。PrintWindow()はパソコン
壊れたので動作確認できてない(実装はしてるけど)。
 このスレ的には、C/C++が主流と言うか当然なので粘るのはよくないかもね。

ttp://rapidshare.com/files/324722603/ClipboardTest.zip
0524デフォルトの名無しさん2009/12/23(水) 16:56:11
BitBltではキャプチャできるとは限らないから意味ないよ
0525デフォルトの名無しさん2009/12/23(水) 21:51:28
>>521
DEFファイルにHoge::Funcではなく、マングル名(C++コンパイラが変形したあとの名前)を記述する。
または、DEFファイルを使わず__declspec(dllexport)と__declspec(dllimport)だけでやる。
0526デフォルトの名無しさん2009/12/24(木) 11:22:01
ウザイから放置で
0527デフォルトの名無しさん2009/12/25(金) 10:49:03
GetVolumeInformationで取得できるボリュームのシリアル番号って、
Windows上の画面ではどこで表示できますか?
0528デフォルトの名無しさん2009/12/25(金) 11:18:22
Windowsの使い方はスレ違いです。
0529デフォルトの名無しさん2009/12/25(金) 11:19:52
チートの作り方おしえてください
0530デフォルトの名無しさん2009/12/25(金) 11:24:42
ネタのひねりが全く足りない。
くだらない。
0531デフォルトの名無しさん2009/12/25(金) 12:35:31
トーチの作り方おしえてください
0532デフォルトの名無しさん2009/12/25(金) 12:40:26
タネのひねりが全く足りない。
くだらない。
0533デフォルトの名無しさん2009/12/25(金) 15:03:16
最近レベル落ちた?
0534デフォルトの名無しさん2009/12/25(金) 15:19:37
チンパンジーが増えただけだろ。
0535デフォルトの名無しさん2009/12/25(金) 17:37:34
WinMainの最後の引数、MSDNを読むと外部から値を指定して起動すると
ウィンドウの挙動を制御できるように読めるのですが、プログラムで対応する処理が無くても
MSDNに書かれている通りの動作になるんですか??
0536デフォルトの名無しさん2009/12/25(金) 17:38:28
いま知り合いのMS社員に訊いて見るから3ヶ月くらい待て
0537デフォルトの名無しさん2009/12/25(金) 18:04:49
>>535
受け取ったら適切に処理しろ
0538デフォルトの名無しさん2009/12/25(金) 18:45:53
>>537
可能なときは自分もそうしているけど、

>>535
ぶっちゃけ、プログラムで無視しても、外から指定したとおりになる。
最初にShowWindowを呼び出したとき、その引数を無視して、
外からの指定(STARTUPINFOのwShowWindow == WinMainのnCmdShow)に従うため。
http://msdn.microsoft.com/ja-jp/library/cc411211.aspx
0539デフォルトの名無しさん2009/12/25(金) 19:45:25
だからWinMainの引数は全部不要ってこのスレの前の方にも出てるでしょうが
0540 [―{}@{}@{}-] デフォルトの名無しさん2009/12/25(金) 23:02:42
プロセスAから起動したプロセスBは必ずAの子プロセスになるのでしょうか?
Aの子プロセスにせずに起動させる方法はあるでしょうか?
ShellExecute や CreateProcess, CreateProcessAsUser で試してみたところ,すべて子プロセスになりました
0541デフォルトの名無しさん2009/12/25(金) 23:26:31
> すべて子プロセスになりました

えっ
0542デフォルトの名無しさん2009/12/25(金) 23:37:24
>プロセスAから起動したプロセスBは必ずAの子プロセスになるのでしょうか?
多分そうだと思う。
0543デフォルトの名無しさん2009/12/25(金) 23:41:41
コマンド起動
0544デフォルトの名無しさん2009/12/26(土) 09:32:52
Win32的には、Toolhelpで手繰って処理でもしない限り
親子関係にあまり意味は無かったりするから、気にしなくていいんじゃない?
0545デフォルトの名無しさん2009/12/26(土) 09:40:06
漏れも前に色々試してみたけどどうやっても子になったな
0546デフォルトの名無しさん2009/12/26(土) 10:33:55
ていうか子プロセスになる事の何が不満なのかサッパリ分からん
0547デフォルトの名無しさん2009/12/26(土) 17:40:14
ちょっと質問です。
ノートPCの筐体を閉じた時に、なんかイベントとかメッセージって飛んで来ますでしょうか?
筐体の開け閉めに連動したランチャーを作ろうかと思いまして……閉めた時にちょっとした処理を行うとか。
0548デフォルトの名無しさん2009/12/26(土) 17:42:04
ねえよ
0549デフォルトの名無しさん2009/12/26(土) 17:46:01
WM_QUERYNOTEPCCLOSING
閉じる直前に送られる。FALSEを返すと中止

WM_NOTEPCCLOSED
閉じた後に送られる。
0550デフォルトの名無しさん2009/12/26(土) 18:00:34
WM_POWERBROADCAST
適当にググったらでてきた
詳しくは知らん
0551デフォルトの名無しさん2009/12/26(土) 18:02:23
適当なウィンドウをSpy++で監視すれば分かる程度の質問を何故するのか理解に苦しむ
0552デフォルトの名無しさん2009/12/26(土) 19:36:04
Spy++って何?
0553デフォルトの名無しさん2009/12/26(土) 19:51:07
とある便利なツールの名前
0554デフォルトの名無しさん2009/12/26(土) 19:52:52
Spy++ も知らずに Win32 開発とは・・・。恐れ入った。
0555デフォルトの名無しさん2009/12/26(土) 19:55:16
マジでSpy++って何?
C++の親戚みたいなもの?
0556デフォルトの名無しさん2009/12/26(土) 19:59:23
Spy++ (SPYXX.EXE) は、システム内のプロセス、スレッド、ウィンドウ、および
ウィンドウ メッセージを表示できる、32 ビット用のユーティリティです。
Spy++ には次の機能が備わっています。

- グラフィックスによって、プロセス、スレッド、およびウィンドウを含む、システム
オブジェクトの関係をツリー表示できます。
- 指定したウィンドウ、スレッド、プロセス、またはメッセージを検索できます。
- 選択したウィンドウ、スレッド、プロセス、またはメッセージのプロパティを表示
できます。
- Spy++ の表示ウィンドウから、ウィンドウ、スレッド、プロセス、またはメッセージ
を直接選択できます。
- ファインダ ツールを使用すると、マウスのドラッグ アンド ドロップ操作によって、
特定のウィンドウの情報を検索できます。
- メッセージ記録用のパラメータを指定すると、メッセージ オプションを細かく設定
できます。
0557デフォルトの名無しさん2009/12/26(土) 20:00:30
スパイ++ のほかに 2 つのよく似たツールがあります。
プロセスとスレッドの詳細な情報を表示するプロセス ビューア (PVIEW.EXE) と、
プログラムの動的なデータ交換 (ダイナミック データ エクスチェンジ : DDE) のメッセージを監視する DDE スパイ (DDESPY.EXE) です。
0558デフォルトの名無しさん2009/12/26(土) 20:01:20
Spy++は、Microsoft Visual Studioに付属のツールです。
0559デフォルトの名無しさん2009/12/26(土) 20:07:08
チャットじゃないんだから、わからないものはまず自分で調べなよ。
インターネットに接続できる環境もってるんだから。
0560デフォルトの名無しさん2009/12/26(土) 20:27:16
ちなみにSpy++はEEにはありません。
0561デフォルトの名無しさん2009/12/26(土) 20:32:27
なんだよ使えねーな
0562デフォルトの名無しさん2009/12/26(土) 21:02:17
>>549
もっと詳しく。そのWMの値はどこに書かれてますか?
0563デフォルトの名無しさん2009/12/26(土) 21:04:48
>549
情報サンクス。でもどこにも見付からない……解説ページとかあればぜひ。
>550
WM_POWERBROADCAST はサスペンドとかを設定している時しか飛んでこなさそうな感じでした。
>551
Spy++で試してみたけど引っ掛かりませんでした(@XPSP2)。試したノートPCが古かったのかな……
0564デフォルトの名無しさん2009/12/26(土) 21:05:12
EEしか知らないWin32プログラマなんて居るのか?
0565デフォルトの名無しさん2009/12/26(土) 21:12:10
NOTEPC なんて和製英語使うわけないだろ。
からかわれてるんだよ。
0566デフォルトの名無しさん2009/12/26(土) 21:13:49
ネタに決まってるだろ馬鹿
そもそもFALSEを返すと中止って何だよw
不思議な力が働いてノートPCを閉めれなくするのか?www
0567デフォルトの名無しさん2009/12/26(土) 21:18:46
ウソを教えろ。
0568デフォルトの名無しさん2009/12/26(土) 21:25:51
>>567
うそ【嘘】

1 事実でないこと。また、人をだますために言う、事実とは違う言葉。偽(いつわ)り。「―をつく」「この話に―はない」

2 正しくないこと。誤り。「―の字を書く」

3 適切でないこと。望ましくないこと。「ここで引き下がっては―だ」
0569デフォルトの名無しさん2009/12/26(土) 21:34:06
嘘ではありません。
非公開のウィンドウメッセージなので名前は適当に付けました。
事前にAPIを呼び出してウィンドウを登録しないと通知は来ません。
0570デフォルトの名無しさん2009/12/26(土) 21:39:28
RegisterWindowMessage() とかを理解した上で言ってれば面白かったのにな。
0571デフォルトの名無しさん2009/12/26(土) 21:40:24
何言ってんだお前?
0572デフォルトの名無しさん2009/12/26(土) 21:43:10
>>570=話を理解してない馬鹿
0573デフォルトの名無しさん2009/12/26(土) 21:48:20
>569
値は?
0574デフォルトの名無しさん2009/12/26(土) 21:49:51
>>570は非公開メッセージの存在とか事前登録したウィンドウにしか飛んでこない通知メッセージの存在を知らないんだろ
0575デフォルトの名無しさん2009/12/26(土) 21:52:38
>>573
0xBACA
0576デフォルトの名無しさん2009/12/26(土) 21:54:09
もういいから。
0577 [―{}@{}@{}-] デフォルトの名無しさん2009/12/26(土) 22:07:11
ファイルを右クリックして詳細タブで表示できるプロパティ
(ファイルの説明,種類,製品名等の情報)はどうやって取得するのでしょうか?
0578デフォルトの名無しさん2009/12/26(土) 22:10:29
種類は拡張子からレジストリで。
説明とか製品名とかは、バージョンリソースから。
0579デフォルトの名無しさん2009/12/26(土) 22:14:49
[―{}@{}@{}-]
↑これ何すか?
0580デフォルトの名無しさん2009/12/26(土) 22:17:13
串
0581デフォルトの名無しさん2009/12/26(土) 22:23:38
つーか>>540=>>577だろ。
0582デフォルトの名無しさん2009/12/26(土) 22:30:37
まじかよ
0583デフォルトの名無しさん2009/12/27(日) 12:09:20
あるNTFS上のファイルを特定する場合
c:\myfile.txt
というようにパスで指定すると
移動したりリネームしたりすると破綻しちゃいます。
パス文字列からIDか何かを取得し、そのIDからパス文字列を取得できる
API,手法はないですか?
0584デフォルトの名無しさん2009/12/27(日) 12:11:17
ファイルサイズとハッシュしかないんでは? 一致を探る。
個別の固有番号が付いてるとか聞いたことがない。
0585デフォルトの名無しさん2009/12/27(日) 12:33:06
http://www.atmarkit.co.jp/fwin2k/keyword/linktracking/linktracking.html

こういうの使えないのかな。
0586デフォルトの名無しさん2009/12/27(日) 12:36:49
↑の関連で、こんなのはあるんだな。

http://msdn.microsoft.com/en-us/library/aa364570(VS.85).aspx
0587デフォルトの名無しさん2009/12/27(日) 13:56:09
つまり>>584は馬鹿って事ですな
0588デフォルトの名無しさん2009/12/27(日) 14:41:23
NTFSがファイルにIDを付けて管理してるなんてWin32スレ的には常識だろ。
0589デフォルトの名無しさん2009/12/27(日) 14:54:41
OpenFileByIdつうそのままな名前のAPIもあるしな
0590デフォルトの名無しさん2009/12/27(日) 14:58:45
へー。ほんとだ。>>586 で取得した Object ID を渡せるんだね。
0591デフォルトの名無しさん2009/12/27(日) 15:04:23
>>586は管理者権限いるしリブートかけるとIDの一意性は保証されなくなるってGoogle先生が言ってた
0592デフォルトの名無しさん2009/12/27(日) 15:08:14
つーか、GUIDとDWORDで全然違うもんじゃないのか?
0593デフォルトの名無しさん2009/12/27(日) 15:10:27
DWORDって何?
0594デフォルトの名無しさん2009/12/27(日) 15:21:24
http://yokohama.cool.ne.jp/chokuto/urawaza/datatype.html
ググレゴミ
0595デフォルトの名無しさん2009/12/27(日) 15:38:12
ファイルIDならGetFileInformationByHandleで得れるだろが
0596デフォルトの名無しさん2009/12/27(日) 19:30:29
GetFileInformationByHandleのもボリュームシリアルナンバーと組み合わせて一意だから、
ボリューム(ドライブ)を跨いでの移動だと追い切れない。

となると、結局>>585-586の追跡サービスのほうがいいという話になると思う。
0597デフォルトの名無しさん2009/12/27(日) 19:47:36
そんな事まで質問者は訊いてないだろ、ぼけ
0598デフォルトの名無しさん2009/12/27(日) 20:01:41
あぁ、ゆとり教育の弊害がここにも・・・
0599デフォルトの名無しさん2009/12/27(日) 20:12:48
たしかに訊いてない
質問者が訊いてるのは「API,手法はないですか」だから、回答は「ある」「ない」だけでいいってことか
0600デフォルトの名無しさん2009/12/27(日) 20:15:16
「ある」NTFS上の
と書いてあるだろ
ボリューム間の移動なんてどうでもいいんだよ
0601デフォルトの名無しさん2009/12/27(日) 20:18:16
ボリュームを跨いだ移動は実質的には削除と同じだから追えなくて当然じゃん
0602デフォルトの名無しさん2009/12/27(日) 20:25:51
ボリュームって何?
0603デフォルトの名無しさん2009/12/27(日) 20:37:09
>>602
ドライブとかディスクパーティションとかのことだと思えばだいたいあっている。
http://msdn.microsoft.com/en-us/library/ms790711.aspx
0604デフォルトの名無しさん2009/12/27(日) 20:38:12
つーか質問内容は最後の二行だろう。
余計な部分に食いつくのはスレ住人の悪い癖だな。

パス文字列からIDか何かを取得
GetFileInformationByHandle(Ex)

IDからパス文字列を取得
OpenFileById→GetFinalPathNameByHandle→FindFirstFileNameW/FindNextFileNameW
0605デフォルトの名無しさん2009/12/27(日) 21:35:32
皆仕事で質問の本質とかを考慮しながら答えるのに慣れちゃってるからね。
末端の答えしか必要としないなら、ここよりGoogle先生に聞いた方がいい。
0606デフォルトの名無しさん2009/12/27(日) 21:52:08
そんなお節介しなくていいから。

そもそもが確実に追跡する方法なんて無いに決まってるのだから
移動したりリネームしたりできないようにロックしとくか
移動したりリネームしたりしても破綻しないように作っとけ
という結論になる。
0607デフォルトの名無しさん2009/12/27(日) 23:06:01
>>583
この場合に相当するかどうかは知らないが、
相対パスや環境変数と組み合わせるのは常識だと思うんだ。
0608デフォルトの名無しさん2009/12/28(月) 00:26:15
2つのパスを表す文字列が、同じものを指しているかどうかを調べる方法はありますか。
例えば↓のような感じで、同じファイルでも異なる表記があると思います。(なので単純な文字列比較ではだめですよね)
C:\foo\hogehoge.txt
C:\FOO\HOGEHO~1.TXT
C:\foo\bar\..\hogehoge.txt
\\?\C:\foo\hogehoge.txt

やりたいことは、パスを表す文字列が複数あって、
それらが重複したパスを持たないように、ユニークにしたいってことなんですが。
実際にファイルを開いてみて、ファイル固有のIDを比較するしかないですか?
0609デフォルトの名無しさん2009/12/28(月) 00:43:21
>>583=>>608か?
0610デフォルトの名無しさん2009/12/28(月) 00:57:04
>608
1つ目のパスの指すディレクトリに、空のファイルか何かを新規作成。
2つ目のパスの指すディレクトリで、作った空のファイルとかがあるかを調べる。
もしあれば、2つのパス(ディレクトリまで)は同じなので、後はファイル名を調べれば良い。
0611デフォルトの名無しさん2009/12/28(月) 00:59:58
物凄くアホな方法だな
0612デフォルトの名無しさん2009/12/28(月) 02:13:04
でも面白い発想だぬ
0613デフォルトの名無しさん2009/12/28(月) 05:08:41
api fullpathなんとかつかえ
0614デフォルトの名無しさん2009/12/28(月) 07:31:27
相対指定も含めると単語毎にケツから可能性の除去を繰り返すしか無いね
0615デフォルトの名無しさん2009/12/28(月) 11:33:00
join/subst等考えると>610で更にNTFSなら少し前に出てたIDでチェックかな
0616デフォルトの名無しさん2009/12/28(月) 11:46:42
ファイルが作成できるとは限らないだろ
0617デフォルトの名無しさん2009/12/28(月) 11:53:34
>>616
ま、そのときは (>>583 = >>608 仮定だけど) 元仕様のリネームも弾かれるわね
0618デフォルトの名無しさん2009/12/28(月) 11:56:15
UAC有効だとプログラムから作成できなくてもユーザーによる移動・リネームは可能
0619デフォルトの名無しさん2009/12/28(月) 12:04:33
あ 盲点だ。
GetFullPathName あたりを使うか
GetFileInformationByHandle(Ex) を使う(>>604) あたりが妥当なのか
0620デフォルトの名無しさん2009/12/28(月) 12:11:39
ファイルIDって確かハードリンクに対して同一のIDだから
パスの比較には使えないよ
0621デフォルトの名無しさん2009/12/28(月) 12:20:41
フツーのパス比較ならPath系APIでいいが
MAX_PATHを超えるパスや\\?\には無理

つまり 自分で作れ ってこった
0622デフォルトの名無しさん2009/12/28(月) 12:52:38
ながいパスを正常に扱える有名どころのソフトやライブラリてあるのかな?
一般的なファイラでも見たことないし。
0623デフォルトの名無しさん2009/12/28(月) 13:07:42
そもそもWindowsのシェル自体がMAX_PATHを超えるパスを考慮した設計がされてないので
ぶっちゃけどうでもいい
0624デフォルトの名無しさん2009/12/29(火) 02:05:59
そこら辺って7でもまだ直ってないの?
0625デフォルトの名無しさん2009/12/29(火) 04:42:30
直る直らないってかそういうのと別次元の話なのはITEMIDLISTの定義を見ればわかること
0626デフォルトの名無しさん2009/12/29(火) 05:17:16
rootkitじゃあるまいしシェルが認識できないパスへ対応する事に何の意味があるんだか
0627デフォルトの名無しさん2009/12/29(火) 07:38:40
フォルダ名を説明文にしたりしたいのにできないのな
みんなはファイルはID振ってデータベースで管理とかやってんのかな
0628デフォルトの名無しさん2009/12/29(火) 08:04:48
C:\2009年度のファイルです。\12月のファイルです。\2ちゃんねるに関連したファイルです。
\Win32API質問箱に投稿するファイルです。\スレッドはBuild84です。\質問に答えるために試しに書いてみたソースコードです。
\開発言語はC++です。\対応OSはVista以降です。\パス文字列からIDを取得できるのか?\test.cpp

こんな感じか?
そりゃあMAX_PATHでは全然足りないだろうねw
0629デフォルトの名無しさん2009/12/29(火) 08:06:13
普通にファイルとパスで一意に特定するだけだが。
IDを使う必要など微塵もない。
0630デフォルトの名無しさん2009/12/29(火) 08:08:57
検索すればいいんだからファイル名なんて短く簡潔でいい
フォルダ階層のみで管理する時代なんてとっくに終焉を迎えてるだろ
0631デフォルトの名無しさん2009/12/29(火) 10:13:23
「おっぱい膨らみ始めた少女の画像」で検索できるか?
0632デフォルトの名無しさん2009/12/29(火) 10:47:29
長いパスのファイルってエクスプローラで表示されないの?
だとするとセキュリティ的に問題あると思うが・・・
0633デフォルトの名無しさん2009/12/29(火) 10:57:25
長いパスは糞グラマが作ったソフトでオーバーランするので注意。

例:
char fname[MAX_PATH];
lstrcpy(fname,argv[1]);
lstrcat(fname,".txt");
0634デフォルトの名無しさん2009/12/29(火) 11:06:25
これはでも、不可抗力だよな・・・。
0635デフォルトの名無しさん2009/12/29(火) 13:10:17
どこが?
0636デフォルトの名無しさん2009/12/29(火) 14:43:49
あそこが
0637デフォルトの名無しさん2009/12/29(火) 14:49:14
一見3行目にバグが潜んでいるかのように見えるが、
実は2行目でアウト。だろ?
0638デフォルトの名無しさん2009/12/29(火) 15:44:14
その程度の脆いコードをすぐに指摘できないようじゃあまだまだ素人だな

ここでも読んで勉強して来い
ttp://www.kumei.ne.jp/c_lang/intro/no_20.htm
0639デフォルトの名無しさん2009/12/29(火) 15:53:21
FAT16X(Win95)以降、ファイル名の表記法が緩和され、マルチバイト文字
(一部文字は同一視)が使用出来るようになりました。便利になった反面
別表記でも同一ディレクトリ内部に作成すると干渉する可能性があります。
(不本意に既存ファイルを上書きもしくは削除後新規作成してしまう)
ファイルを作成する前にFindFirstFiles FindNextFilesに問い合わせ
情報が得られるかどうかチェックして下さい。情報が得られた場合
はその名称が使用されています。
ファイルオープンで可能か否かでチェックする方法はおすすめしません。
ロックされている場合は不正確な結果になるからという理由もさる
ことながらロックしないでオープンした場合の別プロセスの同一操作
に対する順序整合性が保証されないからです。
0640デフォルトの名無しさん2009/12/29(火) 15:59:07
> FindFirstFiles FindNextFiles
そのようなAPIはWindowsには存在しないため、スレ違いです
0641デフォルトの名無しさん2009/12/29(火) 15:59:42
>>638
argcのチェック?そんなもんでいちいち指摘してたら2chにコードなんかかけないだろ。
行数の制限があるのに。
0642デフォルトの名無しさん2009/12/29(火) 16:01:34
スマンコ
FindExisitingFile
FindOtherExistingFile
だた
0643デフォルトの名無しさん2009/12/29(火) 16:05:35
>>641
本気で言ってるならVBでも使ってなさいとアドバイスしておこう。
0644デフォルトの名無しさん2009/12/29(火) 16:10:21
>>631
http://uproda11.2ch-library.com/217420vpw/11217420.jpg
0645デフォルトの名無しさん2009/12/29(火) 16:13:06
>>639
FindFirstFileとかを使っても、その時点でファイル名が使用されていないか
わかるだけ。
そのファイルを作る前に、別プロセスが同じことをした場合はそのプロセス
が作ったファイルを上書きしてしまう可能性がある。
CreateFileのCREATE_NEWパラメータ指定での実行で早いもの勝ち方式

2つの別表記が同一ファイルかのチェックは、そのファイルを読み書きロック
条件のもとで同時に開けるかでチェックするといいんではないかと...
別プロセスが偶然、一方を読み書きロックで開いていた場合は結果は不正確
だが...
0646デフォルトの名無しさん2009/12/29(火) 16:13:30
MAX_PATH+1?
0647デフォルトの名無しさん2009/12/29(火) 16:16:00
>>644
あいにくこれはもうこれ以上大きくならないから没
0648デフォルトの名無しさん2009/12/29(火) 16:18:40
>>647
おまえぶっ飛ばすぞ
0649デフォルトの名無しさん2009/12/29(火) 16:19:56
とりあえずメモリ確保に失敗するケースを想定しないコードは糞。
次のように返値がNULLかどうかをきちんとチェックしてこそ安全なコードと云える。
これを出来ないプログラマーがC/C++を使う資格は無い。

DWORD* DIB32_SafeAlloc(DWORD width,DWORD height,DWORD color)
{
 DWORD* p = (DWORD*)malloc(width*height*4);
 if(p)
 {
  DWORD* q = p+width*height;
  while(p<q) *p++ = color;
 }
 return(p);
}
0650デフォルトの名無しさん2009/12/29(火) 16:20:46
^^;
0651デフォルトの名無しさん2009/12/29(火) 16:21:56
>>645
> そのファイルを作る前に、別プロセスが同じことをした場合はそのプロセス
> が作ったファイルを上書きしてしまう可能性がある。
とか細かいことは言うくせに、他のプロセスがファイルをロックしてる可能性は考えないの?
それとも先に開くパターンを入れ替えて試すわけ?
0652デフォルトの名無しさん2009/12/29(火) 16:22:04
>>649
IEとかチェックしてなさそうだよなぁwww
0653デフォルトの名無しさん2009/12/29(火) 16:25:26
>>651
他のプロセスがファイルをロックしていればそもそも上書きしてしまう可能性すら無いから干渉しないだろ
バカかお前
0654デフォルトの名無しさん2009/12/29(火) 16:30:39
>>653
表記の話をしてるのか開けるかの話をしてるのか、どっち?

表記の話だったなら、俺は全てDOSパス名に変換して文字列一致の判定をすれば、
あとはファイル名だけなんとかすればいいと思うんだけど。
0655デフォルトの名無しさん2009/12/29(火) 16:37:39
共有資源に対してチェックなんて行為がそもそも無意味なんだよ
そんな事も分からんのか
0656デフォルトの名無しさん2009/12/29(火) 16:39:44
   ___    クルッ…   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  / || ̄ ̄|| <⌒ヽ ))  < >>655 はてさて、
  |  ||__|| <  丿    | どこを縦に読みゃいいんだ?
  | ̄ ̄\三⊂/ ̄ ̄ ̄/  \___________
  |    | ( ./     /
0657デフォルトの名無しさん2009/12/29(火) 16:40:08
WindowsServer配下のLAN環境ではDFSであることが普通で
「同一ファイル」が複数の名称を持ち得る。
別の名前のファイルの操作が別の名前のファイルに干渉することを
防ぐ手段は無い。
2つ以上のファイルが「同一ファイル」であるか否かを確実に
検出する方法は例えあったとしても非公開だろ。無い可能性も高いし。
それが嫌ならWindowsを使うなって話にもなるかも。
ハードリンクとかもあるし。ハードリンクを考えると
Unixとかでも実は同様で、そもそもからしてファイルシステムは
メモリと同様、情報の一時記憶領域でしかないんで、情報の半永久
保存を目的とするんだったら、RDBとかの別のミドルウェアを
援用してシステムに応じてそれぞれ工夫しろってのが常識だろ。
0658デフォルトの名無しさん2009/12/29(火) 16:43:47
そんな常識を何を長々と講釈垂れてるんだ?
0659デフォルトの名無しさん2009/12/29(火) 16:46:23
天狗になりたいお年頃
0660デフォルトの名無しさん2009/12/29(火) 16:47:51
> 2つ以上のファイルが「同一ファイル」であるか否かを確実に
> 検出する方法は例えあったとしても非公開だろ。無い可能性も高いし。

普通に公開されてるんですが、バカですか?
0661デフォルトの名無しさん2009/12/29(火) 16:48:01
常識が長すぎるだろJK
0662デフォルトの名無しさん2009/12/29(火) 16:52:36
MAX_PATH問題に関しては俺はこのスレで過去何度も激論を交わした兵だぜ
0663デフォルトの名無しさん2009/12/29(火) 16:54:24
結論は?
0664デフォルトの名無しさん2009/12/29(火) 16:59:47
MAX_PATHを超える可能性がある場合はバッファオーバーランに気をつける。
strcpyの代わりにstrcpy_s、std::stringを使うなど。
0665デフォルトの名無しさん2009/12/29(火) 17:07:37
可能性がある場合はとか考えずに、全ての場合にstrcpy_sを使え。
0666デフォルトの名無しさん2009/12/29(火) 17:11:26
確実に信頼できる場合はstrcpyを使った方が何百倍も速いでしょ
0667デフォルトの名無しさん2009/12/29(火) 17:13:03
>>649
全然Safeでは無いんだが
誰も指摘しないのはさすがレベルの低いプログラマが集うスレってことか
0668デフォルトの名無しさん2009/12/29(火) 17:25:06
.NETならオーバーランとかMAX_PATHとか気にしなくていいのに頭悪い人達だぁよ
0669デフォルトの名無しさん2009/12/29(火) 17:27:48
>>668
System.IO.PathTooLongException
指定したパス、ファイル名、またはその両方がシステム定義の最大長を超えています。
たとえば、Windows ベースのプラットフォームの場合、パスの長さは 248 文字未満、ファイル名の長さは 260 文字未満である必要があります。
0670デフォルトの名無しさん2009/12/29(火) 17:28:59
>>649
ちょw
0671デフォルトの名無しさん2009/12/29(火) 17:29:50
ワラタ
0672デフォルトの名無しさん2009/12/29(火) 17:31:13
>>669
.NETでこうってことはAPI直す気ないんだよね多分
0673デフォルトの名無しさん2009/12/29(火) 17:33:48
>>669
CLRが例外を投げてくれるのでプログラマがMAX_PATHを意識する必要は無いってことですよ
0674デフォルトの名無しさん2009/12/29(火) 17:34:20
.NETでMAX_PATHを無視してバンバン作られると問題になりそうだから仕方なくね?
0675デフォルトの名無しさん2009/12/29(火) 17:37:40
APIにMAX_PATHの制限があるのだからプログラマはそれに従っとけばいいだけ
仮に2^31文字までのパス長に対応したexNTFSなるファイルシステムが出来たとしても
どうせAPI経由ではMAX_PATHの制限が付きまとうのは変わらない
0676デフォルトの名無しさん2009/12/29(火) 17:38:39
> APIにMAX_PATHの制限があるのだから

そんな制限ないから。
0677デフォルトの名無しさん2009/12/29(火) 17:40:04
WIN32_FIND_DATA::cFileNameがMAX_PATHってことは
MAX_PATHを超えるファイルは列挙されないんじゃないの?
0678デフォルトの名無しさん2009/12/29(火) 17:40:22
.NETではMAX_PATHを超えるパスを扱えない欠陥商品しか作れないんだな
0679デフォルトの名無しさん2009/12/29(火) 17:40:39
>>673
例外をキャッチするなら手間割いてる訳で、結局気にしてることになるんじゃね
0680デフォルトの名無しさん2009/12/29(火) 17:44:09
長いパスに対応する必要があるのはマルウェア対策ソフトぐらいだろ。
そういう目的の為に一部のAPIが例外的に長いパスに対応してるだけで一般のアプリが使う物ではない。
0681デフォルトの名無しさん2009/12/29(火) 17:45:00
APIでも欠陥商品しか作れないのは変わらんがな…。
0682デフォルトの名無しさん2009/12/29(火) 17:47:03
そういう>>678はMAX_PATHを超えるパスを柔軟に扱える優良商品ばかり作ってるんだろうな?
0683デフォルトの名無しさん2009/12/29(火) 17:50:11
MAX_PATHを叩いてる俺カコイイとか思ってる糞餓鬼だろ。
0684デフォルトの名無しさん2009/12/29(火) 17:53:01
ファイル名は8.3で全部ルートに
0685デフォルトの名無しさん2009/12/29(火) 19:52:21
>>660
どうか、その関数を教えて下さいな。
この星の上にあるWindowsマシンたちがかつて作ったファイル(テンポラリを含め)
すべてに一意連番が振られでもしてない限り不可能な筈なんだけど
0686デフォルトの名無しさん2009/12/29(火) 19:57:21
GetFinalPathNameByHandleだろ
0687デフォルトの名無しさん2009/12/29(火) 19:57:48
知ってるがお前の態度が気に入らない
0688デフォルトの名無しさん2009/12/29(火) 19:59:55
> この星の上にあるWindowsマシンたちがかつて作ったファイル(テンポラリを含め)
> すべてに一意連番が振られでもしてない限り不可能な筈

なんで?
0689デフォルトの名無しさん2009/12/29(火) 20:01:23
レス検索しろよクズ
0690デフォルトの名無しさん2009/12/29(火) 20:01:28
例え方から低脳振りが滲み出てるね
僻み入ってくるとなんでこうなるんだ?
0691デフォルトの名無しさん2009/12/29(火) 20:02:38
この星の上にあるWindowsマシンたち(笑)
0692デフォルトの名無しさん2009/12/29(火) 20:16:03
オラに1クロックずつ時間を分けてくれ〜みたいなw
0693デフォルトの名無しさん2009/12/29(火) 20:17:27
>>1-1000
どうか、その関数を教えて下さいな。
この星の上にあるWindowsマシンたちがかつて作ったファイル(テンポラリを含め)
すべてに一意連番が振られでもしてない限り不可能な筈なんだけど
06946932009/12/29(火) 20:18:18
自己解決しました
0695デフォルトの名無しさん2009/12/29(火) 20:20:21
>この星の上にあるWindowsマシンたち

カッコいいじゃん
凡庸な文しか書けないくせに馬鹿にすんなよ
0696デフォルトの名無しさん2009/12/29(火) 20:22:39
>>692
ちょっとクスっと来たww。
0697デフォルトの名無しさん2009/12/29(火) 20:25:13
お前らよく読め。

この星の上にある(全ての)Windowsマシンたちがかつて作った(全ての)ファイル(今は無きファイルも含む)

から同一ファイルを探したいってことだろ。
さあ早く>>685に関数を教えるんだ。
0698デフォルトの名無しさん2009/12/29(火) 20:27:48
>>697
自演で援護かいおめでてーな
0699デフォルトの名無しさん2009/12/29(火) 20:27:54
                                      ;;,,r='';;;;;;;;;;;;;`;;";;;
                                    ,,rイ;;;;;;;;;;;;;;;;;;;;;;;;Ξ;;;;;
                                   i;;;,=i;;;;;;;;;;;;彡;;;;;;;;;;;;=;;
       、、_  ,;;_,,                        / t;;;;;;;;;;;;;;ノノ;;;;;;;こ;;;;
     ,,.ィ`;;;;;`~´;;;;;;ニ、、                   /   ヽ;;;;;;≡;;;;;;;;;;;ヾ;;;;
     ,i´;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::`ヽ、                レ^ヽ   l;;;;;;;;;;;;;;'''';;;;;;;ミ
   ,/;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ノミミ;;;;;;l、                 (_,,;-、   );;/´`i;ミ`i;;;;;;
   ノ;r''t;;;;;;;:::::;;;;;;;;;ー;;レ'ー';;;;;;;;),                 )i)ノ   ノノ б);;;;;;;;;;;ミ
  彳し,,=,,ィ'";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;レ'               ,ノ ~    ノ 、 ,/ノ;;;;;ミミ;
   t;;n;:;;;;ィ:;j'ノノl;;tゝt''_,;=ヽノ、               `ーj         `l ~t(;、;;;;;
    ヽ;、;ノ_i」,__、`i ゝノ,-;‐、,j ,l アンタじゃ無理だ        `ー=、      j、   );;;
    tヽ <'`ー'イ ,,, ゝ‐''" ノイ                        ヾ~´   ノ i、 ,,ノ/;;;
     ゝ、.  ̄´  (冫.  ノl      _,,;=-‐‐-、   ,-‐-'"^ヾ`l   /  ヽ  イノ
      lヽ、  ,;:'"`> ノ .lー-=、_ / |ノ   >ィ`ー、_-ヽ `tゝ=''T")   `i、
     _,,ィt, `t、` ̄´/l  ヽ   T"     /~>-‐-、rヽヽrヽ   | j----、、 _,,..ィ
   /j  :l   `'=='"      ,ノ     ,,(,イ´   ``^'''"´   l l __  7'
-tー'" i'  ノ   ヽ、    _,,;=''"_,,.;:    /              ll   `ヽ/
 |  `ー―--==、_ヽ ,,,.ィ'"´  ´  、 ,, /     ,/'         l.     j   /
0700デフォルトの名無しさん2009/12/29(火) 20:29:58
FindFirstFileInAllWindowsComputersOnThePlanet
FindNextFileInAllWindowsComputersOnThePlanet
07016852009/12/29(火) 20:31:56
結局誰も答えられないようですね。

これにて  論  破  完  了
0702デフォルトの名無しさん2009/12/29(火) 20:36:15
         ____   
       / \  /\ キリッ
.     / (ー)  (ー)\      
    /   ⌒(__人__)⌒ \    <結局誰も答えられないようですね。
    |      |r┬-|    |      これにて  論  破  完  了
     \     `ー'´   /
    ノ            \
  /´               ヽ              
 |    l              \
 ヽ    -一''''''"〜〜``'ー--、   -一'''''''ー-、.    
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))
0703デフォルトの名無しさん2009/12/29(火) 20:40:10
GetFinalPathNameByHandleで取得したパス名が一致してないから
ファイルは別なんだ...??
0704デフォルトの名無しさん2009/12/29(火) 20:41:22
2009年度MVP (Most ヴァカ Programmer)

>>639=>>657=>>685
0705デフォルトの名無しさん2009/12/29(火) 20:46:06
スパさんみたいだな
0706デフォルトの名無しさん2009/12/29(火) 20:48:09
>>685に答えられない低脳の馬鹿共が煽ってるだけか
冬だなぁ…
0707デフォルトの名無しさん2009/12/29(火) 20:48:42
>>703
限らんよ。ハードリンクの場合は、それぞれの名前が返されるだけ。
同一であるか検証は無理っぽ。ユーザーが名前の大文字小文字とか
を適当に修正して推測するしかない。
0708デフォルトの名無しさん2009/12/29(火) 20:49:21
>>706
自演で援護かいおめでてーな
0709デフォルトの名無しさん2009/12/29(火) 20:52:46
>>707
FindFirstFileNameW/FindNextFileNameWで調べればいいだろ
GetFinalPathNameByHandleが最初に出てきたレスを読め馬鹿
0710デフォルトの名無しさん2009/12/29(火) 20:54:09
>>685=>>707
こいつ本当にバカだな
0711デフォルトの名無しさん2009/12/29(火) 20:57:32
馬鹿の大盤振る舞い
0712デフォルトの名無しさん2009/12/29(火) 20:58:17
この星の上にあるWindowsマシンたちの過半数を占めるXPで使えないので却下

とか言ってきそうだなw
0713デフォルトの名無しさん2009/12/29(火) 21:22:40
もうだめだこのスレ
0714デフォルトの名無しさん2009/12/29(火) 21:29:38
DFS上でソフトリンクされているファイルのローカル名称がわかる
システムはある意味怖いw(セキュリティゼロ)
ってことで、2つのファイル名の遡源を取得して同一かどうか比較する
方法はすべてボツ
0715デフォルトの名無しさん2009/12/29(火) 21:41:09
最後まで反論しないと気が済まないんだねぇ
そういやぁ少し前にもそういう奴いたなぁwww 同一人物かな?
0716デフォルトの名無しさん2009/12/29(火) 21:46:34
いままで散々ハードリンクの話をしてたくせに
論破されたら突然ソフトリンクに話をすり替え

さすがだな
MVPの底力を改めて実感したよ
0717デフォルトの名無しさん2009/12/29(火) 21:50:35
>>639=>>657=>>685=>>707=>>714

「すべてボツ」
だっておwwwwww
0718デフォルトの名無しさん2009/12/29(火) 21:55:53
dfsでソフトリンクのローカル名称がわからなかったらどうやって解決すんだよ。
0719デフォルトの名無しさん2009/12/29(火) 21:56:41
将来のNTFSではCopyの意味も相当変わりそうだし
中途半端な今のシステムでの今回の話は将来大きく
変わりそうな予感。なんで深入りしないほうが吉かと。
0720デフォルトの名無しさん2009/12/29(火) 21:56:53
後出しジャンケンでもいい、何が何でも勝ちたいんだ!
プライドもへったくれもない奴
0721デフォルトの名無しさん2009/12/29(火) 21:58:42
>>718
権限ってご存知?
権限が無ければ実ファイルシステムの実体が見えないわけで...
0722デフォルトの名無しさん2009/12/29(火) 22:00:07
こいつは今は亡きWinFS厨だな。
0723デフォルトの名無しさん2009/12/29(火) 22:01:06
後出しジャンケンできるよう、「かも」「とか」を多用し、幾通りもの解釈が可能となるよう曖昧な長文を書き連ねる。
でも所詮はググって得た知識を継ぎ接ぎしてるだけ。レス間隔が開いてる時間は検索中。
文章から察するに三流大学の学生か専門学校生じゃないかな。
0724デフォルトの名無しさん2009/12/29(火) 22:03:18
で、ハードリンクの話はどこ行ったんだ?
0725デフォルトの名無しさん2009/12/29(火) 22:08:18
突然論点すり替えてすべてボツですか^^;
0726デフォルトの名無しさん2009/12/29(火) 22:08:33
結論:ファイル仮想化レイヤーが無かったDOSの頃はヨカタけど戻れない
今の仮想化レイヤーは中途半端でムカツく
0727デフォルトの名無しさん2009/12/29(火) 22:08:45
>>721
それほどサーバー間をタイトにつないでるdfsってどの実装だよ。
0728デフォルトの名無しさん2009/12/29(火) 22:10:39
>>726
いや誰もそんな話はしてないから。論点のすり替えばっかだね。
0729デフォルトの名無しさん2009/12/29(火) 22:13:19
>>707で観念しとけば良かったものを・・・
0730デフォルトの名無しさん2009/12/29(火) 22:17:04
>>727
君に付いている奴だよ。重さ2kgくらいかな。殆どが灰色で白く硬いケースに
入ってるんじゃないかと
>>728
いやファイルシステムの仮想化が中途半端なんで、名前空間レベルでの
慣習的、非法則的同一視が行われる結果、複数の名称が同一ファイルに
マップされる事態が発生して困っている人が居るって話だろ
0731デフォルトの名無しさん2009/12/29(火) 22:17:52
自分に都合の悪いことは一切見えないんだな
0732デフォルトの名無しさん2009/12/29(火) 22:19:38
>>730
だから、誰もそんな話してないって
0733デフォルトの名無しさん2009/12/29(火) 22:21:37
ファイルに対して複数のパスを持てる機能がハードリンクなのに何が仮想化なんだ?
0734デフォルトの名無しさん2009/12/29(火) 22:21:59
さすがMVP
0735デフォルトの名無しさん2009/12/29(火) 22:24:22
自己解決しました
0736デフォルトの名無しさん2009/12/29(火) 22:26:08
>>733
DOS時代の独立した記憶ストリームの名前という位置づけから
マスターとトランザクション(差分)たちに関連付けられた
名前という地位の転換のことを仮想化と呼ぶね
しかしAPIとは合わなそうw
DOSとも合わなかったけどねw
0737デフォルトの名無しさん2009/12/29(火) 22:26:34
どうせまた10分後ぐらいに新しい用語を引っ提げて戻ってくるだろ
0738デフォルトの名無しさん2009/12/29(火) 22:28:36
要するにAPIは過渡期の仕様
0739デフォルトの名無しさん2009/12/29(火) 22:29:13
>>736
なんかもう日本語が崩壊してしまって何が言いたいのか全く分からん
誰か翻訳してくれ
0740デフォルトの名無しさん2009/12/29(火) 22:53:34
>>738
何?APIが守旧派だって、自民党みたいだなw
何?.NETが改革派だって、民主党みたいだなw
0741デフォルトの名無しさん2009/12/29(火) 23:06:03
.NETも結局API引き継いでるから改革でもなんでもない
0742デフォルトの名無しさん2009/12/29(火) 23:14:38
>>738
DOS時代に投入されたAPIが総じてその時代水準に比して
優れ過ぎていたから、その次の次の時代がいち早く来て
しまって結果的に過渡期の仕様と言われるようになった
んじゃないかと...(その殆どは未消化の状態でお蔵入り)
0743デフォルトの名無しさん2009/12/29(火) 23:18:09
DOSとかどうでもいいから

同じ実体を指すかどうか、複数のパスから参照されているかを意識しなくともアクセスできるのがハードリンクなのに
MVPだけあって何も分かってないみたいだな
0744デフォルトの名無しさん2009/12/29(火) 23:24:59
> 複数の名称が同一ファイルにマップされる事態が発生
この文章でこいつがハードリンクを理解してないのは読み取れた
0745デフォルトの名無しさん2009/12/29(火) 23:29:16
この星の上にあるWindowsマシンたちにワロタw
これはもうネタスレだYO!
0746デフォルトの名無しさん2009/12/29(火) 23:32:33
>>744
C:¥Windows¥AhoBaka.txt
C:¥Windows¥ahobaka.txt
は文字列としては異なるファイル名だが
ファイルとしては同じだろ
0747デフォルトの名無しさん2009/12/29(火) 23:36:11
>>746
>ファイルとしては同じ
違う。パスが同じ。
パスとファイルの区別も付かんのか?
0748デフォルトの名無しさん2009/12/29(火) 23:44:50
> 文字列としては異なるファイル名
ハードリンクどころかファイルシステムをも理解してない事が判明
0749デフォルトの名無しさん2009/12/29(火) 23:48:53
自己解決しました
0750デフォルトの名無しさん2009/12/29(火) 23:51:17
パス
ファイル
ファイル名

これらの違いを全く分かってないやつがハードリンクを語ってたのかよ
どうりで話が噛み合わない訳だw
0751デフォルトの名無しさん2009/12/29(火) 23:54:31
>>750
おいおい
パス名を忘れてるぞ
あと
ストリームとか
シンボリックリンクとか
ショートカットとかも関連してくるな
他にもありそ
0752デフォルトの名無しさん2009/12/30(水) 00:02:44
パスとパス名は同じ意味でしょうが
ファイルとファイル名ほどの違いはない

しかもショートカットみたいなアプリレベルの代物を持ち出すなよ
つくづく何も分かってないアホだなぁ
0753デフォルトの名無しさん2009/12/30(水) 00:05:53
c:\autoexec.bat <- パス
autoexec.bat <- ファイル名
↑が示すファイルそのもの <- ファイル

でいいの?
0754デフォルトの名無しさん2009/12/30(水) 00:06:28
MVPですから
0755デフォルトの名無しさん2009/12/30(水) 00:06:52
パスとパス名が同じ意味に解釈出来る人ってつくづく
幸せなコンピュータライフを贈ってきた人だとオモ
経験値が伺えますなw
0756デフォルトの名無しさん2009/12/30(水) 00:07:08
>>746
何一つ正解と言える部分が無いんだが、お前本当にプログラマか?
0757デフォルトの名無しさん2009/12/30(水) 00:08:34
笑い納めだなこりゃあ
0758デフォルトの名無しさん2009/12/30(水) 00:09:44
>>755
どう違うのか教えてよ。
0759デフォルトの名無しさん2009/12/30(水) 00:12:29
http://yougo.ascii.jp/caltar/%E3%83%91%E3%82%B9
http://yougo.ascii.jp/caltar/%E3%83%91%E3%82%B9%E5%90%8D

同じモノを指してるようにしか読めないなぁ。
0760デフォルトの名無しさん2009/12/30(水) 00:14:46
だって同じ物だし。
07617562009/12/30(水) 00:15:21
代わりに答えてあげます
2つのファイル名を表す文字列のパスが同じとは、それぞれの
先頭から見て同じ文字列が幾つか続いていて同じ部分が¥
で終わっている場合、2つのファイル名は同一パスに
あると言いますね。同一ディレクトリにあるとまでは
言えないです。ハイ。同じパスに無くても同一ディレクトリ
のファイルかも知れませんよ。
パス名とは、ファイル名が¥を含む文字列の場合を言います。
全然違うでしょ?
0762デフォルトの名無しさん2009/12/30(水) 00:17:12
他人を騙ってもその間の抜けた文章でバレバレだから。
0763デフォルトの名無しさん2009/12/30(水) 00:18:14
> 2つのファイル名を表す文字列のパスが同じ
そもそもこんな言葉使わねーよ
0764デフォルトの名無しさん2009/12/30(水) 00:18:41
相変わらず何も分かってねぇwww
0765デフォルトの名無しさん2009/12/30(水) 00:18:45
もう何を行ってるのか分からない
0766デフォルトの名無しさん2009/12/30(水) 00:19:45
日本語で書いてくれるとうれしいな。
0767デフォルトの名無しさん2009/12/30(水) 00:20:20
もう喋らなくていいよ
お前がMVPだ
0768デフォルトの名無しさん2009/12/30(水) 00:20:43
ファイルのパスってなぁに?
0769デフォルトの名無しさん2009/12/30(水) 00:23:45
パスはただの場所であってファイル名を含まないの?
0770デフォルトの名無しさん2009/12/30(水) 00:24:10
しかしまぁ、面白い奴が住み着いたなw
0771デフォルトの名無しさん2009/12/30(水) 00:26:39
http://msdn.microsoft.com/ja-jp/library/system.io.path(VS.80).aspx

|| パスとは、ファイルまたはディレクトリの位置を示す文字列です。

MS的には含むこともあるらしいよ。
0772デフォルトの名無しさん2009/12/30(水) 00:26:53
そもそも¥じゃなくてバックスラッシュだろ
0773デフォルトの名無しさん2009/12/30(水) 00:28:09
ウリはウォン記号ニダ
0774デフォルトの名無しさん2009/12/30(水) 00:30:54
.NETとAPIの間でそういった概念が統一が取れてると思い込まない
であげるほうが親切というものです。
0775デフォルトの名無しさん2009/12/30(水) 00:31:39
だから日本語を書けと(ry
0776デフォルトの名無しさん2009/12/30(水) 00:35:14
まあ、このMVPがハードリンクを理解するのにあと3年は要するのがわかった
0777デフォルトの名無しさん2009/12/30(水) 00:35:15
http://msdn.microsoft.com/en-us/library/bb773621(VS.85).aspx

APIでも一緒だわな。ファイルを含まないなら、わざわざPathIsDirectoryなんて関数作らんし。
0778デフォルトの名無しさん2009/12/30(水) 00:37:53
MAX_PATH=3+256+1だっけ?
0779デフォルトの名無しさん2009/12/30(水) 00:39:51
MAX_PATH=255+sizeof(".")+3+sizeof("")
だろ
0780デフォルトの名無しさん2009/12/30(水) 00:41:40
MAX_PATH=260です!
0781デフォルトの名無しさん2009/12/30(水) 00:43:52
MAX_PATH=(2+1)+(255+1)+1
http://blogs.wankuma.com/tocchann/archive/2007/05/17/77107.aspx
0782デフォルトの名無しさん2009/12/30(水) 00:52:45
あれぇ?MVPどっか行っちゃったね。
どうやらProgrammerじゃないみたいだし、Pigでいいか。
0783デフォルトの名無しさん2009/12/30(水) 00:57:59
今時自分がプログラマだなんて思っている人は一番
プログラムされちゃってるシトなのにさ
0784デフォルトの名無しさん2009/12/30(水) 01:06:14
なんだMVPまだいてるじゃんw
大好きな反論と論点すり替えはもうしないの?
0785デフォルトの名無しさん2009/12/30(水) 01:08:46
本日のMVPショーは終了しました。
次回のお越しをお待ちしております。
0786デフォルトの名無しさん2009/12/30(水) 01:12:06
プログラマは空論と論点隠蔽が専門ですが...何か?
0787デフォルトの名無しさん2009/12/30(水) 01:20:10
GetFinalPathNameByHandleは、ファイルが開けないことには使えない、ってのが痛いねぇ。
0788デフォルトの名無しさん2009/12/30(水) 01:25:59
FSCTL_GET_NTFS_FILE_RECORDを使って$MFTを直接読み取ればいいさ
0789デフォルトの名無しさん2009/12/30(水) 03:25:47
>>768
パスという言葉が使われだしたのはDOSとかUNIXのシェルとかの
環境変数PATHにちなむのではないかと思てる。
コマンドが与えられたときこの環境変数の値に入っているディレ
クトリ(複数)の下の実行可能ファイルを検索するという意味なのだが
そのへんのセンスで使われているケースが多いんじゃね?
だからパス名とは、ファイル名をルートからの階層表示で
表した時の最後の区切り子より前の部分というニュアンス
じゃないかと
0790デフォルトの名無しさん2009/12/30(水) 04:12:37
でも、ファイル名をフルパスでといった場合には・・
0791デフォルトの名無しさん2009/12/30(水) 04:18:32
..¥sample¥test¥hoge.txtのパス名は..¥sample¥test¥
だけど、これはフルパス(表示)じゃない
って感じじゃね?
0792デフォルトの名無しさん2009/12/30(水) 04:20:00
>>779
>sizeof(".")
>sizeof("")
ちょwww
0793デフォルトの名無しさん2009/12/30(水) 04:38:47
>>791
否定文による定義ってのは凄いなw

あるファイル表示がフルパス表示でないとは
先頭がルートフォルダーになっていないこと

これが本当なのかどうかは知らんが、PC用語の
定義ってのは難しすぎてゆーかその場しのぎ的
というか、いい加減ってか、結構荒んでるな。
少なくとも全員がしゃかりきになって覚えるべき用語
じゃないね。無理に覚えたりすると精神に障害を来すかもな
(にも関わらず会社に入ったら覚えさせられてしまう
ことが多かったりする)
0794デフォルトの名無しさん2009/12/30(水) 04:47:56
フルパスはWinだとドライブ名も入れないとダメだろう
ルートディレクトリから書かれててもどのドライブか書いてなければ
一意に決まらないしな。
0795デフォルトの名無しさん2009/12/30(水) 09:15:24
>>746
それですら(本来の)NTFS的には別ファイルだ。
http://support.microsoft.com/kb/817921

MVPすげーな。
0796デフォルトの名無しさん2009/12/30(水) 09:41:15
バージョンやマウントしているファイルシステム
によって違うみたいだな
結局いろいろとややこしいんで大文字と小文字は
区別されないと考えたほうが良さげ
というのは未だにあると思う
0797デフォルトの名無しさん2009/12/30(水) 09:49:49
区別しないでここまで来てしまったのだから、いまさら区別できない。というのがMSの判断。
セキュリティ的に問題有りまくりなのでXpからデフォルト禁止になった。
0798デフォルトの名無しさん2009/12/30(水) 10:12:46
ゴダゴダやってないで、早く
この星の上にあるWindowsマシンたちが納得できる答えを出してくれよ
0799デフォルトの名無しさん2009/12/30(水) 10:20:50
2つのファイル名が与えられたとき、それらのファイルに変更操作
を加えずに独立したストリームかどうかを判断する決定的方法はある?
についての答えなら既に出てるだろ?
0800デフォルトの名無しさん2009/12/30(水) 10:32:10
この話題で年をまたぐのかw
0801デフォルトの名無しさん2009/12/30(水) 10:35:01
おめーら、ソ連がアフガンに侵攻したってぇこの年の瀬に
なにくだらねぇ話してやがんでい
0802デフォルトの名無しさん2009/12/30(水) 11:00:06
NtQueryInformationFileでパス名からボリュームに一意なIDを取得できる。
終了。
0803デフォルトの名無しさん2009/12/30(水) 11:21:55
>>801
kwsk
0804デフォルトの名無しさん2009/12/30(水) 11:25:09
>>802
ネットワークファイルパスでもおkですか?
権限は影響しますか?
0805デフォルトの名無しさん2009/12/30(水) 11:55:30
>>804
反論があるなら、エントリポイント示してやったんだから自分で調べろ。
0806デフォルトの名無しさん2009/12/30(水) 12:18:16
NtQueryInformationFileなんか使わなくてもGetFileInformationByHandle(Ex)で出来るだろ馬鹿
0807デフォルトの名無しさん2009/12/30(水) 12:20:00
質問はすべて反論だと解釈する奇妙な奴w
08088042009/12/30(水) 12:21:14
804!=806ね
すねないでね
0809デフォルトの名無しさん2009/12/30(水) 12:27:14
> これが本当なのかどうかは知らんが、PC用語の
> 定義ってのは難しすぎてゆーかその場しのぎ的
> というか、いい加減ってか、結構荒んでるな。
> 少なくとも全員がしゃかりきになって覚えるべき用語
> じゃないね。無理に覚えたりすると精神に障害を来すかもな
> (にも関わらず会社に入ったら覚えさせられてしまう
> ことが多かったりする)

出た、MVPの名言w
パスとファイルの違いわかってないヴァカのくせして偉そうにwww
0810デフォルトの名無しさん2009/12/30(水) 12:33:24
> この星の上にあるWindowsマシンたちがかつて作ったファイル(テンポラリを含め)
> すべてに一意連番が振られでもしてない限り不可能な筈なんだけど
一晩かかってこれの答えといえるNtQueryInformationFileに辿り着いたわけ?
>>595で正解出てるのにねぇ〜
0811デフォルトの名無しさん2009/12/30(水) 12:36:03
>>809
自作自演的な名言偉いでつね
0812デフォルトの名無しさん2009/12/30(水) 12:39:32
ボリュームの種類、権限の相違によらない一般的方法は無いんではないかと
1分間考えたらわかる結論が昨晩のうちに出たのではないかと思ってました
がまだAPIレベルで一発解決出来ると思ってらっしゃるのですね
0813デフォルトの名無しさん2009/12/30(水) 12:42:18
>>810
オレ、さっき参入したんだけど。一晩掛かってとか妄想癖の馬鹿?
0814デフォルトの名無しさん2009/12/30(水) 12:43:42
> 文字列としては異なるファイル名だがファイルとしては同じだろ
> 2つのファイル名を表す文字列のパスが同じ
> あるファイル表示がフルパス表示でないとは
> 先頭がルートフォルダーになっていないこと

よくもまぁこんな知識のかけらもない奴が用語の定義とか言えるねぇ
どういう神経してるんだろう
0815デフォルトの名無しさん2009/12/30(水) 12:45:03
暇ならお外で遊んできたら
0816デフォルトの名無しさん2009/12/30(水) 12:45:24
>>813
その話題は解決済ですのでお引き取りくださいね^^
0817デフォルトの名無しさん2009/12/30(水) 12:48:40
MVPまだいてるのかよ
てか24時間スレに粘着してるのか
0818デフォルトの名無しさん2009/12/30(水) 13:00:32
main()
{
 do
 {
  Post( 煽りレス );
 } while ( 反論してくる人数 > 0 );
 Brain( 論破完了 );
}

MVPの脳内はこんな感じだから。
反論する人が誰一人居なくなるまでスレから離れないつもりだろ。
0819デフォルトの名無しさん2009/12/30(水) 13:13:36
スレ内検索すればとっくに出てるのに
>>685で
>この星の上にあるWindowsマシンたち
とか言っちゃって袋叩きにあって後に引けなくなり、
>>730でハードリンクを理解してないだけかと思ったら
>>746でパスを全く理解してないと判明し
>>761で日本語も満足に書けないと判明

普通ここまで赤っ恥かくと二度と来ないと思うんだけどなあ
0820デフォルトの名無しさん2009/12/30(水) 13:16:34
>>812
0821デフォルトの名無しさん2009/12/30(水) 13:18:53
権限についてもわかってないんだろうな・・・。
0822デフォルトの名無しさん2009/12/30(水) 13:27:17
ボリュームについてもわかってない可能性大
0823デフォルトの名無しさん2009/12/30(水) 13:28:14
ちょっと否定文を書いたらむきになってすべて否定文に
してくる人まね何とかには困ったものですなw
0824デフォルトの名無しさん2009/12/30(水) 13:34:54
>>799
もしかするとボリュームの種類や権限の相違によってうまくいかない場合も
あるかも知れませんが、多くの場合において
>>806さんや>>802さんが指摘されたように、幾つかのAPIを
援用すればわかる可能性が高いようです。
0825デフォルトの名無しさん2009/12/30(水) 13:39:02
ボリュームの種類(笑)
0826デフォルトの名無しさん2009/12/30(水) 13:45:55
権限の相違(笑)
0827デフォルトの名無しさん2009/12/30(水) 13:46:01
APIを援用(笑)
0828デフォルトの名無しさん2009/12/30(水) 13:49:29
肯定文にしたら一発で笑顔が戻ったようで何よりです
0829デフォルトの名無しさん2009/12/30(水) 13:56:28
また得意の論点逸らしか
0830デフォルトの名無しさん2009/12/30(水) 14:00:04
ボリュームや権限についてももよくわかってないみたいだね
無理に覚えたりすると精神に障害を来すとか言ってる向学心ゼロのクソガキなのはわかったけど
0831デフォルトの名無しさん2009/12/30(水) 14:05:36
鬱になるから正式マニュアルの厳密だが否定的文体など読まず、
解説書や参考書や雑誌の曖昧だが肯定的文体を読むようにしたら?
0832デフォルトの名無しさん2009/12/30(水) 14:11:04
曖昧な情報を継ぎ接ぎした結果が>>814だからなぁw
0833デフォルトの名無しさん2009/12/30(水) 14:18:02
>>793
> これが本当なのかどうかは知らんが
全くもって出鱈目です
0834デフォルトの名無しさん2009/12/30(水) 14:20:59
向学心ゼロってプログラマとしては致命的ではなかろうか
0835デフォルトの名無しさん2009/12/30(水) 14:29:54
向学心ゼロのほうが向いているって。向学心の多い俺はちょっと遠慮させて
もらってるけど
0836デフォルトの名無しさん2009/12/30(水) 14:38:45
>>835
Windowsは常に変化してるからな。理詰で最初に頭から覚え込んでしまう予習大好き
秀才タイプよりか
常に自分が現状に同期が取れてないかも知れないと頻繁に確認することを怠らない
復習勤勉タイプのほうが向いてるだろな
0837デフォルトの名無しさん2009/12/30(水) 14:40:33
>>793
この人、「定義」という用語もわかってなくね?
0838デフォルトの名無しさん2009/12/30(水) 14:45:34
>>836
あと言葉の端々に粘着するタイプもあんまし向いてないね。
要所要所は押さえる必要はあるが、あんまし将来を見通して
用語を定められない(余裕が無い)のがWindowsな世界なんで
矛盾が発生してる場合もあるけどそういうのを許容できるタイプ
じゃなきゃ辛いかもね
0839デフォルトの名無しさん2009/12/30(水) 14:49:35
>>836=>>838=MVP
復習勤勉タイプて
お前は単なる後出しジャンケンだろが
0840デフォルトの名無しさん2009/12/30(水) 14:52:12
>>836
ならば復習してるかテストだ。

【問題】
「パス」「パス名」「ファイル」「ファイル名」について日本語で説明せよ。
0841デフォルトの名無しさん2009/12/30(水) 14:53:13
模範解答をどうぞ>>MVP
0842デフォルトの名無しさん2009/12/30(水) 14:55:09
常に変化してるつってもパスやファイルといった基本的な用語は変化しない訳だが
0843デフォルトの名無しさん2009/12/30(水) 14:57:06
パス:定期券
パス名:定期券の名前:会社、路線、区間、期限、利用者氏名などで構成されてます
ファイル:オフィスのキャビネットに入ってます
ファイル名:(オフィスのキャビネットに入っている)ファイルの名前
0844デフォルトの名無しさん2009/12/30(水) 14:58:54
なんだ復習もしてないのか
さすがMVP
0845デフォルトの名無しさん2009/12/30(水) 15:00:18
> ファイル:オフィスのキャビネットに入ってます
説明になってねぇwwwwやっぱアホだこいつwww

りんご:スーパーに売ってます
ってか
0846デフォルトの名無しさん2009/12/30(水) 15:05:52
ファイル:タイトルシールが2つ以上貼ってある場合があります。タイトルだけで
別のファイルであると即断してはいけません。
0847デフォルトの名無しさん2009/12/30(水) 15:10:36
ファイルに名前を付けるなんて、、、擬人化もこkまできたか
0848デフォルトの名無しさん2009/12/30(水) 15:24:38
>>846
APIでファイル名じゃなくタイトル名にアクセスできるの?
それともタイトル名=ファイル名ってこと?
0849デフォルトの名無しさん2009/12/30(水) 15:33:01
おまいらいいかげんにしろ!
0850デフォルトの名無しさん2009/12/30(水) 15:33:32
>>848

>>843のキャビネットに入ってるファイルのことだぜ
0851デフォルトの名無しさん2009/12/30(水) 15:35:30
じゃあ、>>843はファイルに名前をつけて呼んでるの?キモッ
0852デフォルトの名無しさん2009/12/30(水) 15:46:56
この流れなら聞ける

ディレクトリとフォルダの違いについて教えて下され
0853デフォルトの名無しさん2009/12/30(水) 15:49:51
>>852
スレ違いですので他所へどうぞ
0854デフォルトの名無しさん2009/12/30(水) 15:52:24
>>852
フォルダー:エクスプローラーの左ペイン
ディレクトリー:treeコマンド

さよなら
0855デフォルトの名無しさん2009/12/30(水) 17:03:23
>>845
>りんご:スーパーに売ってます

さかなは切り身で泳いでるわけではないよ?
0856デフォルトの名無しさん2009/12/30(水) 17:05:28
>>852
フォルダ:
書類をまとめて整理するための文房具で、ファイルともいう。

ソースはういきぺでぃあ
0857デフォルトの名無しさん2009/12/30(水) 17:13:32
なぁ〜んだ、答えられなくて逃げちゃったのか
どこまでも間抜けな奴
0858デフォルトの名無しさん2009/12/30(水) 17:53:07
folder
directory
0859デフォルトの名無しさん2009/12/30(水) 18:01:25
フォルダはwindows系でディレクトリはUNIX系ってだけじゃないの?
0860デフォルトの名無しさん2009/12/30(水) 18:11:30
>>859
Win32APIにはCreateDirectory()とかがあるんだが
0861デフォルトの名無しさん2009/12/30(水) 18:11:46
もともとフォルダはMac系・・・
0862デフォルトの名無しさん2009/12/30(水) 18:15:55
MVPお得意の論点すり替えが見事に成功したようですね^^
0863デフォルトの名無しさん2009/12/30(水) 18:36:38
フォルダーはエクスプローラ系だろ
ディレクトリとは似ていて微妙に違うと
いった程度。エクスプローラ独自の解釈の
ディレクトリ世界って感じ
0864デフォルトの名無しさん2009/12/30(水) 18:43:38
>>863
全然違うよ
0865デフォルトの名無しさん2009/12/30(水) 18:52:07
昔のWindowsではマイコンピュータがルートフォルダーでその下にC:ドライブや
マイドキュメントがあったりとかしてたし
マイドキュメントは一つのディレクトリで大抵C:ドライブの下のあるディレクトリ
だったのをエクスプローラが独自のフォルダー空間にマップする時にルートフォルダー
直下に置いたものだった 他にも似たような特殊ディレクトリがあったっけ
もしかして今でもそうだろうけど。変わっているかも
0866デフォルトの名無しさん2009/12/30(水) 19:10:55
> 昔のWindowsではマイコンピュータがルートフォルダーでその下にC:ドライブや
> マイドキュメントがあったりとかしてたし
ねーよ
0867デフォルトの名無しさん2009/12/30(水) 19:14:44
フォルダのルートがデスクトップなのはフォルダが登場したWin95以来変わってない訳だが
0868デフォルトの名無しさん2009/12/30(水) 19:16:52
パスとファイルとファイル名を区別できなかった馬鹿が
今夜はフォルダとディレクトリについて存分に語ってくれそうだw
0869デフォルトの名無しさん2009/12/30(水) 19:39:28
マイコンピュータが最も特殊なフォルダーで、対応するディレクトリが無いのが
特徴だ(った)ね
以上APIとは関係が薄いので、終了
0870デフォルトの名無しさん2009/12/30(水) 19:44:02
他のアプリにPostMessageしたあとに、処理されたかどうかを知る方法はありますか?

タブの選択を変えたくてPostMessageでWM_NOTIFYのTCN_SELCHANGEとかを送っています
このためVirtualAllocExで対象のプロセスのメモリを確保しています
何も考えずに最後にVirtualFreeExをしてしまうと
メッセージが処理される前に解放してしまうことがあるようで例外がでることがあります。
解放せずにそのままにしておき毎回そこを使うようにするしかないのでしょうか?
0871デフォルトの名無しさん2009/12/30(水) 19:58:10
>>869
特殊でもなんでもない
マイネットワーク、ごみ箱、コントロールパネルやデスクトップ“フォルダ”にも対応するディレクトリは無い
こんな事はシェル名前空間を理解していれば常識の範囲内です
0872デフォルトの名無しさん2009/12/30(水) 20:27:14
>>870
タブが切り替わったか確認するくらいしかないんじゃね?
0873デフォルトの名無しさん2009/12/30(水) 20:50:00
そもそもWM_NOTIFYってPostMessageできるのか?
構造体のアドレスを渡すシステム定義のメッセージはPostMessageが失敗するようになってたはずだが
0874デフォルトの名無しさん2009/12/30(水) 20:59:48
WM_CREATE/WM_?ETTEXTなどはERROR_MESSAGE_SYNC_ONLYで失敗するが
WM_NOTIFYだけは特例として失敗しない。
だからといってWM_NOTIFYをPostMessageしても良いという理由にはならないので
SendMessageで送信しなさい。
0875デフォルトの名無しさん2009/12/30(水) 21:04:34
>>872
やっぱりないですかね。
切り替わったかどうかを読み取るのも微妙な気がするので、悩んでみます。
どうせ自分用アプリなので深くは気にしていないのですが。
ありがとうございました。

>>873
SendMessageだと全く受け取ってくれませんでしたが、PostMessageだと受け取ってくれます。
ずっとSendMessageでやっててなんで動かないのか悩みまくっていたのですが
ググり直してPostMessageに変えたらあっさり動いてくれました。
ですが今度は別の問題が出てきたというわけです。
0876デフォルトの名無しさん2009/12/30(水) 21:23:16
SendMessageすべきメッセージで動かないなんて有り得ないでしょうが
君の書いたコードが間違ってるんじゃないの?
0877デフォルトの名無しさん2009/12/30(水) 21:27:17
タブの選択を変えるぐらいならUI Automationで出来るだろ
08788702009/12/31(木) 00:32:31
>>876
動かしたい別アプリに似せたテスト用のプログラムを作り確認したのですが
正確に言うと動かないのではなく、SendMessageだとWM_NOTIFYそのものが来ないのです
テスト用プログラムで、メモリの取得とかを省いた同じ流れのコードで自分自身に送ってみると問題なく動きました
そこで調べたところ過去ログのBuild76の986-996に全く同じ状況の方がいたのでPostMessageにしたのです

>>877
自動テストには興味がなかったので全く知らない手法でした
選択したいタブの取得に若干手こずりましたがうまくいきそうです
C#で組んでいるので逆に助かりました
大きなヒントをありがとうございました
0879デフォルトの名無しさん2009/12/31(木) 01:19:44
>>870
お前、なんていう名のアプリ作ってんの?
オレの周りに、ヘッポコが作っているから、絶対に使うなと指令だすから是非教えろ。
08808702009/12/31(木) 01:26:05
自己解決しました。
0881デフォルトの名無しさん2009/12/31(木) 01:27:22
UIAって知名度低すぎるよなー
まあこの種の掲示板でVirtualAllocExを使ってゴニョゴニョするような
阿呆な回答しかできないヘボプログラマーが多いのが最大の理由だろうけど
0882デフォルトの名無しさん2009/12/31(木) 02:05:50
つーかWindowsでは異端だがJava辺りでIPCはテキストファイル経由って感じの
プロトタイプアプリを作ってから、VB.NETとかC#に移植してもう少しプラット
フォームの実情に即したものにして、最終的にVCで書き直すって俺の常套手段
的なやりかたは迂遠?
0883デフォルトの名無しさん2009/12/31(木) 02:38:49
Javaは知らんが、Win32や.NETでわざわざファイルを経由するなんて馬鹿の極み
0884デフォルトの名無しさん2009/12/31(木) 03:52:09
>>882
VBとかC#が出てくる理由がわからん
0885デフォルトの名無しさん2009/12/31(木) 04:12:55
>>881
UIAutomationはXP用.NETの一部として提供されたのが始まりだから、
知名度が低くてあたりまえ。
XP/Server2003だと.NET3.0必須だし。
0886デフォルトの名無しさん2009/12/31(木) 04:20:00
つまり、Vista以降を前提とした開発はまだ少ないって事だな。
0887デフォルトの名無しさん2009/12/31(木) 04:48:52
CGIのurlからInternetConnect(),HttpOpenRequest(),HttpSendRequest()を使って
ページを取得するのはどうやるですか?

こういう普通のurlだと簡単に取得できるのですが、
hInternet = InternetOpen( "Mozilla/4.0", INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY, NULL, NULL, 0 );
hConn = InternetConnect( hInternet, "サーバー名", INTERNET_DEFAULT_HTTP_PORT, NULL, NULL,
      INTERNET_SERVICE_HTTP, 0, NULL );
hReq = HttpOpenRequest( hConn, "GET", "index.html", NULL, NULL, NULL, 0, NULL );
HttpSendRequest( hReq, NULL, 0, NULL, 0 );

hReq = HttpOpenRequest( hConn, "GET", "index.html?a=1&b=2&C=3", NULL, NULL, NULL, 0, NULL );
のように、"?a=1&b=2&C=3"が付いているとNOT FOUND ページが取得されてしまいます。
0888デフォルトの名無しさん2009/12/31(木) 05:00:24
>>885
UIAどころかその前身のMSAAですら知名度は低いだろが
0889デフォルトの名無しさん2009/12/31(木) 05:18:14
解説サイトを作る連中に初級〜中級レベルの人間が多い為か知らないが
初心者向けのありふれた情報しか載ってないサイトばっかりなのが
APIの知名度格差を広げる原因ではないかと推測してみる
0890デフォルトの名無しさん2009/12/31(木) 05:23:15
2ちゃんねるにコード書いて年越しとはおめでたいな
0891デフォルトの名無しさん2009/12/31(木) 05:47:49
コードも書けずに年越す糞グラマよりマシ
0892デフォルトの名無しさん2009/12/31(木) 05:50:55
俺はスクリプトすら満足に動かせずに年越し
0893デフォルトの名無しさん2009/12/31(木) 05:55:15
パワポとエクセルしか使わなかったorz
0894デフォルトの名無しさん2009/12/31(木) 10:19:06
ありふれてない情報は売れるからな。
0895デフォルトの名無しさん2009/12/31(木) 13:28:17
ありふれた情報(しかも間違いだらけ)を売ってるやつもいるけどな
0896デフォルトの名無しさん2009/12/31(木) 14:54:18
10年以上仕事でWindowsプログラミングやってる。

正月休みだから少しム板を覗いてみたけど
普段はめったにここには来ないな。
この板って有益な情報があまりないもんね。
0897デフォルトの名無しさん2009/12/31(木) 15:12:11
特にこのスレは罵り合いしか書いてない
0898デフォルトの名無しさん2009/12/31(木) 15:21:36
プログラマの愚痴の掃き溜めだからな
いかに皆仕事で嫌々プログラム書いてるかがわかる
0899デフォルトの名無しさん2009/12/31(木) 15:51:51
>>887
ブラウザで同じ要求をしてみて応答を確認してみては?
クエリパラメータの渡し方自体はそれで合っている。
0900デフォルトの名無しさん2009/12/31(木) 16:20:38
> 10年以上仕事でWindowsプログラミングやってる。
何の自慢にもなってないよ。
0901デフォルトの名無しさん2009/12/31(木) 16:23:09
ブビしか使ったこと無いヘボプログラマに有益な情報なんて無くて当然でしょ
0902デフォルトの名無しさん2009/12/31(木) 16:28:18
ここ質問スレなんだから、質問と回答以外は雑談スレ作ってそっちでしてくれ。
0903デフォルトの名無しさん2009/12/31(木) 16:53:19
>>902
スレタイ読め

「Win32API雑談箱 Build84」
0904デフォルトの名無しさん2009/12/31(木) 17:33:01
もう解決したようだが
SendMessage(hWnd, TCM_SETCURFOCUS, index, 0);
SendMessage(hWnd, WM_KEYDOWN, VK_RETURN, 0);
タブ選択はこれで出来たよ。
アトミックな処理じゃないから、誤動作する可能性はあるが。

普通のタブ形式ならTCM_SETCURSELやTCM_SETCURFOCUSで切り替わるけど
ボタン形式だと動作が変わるんだね。
0905デフォルトの名無しさん2009/12/31(木) 17:59:22
>>904
メッセージを使って強引に操作するのは間違った方法だからわざわざ書かなくていい。
0906デフォルトの名無しさん2009/12/31(木) 21:01:03
>>889
マスゴミが糞ばっかりになったのは視聴者が糞ばかりだったから
webサイトが糞ばっかりになるのは(ry
0907デフォルトの名無しさん2009/12/31(木) 21:23:12
>>906
マスゴミ関係者乙
0908デフォルトの名無しさん2009/12/31(木) 21:36:26
webサイトが糞ばっかりになるのはwebが普及したから。
0909デフォルトの名無しさん2010/01/01(金) 01:44:20
俺2000年以前に毎日6時間くらい、会社の専用回線でインターネットしまくってたけど、
価値のある情報は当時もわずかだったよ。
ただ、当時はエロサイト詐欺サイト左翼洗脳サイト闇情報サイトの比率が非常に高かったね。
まともな情報をWebで書き込んでると、しょっちゅう脅迫電話っていうか、
「著作権を侵害している」とかいう電話が毎度毎度かかってきていた。
既存の曲やキャラクター、写真などは一切使用していないのに。
0910デフォルトの名無しさん2010/01/01(金) 01:48:47
ホント、無益な板だね w
0911 【大凶】 【463円】 2010/01/01(金) 02:35:55
aa
09128872010/01/01(金) 03:44:46
>>899
>クエリパラメータの渡し方自体はそれで合っている。
と教えていただいたので、他を調べてみた結果、この後のHttpQueryInfo()で
余計な事をやって居たのが原因だと判明しました。
お陰さまで解決する事ができました。ありがとうございました!!
0913 【大凶】 【1404円】 2010/01/01(金) 15:10:51
今年も雑談よろしくお願いします
0914デフォルトの名無しさん2010/01/01(金) 15:21:02
Win32APIに関して言えば10年前の方が有益な情報は多かった。
でもこれは当然のこと。
.NETが登場して有能なWin32プログラマが.NETに移行した結果だから。
0915デフォルトの名無しさん2010/01/01(金) 16:28:43
今年も罵り合いよろしくお願いします
0916デフォルトの名無しさん2010/01/01(金) 16:46:55
確かWin98の時はエディトコントロールに対して
SendMessageのWM_SETTEXTで文字列送りつけたら
全体がその文字列に置き換わった覚えがあるんだけど、
今XPで同じことやってみたら、末尾に文字列を追加する動作をした。

これって仕様変更? 記憶違い? どっちかのミス?
0917デフォルトの名無しさん2010/01/01(金) 16:47:51
.NETはパフォーマンスが出ないのに何で使うんだろう
スクリプト言語やらJAVAやらVBやらもいろいろ使ってみたが、結局CかC++に戻ってきた
C++はよいところもあるが、無駄が多い上に一貫性を感じない
0918デフォルトの名無しさん2010/01/01(金) 16:49:03
……ごめん、単純ミスだった。
正月早々何やってるんだ俺_| ̄|○
0919916と9182010/01/01(金) 16:50:13
あ、>918は>916の取り消し。
0920デフォルトの名無しさん2010/01/01(金) 17:43:34
>>917
挫折した自分を正当化しなくていいよ
0921デフォルトの名無しさん2010/01/01(金) 17:45:12
>>917
こういうヤツってC/C++でも大したコード書けないんだろうな
0922デフォルトの名無しさん2010/01/01(金) 18:27:14
パフォーマンスを出すのはCPU仕事
CPUを食い尽くすのはプログラマーの仕事
0923デフォルトの名無しさん2010/01/01(金) 18:38:00
defineみたいな頭の悪い言語仕様に振り回されてる人種に言われたくない罠
0924デフォルトの名無しさん2010/01/01(金) 18:41:14
> .NETはパフォーマンスが出ない
新年早々おバカ発言ですか
0925デフォルトの名無しさん2010/01/01(金) 18:52:52
わざわざインタプリタやランタイムかませて、進歩するハードウェアの足を引っ張るのもどうかと思うね
0926デフォルトの名無しさん2010/01/01(金) 18:55:03
じゃ、コンパイラやらアセンブラやらかますの止めて、全部マシン語でやれよ。ハゲ
0927デフォルトの名無しさん2010/01/01(金) 18:55:44
バッファオーバーランや整数オーバーフローしまくる糞コードしか書けないプログラマが多いから仕方ない
0928デフォルトの名無しさん2010/01/01(金) 18:56:34
>>926
やってますが何か?
ハゲてますが何か?
0929デフォルトの名無しさん2010/01/01(金) 18:58:04
ハゲ増しのお言葉↓
0930デフォルトの名無しさん2010/01/01(金) 19:00:24
まともなコード書けない糞グラマに限って>>917や>>925みたいな事を言うんだよね。
0931デフォルトの名無しさん2010/01/01(金) 19:01:51
.NETはインタプリタじゃ無いんですけど・・・アホですか?
0932デフォルトの名無しさん2010/01/01(金) 19:08:26
早くも今年度MVP登場か?
0933デフォルトの名無しさん2010/01/01(金) 20:29:51
> (define baka? (lambda (x) (= x 923)))
> (baka? 923)
#t
0934デフォルトの名無しさん2010/01/01(金) 21:04:47
MVPの座を防衛しようと必死だなw
0935デフォルトの名無しさん2010/01/02(土) 00:35:39
>>914
有能なプログラマは相変わらずWIN32かMFCで開発してる気がするけどなぁ
0936デフォルトの名無しさん2010/01/02(土) 00:38:18
VBやらC#やらってAPIはほとんど使わないの?
使うことが多いならめんどくさくない?
APIの引数とかの構造体とかから作ってから
呼び出さないといけないんでしょ?
0937デフォルトの名無しさん2010/01/02(土) 00:42:10
while(true)
{
if( PeekMessage(&msg, NULL, 0,0,PM_REMOVE) )
{
if (msg.message == WM_QUIT) break;
TranslateMessage(&msg);
DispatchMessage(&msg);//MsgProcに送信
}

//〜処理〜//

Sleep(1);
}

ウィンドウのタスクバーをつかんで移動させると
//〜処理〜//のところに制御が回ってこないのだが正常なの?
0938デフォルトの名無しさん2010/01/02(土) 00:49:19
>>935
優秀な人間は大八車引いてるのかしら

>>936
?が多すぎて馬鹿そう
0939デフォルトの名無しさん2010/01/02(土) 00:56:05
>938
プログラマとして優秀な人間は
ほかの事に関しても優秀なのかよ。
0940デフォルトの名無しさん2010/01/02(土) 00:59:13
>>939
だから馬鹿だってんだよ馬鹿
0941デフォルトの名無しさん2010/01/02(土) 01:42:53
今年も相変わらず罵り合いだけで安心しました。
0942デフォルトの名無しさん2010/01/02(土) 01:45:27
ウィンドウのタスクバーってどこだよ?w
09439372010/01/02(土) 01:52:11
タイトルバーだった
0944デフォルトの名無しさん2010/01/02(土) 01:54:51
ドラッグ中にウィンドウの内容を表示する、にチェックしてもメッセージ来ない?
09459372010/01/02(土) 02:20:20
>>944
変化なし
0946デフォルトの名無しさん2010/01/02(土) 12:24:35
>>937
制御が来ないが正常な動作
Windowsの問題点の一つ
0947デフォルトの名無しさん2010/01/02(土) 12:30:06
>>937
ttp://msdn.microsoft.com/en-us/library/ms632622(VS.85).aspx
ここに書いてある通り、正常な動作。
0948デフォルトの名無しさん2010/01/02(土) 15:23:35
>>946
MessageBoxを閉じるまで処理が返ってこないのを問題点というぐらい馬鹿な発言だぞ
0949デフォルトの名無しさん2010/01/02(土) 16:33:39
いやいや
これがあるからウィンドウプロシージャで全部解決というわけにはいかなくなるんだよ
その結果処理を別スレッドに分散させざるを得なくなり処理の一元化に失敗してプログラムの構造が複雑化するわけ
0950デフォルトの名無しさん2010/01/02(土) 16:43:31
>>949
前年度MVPの方ですか?
モーダルループを理解してない馬鹿発言はそのぐらいにしといて下さいね
0951デフォルトの名無しさん2010/01/02(土) 16:52:51
949訳: スレッドは難しくてわかりません><
09529372010/01/02(土) 17:03:07
なるほど、制御が来ないが正常な動作なのか
//〜処理〜// を別スレッドにすれば解決なのかな
0953デフォルトの名無しさん2010/01/02(土) 17:10:42
>>950
どこがどう間違ってるのか分からない
指摘してもらえると助かる
0954デフォルトの名無しさん2010/01/02(土) 17:54:59
>>949=>>953=日本語が理解できてない馬鹿
0955デフォルトの名無しさん2010/01/02(土) 17:58:07
> ウィンドウプロシージャで全部解決
これがそもそも馬鹿
0956デフォルトの名無しさん2010/01/02(土) 18:03:50
だからどこが間違ってるんだよw
0957デフォルトの名無しさん2010/01/02(土) 18:05:51
ウィンドウプロシージャで全部解決というのが間違ってます。
これが理解できないならWin32を勉強しなおしましょう。
0958デフォルトの名無しさん2010/01/02(土) 18:08:08
一度MVPが作ったソフトを見てみたい
パスとファイルの区別つかなくてウィンドウプロシージャを分ってない人がどういうソフトを作ってるのか興味がある
0959デフォルトの名無しさん2010/01/02(土) 18:10:38
基本的に全ての処理はウィンドウプロシージャからぶら下げるんじゃなかった?
だから無限ループを作ったりするとメッセージ処理が止まって操作がきかなくなる
0960デフォルトの名無しさん2010/01/02(土) 18:17:31
何のためにスレッドがあると思ってんだこの馬鹿
0961デフォルトの名無しさん2010/01/02(土) 18:23:55
だから別スレッドで処理する必要が出てくるから同期とかいろいろ面倒になる
それを使わない方法もあるんだけど(というか設計上はそっちが本命だったはず)
それでもウィンドウを掴むぐらいでメッセージ処理が止まっちゃったら
リアルタイムっぽく動いてほしいプログラムは困るよねってこと
0962デフォルトの名無しさん2010/01/02(土) 18:25:22
> それを使わない方法もあるんだけど(というか設計上はそっちが本命だったはず)
間違いです
スレッドを使うのが本命です
0963デフォルトの名無しさん2010/01/02(土) 18:29:03
ウィンドウプロシージャではGUIとしての処理だけを行い、それ以外の重い処理は別スレッドで行う

Win32の常識だが…
0964デフォルトの名無しさん2010/01/02(土) 18:33:47
WinSock2の非同期ソケットを調べていてそう感じたんだが……
例外かな?
0965デフォルトの名無しさん2010/01/02(土) 18:39:17
一応Microsoft側の視点てことで
0966デフォルトの名無しさん2010/01/02(土) 18:42:42
ホント何も分かってないんだな
0967デフォルトの名無しさん2010/01/02(土) 18:52:59
だから別スレッドは使わないでメインスレッドオンリーという前提では
解決できない問題だよねって言いたいわけだが……
0968デフォルトの名無しさん2010/01/02(土) 18:55:42
> メインスレッドオンリーという前提
だーかーらー
こんな前提がおかしいんだよ
Win3.1で開発してるのか?
0969デフォルトの名無しさん2010/01/02(土) 18:59:11
スレッドを使いこなせない馬鹿はレスしなくていいから。
0970デフォルトの名無しさん2010/01/02(土) 18:59:12
前提がおかしいかどうかを決めるのは君じゃないだろ
それが与えられた条件で可能かどうかを判断するのが技術者ってもんだ
0971デフォルトの名無しさん2010/01/02(土) 19:01:35
シングルスレッド用のCランタイムが廃止されて久しいっていうのに
未だにシングルスレッドに拘るバカって何なの?
0972デフォルトの名無しさん2010/01/02(土) 19:01:44
でそんな前提でやらなきゃいけない事ってあるんですか
0973デフォルトの名無しさん2010/01/02(土) 19:02:25
VB6ユーザーでしょ
0974デフォルトの名無しさん2010/01/02(土) 19:04:10
>>971
だから条件を決めるのは君じゃないってば
0975デフォルトの名無しさん2010/01/02(土) 19:08:03
>>974
じゃあ誰が条件を決めるのさ?
相変わらず論点を逸らそうと必死だね
0976デフォルトの名無しさん2010/01/02(土) 19:09:30
私はスレッドが使えませんのでシングルスレッドが絶対条件です
ってか?www
0977デフォルトの名無しさん2010/01/02(土) 19:10:33
かっけーw
0978デフォルトの名無しさん2010/01/02(土) 19:12:38
MVPに構うなよお前ら
0979デフォルトの名無しさん2010/01/02(土) 19:14:39
>>975
論点をそらそうと必死なのはそっちだろ
主張は>>949=>>961=>>967に書いたとおり
>>952で質問自体は解決してしまってるけど>>950が何を言いたいのかにちょっと興味があっただけ
分かってないことはまだまだ多いし
0980デフォルトの名無しさん2010/01/02(土) 19:16:28
Microsoft側の視点ではGUI以外の処理は別スレッドで行うことになってます
0981デフォルトの名無しさん2010/01/02(土) 19:18:38
ソースがあるといいな
Raymond Chennのブログでもいい

自分のはそう感じただけだから
0982デフォルトの名無しさん2010/01/02(土) 19:19:31
> メインスレッドオンリーという前提
> ウィンドウプロシージャで全部解決

これが馬鹿だって言ってるのにMVPだけあって何もわかってないみたいだね
0983デフォルトの名無しさん2010/01/02(土) 19:26:32
>>937のソースからそう判断したわけだが
0984デフォルトの名無しさん2010/01/02(土) 19:30:23
罵るためだけに意見も論点を曖昧にして無駄にスレをのばしていくいつものパターン。
罵り合いの果て、結局何の話をしているのか自分でも分からなくなってくんだろう。
0985デフォルトの名無しさん2010/01/02(土) 19:36:08
論点を曖昧にするのはMVPだけですが何か?
0986デフォルトの名無しさん2010/01/02(土) 19:36:52
とりあえず罵り合いをしている人間とは別人というのを宣言して、

>>937の
処理のところで本当に処理をするのはそもそもの誤り。
メッセージループ中では速やかにメッセージを処理するだけで、
定期的に何らかの処理をしたいのであればタイマーメッセージを使う。
メッセージとして処理するには重いのであれば、別スレッドを使う。
ただしGUI以外の処理を別スレッドにするかどうかは内容次第。

ただそれだけの話なのに結論を引き延ばしてグダグダやっても意味がないだろ。
0987デフォルトの名無しさん2010/01/02(土) 19:41:17
もちろん>>986に書いた内容も異論が出てくるだろうけど、
自分の意見をはっきりさせずにあれが間違いだ、分かっていないと、
グダグダやることにいったい何のメリットがあるんだよ?

これが正しいと思うのならはっきり根拠と正確な内容を書けばいいだけだろ。
延々とくだらないやりとりを続けて、いったい何がしたいんだ?
0988デフォルトの名無しさん2010/01/02(土) 19:45:19
>>949=>>961=>>967=>>986=>>987
勝手にまとめるなよ

少しは自分の発言に責任持ったら?

> メインスレッドオンリーという前提
> ウィンドウプロシージャで全部解決
0989デフォルトの名無しさん2010/01/02(土) 19:46:58
MVPの方がまともそうだけどな。
0990デフォルトの名無しさん2010/01/02(土) 19:47:39
新年早々自演ですか
0991デフォルトの名無しさん2010/01/02(土) 19:51:41
どうやら俺様の勝利で終了のようだな
0992デフォルトの名無しさん2010/01/02(土) 19:52:23
>これがあるからウィンドウプロシージャで全部解決というわけにはいかなくなるんだよ
そもそもこれが間違いで、

>その結果処理を別スレッドに分散させざるを得なくなり
これが正しいWin32アプリの在り方

>処理の一元化に失敗してプログラムの構造が複雑化するわけ
これはキミの技量が足りないだけ

というだけの事でしょうが
何をウダウダ言ってるんだ?
0993デフォルトの名無しさん2010/01/02(土) 19:57:02
とりあえずMVPがスレッドすら使いこなせない素人なのはわかった
0994デフォルトの名無しさん2010/01/02(土) 19:58:16
>>948
GetMessage(&msg, NULL, 0, 0);
switch (msg.message)
{
case MM_WOM_DONE:
m_waveOutDev.UnprepareHeader(pWaveHdr);
...
m_waveOutDev.WriteHeader();
...
break;
}
メッセージがディスパッチされないため、サウンド再生が停止する不具合が起こる。
0995デフォルトの名無しさん2010/01/02(土) 19:59:54
>>994
モーダルループを理解していればそのような馬鹿な発言はしません。
0996デフォルトの名無しさん2010/01/02(土) 20:01:04
理解してるわけないだろ
0997デフォルトの名無しさん2010/01/02(土) 20:02:23
モーダルループを自分で作ったことがあるプログラマなら理解してるはずなんだが
0998デフォルトの名無しさん2010/01/02(土) 20:03:14
あと3スレで解決しろよ
0999984=986=9872010/01/02(土) 20:04:57
>>988
なにか被害妄想が酷くないか?
自分に意見する人間は全部同一人物じゃないの心の平穏が保てないわけじゃあるまい。

>>995
それがグダグダの原因だと言っているんだよ。
「理解していれば」ではなく、自分の見解をはっきりさせない限り、無駄に長引くことになるだけ。
自分の意見に自信があるなら、きっちり説明して一刀両断にすれば終わる話だろ。
1000デフォルトの名無しさん2010/01/02(土) 20:05:37
スレッドが分かりません
モーダルループが分かりません


素人はレスするなよ……
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。