Win32API質問箱 Build54

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。

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

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(http://msdn.microsoft.com/library/)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
2デフォルトの名無しさん:2007/06/12(火) 20:00:44
3デフォルトの名無しさん:2007/06/12(火) 20:01:25
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
4デフォルトの名無しさん:2007/06/12(火) 20:02:07
5デフォルトの名無しさん:2007/06/12(火) 20:02:48
MSDN日本語版は誤訳があったり、一部欠けていたりするなど不完全なため、英語版推奨。
http://msdn.microsoft.com/library/
http://msdn2.microsoft.com/en-us/library/

MSDN ライブラリ 2006年12月版
http://www.microsoft.com/downloads/details.aspx?FamilyID=94596af5-cc58-45af-a14b-df627a31e783&DisplayLang=ja

MicrosoftR WindowsR Software Development Kit for Windows Vista? and .NET Framework 3.0 Runtime Components
http://www.microsoft.com/downloads/details.aspx?FamilyID=c2b1e300-f358-4523-b479-f53d234cdccf&DisplayLang=en
6デフォルトの名無しさん:2007/06/12(火) 20:03:40
俺乙
7デフォルトの名無しさん:2007/06/12(火) 20:07:55
>>7-1001
8デフォルトの名無しさん:2007/06/12(火) 20:12:59
華麗なスレ建て乙華麗
9デフォルトの名無しさん:2007/06/12(火) 20:44:31
10デフォルトの名無しさん:2007/06/12(火) 21:25:16
win32apiの関数だけで2Dのゲームを作るのとdirectXを使ってwindowタイプの2Dのゲームを作るのとではやはりdirectXの方が描画が明らかに早いですか
11デフォルトの名無しさん:2007/06/12(火) 21:52:28
>>10
ゲームによる
12デフォルトの名無しさん:2007/06/12(火) 22:15:34
でもまあたいがいはDirectXのが早い
13デフォルトの名無しさん:2007/06/12(火) 22:28:10
Vistaもあるし,D3Dで書いた方がいいんでね?
14デフォルトの名無しさん:2007/06/13(水) 01:47:52
"12345678" ==> 0x12345678
に変換するWin32APIがあったら教えてください
15デフォルトの名無しさん:2007/06/13(水) 01:59:19
"0x123" -> 0x123 shlwapi.lib StrToIntEx()
16デフォルトの名無しさん:2007/06/13(水) 03:10:21
sscanfじゃいかんの?
17デフォルトの名無しさん:2007/06/13(水) 04:55:12
スレ違いです
18デフォルトの名無しさん:2007/06/13(水) 05:19:08
>>14の質問の意図は「数字を数値化する方法」じゃなくて
「数字を数値化するAPIをおれによこせ おれはかみになるんだ」ってことだしな
19デフォルトの名無しさん:2007/06/13(水) 05:49:48
>>14
文字列を数値に変換したいけど
CRT使いたくないからAPI教えてって事なら>>15

10進数の文字列を値の違う16進数の数値に変換って事なら
答えは、ない
0x12345678 = 305419896 だから
"12345678" -> 12345678 -> 305419896 か
"12345678" -> "0x12345678" -> 0x12345678
この処理が必要になる
20デフォルトの名無しさん:2007/06/13(水) 09:13:22
このwpeproみたく、socketの盗み見、編集をするためのAPIの名前のヒントをください。
dllのinjectionで割り込むのがスジでしょうか。

http://wpepro.net/
2120:2007/06/13(水) 09:30:41
NEGiES version 1.57
みたいなやつを作ろうとおもってます。

ttp://hp.vector.co.jp/authors/VA036210/
22デフォルトの名無しさん:2007/06/13(水) 09:40:28
>>14 はstrtol()を知らないだけなんじゃないかと思う
23デフォルトの名無しさん:2007/06/13(水) 09:41:54
>>21
パケットモニタか
ここで聞いた方がいいんじゃないか

ネットワークプログラミング相談室 Port19
http://pc11.2ch.net/test/read.cgi/tech/1171029896/
2420:2007/06/13(水) 09:48:23
参照はioctlsocketにSIO_RCVALLでできるのまでわかっています。
でも、これだと編集はできないです。
2520:2007/06/13(水) 09:52:25
>>23
ありがとう、過去ログ呼んで、聞いてみます。
26デフォルトの名無しさん:2007/06/13(水) 20:56:16
WPARAM とか LPARAM の
頭文字、W Lは何の略なのでしょうか?
あとlpsCmdLineのlps
LR_DEFAULTSIZEのLR
nCmdShowのnが 何なのか
気になっております。
27デフォルトの名無しさん:2007/06/13(水) 21:03:20
WとLは、WORDとLONG、昔はWORD型とLONG型だった
LRは知らない
nは駆逐されつつあるシステムハンガリアンでint型を表す接頭辞
28デフォルトの名無しさん:2007/06/13(水) 21:05:23
何で駆逐されつつあるんでしょうか?
29デフォルトの名無しさん:2007/06/13(水) 21:08:13
LPARAM Long長のパラメータ(旧)。今はLONG_PTR長のパラメータのこと。
#if defined(_WIN64)
typedef __int64 LONG_PTR;
#else
typedef long LONG_PTR;
#endif

WPARAM WORD長のパラメータ(旧)。今はUINT_PTR長のパラメータのこと。
#if defined(_WIN64)
typedef unsigned __int64 UINT_PTR;
#else
typedef unsigned int UINT_PTR;
#endif

LR_DEFAULTSIZEのLRはLoad Resourceの頭だと思われ。
nCmdShowのnは符号付整数として、Numericのnかな?←自信ない
30デフォルトの名無しさん:2007/06/13(水) 21:14:56
31デフォルトの名無しさん:2007/06/13(水) 21:22:40
>>28
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpgenref/html/cpconparameternamingguidelines.asp

>>27の言い方は極端かもしれないが、.(あくまで)NET Frameworkでは、
『パラメータ名にはハンガリー型表記法を使用したプリフィックスは付けません。 』
としている。


駆逐かどうかは知らんけどな。
32デフォルトの名無しさん:2007/06/13(水) 21:32:16
>>30
何の?
3326:2007/06/13(水) 21:38:21
ありがとうございます。
lpsCmdLineは分かりませんか?
LongPointerでしょうか…
でもsがそれだと変だしなぁ...
34デフォルトの名無しさん:2007/06/13(水) 21:47:12
なんなんだ、このやり取りは?
アホくさ
35デフォルトの名無しさん:2007/06/13(水) 21:49:19
LPSTR lpsCmdLineでしょ
36デフォルトの名無しさん:2007/06/13(水) 21:56:39
うはw
Excel、Word作ったヤツが、ハンガリアン記法はじめたんかいな
37デフォルトの名無しさん:2007/06/13(水) 21:59:12
lpszじゃないのか?
16ビットのころのfarポインタのASCIZ文字列だったけな
38デフォルトの名無しさん:2007/06/13(水) 22:11:12
long
pointer
string
zero terminated  ってかこれAPIってよりC言語のお話じゃないの?
39デフォルトの名無しさん:2007/06/13(水) 22:15:31
まあAPIそのものがCだったからな。CDECLじゃなくてPASCALだったけど
40デフォルトの名無しさん:2007/06/13(水) 22:39:02
ちなみにlpszプリフィックスは
Large Pointer to String terminated by Zeroの略称で、終端にNULLを置くようですね。
41デフォルトの名無しさん:2007/06/13(水) 22:54:16
42デフォルトの名無しさん:2007/06/14(木) 23:09:38
>>22
知らないで自前で作っちゃったよ・・・orz
43デフォルトの名無しさん:2007/06/15(金) 09:50:58
最高にわろた
44デフォルトの名無しさん:2007/06/15(金) 14:42:40
>>41
なるほど。
元々のハンガリアン記法は常識的なものだったんだな。
45デフォルトの名無しさん:2007/06/15(金) 14:43:23
>>41
なるほど。
元々のハンガリアン記法は常識的なものだったんだな。
46デフォルトの名無しさん:2007/06/15(金) 18:18:43
一行文字入力ダイアログボックスってどうやって出すの?
47デフォルトの名無しさん:2007/06/15(金) 18:21:45
>>46
意味がわからん。例えばどれのことだ?
普通にダイアログ作って1行入力して受け取るんじゃダメなのか。
48デフォルトの名無しさん:2007/06/15(金) 18:24:13
MessageBoxの逆みたいのないんですか?
if(InputBox(handle, text, caption, buf, sizeof(buf))) printf("%s\n", buf);
みたいに使えるようなの。
49デフォルトの名無しさん:2007/06/15(金) 18:27:30
作ってみ。そんな手間じゃないぞ。
50デフォルトの名無しさん:2007/06/15(金) 20:17:46
ハンガリアン記法か・・・。

他のスレにも書いたネタで恐縮だが、
typedef int HEIGHT ;
typedef int WEIGHT ;

HEIGHT h = 170 ;
WEIGHT w = h ;
これがコンパイラによってハネられないために、生まれたものだと思う。

C/C++のtypedefは、
新しく型を定義するのではなく、既存の型に別名を付ける
という代物で、
なんでtypealiasじゃないんだよ! という困ったチャン。

構造体やクラスでラップすれば、型が違うのでダメよとハネてくれるんだけど、なんだかなぁ。
51デフォルトの名無しさん:2007/06/15(金) 20:20:39
Delphi とか、C++ Builder にはあるな>InputBox
52デフォルトの名無しさん:2007/06/15(金) 21:36:36
フルパスから拡張子を除いたファイル名取得するAPIってないですか?
今はPathFindFileName()→PathRemoveExtension()でやってるんですけど
53デフォルトの名無しさん:2007/06/15(金) 22:33:17
>>52
パスだけ、ファイル名だけ、の2つを
つなげればいい。APIはなんだっけか
54デフォルトの名無しさん:2007/06/15(金) 23:42:40
>>42
最近のヤツはマルチスレッドで利用してもたいてい問題無いようにはなってるけど、
C++の規格としてそれが保障されてるわけじゃないから自作モノにも意味があるよ。
55デフォルトの名無しさん:2007/06/15(金) 23:48:44
また妄想で適当なことをほざく馬鹿が湧く。
もう春はとっくに終わったぞ。
56デフォルトの名無しさん:2007/06/15(金) 23:49:53
夏の方が長い
57デフォルトの名無しさん:2007/06/15(金) 23:53:01
文字列変換関数なんて普通に作ったらリエントラントだろ
マルチスレッドがどうとか意味不明すぎる
58デフォルトの名無しさん:2007/06/15(金) 23:56:42
>>55-57
知ったかぶった馬鹿どもがこんなにいるとは思わんかった。
59デフォルトの名無しさん:2007/06/16(土) 00:01:45
>>58
負け犬の独り言はチラシの裏にでも書いておけ。
60デフォルトの名無しさん:2007/06/16(土) 00:51:16
>>54
strtokと勘違いして内科医?
61デフォルトの名無しさん:2007/06/16(土) 01:07:08
strtok はスレッドセーフじゃないな。明らかに。
6254:2007/06/16(土) 01:10:51
>>60
   /\___/ヽ
 /''''''   '''''':::::::\
 .| (◯),   、(◯)、.::|:
 .| " ,,ノ(、_, )ヽ、,,"".:::|:
 .|   ´,rェェェ、` .:::::::::|:
 -\  |,r-r-|  .:::::/…
    ヾ`ニニ´ / ̄"''''ヽ:
63デフォルトの名無しさん:2007/06/16(土) 06:03:46
>>62
吹いたwwwwwwwwwwwwww
64デフォルトの名無しさん:2007/06/16(土) 07:29:03
僕ハッカー
65デフォルトの名無しさん:2007/06/16(土) 08:23:14
Win32APIに64bitなGetTickCountってないの?
66デフォルトの名無しさん:2007/06/16(土) 08:27:56
ない
67デフォルトの名無しさん:2007/06/16(土) 11:47:12
>>61
msdnには大丈夫と書いてあるが。
68デフォルトの名無しさん:2007/06/16(土) 11:59:49
何も考えずに対策無しに実装したらって話だろ
6954:2007/06/16(土) 12:45:02
自己解決しました。

>>60にカチンときたので、コンパがあっても教えません。
バーカ!
70デフォルトの名無しさん:2007/06/16(土) 12:50:58
解決も何も、元々質問じゃねーだろ
騙るならもうちょっとスレ読んでからなw
71デフォルトの名無しさん:2007/06/16(土) 13:00:23
>>65
長い時間をはかるのに使うような代物じゃない。
オーバーフロー対策は、

DWORD dwElapsed ;
if (dwStart <= dwEnd) {
dwElapsed = dwEnd - dwStart ;
} else {
dwElapsed = dwStart - dwEnd ;
}

これでいいんじゃない?
72デフォルトの名無しさん:2007/06/16(土) 13:35:51
START=DWORD_MAX-10で、
END=20のとき、
ELAPSEDは、DWORD_MAX-30になるのか?

何も考えずに、
DWORD dwElapesed = dwEnd - dwStart;
でいいんじゃないのか?
73デフォルトの名無しさん:2007/06/16(土) 13:46:46
>>71
クマー
74デフォルトの名無しさん:2007/06/16(土) 14:29:09
以前"ファイルハンドルを開きっぱなしでそのファイルを削除しようとすると、
「ファイルまたはフォルダの削除エラー」がでます。 "
ということを質問させてもらいました。

削除に関しては、CreateFileにFILE_SHARE_DELETEのフラグをつけることで
エラーが出なくなり解決しましたが、
リネーム時に「ファイルまたはフォルダの変更エラー」が
出てしまいます。

今はFILE_SHARE_READ,FILE_SHARE_WRITE,FILE_SHARE_DELETEのフラグを
立てています。

ファイルハンドルを開きっぱなしのファイルがリネームされるときに
エラーにならなくなる方法がありましたら教えてください。
またファイルがリネームされるタイミングを知ることができれば、
ファイルハンドルを解放できますが、そういう方法もありますか?
75デフォルトの名無しさん:2007/06/16(土) 14:41:49
CreateEventとかCriticalSection
76デフォルトの名無しさん:2007/06/16(土) 14:42:34
その代わりスレッドWaitForSingleObject
77デフォルトの名無しさん:2007/06/16(土) 15:06:33
普通にCreateFileでハンドル閉じる前にリネームできるけどな
またどうせ変なことでもやってんじゃないの?
78デフォルトの名無しさん:2007/06/16(土) 15:09:48
オレも変だなあと思ってリネームしてみたけどエラー出なかった
79デフォルトの名無しさん:2007/06/16(土) 16:49:25
>>74
根本的に何か変な雰囲気を感じる。

まず、「」でくくられたエラーメッセージが、
GetLastError()の返す値をFormatMessage()したものとは違うっぽい。

次に、
対症療法的に目先のことばっかり考えていて、
もっと基本的な部分を見落としているような気配がする。

そして、
ファイルを開いていても、ファイル名を変更することはできるのだけど、
それができないと言ってるあたりに、何か重大なことを隠している予感がする。
8074:2007/06/16(土) 17:20:10
すいません。原因がわかりました。

CreateFileしているファイルはログをCSV形式で出力するもので、
あるバイナリエディタでも開いており、それが悪さをしていたようです。

つまらない原因で申し訳ありません。

> まず、「」でくくられたエラーメッセージが、
> GetLastError()の返す値をFormatMessage()したものとは違うっぽい。

エラー時のダイアログのタイトル部分です。
81デフォルトの名無しさん:2007/06/16(土) 17:36:42
>エラー時のダイアログのタイトル部分
こんなのを手がかりにするべきではない
やるならFormatMessageなりエラー値なり、
ちゃんとAPIのドキュメント読んで、エラーコード等を取得すべきだし、
それを手がかりにして検索なり質問なりすべき
82デフォルトの名無しさん:2007/06/16(土) 17:46:27
プログラム側のエラーじゃなくて、リネームをエクスプローラかなんかでやって出た
エラーだったんだろう。
83デフォルトの名無しさん:2007/06/16(土) 18:37:24
文字列変換をANSIからTCHARに変換するAPIってないのですか?
プロジェクトの文字セットがunicodeなら、MultiByteToWideCharして
マルチバイトなら無変換
84デフォルトの名無しさん:2007/06/16(土) 18:52:30
const char str[] = "ほげほげ";
TCHAR buf[sizeof str];

_stprintf(buf, "%hs", str);

というのはどうだろう。
ロケール指定は必要になると思うが。
85デフォルトの名無しさん:2007/06/16(土) 19:08:49
よく意味のわからない質問に答えられるな
86デフォルトの名無しさん:2007/06/16(土) 19:11:25
C++でATLを使ってよければATL::CA2Tとか楽
87デフォルトの名無しさん:2007/06/16(土) 19:14:43
#ifdef UNICODE
できればいいんじゃね?
88デフォルトの名無しさん:2007/06/16(土) 19:18:17
APIにはない

inline とか#ifdef つかって手前で作れって話かと
89デフォルトの名無しさん:2007/06/16(土) 21:00:28
皆さん、有難うございます。83です。無いのですか、orz
TEXT(" ")マクロのAPI版を期待しんだすが...
>>84 と >>87の方法を検討したいとおもいます。
>>86 ATLは使ったことがありません。
90デフォルトの名無しさん:2007/06/16(土) 21:52:35
>TEXT(" ")マクロのAPI版を期待しんだすが...

なぜ >>83 でそう書かないのか理解に苦しむ
91デフォルトの名無しさん:2007/06/16(土) 22:39:51
>>80
> エラー時のダイアログのタイトル部分です。

そのダイアログは誰が出したもの?
>>82の予想通りっぽいけどさ。

変な雰囲気を感じたのは、
主語的なものが抜けていたからだったんだな。
92デフォルトの名無しさん:2007/06/16(土) 22:49:32
>>83
Win32APIには、TCHARやLPTSTRやLPCTSTRを受け渡しするものは、ない!
(いや、例外的に何かあったような気もする・・・)
そんなものを渡されても、判別、つかないっしょ。

>>84
オーバーヘッドが問題にならないなら、
それはいいアイデアだ。
_stprintf(buf, _T("%hs"), str);
にすれば使えるね。
93デフォルトの名無しさん:2007/06/16(土) 22:50:41
【派遣ネガティブ根性チェック】

3つ以上、チェックがつけばアナタの性格はひん曲がっており、
ネガティブ負け組派遣人生を歩んでいます。

□派遣先正社員の作った糞開発ツールはたとえバグだらけでも苦労して使うべきだ
□派遣先の人事権のある社員の意見はたとえ間違っていてもマンセーする
□昼食は必ず派遣先の社員と行くべきだ
□派遣先から「いつまでもここで仕事してくださいね(安い金でw)」と言われて嬉しい
□自社で仕事なんてできるわけがない
□派遣労働の問題点の話題が出ると感情剥き出しにして反論する
□派遣労働の問題を指摘する人は嫌いだ
□派遣先には仕事だけでなくプライベートについてもグイグイ引っ張って欲しい
□奢ってくれる派遣先正社員を尊敬する
□自分の月額金額を知らないのは当然だ、単金を聞いてはいけない
□派遣先正社員より自分の生涯収入が低いのは当然だ
□派遣先に尻尾を振り、かわいがってもらうことが大切だ
□チビは派遣先にかわいがってもらいやすから派遣には有利だ
94デフォルトの名無しさん:2007/06/16(土) 22:52:01
>>89
> TEXT(" ")マクロのAPI版

意味が分からない。

マクロはコンパイル時に、ANSIかUnicodeか決まっちゃうのよ。
95デフォルトの名無しさん:2007/06/17(日) 00:17:39
GetVersionExというAPIをVB6 EXEから使用していますが、
作成したEXEをプロパティで互換モード(Win95、Win2000等)に設定しても
戻り値(OSのVer番号)は、実行環境のOSのVer値となります。

この現象は、「WinXpSp2」「WinVista」にて確認しましたが、
 @互換モードで実行されているか否か
 AどのOSの互換モードに設定されているか
を知る方法を、ご存じの方は教えてください。
96デフォルトの名無しさん:2007/06/17(日) 01:24:48
>>95
ちゃんと変わるけどなぁ(XP SP2で確認)
9795:2007/06/17(日) 02:05:14
>>96
ありがとうございます。

こちらは下記コードでもためしましたが、やっぱりだめでした..
ttp://www.bcap.co.jp/hanafusa/VBHLP/Version.htm
98デフォルトの名無しさん:2007/06/17(日) 02:11:17
>>97
VBでビルドする度にEXEが新しくなって設定がリセットされている
とか、
VBでEXEを作ってはいるが、VB上から実行していて、EXEを使ってない
とか、
そういうところに盲点あったりしないか?
9995:2007/06/17(日) 02:56:06
>>98
そのミスはないです。
ちなみに互換モード設定はEXE更新後も保持されるようです。

Visual C++ 6.0で作成したEXEを、互換モード設定し起動したところ、
設定したOSのVerが、ちゃんとかえってきました。
DLLにしてVBからコールしようと思います。
100デフォルトの名無しさん:2007/06/17(日) 08:32:11
使用する言語によって動作が変わるAPIがあったら今頃大騒ぎになってるだろ・・・
101デフォルトの名無しさん:2007/06/17(日) 13:51:37
Explorerのファイルサイズの1.23GBみたいに書式化してくれる関数教えてください。
102デフォルトの名無しさん:2007/06/17(日) 14:01:17
そのぐらい自分で作れよ。
103デフォルトの名無しさん:2007/06/17(日) 14:10:04
>>101
MSDNライブラリ
→Win32 and COM Development
→User Interface
→Windows Shell
→Shell Reference
→Shell Lightweight Utility Functions
→String Functions
→関数名の一覧から自分の目で探せ
104デフォルトの名無しさん:2007/06/17(日) 14:14:55
自分の妄想した通りのプログラムが出来る関数教えてください。
105デフォルトの名無しさん:2007/06/17(日) 14:17:28
そのぐらい自分で妄想しろよ。
106デフォルトの名無しさん:2007/06/17(日) 14:33:39
>>104
自分の妄想した通りのプログラムは、自分の妄想の中で実行すれば、いいんじゃね?

107デフォルトの名無しさん:2007/06/17(日) 14:34:23
やあ、>>89 =83です。
こんな風にしたんだが良いと思う? 
一様win98SE(マルチバイト)とXP(uni.)で正常に動作するのが出来た。

//char -> TCHAR変換
char str[X];
TCHAR buf[X];

_stprintf( buf,
#ifdef UNICODE
_T("%hs"),
#else
_T("%s"),
#endif
str);
108デフォルトの名無しさん:2007/06/17(日) 14:35:54
>>104
std::string mousou(std::string nounai) {
  //ここにコードを書いてください
}
109デフォルトの名無しさん:2007/06/17(日) 14:55:24
>>107
_stprintfはスレ違いだな。このスレ的にはwsprintf。
110デフォルトの名無しさん:2007/06/17(日) 15:11:45
>>107
なんでOSによってANSIとUnicodeを切り替えるの?
XPでもANSIでいいじゃない。
111デフォルトの名無しさん:2007/06/17(日) 15:12:23
うっさいはげ
112デフォルトの名無しさん:2007/06/17(日) 15:21:44
>>107
なんで#ifdef UNICODEするの?

_stprintf(buf, _T("%hs"), str) ;
これ一発でOKじゃんか。

%sにhを付けると、strを常にANSIとして扱うという意味だよ?
113107:2007/06/17(日) 16:28:21
>>112 熱烈感謝あげ
>%sにhを付けると、strを常にANSIとして扱うという意味だよ?
知らなかったよ、orz
h付でchar->UNI、hなしでchar->charと妄想した。

>>110 いや、あれよ、やっぱNT系OS用はuni.使わないとかっこわるいじゃない。
114デフォルトの名無しさん:2007/06/17(日) 16:31:00
MSLUぶち込めばWin9xでもUnicodeAPI使えなかったっけ?
115デフォルトの名無しさん:2007/06/17(日) 16:36:24
> かっこわるいじゃない
お前は何を言っているんだ?

複雑なコード書くほうがよっぽどカッコ悪い。
# で、文字列操作関連でバグ出して、もっとカッコ悪くなるんだろうな。
116デフォルトの名無しさん:2007/06/17(日) 16:42:48
>>113
>NT系OS用はuni.使わないとかっこわるいじゃない

なんとなく気持ちは解るけど、それはミスディレクション
基本は keep it simple、だよ
NT系以外もターゲットにするなら、Unicodeは極力利用しないのがベター
無用な複雑性こそ憎むべきだよ
117デフォルトの名無しさん:2007/06/17(日) 16:46:55
Windows Vista にて
普通のサーバープログラムを sexe でサービスに入れたのですが
通知領域(タスクトレイ)にアイコンが表示されません。
サーバー機能は問題なく動作しているようです。
もちろん「ディスクトップとの対話をサービスに許可」していますし
Shell_NotifyIcon のタイムアウト処理も行い
msgTaskBarRestart によるタスクトレイ再登録も行っています。

直接の原因は Shell_NotifyIcon が ERROR_FILE_NOT_FOUND に
なってしまっていることのようです。
何のファイルが見つからないんだ??? さっぱりわからん。

対応策はあるのでしょうか?
やはり サービスプロジェクトで書き換えるしかない?
118デフォルトの名無しさん:2007/06/17(日) 16:47:59
sex ではチンポ入れるんだよ
119デフォルトの名無しさん:2007/06/17(日) 16:49:42
↑のコメントをした者ですが、
ちなみにサービス起動しない場合はちゃんとアイコンは表示されます。
120デフォルトの名無しさん:2007/06/17(日) 16:51:53
119のコメントは117のコメントに対するものです。
121デフォルトの名無しさん:2007/06/17(日) 16:54:55
>116
NT以外って何?CEのこと?3.1のこと?
122デフォルトの名無しさん:2007/06/17(日) 16:57:15
>>120
Vista以外だとどうなの?
それからVistaでの変更の影響は調べたの?
セッション0の分離とか大規模な変更が行われたので、
互換性に関する資料がMSから大量に出されてたと思うけど。
123デフォルトの名無しさん:2007/06/17(日) 16:57:46
>>121
いや、流れからすると95系だろ
124デフォルトの名無しさん:2007/06/17(日) 17:10:34
>>117
>何のファイルが見つからないんだ??? さっぱりわからん。

ttp://msdn2.microsoft.com/en-us/library/ms647738.aspx
>The most common cause of failure is that the taskbar window doesn't exist or is unresponsive.
>GetLastError in that case returns E_FILE_NOT_FOUND.
125デフォルトの名無しさん:2007/06/17(日) 17:34:33
>>122
WindowsXP の場合は、タスクバーにアイコンは表示されて
サーバー機能も問題なく動作します。
ただ、何故かサービスのくせにひとたびログインしてログオフすると
プロセスが死にます。この辺はまだ未調査です。

>>124
ありがとうございます。調査します。
126デフォルトの名無しさん:2007/06/17(日) 17:41:44
>>WindowsXP の場合は、タスクバーにアイコンは表示されて
タスクバー→タスクトレイの間違いです。すみません。
127デフォルトの名無しさん:2007/06/17(日) 19:12:54
ボロ出し過ぎ
128デフォルトの名無しさん:2007/06/17(日) 19:43:20
整理すると、sexe でサービス登録した場合、以下の現象になっている。
1)Windows XP の場合は、ログオフでサービス停止になる。
  タスクトレイアイコンは表示される。
2)Windows Vistaの場合は、タスクトレイにアイコンが出ない。
  ログオフしてもサービス停止にはならない。
129デフォルトの名無しさん:2007/06/17(日) 20:17:28
>>113
MSDNライブラリでprintfの書式化文字列のところくらい見ろヨ

>>116
バイナリもテストも2重になっちゃうものね。

130デフォルトの名無しさん:2007/06/17(日) 20:22:19
>>125
プロセスが死ぬのは、お前の書いたコードのバグで、例外か何かで落ちてるんだろ。
Drワトソンとか使ってチェックしる!

そもそも、
ユーザーのデスクトップのタスクトレイに、サービスが直接アイコンを出す
というのは、あんまりよくないと思う。

サービスのプロセスとは別に、
タスクトレイにアイコンを表示したりする、サービスのクライアントのプロセスを用意したほうがいい。
それをAll Usersのスタートアップに突っ込んでおけばいい。
131デフォルトの名無しさん:2007/06/17(日) 21:24:08
>>95
どうせVB6.EXEのほうの設定(してない)が適用されてるとかいうオチだろ
132デフォルトの名無しさん:2007/06/17(日) 21:36:37
>>130
>プロセスが死ぬのは、お前の書いたコードのバグで、例外か何かで落ちてるんだろ。
>Drワトソンとか使ってチェックしる!

バグかもしれないが、CFrameWnd::OnDestroy() が呼び出されて正常終了している
ところまでは解っている。

>そもそも、
>ユーザーのデスクトップのタスクトレイに、サービスが直接アイコンを出す
>というのは、あんまりよくないと思う。

そうなのですか。了解。
133デフォルトの名無しさん:2007/06/17(日) 21:39:51
>CFrameWnd::OnDestroy() が呼び出されて正常終了している

そりゃログアウトしたらウィンドウはクローズするよ
サービスなんだからウィンドウが無くても動き続けるように作らなくちゃ
134デフォルトの名無しさん:2007/06/17(日) 21:48:36
>そりゃログアウトしたらウィンドウはクローズするよ
>サービスなんだからウィンドウが無くても動き続けるように作らなくちゃ

ウインドウは通常 ShowWindow( SW_HIDE ) していて、タスクトレイの
アイコンからのメニューで表示できるようなプログラムになっています。
それでどうしてもタスクトレイにアイコン表示したかった。

ウインドウがあるから当然なのかなとも思ったのですが、Vista では
サービス停止にならなかったので???と思ったしだいです。
135デフォルトの名無しさん:2007/06/17(日) 21:56:28
セッション0隔離でググれ
136デフォルトの名無しさん:2007/06/17(日) 21:59:22
>>セッション0隔離でググれ
了解。ありがとうございます。
137デフォルトの名無しさん:2007/06/17(日) 22:19:38
>>131
>>98が指摘しているけど、違うらしいぞ。

何を指摘されているのか理解していないのかもしれないが。


>>132
トップレベル・ウィンドウに終了しる! っていうメッセージが来て、
はいはい、わかりました
といって終了するようにプログラムしたのは、おまえ自身だろ?

そりゃぁ終了するわな、当然。

サービスなんだから、そういうメッセージが来てもシカトしろよ。
サービスとして起動されている場合だけシカトするのでもいいよ。

ていうか、
ただのアプリとして作ったものをsexeを使ってサービスとして走らせるのに、
タスクトレイにアイコンだしたり、ユーザとの対話をするというのが、おかしい。
138デフォルトの名無しさん:2007/06/17(日) 22:24:11
そもそも、sexeを使おうという時点で、間違ってるよ。
自分でサービスのためのAPIを使おうとすれば、自ずと理解することが、すっぱり抜けてる。
139デフォルトの名無しさん:2007/06/17(日) 22:24:48
サービスにすると嫌われるよ
140デフォルトの名無しさん:2007/06/17(日) 22:33:12
sexe はちょっと試してみただけです。
いろいろと勉強になりました。
ありがとうございました。
141デフォルトの名無しさん:2007/06/17(日) 22:34:40
sex はちょっと試してみただけです。
いろいろと勉強になりました。
ありがとうございました。
142デフォルトの名無しさん:2007/06/17(日) 23:04:34
>>139
sexeに比べたらマシだろ。
143デフォルトの名無しさん:2007/06/17(日) 23:41:45
ついでにさらに教えてほしいのですが、
サーバープログラムもサーバーとしての機能設定を行ったり、
クライアントの情報をリアルタイムで確認したりという
GUIがあった方が良いケースもあると思いますが、
こういうプログラムはサービスにする必要はありますでしょうか?
144デフォルトの名無しさん:2007/06/17(日) 23:45:33
>>143
普通はサーバプログロムのみをサービスにしてGUI系は別プロセスにするんじゃないか?
145デフォルトの名無しさん:2007/06/17(日) 23:55:06
>>144
そうするとリアルタイムという部分が若干のタイムラグとなりますが、
やっぱりその実装ですかね...
146デフォルトの名無しさん:2007/06/17(日) 23:58:49
>>144
そうするとリアルタイムという部分が若干のタイムラグとなりますが、
やはりその実装ですかね...
147デフォルトの名無しさん:2007/06/18(月) 00:01:24
>>145
143の文章も意味が不明瞭だが、
もうちょっと、他人にわかりやすく、端折らずに書いてよ。

タイムラグを気にしているけど、
サービスと、
稼働状況をモニターするクライアントとの間は、
どうやって情報を受け渡ししようと考えてるの?
148デフォルトの名無しさん:2007/06/18(月) 00:09:45
>タイムラグを気にしているけど、
>サービスと、
>稼働状況をモニターするクライアントとの間は、
>どうやって情報を受け渡ししようと考えてるの?

TCP/IP による通信です。
タイムラグはさほど気にすることはありませんが...
149デフォルトの名無しさん:2007/06/18(月) 00:12:10
じゃあ解決だね
150デフォルトの名無しさん:2007/06/18(月) 00:13:10
解決です。ありがとうございます。
151デフォルトの名無しさん:2007/06/18(月) 00:17:33
>>148
なんだよ。
気にしないものを、気にしてたのかよ。
馬鹿馬鹿しい。

で、
同一プロセスの次が、いきなりTCP/IPかよ。
タイムラグを気にしてるから、共有メモリと同期を使うのかと思ったぞ。
152デフォルトの名無しさん:2007/06/18(月) 00:25:42
>>151
TCP/IPはクライアントとの通信です。
モニターはサーバーPCのみでOKということです。
同一プロセスならばリアルタイムですが、プロセスを分けると
共有メモリにしろ周期的にチェックする必要があるので
タイムラグが若干発生するけどまあ気にするほどでもないかと
いうことです。失礼しました。
153デフォルトの名無しさん:2007/06/18(月) 00:41:19
>>152
文章が不明瞭だと思ってたけど、日本語が通じなんだな、おい。
154デフォルトの名無しさん:2007/06/18(月) 00:49:50
>>153
単なる誤解でしょ。

>>稼働状況をモニターするクライアント
をモニター=クライアントと解釈するかどうかですよね。
そうだとすると通じてなかった。
155デフォルトの名無しさん:2007/06/18(月) 00:55:50
>>154
それ以外の解釈は、ないだろ。

誤解するかもしれないので、
「稼働状況をモニターする」
と書いたのに。

だいたい、お前が作っているサービスが何をする代物なのか、言ってないだろ。
156デフォルトの名無しさん:2007/06/18(月) 00:59:21
>>155
>お前が作っているサービスが何をする代物なのか、言ってないだろ。

ここで議論することでもないですので、これで終わりにしましょう。
ありがとうございました。
157デフォルトの名無しさん:2007/06/18(月) 00:59:22
> 同一プロセスならばリアルタイムですが、プロセスを分けると
> 共有メモリにしろ周期的にチェックする必要がある

同一プロセスだからといってリアルタイムとは限らないし、
プロセスを分けることで、周期的にチェックするしか出来ないわけでもない。
158デフォルトの名無しさん:2007/06/18(月) 12:48:34
>>134
・Vistaではサービスは別のセッションで動くように変更された
・あるセッションで動いているウィンドウは別セッションでは表示されない
・Windowsが終了(ログオフ含む)時に閉じようとするのは、ログオンしているセッションに属しているウィンドウのみ
・WM_DESTROYの応答でPostQuitMessageしていたらウィンドウ閉じるときにプロセスが終わってしまう

この4点で「なぜVistaではトレイアイコンが出ないか」「なぜXPではログオフでプロセスが終わってしまうか」
の両者の理由が理解できるかと。
159デフォルトの名無しさん:2007/06/18(月) 13:03:07
まあ、サービスをシステム権限で動かしてデスクトップとの対話を有効にすると
大きな穴になる可能性があるからなあ。
昔、その場限りでアドミン権限で実行させるためだけのサービスとか作って遊んでたっけ・・・
160デフォルトの名無しさん:2007/06/18(月) 13:24:10
>>159
>昔、その場限りでアドミン権限で実行させるためだけのサービスとか作って遊んでたっけ・・・

まあ実際RunAsってサービス使って実装されてるしね。
ttp://www.atmarkit.co.jp/fwin2k/win2ktips/059execau/execau.html
>なおこの機能は、Windows 2000では「RunAs」というサービス、
>Windows XPでは「Secondary Logon」というサービスを使って実現されている。
>Windows 2000/XPでは、デフォルトでこのサービスが組み込まれ、
>システム起動時に自動的に起動されるようになっているが、
>何らかの理由からこのサービスが起動されていないと、
>[別ユーザーとして実行]は利用できない。
161デフォルトの名無しさん:2007/06/18(月) 15:58:38
>>159
そんなサービス作らずとも、
標準のatコマンドで直近の時間を指定するか、soonコマンドを入れるかすれば、
管理者権限をもったプロセスを普通のユーザが起動できたぞ。

>>160
話が唐突に飛んでる
162デフォルトの名無しさん:2007/06/18(月) 16:07:33
>>161
>話が唐突に飛んでる

スマソ。
>>159 が作っていたのが「いわゆるデスクトップでその場限りでアドミン権限で実行させるため」
のものだと誤解していたようだ。

しかしあれだけの文章から>>159 が作っていたのが
「別のウィンドウステーションでその場限りでアドミン権限で実行させるため」のものと
よく確信できたね。
じつは>>159==>>161
163161:2007/06/18(月) 16:43:49
>>162
NT4.0時代では常套手段だったから。

164デフォルトの名無しさん:2007/06/18(月) 18:48:49
>>158への対策として「別セッション上のデスクトップのウィンドウを操作したい」ってのは可能なの?
別セッションのHDESKに接続できれば何とかなりそうな気もするけどAPIが見あたらない・・・
165デフォルトの名無しさん:2007/06/18(月) 18:58:04
>>163
それはatを実行する権限を持ったやつが必要だしなあ
fileman.exeをadminで実行してしまえばそこから起動するやつはみなadminだったっけな
166デフォルトの名無しさん:2007/06/18(月) 21:48:52
VSのインテリセンスのような小窓?はどうやって実装しているんでしょうか。
解説しているサイトか取っ掛かりになるようなキーワードを教えてください。
167デフォルトの名無しさん:2007/06/18(月) 21:54:26
ToolTipじゃねーの?
168デフォルトの名無しさん:2007/06/18(月) 22:05:26
アクティブにしないフラグつっこんでShowWindowとかSetWindowPosしてるだけじゃね?
と考えるおれは素人

しかしToolTipを間違ってクリックするとフォアグラウンド奪う実装は
なんとかしてほしい
169デフォルトの名無しさん:2007/06/18(月) 22:16:49
CD-Rソフトのように、アプリケーションの起動中のみ、
CDやUSBメモリのようなメディアを接続しても
オートランを働かせないようにするにはどうしたら良いでしょうか?
170デフォルトの名無しさん:2007/06/18(月) 22:28:10
>>169
おちつけ
kwsk
171デフォルトの名無しさん:2007/06/18(月) 22:37:30
R焼きソフトを起動中にオートランが起動しないのは、
CDドライブを握ってる副作用みたいなもん。
USBメモリは差し込む前にデバイスを握ることができないので
機能として実装するのは難しかったはず。
172デフォルトの名無しさん:2007/06/18(月) 22:58:21
一時的にオートランの設定をOFFにする。
問題はアプリが異常終了したとき、OFFのままになる。
173デフォルトの名無しさん:2007/06/19(火) 01:29:37
プログラムが異常終了していないか監視するプログラムを作る。
174デフォルトの名無しさん:2007/06/19(火) 01:33:09
OSが終了しないとも限らない
OSの監視も必要だ
175デフォルトの名無しさん:2007/06/19(火) 01:56:01
OSごと異常終了することへの対策は、

アプリが起動したら、
レジストリの自動実行に、オートランの設定を元に戻すプログラムを登録し、
アプリが正常終了したら、その登録を消すようにすればいい。

元に戻すプログラムは実行されたら、自分で自動実行の登録を消すのも忘れずに。
176デフォルトの名無しさん:2007/06/19(火) 02:26:48
autoun関係のレジストリって、変更後再起動しないと
explorerが認識してくれないこと無い?
177デフォルトの名無しさん:2007/06/19(火) 02:28:36
Win95を無視するなら
RegisterWindowMessage(TEXT("QueryCancelAutoPlay"))
をどうぞ
178デフォルトの名無しさん:2007/06/19(火) 10:24:04
マルチポストあんましたくないんですが、すみません、このスレでいいのか迷うんですが、
Windows2000やXP、Vistaで、アプリからサービスを一時的に停止したり
開始したりする方法を教えて下さい。
宜しくお願いします。
179デフォルトの名無しさん:2007/06/19(火) 10:27:58
やばい機能に使えそうだから教えない
180デフォルトの名無しさん:2007/06/19(火) 10:28:46
net start/stop呼んどけ
181デフォルトの名無しさん:2007/06/19(火) 10:32:23
マルチは嫌い。
182デフォルトの名無しさん:2007/06/19(火) 10:34:02
>>178
>マルチポストあんましたくないんですが
ふざけんな阿呆。
PC一般板にでも逝け。
そして二度と来るな。
183デフォルトの名無しさん:2007/06/19(火) 13:57:40
静的ライブラリにリソースファイル (.res) を入れました。
このライブラリを別のプログラムからリンクした場合、
リソースがリンクされないようなのですが、どうしてでしょうか。
解決策はないでしょうか。
184デフォルトの名無しさん:2007/06/19(火) 14:14:56
.libにリソースは入れられない
185デフォルトの名無しさん:2007/06/19(火) 15:52:58
ええ?でも VC8 でビルドすると自然に入りますよ。
186デフォルトの名無しさん:2007/06/19(火) 16:00:40
入る?DLLとかじゃなくて?

libってのは、objファイルを集めたもので、リンク時に使われてる関数が含まれてる
objファイルを取り出してリンクするためのものだから、resが入ってても困ると思うんだが。
187デフォルトの名無しさん:2007/06/19(火) 16:12:27
>>186
入るよ。 lib.exe /LIST Some.lib とかコマンド打つと、.res が入っている。
.obj も .res も link.exe への入力になるんだから、
そのまま .res もリンクしてくれればいいのだけど、
どうもしてくれないみたい。何かオプションがいるのかな。
188デフォルトの名無しさん:2007/06/19(火) 16:16:31
いや、、そのresは名前をつけられるの?
189デフォルトの名無しさん:2007/06/19(火) 16:22:04
そりゃ、静的ライブラリを作るプロジェクトの
リソースコンパイラの設定でできるよ。
190デフォルトの名無しさん:2007/06/19(火) 18:36:56
borlandなりgccなりvcなりしかるべき処理系のスレにいったほうが幸せになれると思うよ
191デフォルトの名無しさん:2007/06/19(火) 18:54:28
VC8じゃstaticライブラリのプロジェクト設定にはリソースコンパイラ用のページが現れないな。
ファイルを混入させることはできても、リソースとしてリンクさせることはできないんだろう。
192デフォルトの名無しさん:2007/06/19(火) 22:04:46
>>164
SetThreadDesktop
193デフォルトの名無しさん:2007/06/20(水) 01:03:05
>>192
別セッション上のデスクトップのハンドルって取得できるの?
194デフォルトの名無しさん:2007/06/20(水) 03:11:36
ライブラリにリソースを入れるのはいいとして、
ライブラリの中身全てがリンクされるわけじゃないぞ。

参照しているものだけがリンクされるんだ。
だから、リソースをライブラリに入れただけでは、リンクされないぞ。

ちゃんと、そのリソースを参照しないとな。
195SEX:2007/06/20(水) 04:21:18
WNDCLAS"SEX"
INITCOMMONCONTROL"SEX"
196デフォルトの名無しさん:2007/06/20(水) 07:04:20
こういう事って可能でしょうか?
A.EXEからB.DLLのエクスポート関数を呼び出したのを監視するプログラムを作る。
可能であれば方法を教えて下さい。
197デフォルトの名無しさん:2007/06/20(水) 07:20:58
Bの方に通知機能を入れておけ
198196:2007/06/20(水) 08:06:04
それがA.EXE、B.DLLともソース閲覧のみで変更は許されてないんです。
関数はB.DLLのリストビューウィンドウを呼び出すもので負荷の少ない通知メッセージを探しているんですけど。
199デフォルトの名無しさん:2007/06/20(水) 08:29:19
つ[Spy++]
20020:2007/06/20(水) 08:30:59
>>196
APIフック。AdvancedWindowsの弟4部 DLL を読めば解決すると思います。
201196:2007/06/20(水) 09:08:51
>>199
とりあえず、WM_CREATEで作れました。
>>200
アッー!APIフックですかぁ。確かにできますね。
AdvancedWindows買うつもりですが高いですね。
ありがとうございました。
202デフォルトの名無しさん:2007/06/20(水) 09:13:54
>>191
> VC8じゃstaticライブラリのプロジェクト設定にはリソースコンパイラ用のページが現れないな。
> ファイルを混入させることはできても、リソースとしてリンクさせることはできないんだろう。
ページはあるよ。ちゃんとやってみた?
リソースはデフォルトでライブラリに含まれるようになっている。

>>194
> ちゃんと、そのリソースを参照しないとな
どうやって参照するの?
リソースIDで参照しても参照したことにならないよね?
203デフォルトの名無しさん:2007/06/20(水) 09:36:25
>>202
>どうやって参照するの?
だから名前付けられるのかって聞いたんだよ
意味が無いということを説明したいのに反論ばかりして
人の言うこと聞く気も無いだろ、キミ
204デフォルトの名無しさん:2007/06/20(水) 09:57:53
それ以前にスレ違いだ
205デフォルトの名無しさん:2007/06/20(水) 10:10:17
>>203
ああ、そういことね。了解。すんません。
206デフォルトの名無しさん:2007/06/20(水) 17:51:12
workgroup の 自分のマシン名を得るのはどのようにすればよいのでしょうか?
207デフォルトの名無しさん:2007/06/20(水) 17:57:41
>>206
Windowsの正規の呼び方ではない、
「マシン名」なんていう言い方をするから、
わからんのですよ。

正しい呼び方は、コンピュータ名。
MSDNライブラリで、GetComupterまで入力すれば、候補のリストに
GetComputerName
GetComputerNameEx
あたりが見つかるでしょう。

208206:2007/06/20(水) 18:08:49
>>207 ありがとうございます。できました。

ついでに環境変数にもいっぱいあったのでそれも参考にします。
209デフォルトの名無しさん:2007/06/20(水) 21:03:58
>>207
× コンピュータ名
○ NetBIOS名
210デフォルトの名無しさん:2007/06/20(水) 21:53:59
>>193
調べてないけどターミナルサービス関係のAPIで何とかなったりしない?
Vistaでは常にセッションが分かれるけどXPでも高速ユーザー切り替えや
リモートデスクトップ使っているときは意識する必要があるはずだから
211デフォルトの名無しさん:2007/06/20(水) 23:41:09
>>209
マイコンピュータのプロパティを開いて、タブの一覧を見よ。
「コンピュータ名」と書かれているから。
212209:2007/06/21(木) 00:08:15
213デフォルトの名無しさん:2007/06/21(木) 00:16:13
>>212
GetComputerNameをMSDNライブラリで引いてみなよ。
NetBIOS名を取得するって書いてある。

とはいえ、
GetNetBIOSなんとか
ではないんだよ。

あくまでも、
GetComputerNameなの。
214デフォルトの名無しさん:2007/06/21(木) 00:18:28
どうでもいい
215209:2007/06/21(木) 00:36:58
>>213
APIの名称については文句をいっていない。
問題にしているのは「正しい呼び方は、コンピュータ名」<この部分
ttp://msdn2.microsoft.com/en-us/library/ms724301.aspx
>Retrieves a NetBIOS or DNS name associated with the local computer. The names are established at system startup, when the system reads them from the registry.
216デフォルトの名無しさん:2007/06/21(木) 01:01:26
もうバカはほっとけよ
217デフォルトの名無しさん:2007/06/21(木) 01:29:03
>>215
コンピュータ名 = NetBIOS名もしくはDNS名

ドメインコントローラがActiveDirectoryの場合は、NetBIOS名にならない。
218デフォルトの名無しさん:2007/06/21(木) 04:34:48
>>215
その英文から「NetBIOS名」という超訳をひねりだせる脳味噌に感激
219デフォルトの名無しさん:2007/06/21(木) 07:15:33
NetBIOS or DNS name
だからNetBIOS名かDNS名だろ
220デフォルトの名無しさん:2007/06/21(木) 09:55:18
NetBIOS無くてもFQDNでアクセスできるからなあ
221デフォルトの名無しさん:2007/06/21(木) 10:15:04
>>217 その内容については知っている
>>206に「workgroupの〜」って付けて発言しているから
DNS HOST名を包括しているコンピュータ名という用語を>>207

使用するのは正しくないと>>209でいいたかっただけ
222デフォルトの名無しさん:2007/06/21(木) 10:23:54
FDQN
223デフォルトの名無しさん:2007/06/22(金) 13:44:36
特定のプロセスIDの所有するすべてのスレッドIDを取得したいんだけどどのAPIでやりますか?
スレッドIDで過去ログGrepしたけどないんで教えてください。
後、フックを入れてフォアグラウンドになったときをつかまえてスレッドID取得というのは無しの方向で。
224デフォルトの名無しさん:2007/06/22(金) 14:14:18
Tool Helpでも使えば
225デフォルトの名無しさん:2007/06/22(金) 14:16:05
Tool Helpだな
226デフォルトの名無しさん:2007/06/22(金) 14:27:17
>>224
>>225
ありがとう。AdvancedWindowsのProcessInfoアプリケーションがサンプルになりました。
227デフォルトの名無しさん:2007/06/22(金) 15:10:41
SystemParametersInfo()の電力管理フラグ、
スクリーンの低消費電力モードとスクリーンの電力停止モードはどう違うのでしょうか?
どちらも同じ値が返ってきますが。
228デフォルトの名無しさん:2007/06/22(金) 17:33:28
文字通りなんじゃねーか?
コンパネの電源管理には電源を切る時間しか出てないから実際には使われてないのかも
229デフォルトの名無しさん:2007/06/22(金) 18:17:32
マウスとキーボードが10分間放置されたときに自動的に終了するアプリを作りたいんだけど、
マウスのほうは定期的に座標を調べれば動いてるかどうかわかるが、
キーボードの無操作を検知するにはどうしたらいい?

自プロセスはタスクトレイに入っているのみ。
230デフォルトの名無しさん:2007/06/22(金) 18:21:54
スクリーンセーバーにしろw
231デフォルトの名無しさん:2007/06/22(金) 18:28:58
普通に考えたらジャーナルフックとかじゃないのか
232デフォルトの名無しさん:2007/06/22(金) 18:58:09
>>229
普通にKEY_DOWN捕まえるだけじゃねぇか
バカじゃねぇのプtゥtw
フックが嫌ならGetAsyncKeyStateとかで
233デフォルトの名無しさん:2007/06/22(金) 20:51:04
無操作を検知するのにKEY_DOWNとな!
234デフォルトの名無しさん:2007/06/22(金) 21:14:34
>>233
はいはいアホアホ
235デフォルトの名無しさん:2007/06/23(土) 00:05:34
>定期的に座標を調べれば動いてるかどうかわかるが
そもそもなんでこれでマウスが操作されてないかどうか解るんだ?
走査頻度にもよるが、同じ位置に戻ってたら動いてるかどうか解らないのでは?
移動せずにボタンだけ使ってるとかも解らない気がするし
236デフォルトの名無しさん:2007/06/23(土) 00:15:12
フックでキーとマウスのイベントを取得して、
イベント発生ごとにタイマーをリセットすればいい。
237デフォルトの名無しさん:2007/06/23(土) 01:45:52
なんという頭の良さ
まるで天才ではないか
238デフォルトの名無しさん:2007/06/23(土) 01:50:08
初めからそう言ってるじゃねぇか
239デフォルトの名無しさん:2007/06/23(土) 01:58:32
最初の質問からして初心者過ぎるAPI以前の問題
下手なアプリ作ってPC壊さないようにね
240229:2007/06/23(土) 02:03:56
フック限定ですか?
アッパーとかでは無理でしょうか?
241デフォルトの名無しさん:2007/06/23(土) 02:17:28
ハートブレイクショットならいけるかも
242デフォルトの名無しさん:2007/06/23(土) 02:50:08
瞬獄殺ならおk
243デフォルトの名無しさん:2007/06/23(土) 02:59:57
>>240
フックもできないお前にアッパーは無理だろ
ドライバ書いた事有るのか?
244デフォルトの名無しさん:2007/06/23(土) 12:17:51
ブルースクリーン直行が落ちだろうな。
悪いこと言わないから、スタンバイか休止状態で妥協しとけ。
245デフォルトの名無しさん:2007/06/23(土) 13:19:25
WindowsでおよそのLoad Averageを計算したいのですが、処理待ちのプロセス数はどうやって求められますか?
246229:2007/06/23(土) 14:12:18
KEY_DOWNを使ったのですが
自分のウィンドウがアクティブじゃなかったので
取れませんでした
騙したわね!!
247デフォルトの名無しさん:2007/06/23(土) 14:23:18
自分のウインドウしかとらないように作れば当たり前だろ。
なんでそんなに頭が悪いんだ?
248デフォルトの名無しさん:2007/06/23(土) 14:35:01
だから教えるだけ無駄
親切に教えてやっても騙されたと思うんだぜ
249デフォルトの名無しさん:2007/06/23(土) 14:42:45
マウスカーソルの下にある文字列を取得する方法ってない?
250デフォルトの名無しさん:2007/06/23(土) 14:50:58
ある
251デフォルトの名無しさん:2007/06/23(土) 15:05:14
ないあるよ
252デフォルトの名無しさん:2007/06/23(土) 17:07:40
>>245
パフォーマンスカウンタ。

ThreadオブジェクトのThread Stateカウンタにスレッドの状態が出るから、
自分で全スレッドのインスタンスに対して状態をチェックして集計しる!
253デフォルトの名無しさん:2007/06/23(土) 17:09:12
LISTBOXにADDSTRINGする場合、文字列のデータはWindowsがコピーして管理してくれるんですか?
254デフォルトの名無しさん:2007/06/23(土) 17:19:15
MSDN見ろよ…
255デフォルトの名無しさん:2007/06/23(土) 17:19:44
   ∩___∩         |
   | ノ\     ヽ        |
  /  ●゛  ● |        |
  | ∪  ( _●_) ミ       j
 彡、   |∪|   |        J
/     ∩ノ ⊃  ヽ      >>253
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /
256249:2007/06/23(土) 17:26:03
>>250
サンクス
257デフォルトの名無しさん:2007/06/23(土) 17:51:25
>>253
そう
258デフォルトの名無しさん:2007/06/23(土) 18:45:37
HWND既知のあるウィンドウが閉じられるときそのWM_DESTROYを取得するために、
サブクラス化というのを使えば出来そうだという所までは分かりましたが書式が分からないので
このページのサンプル
ttp://www.wisdomsoft.jp/dev/api/windows/064
LRESULT CALLBACK WndProc()内 の rect_box = CreateWindow{......}; の部分を
rect_box = FindWindow("Notepad",NULL); //メモ帳のハンドル
と書き換え
LRESULT CALLBACK StaticProc() のswitch内に case WM_DESTROY: と追加しても
メモ帳終了時のWM_DESTROYが取得できていないようです。

どのようにすれば正常に動くのでしょうか?
259デフォルトの名無しさん:2007/06/23(土) 18:57:12
それ別プロセスのは無理よ
260デフォルトの名無しさん:2007/06/23(土) 20:24:50
ファイルにNTFS圧縮かけるAPIってある?
EFS暗号化ならあるのに、こっちがわからん。
261258:2007/06/23(土) 21:08:59
>>259
あのサンプルでは出来ないんですか。
サブクラス化するという手段自体が間違ってますか?
262デフォルトの名無しさん:2007/06/23(土) 21:13:37
間違ってはない
フック使えばサブクラス化でもできる
263デフォルトの名無しさん:2007/06/23(土) 21:17:12
>>260
FSCTL_SET_COMPRESSION しらべれ
264デフォルトの名無しさん:2007/06/24(日) 12:10:05
ねーねー
ほかのプロセスが開いてロックしているファイルを
横から開くにはどうすればいいのん?
265デフォルトの名無しさん:2007/06/24(日) 12:10:58
それ可能なのか?そんなことできるならロックの意味がないような・・
266デフォルトの名無しさん:2007/06/24(日) 12:14:25
プロセスを終了させる
267デフォルトの名無しさん:2007/06/24(日) 12:20:55
リードだけなら出来たりしないのかな?
試しにエディタで開いてみたら
書き込めませんよーってエラー出たけど開くのだけは出来たよ
268デフォルトの名無しさん:2007/06/24(日) 12:26:45
そのプロセスが FILE_SHARE_READ でファイルを開いてたんだろ。
0 だと読み取りも書きこみも禁止される。
269デフォルトの名無しさん:2007/06/24(日) 12:42:07
つかCreateFileの引数の解説読んでれば想像付くけどな
270デフォルトの名無しさん:2007/06/24(日) 13:09:39
それようのモードがあったのか
ありがと^^
271デフォルトの名無しさん:2007/06/24(日) 15:05:41
ちょい質問。

Win2000、XPで Windows+M押下時と違って
Windows+Dを押した時何かのフラグが立ったみたいで
なんとかforeground();関数で
ウィンドウを最前面にもってこれないんだけど
方法わかる方いたら教えてください。。

よろしくです。
272デフォルトの名無しさん:2007/06/24(日) 16:04:38
せっかくしまったのに余計なことをしないでください。
273デフォルトの名無しさん:2007/06/24(日) 18:15:36
ウィンドウズ乙
274デフォルトの名無しさん:2007/06/24(日) 18:23:40
WinXPにおけるメモリマップドファイルについて質問なのですが、

・HDDのファイルがメモリに複写されているわけではなく、あくまで仮想的なアドレスをファイルに割り振っているだけ。
 よって、メモリにマッピングした直後はメモリはそれほど消費しない。

・マッピングされたファイルを書き換えた情報は一端メモリに蓄積され、マッピング終了時にHDDのファイルへ反映される。
 なので、マッピングされたファイルにデータを書き込めば書き込むほどメモリの使用量が増えていく。

という解釈であっているのでしょうか?
275デフォルトの名無しさん:2007/06/24(日) 19:24:30
読み込むだけでも消費した気がする
276デフォルトの名無しさん:2007/06/24(日) 19:39:01
>>274
基本的にはそんな理解でいいと思う
細かい動作はページングファイルと同じように考えればいいはず
メモリが足りなくなってくればHDDへ書き出される(読み取りしか行っていないなら捨てられる)
メモリが余ってくれば読み込まれてゆく
277デフォルトの名無しさん:2007/06/24(日) 20:46:24
自前のコンソール画面を作りたいのですが、
APIで簡単に作る方法ってありますか?
278デフォルトの名無しさん:2007/06/24(日) 20:49:39
AllocConsoleじゃなくて自前で一から作りたいって事?
279デフォルトの名無しさん:2007/06/24(日) 20:54:58
eclipseのコンソール見たいのが作りたいです
280デフォルトの名無しさん:2007/06/24(日) 20:57:27
エディットコントロールにでも流せばいいじゃない
281デフォルトの名無しさん:2007/06/24(日) 21:09:19
WM_SETTEXTですか?
282デフォルトの名無しさん:2007/06/24(日) 21:32:17
エディットコントロールの追記なら最後尾にカーソル移動してEM_REPLACESELを投げる
背景を変えたければ親でWM_CTLCOLOREDITを受ける
283デフォルトの名無しさん:2007/06/24(日) 21:36:59
printfでエディットコントロールに書き込めるようにはできませんか?
284デフォルトの名無しさん:2007/06/24(日) 21:40:06
stdoutを受け取って回送させるか、バッファに入れてから再度送りつけるか好きなようにやれ。
285デフォルトの名無しさん:2007/06/24(日) 21:42:19
できますがスレ違いですね。
汎用化でも目指しているんですか?
それともコーディング能力不足ですか。
286デフォルトの名無しさん:2007/06/24(日) 22:07:41
printf使いたいってのはコーディングする側の問題だろ
sprintfした文字列をエディットコントロールに追加すればいいじゃん
287デフォルトの名無しさん:2007/06/24(日) 22:15:44
printfの出力先を変えられればコンソール・ウィンドウ両対応が簡単かなと思ったんですが
やっぱりそこまでは無理ですか…
288デフォルトの名無しさん:2007/06/24(日) 22:30:17
だから無理じゃないってば
API以前に言語の勉強をしなさい。
289デフォルトの名無しさん:2007/06/24(日) 22:35:08
その(頭の)現状では無理だな
290デフォルトの名無しさん:2007/06/24(日) 22:49:46
>>288
stdoutをAllocConsole使う時見たく変えるってことですか?

何を指定すればエディットに流せるか分からないのはやっぱ知識不足なのかorz
291デフォルトの名無しさん:2007/06/24(日) 22:56:41
もしかしてEM_STREAMOUTが関係ありですか?
292デフォルトの名無しさん:2007/06/24(日) 23:06:08
Windowsプログラミングなんてバッドノウハウの数が技量に直結するから
「これかっ?」っと思ったことは片っ端から試してみるのも自分のためになると思うぜ
293デフォルトの名無しさん:2007/06/24(日) 23:19:11
と言ってもfreopen以外に変える方法知らないんですけど…
294デフォルトの名無しさん:2007/06/24(日) 23:21:37
メモリマップファイルは使いにくいね。

1つは、
SetProcessWorkingSetSize()で最大ワーキングセットサイズを設定しても、多量にメモリを食って、他のプロセスに優しくない。
かといって、SetProcessWorkingSetSize(,-1,-1)を頻繁に呼ぶのも美しくなく、
かといって、リンカに/WS:AGGRESSIVE付けても、なんだかなぁ、と。

もう1つは、
いまどきのハードディスクはシーケンシャルにアクセスしないと速度が出ないため、
メモリマップして任意にメモリアクセスすると、ランダムアクセスになってしまうこと。
結局、シーケンシャルスキャンのヒント付けて、各ページの先頭を触って、
予めメモリに読みこんでおくという作業が必要になってしまう。
295デフォルトの名無しさん:2007/06/24(日) 23:22:26
>>293
知らなければ調べろよ。
296デフォルトの名無しさん:2007/06/24(日) 23:31:46
今時メモリの消費量とかHDDの消費量を考えるのは不毛な気がする

リークで不安定になるとかだったら分かるが
297デフォルトの名無しさん:2007/06/24(日) 23:35:49
勘違いしてる人がもう一人
298デフォルトの名無しさん:2007/06/24(日) 23:44:15
>>294
とりあえずそのあたりを調べてみます
299デフォルトの名無しさん:2007/06/24(日) 23:51:42
ぐぐっても6件…
MSDN引くか…


俺のチラ裏にしちゃってもいいけどAPI一つでできることならそれだけ教えてくれるとありがたい
300デフォルトの名無しさん:2007/06/24(日) 23:55:11
誰お前
301デフォルトの名無しさん:2007/06/25(月) 00:02:02
SetStdHandleか!
302デフォルトの名無しさん:2007/06/25(月) 00:57:11
>>299
ここは、お前のための、チャット会議室じゃないんだぞ。
303デフォルトの名無しさん:2007/06/25(月) 01:04:56
>>296
> 今時メモリの消費量とかHDDの消費量を考えるのは不毛な気がする

そう思っていた時期も(AA略

パフォーマンスに無頓着なプログラムは、ハードウェアがどんどん速くなっても、その恩恵を受けられないことが多い。
というのも、ハードウェアの速くならない部分の性能に依存してるから。

304デフォルトの名無しさん:2007/06/25(月) 05:57:13
MSDNにVistaのAPIが続々追加されてる
ほとんどVista専用で邪魔だ
言語フィルタみたいにOSでフィルタリングしてくれないかな
305デフォルトの名無しさん:2007/06/25(月) 05:57:59
Vista以前のOSにしがみついてる奴らをフィルタリングすればいいんじゃね?
306デフォルトの名無しさん:2007/06/25(月) 07:15:15
そんな子としたら儲からない
307デフォルトの名無しさん:2007/06/25(月) 08:27:20
SetWindowsHookExでとれるHHOOKをGetWindowsHookExみたいなのでとれないですか。
ThreadIdから自分にかけられているHOOKとか人にかかっているHOOKとかを知りたいです。
308デフォルトの名無しさん:2007/06/25(月) 08:38:26
SetWindowssHookExをAPI-Hookしろ
309デフォルトの名無しさん:2007/06/25(月) 09:17:51
お前ら、フック大好きなんだな。

310デフォルトの名無しさん:2007/06/25(月) 11:00:23
彼女フック出来ないからAPIフックして憂さ晴らしてると思われ。
311デフォルトの名無しさん:2007/06/25(月) 11:50:00
>>310
彼女とするのはファックだろ
312デフォルトの名無しさん:2007/06/25(月) 12:49:05
>>311
鼻フックの間違いじゃね?
313デフォルトの名無しさん:2007/06/25(月) 12:53:51
何この流れ。これが月曜の流れか
314229:2007/06/25(月) 16:40:07
229です。
ちなみに240は僕じゃありませんがそれはさておき。

ご意見参考になりました、ありがとうございます。
グローバルフックでWH_MOUSEとWH_KEYBOARDを定期的にチェックし、
システムタイマを取得して更新するみたいな感じですかね。

OSがスクリーンセーバを起動するのには同様の処理をしてるのかな。
それに使ってる「最終操作時刻」みたいのがどっかから取得できれば、
グローバルフック使わなくて済むんですが。
無いかなあ。。。
315デフォルトの名無しさん:2007/06/25(月) 16:52:10
だから「最終操作時刻」を提供する側になれ
それとは別に、試しにスクリーンセーバー作ってみ
316229:2007/06/25(月) 16:57:01
>>315
なんか勝手に初心者扱いされてますが、システムフックを書こうと思えば書けますよ。
ただ、OSが知ってるはずの「最終操作時刻」をとる方法、
もしくは無操作タイムアウトイベントみたいのを取得する方法が無かろうかと思って
最初に書いたようなプリミティヴな質問をしたわけです。
317デフォルトの名無しさん:2007/06/25(月) 16:57:48
>>314
GetLastInputInfo
318デフォルトの名無しさん:2007/06/25(月) 17:09:48
>>316
初心者ではないのなら、
最初から適切な質問のしかたをしろよ!
319デフォルトの名無しさん:2007/06/25(月) 17:10:28
相変わらずノイズの多いスレだな。
初心者は回答しなくていいんだぞ。
320デフォルトの名無しさん:2007/06/25(月) 17:15:50
ていうかさ、MSDNライブラリ(またはPlatformSDK)のヘルプ見てから質問してるんか?

ちょっと古い版で恐縮だが、
Platform SDKドキュメント
→User Interface Services
→Windows User Interface
→User Input
→Keyboard Input
→Keyboard Input Reference
→Keyboard Input Functions
→GetLastInputInfo
ここまで、迷うところは、ないぞ。
321デフォルトの名無しさん:2007/06/25(月) 17:17:01
途中で俺が229の振りしてなごませたのに
やっぱりこうなったか
まさかアッパーなんて専門用語があるとは思わなかったがw
322229:2007/06/25(月) 17:18:22
>>317
>>320

探してたのはそれです。僕が初心者でしたすいませんでした。
本当にありがとうございます。
323デフォルトの名無しさん:2007/06/25(月) 17:35:02
これにて一件落着めでたしめでたし。
なんか逆転裁判おもいだした
324デフォルトの名無しさん:2007/06/25(月) 17:37:13
アッパーワロタ
325デフォルトの名無しさん:2007/06/25(月) 21:18:16
>>316システムフックなんか書けて当たり前
>>322初心者なんじゃんw
326デフォルトの名無しさん:2007/06/25(月) 22:25:16
鬼の首を取ったかの様に
327デフォルトの名無しさん:2007/06/25(月) 23:34:54
しかしおまえら、
ママンとフックが好きだなw
328デフォルトの名無しさん:2007/06/25(月) 23:39:39
初歩的な質問させてください。
クライアント領域のサイズが640*480のウィンドウを作る場合、
WindowCreate関数の第6、第7引数を

640 + GetSystemMetrics(SM_CXDLGFRAME)*2
480 + GetSystemMetrics(SM_CYDLGFRAME)*2 + GetSystemMetrics(CYCAPTION)

とすればいいんですか?(メニューやステータスバーはないものとする)

というか、GetSystemMetricsの引数に
SM_CXBORDERをいれた場合とSM_CXEDGEを入れた場合とSM_CXDLGFRAMEを入れた場合で
ウィンドウのどの部分のサイズを指しているのかよくわかりません。
MSDNみても違いがわかりません。教えてください・・・
329デフォルトの名無しさん:2007/06/25(月) 23:41:43
そういう用途では、AdjustWindowRectを使え、と昔
どっかで誰かが言ってたのを聞いた希ガス
330デフォルトの名無しさん:2007/06/26(火) 00:19:57
状況によってサイズが異なるので、適正なサイズになるまでリサイズを繰り返すしかない。
一発で計算するのは無理。
331デフォルトの名無しさん:2007/06/26(火) 00:21:43
いや普通にAdjustWindowRect使えよ
332デフォルトの名無しさん:2007/06/26(火) 00:36:14
AdjustWindowRectはメニューが2段になると縦のサイズが
合わなくなるが、縦を調節し直せば無問題。
333デフォルトの名無しさん:2007/06/26(火) 00:37:09
AdjustWindowRectを使っても、メニューバーの折り返しの分までは
面倒を見てくれないとかそういう話かな?
334328:2007/06/26(火) 01:16:09
なるほど、素直にAdjustWindowRect使えばよかったんですね。
無理してGetSystemMetrics関数を使うのはやめます。

ありがとうございました。
335デフォルトの名無しさん:2007/06/26(火) 01:43:07
>>322
調節し直す必要があるかどうか判断できないんとちゃう?
判断するにはメニューに表示される文字列が必要だけどAdjustWindowRectは
MENUの有無をBOOL型で渡すだけでHMENUを渡す設計になってない
336デフォルトの名無しさん:2007/06/26(火) 03:28:12
>>335
AdjustWindowRectで使ったクライアント領域(A)
サイズ調整後にGetClientRectで取得したクライアント領域(B)

A>Bならメニューが複数行って判定できるんじゃね?
思いつきだが
337307:2007/06/26(火) 08:21:21
>>308
回答、ありがとうございます。
SetWindowsHookExとSetWindowsHookにAPIHOOKをかける方法だとすでにフックがかけられている場合、みつけられないです。
338デフォルトの名無しさん:2007/06/26(火) 09:39:02
フックを見つけてどうするの?
339307:2007/06/26(火) 10:42:24
UnHookするとか情報を表示するとか。。。etc。
勉強中です。具体的には、dwThreadId = 0でフックをかけて、仕込んだHookDLLのアタッチで別のDLLを呼んで、
呼んだDLLにフックした処理を渡したりしてるんですが、
UnHookしてもなんでかデタッチが実行されておらず、デスクトップをフリーズみたいな状態にしてしまうんで、
Hookを仕掛けた状態とかを見たいとかいろいろです。
dwThreadIdに特定のスレッドを渡すとデタッチが起こるんで、調べる参考にしたいと。
340デフォルトの名無しさん:2007/06/26(火) 12:24:25
グローバルフック登録時に
SetWindowHookEx完了時から帰り値のHHOOKを共有メモリに格納する一瞬の間に
コンテクストスイッチが発生しHHOOK格納前にフック関数が呼び出されるという可能性に対して
とういった対策が可能でしょうか
現在のPSDKのドキュメントだとCallNextHookExの第一引数は無視される仕様に変わったようなので気にしなくてもいいのでしょうか?
341デフォルトの名無しさん:2007/06/26(火) 14:22:47
ハンドルからリストボックスなのかコンボボックスなのか
判断するには、、どうやるのですか?
342デフォルトの名無しさん:2007/06/26(火) 14:27:38
GetClassName
343デフォルトの名無しさん:2007/06/26(火) 14:46:01
>>340
Mutexで排他制御。
344デフォルトの名無しさん:2007/06/26(火) 14:56:41
>>342
ありがとうございました。
345デフォルトの名無しさん:2007/06/26(火) 16:20:24
>>340>>343
そのタイミングって排他制御する必要があるほどのものなのかね?
346デフォルトの名無しさん:2007/06/26(火) 17:00:22
>>345みたいな馬鹿は迷惑だからプログラムを書くな。
347デフォルトの名無しさん:2007/06/26(火) 17:57:00
>>340
第一引数が無視になってるとは知らなかった・・・
確かに
>>Windows NT/XP/2003: Ignored.
となってる。

ってことはNT系限定なら別に共有領域にハンドル置いといたりしなくてもいいのか?
348デフォルトの名無しさん:2007/06/26(火) 18:08:52
>>345-346
「そんな事態は滅多に起こらないから無視していい」とかいうなら論外だが、実際MSの
ドキュメントやサンプルでもそのような排他制御を組み込んでいないから、「そのタイミ
ングでフック割り込みが発生することはない」という仕様になっているということは?

SetWindowsHookExでWH_CALLWNDPROCをインストールした次の行でSendMessage
してもフックは呼ばれるから、ほんとに一瞬しか待たないとは思うけど。
349デフォルトの名無しさん:2007/06/26(火) 18:15:40
サンプルなんて手抜きに決まっているだろうに
350デフォルトの名無しさん:2007/06/26(火) 18:25:05
じゃあ発生させてみろよm9(´Д`)プギャー
351デフォルトの名無しさん:2007/06/26(火) 18:58:52
>>347
2000が抜けてるのが謎だな、どういう分類なんだろう
352デフォルトの名無しさん:2007/06/26(火) 18:59:16
HHOOKを、無視されるCallNextHookExに渡すためだけなら
むーてっくす張るコストが限りなく無駄じゃあないの?
353デフォルトの名無しさん:2007/06/26(火) 21:45:08
>>348
> SetWindowsHookExでWH_CALLWNDPROCをインストールした次の行でSendMessage
> してもフックは呼ばれる

それは当たり前だと思う。
SendMessageなんだから。
354デフォルトの名無しさん:2007/06/26(火) 21:49:56
>>353
地味にワロタ
355デフォルトの名無しさん:2007/06/26(火) 21:50:32
ところでさ、

SendNotifyMessage
ttp://msdn2.microsoft.com/en-us/library/ms644953.aspx
に、
WM_USERより下のメッセージを送るときはスタック上のポインタを渡すな
OSが引数のマーシャリングしてやるのは0〜WM_USERだけだぞ
というようなことが書いてあって、矛盾してるぞ! と思ったのだが・・・

WM_USERより下というのは、

0〜WM_USER-1
WM_USER〜0x7FFF
WM_APP〜0xBFFF
0xC000〜0xFFFF

という並びで書いたときの、下、っていう意味なんだな・・・orz
356デフォルトの名無しさん:2007/06/26(火) 21:57:01
winsockを利用してチャットの様に通信するソフトを試したのですが
自分のPC内で通信は成功したのですが
ネットにでようとするとつながりません

プロバイダから割り当てられているのが
プライベートIPなので
WAN側のIPを指定してみましたが
これが問題でしょうか?
(ルータ等は使っていません)

ソースほぼここのサンプルまんまと考えてください
http://www.geekpage.jp/programming/winsock/tcp.php
よろしくお願いします
357デフォルトの名無しさん:2007/06/26(火) 22:08:36
>>356
プログラム書く前にネットワークの勉強をしろ。
話はそれからだ。
358デフォルトの名無しさん:2007/06/26(火) 22:27:31
>>356
ネットワークプログラミング相談室に来たら相手してもらえるかも
359デフォルトの名無しさん:2007/06/26(火) 22:37:15
どっちかというと>>357
360デフォルトの名無しさん:2007/06/26(火) 22:43:33
いまさら聞けないインターネット入門とかみましたが
SMTP,POPの仕組みとか広すぎてわけがわかりません><
361デフォルトの名無しさん:2007/06/26(火) 22:45:42
>>360
結論だけ言ってしまうとグローバルIPが手に入らないと外部との通信は無理
362デフォルトの名無しさん:2007/06/26(火) 22:56:55
やっぱりそうなんですか・・・orz
入門のとこ読んでるうちに
WAN側のIPはグローバルらしいのでいけるかもって思ったのですが
363デフォルトの名無しさん:2007/06/26(火) 22:58:57
WAN側ってISPのIPだろ。つーかスレ違い
364デフォルトの名無しさん:2007/06/26(火) 23:00:41
>>357
いやいや、日本語の勉強をしたほうがいいと思う。

> winsockを利用してチャットの様に通信するソフトを試したのですが

ソフト?
何か不安になる言い方。

> ソースほぼここのサンプルまんまと考えてください

ソースはほぼここのサンプルのまま
と言わないのは、
ソースはほぼここのサンプルのまま
ではないからなんだろうか。

もしや、他人が作ったソフトの話をしているのではあるまいな?

ちなみに、
サンプルから変えた場所に問題があることも考えうるので、
普通は、どこをどう変えたのか書くか、
短いのだから全部をコピペして示したほうがいいことが多い。
365デフォルトの名無しさん:2007/06/26(火) 23:03:18
>>356
> 自分のPC内で通信は成功したのですが
> ネットにでようとするとつながりません

ネットって何だ。
インターネットのことか? なら、インターネットと書け。

切り分けとして、
同一PC上
同一LAN上
インターネット越し
の3段階があるわけで、
まずは同一LAN上を試したのかな、と。
366デフォルトの名無しさん:2007/06/26(火) 23:04:42
>>356
> WAN側のIPを指定してみましたが

何の「WAN側のIP」なんだ?
通信する相手は、どこにいるんだ?
367デフォルトの名無しさん:2007/06/26(火) 23:06:55
止めろお前らwwww
368デフォルトの名無しさん:2007/06/26(火) 23:08:24
最後まで責任持つつもりで弄ってるのか
369デフォルトの名無しさん:2007/06/26(火) 23:18:28
通信相手というか
IPなどを確認できるHPから入手した自分のIPをいれて
自分のPC→インターネット→自分のPCといった経路を試したかっただけです

確かに読み直すとわかりにくかったですね。
日本は世界でも一番難しい言語なのでお許しください
>>363さんの意見が正解みたいですね
ありがとうございました
370デフォルトの名無しさん:2007/06/26(火) 23:19:30
>日本は世界でも一番難しい言語なので

なるほど、あんたにとっては日本語さえまともに使えないと言うわけだ。
371デフォルトの名無しさん:2007/06/26(火) 23:24:19
絡むなよ。長くなるだろ
372デフォルトの名無しさん:2007/06/26(火) 23:28:24
>>369
つ推敲
373デフォルトの名無しさん:2007/06/26(火) 23:33:22
>>369
君、香ばしいね。結構気に入ったよ、チュッ。またおいでね。
374デフォルトの名無しさん:2007/06/26(火) 23:33:22
>>369
ルーターはそういう処理はしないよ
375デフォルトの名無しさん:2007/06/26(火) 23:38:27
NATループバックとかいう、御節介をしてくれるルーターもあるけど、まぁあれだ。
376デフォルトの名無しさん:2007/06/26(火) 23:44:17
>>369
本当にインターネットを介した通信のテストが必要なのかと小一時間。

その程度のプログラムなら、
LAN上の2台のPC(VirtualPC等でもいいよ)でテストすれば十分だ。

ていうか、場合によっては人様に迷惑をかけることにもなるので、
よくわからないうちはインターネットでテストしちゃいかん!

本当にインターネットでテストしないといけない場合は、
NTTのフレッツ系と、異なる2つのプロバイダを契約するとかしてだな・・・(以下略
377デフォルトの名無しさん:2007/06/26(火) 23:44:56
>>364-366
まぁ普通に読めば分かるし、これは屁理屈というかうざいなw
378デフォルトの名無しさん:2007/06/26(火) 23:45:21
育ってきた環境が違うから〜スレ違いはしょうがない〜♪
379デフォルトの名無しさん:2007/06/26(火) 23:50:05
>>377
トラブルシューティング系の質問の基本を叩き込んでおかないと。
380デフォルトの名無しさん:2007/06/26(火) 23:52:18
>ソフト?
>何か不安になる言い方。

これはないだろこれはw
381デフォルトの名無しさん:2007/06/27(水) 00:46:21
EM_STREAMIN メッセージをリッチエディットに送信するときに
GetStdHandleを渡してもコンソールの内容を読めないのはなんでだろ(´・ω・`)
382デフォルトの名無しさん:2007/06/27(水) 01:10:48
EM_STREAMINは標準ストリームから入力するわけじゃないから
383デフォルトの名無しさん:2007/06/27(水) 01:14:51
もう少し詳しく書くと
EM_STREAMINってのはリッチエディットコントロールのウィンドウプロシージャから
アプリケーション定義の関数をコールさせてデータをストリーム入力するメッセージ
入力データはアプリケーション定義の関数内で自分で用意しなければならない

標準入力は全然関係ないよ
384デフォルトの名無しさん:2007/06/27(水) 01:20:50
IStream と FILE *が混ざってるのだろうか?
385デフォルトの名無しさん:2007/06/27(水) 08:44:39
ウインドウハンドルからスレッドIDとプロセスIDはGetWindow〜で取得できるのですが、
スレッドIDから作成したウインドウハンドルを取得するAPIはありますか?
今はプロセスIDから取得したスレッドID、または、スレッドIDをEnumWindowで取得したスレッドIDと比較して
該当がないかどうか探しています。
386デフォルトの名無しさん:2007/06/27(水) 08:56:56
GetWindowHandle
387デフォルトの名無しさん:2007/06/27(水) 08:58:10
ああスレッドIDからか。じゃあシラネ
388デフォルトの名無しさん:2007/06/27(水) 09:07:29
>>386
お前、それ楽しいか?
389デフォルトの名無しさん:2007/06/27(水) 09:19:55
EnumThreadWindows?
390デフォルトの名無しさん:2007/06/27(水) 09:25:57
GetGUIThreadInfo?
391デフォルトの名無しさん:2007/06/27(水) 09:30:19
そのものズバリ、が無いのは1つとは限らないからだ
392デフォルトの名無しさん:2007/06/27(水) 09:55:53
>>389
これですよこれ。
そのものずばりですね。ありがとうございました。
393デフォルトの名無しさん:2007/06/27(水) 09:58:48
Enumは自分でもあげてるじゃん
394デフォルトの名無しさん:2007/06/27(水) 10:00:12
EnumWindowがわかってて気がつかないってことは、
EnumWindowも人に聞いたんだろ。
395デフォルトの名無しさん:2007/06/27(水) 10:09:54
IMEコンポジションウィンドウは使いたいが、IMEパッドは
使わせたくないという場合、パッドの起動を抑制する手段は
あるでしょうか?
396デフォルトの名無しさん:2007/06/27(水) 12:08:20
>>343
Mutexなどで待機した場合
SetWindowsHookExの内部実装次第でデッドロックしますよね?
397デフォルトの名無しさん:2007/06/27(水) 12:14:01
>>394
はエスパー
398デフォルトの名無しさん:2007/06/27(水) 12:16:52
いや、Windowsの開発関係者だろう
399デフォルトの名無しさん:2007/06/27(水) 12:36:51
そんなことより396
400デフォルトの名無しさん:2007/06/27(水) 12:39:52
そんなことより400(σ・∀・)σゲッツ
401デフォルトの名無しさん:2007/06/27(水) 12:46:05
目くそ鼻くそを洗う
402デフォルトの名無しさん:2007/06/27(水) 12:48:50
いいことじゃん
403デフォルトの名無しさん:2007/06/27(水) 12:51:48
>>394
すぐ隣に並んでいるんだから、普通は、気がつくよな。
404デフォルトの名無しさん:2007/06/27(水) 13:04:07
俺はすぐ隣に並んでいるあいつの気持ちさえ気がつかなかったよ
405デフォルトの名無しさん:2007/06/27(水) 13:18:16
>>394
おっしゃるとおり、EnumWindowsもGoogle先生に聞きました。
以後はMSDNの周辺等も調べてみます。
406デフォルトの名無しさん:2007/06/27(水) 14:58:12
プロセスIDからそのプログラムが
どのような引数(CommandLine?)で動いてるか知る方法はありますか?

WMIの「Win32_Process」で取れるのですが
この方法だと「CommandLine」プロパティを見るのですが
Windows Server 2000ではサポートされてないんです。
(Windows Server 2003以降、Windows XP以降でサポートらしいです)

諦めかけてたんですが「ProcessExplorer」ってソフトで
CommandLineが見れるのでAPIで何とかなるのかと思い
質問しました。

よろしくお願いします。
407デフォルトの名無しさん:2007/06/27(水) 15:02:26
フックで進入してGetCommandLineすればいいんじゃまいか?
408デフォルトの名無しさん:2007/06/27(水) 15:27:15
>>406
ProcessExplorerはドライバまで使って色々やってるようだから、真似するのは大変よ。

プロセスのコマンドライン引数などの情報は、
プロセスのメモリ空間の決まった場所に格納されているので、
それをReadProcessMemoryで読んでしまうのがいいと思う。

どのアドレスに格納されているのかは、覚えてない。
409デフォルトの名無しさん:2007/06/27(水) 15:29:16
NT系限定ならフックよりCreateRemoteThreadでのDLL注入のほうがローコストかもね
対象プロセスにウィンドウ無くてもいいし
410デフォルトの名無しさん:2007/06/28(木) 12:00:47
>395 もお願いしますよ
411デフォルトの名無しさん:2007/06/28(木) 12:12:07
コンポジションウィンドウって何だ?
412デフォルトの名無しさん:2007/06/28(木) 12:21:09
>>396
例えば、どんな内部実装だとデッドロックすると思うの?
413デフォルトの名無しさん:2007/06/28(木) 12:57:02
X Window SystemのLeaveNotifyイベントみたいな
マウスカーソルがウィンドウから出た
というのは、WM_* でいうと何に当たるんでしょうか?
414デフォルトの名無しさん:2007/06/28(木) 13:25:29
>>413
WM_MOUSELEAVE
詳細はググって調べてくれ。普通は飛んでこないメッセージだから。
415デフォルトの名無しさん:2007/06/28(木) 13:46:27
>>414
サンクス。流し読みした感じでは、自力で座標取得した方がいいかなこれは。
416デフォルトの名無しさん:2007/06/28(木) 13:49:04
自力って、、、スレッドでループでもさせんのか

マウスキャプチャーしてるなら、こんな質問しないだろうしなあ
417デフォルトの名無しさん:2007/06/28(木) 13:59:54
>>416
いや、古い環境では無理なんじゃないか?って意味。
418デフォルトの名無しさん:2007/06/28(木) 14:07:19
95とかNT3.1とか相手にしてるの?
大変だね
419デフォルトの名無しさん:2007/06/28(木) 14:18:47
>>417
そういう意味か。
気にするほど最近の話でも無いみたいだけど、
昔はそういう目的にはキャプチャーだったなあ

>>418
それは古すぎw
95はともかく、NTは3.51あたりで
420デフォルトの名無しさん:2007/06/28(木) 14:28:39
変動する数値をアイコンに反映させたい場合どうすればいいでしょうか?
HBITMAPをHICON型に変換すればできそうなんですが、
方法も分からずもっと簡単な方法がありましたら教えて下さい。
421デフォルトの名無しさん:2007/06/28(木) 15:24:21
>>420
そもそもそのアイコンはどこにどんな状態で表示するもの?
422デフォルトの名無しさん:2007/06/28(木) 15:32:12
>>420
CreateIconで作るしかないんでない?
423デフォルトの名無しさん:2007/06/28(木) 16:08:13
ありがとうございます。
>>421
タスクトレイのアイコンに数値でCPU使用率とか表示してるアプリがありますよね?
あんな感じで変動する数値を表示できたら便利だと思ったのです。
>>423
その方法も調べたのですがビットパターンがよく分からなくて一度諦めました。
424デフォルトの名無しさん:2007/06/28(木) 16:17:16
CreateIconIndirectするか、イメージリストに追加してImageList_ExtractIcon
425デフォルトの名無しさん:2007/06/28(木) 16:21:15
>>411
IME使った時に文字がフロートする部分ね。

要はIMEは使いたいがその時MEパッドは起動してほしくないと。
426デフォルトの名無しさん:2007/06/28(木) 17:20:56
>>424
ありがとうございました。
427デフォルトの名無しさん:2007/06/28(木) 23:08:03
ちょっとお舞ら
win32アピを利用して丸を描くプログラムを作ったんですよ
ほかのウインドウが被ってしまったんだけど
そしたらその部分が空白になっちゃったんだよ
ウインドウの状態も保持しないてどんな仕様してんだよ
不良品じゃね?
428デフォルトの名無しさん:2007/06/28(木) 23:10:01
おまえが描画したい状態を保存しとけばいいんじゃね?
んでWM_PAINTが来たらまた描けばいいんじゃね?
429デフォルトの名無しさん:2007/06/28(木) 23:16:16
ちょっとお舞ら
>>427って
不良品じゃね?
430427:2007/06/28(木) 23:28:00
>>428
おれ記憶力わるいんで無理
431デフォルトの名無しさん:2007/06/28(木) 23:28:37
諦める
これで解決
432デフォルトの名無しさん:2007/06/28(木) 23:31:10
>>430
お前が記憶するわけではないのだからお前の記憶力などどうでもいい。
そのためのコンピュータではないか。メモリはたんまりとある。
433デフォルトの名無しさん:2007/06/28(木) 23:51:56
>>430
おまえ頭わるいんで無理
434デフォルトの名無しさん:2007/06/29(金) 00:03:53
>>423
ビットパターンって、普通にビットマップのはずだが
ANDマスクは透過部分が1、透過しない部分が0のピクセルあたり1ビットのモノクロビットマップ
XORマスクは透過部分が0、他は普通になカラービットマップ
435デフォルトの名無しさん:2007/06/29(金) 00:29:57
>>433
うるせぇボケ死ね
436デフォルトの名無しさん:2007/06/29(金) 07:28:45
このスレ的に一人前とはどの程度?
ヴぁかにされたくない。
437デフォルトの名無しさん:2007/06/29(金) 07:47:24
>>436
馬鹿にされても怯まず開き直れたら君も立派な一人前だ
438デフォルトの名無しさん:2007/06/29(金) 09:33:48
>>434
カラーはDDBなんでそう単純には行かないのだよ
439デフォルトの名無しさん:2007/06/29(金) 09:34:33
>>434
つーか>>424で解決してるのになんで蒸し返す
440デフォルトの名無しさん:2007/06/29(金) 10:12:04
>>436
コンパイルに成功したらもう一人前
441デフォルトの名無しさん:2007/06/29(金) 10:27:02
>>439
すまんね、アンカーなかったから気付かなかったよ
まぁ参考ってことで
442デフォルトの名無しさん:2007/06/29(金) 13:04:54
開き直りたくないんです。
ヤラレル前にヤラレナイような一人前はどの程度?
443デフォルトの名無しさん:2007/06/29(金) 13:10:14
>>442
お前以外の程度
444デフォルトの名無しさん:2007/06/29(金) 14:36:20
>>442
442と443以外の程度
445デフォルトの名無しさん:2007/06/29(金) 15:03:06
「〜以外の程度」という単語に強烈な違和感を覚える。
446デフォルトの名無しさん:2007/06/29(金) 15:08:16
442と443以外の程度の以外の程度の以外の程度

確かに・・・
447デフォルトの名無しさん:2007/06/29(金) 15:09:18
以上以下じゃなくて以外だからなあ・・・
448デフォルトの名無しさん:2007/06/29(金) 15:12:50
442以外が一人前で442のみが一人前でないという意味か!
ほんとうにありがとうございました
449デフォルトの名無しさん:2007/06/29(金) 15:16:54
>>436
MSDNライブラリに載っていることくらい、質問しないで自分で解決できる程度。
ようするに、このスレが必要ない程度。
450デフォルトの名無しさん:2007/06/29(金) 15:49:57
タスクトレイに表示されている他のアプリのアイコンのハンドルを
取得するかして、アイコンの画像を得たいのですが、できるでしょうか?
最悪タスクトレイ部分のビットマップでもいいです。
451デフォルトの名無しさん:2007/06/29(金) 15:53:44
できますよ
452デフォルトの名無しさん:2007/06/29(金) 15:56:26
特定のファイルが存在するか確認したいんですが、
自動的に環境変数のパスを検索してくれる関数はないでしょうか?
453デフォルトの名無しさん:2007/06/29(金) 16:16:00
>>452
環境変数のパスってPATHのこと?
もしそうなら検索するファイルって実行ファイル?
だったらFindExecutableとか
454デフォルトの名無しさん:2007/06/29(金) 16:20:19
>>452
EnvironmentStrings系のAPIでも使って自分で検索して下さい
455デフォルトの名無しさん:2007/06/29(金) 16:29:59
っと、実行ファイルそのものの検索なら SearchPath() だったな
456デフォルトの名無しさん:2007/06/29(金) 16:53:06
変な人がいるので再投稿しますね…

タスクトレイに表示されている他のアプリのアイコンのハンドルを
取得するかして、アイコンの画像を得たいのですが、できるでしょうか?
最悪タスクトレイ部分のビットマップでもいいです。

やり方を教えてください。
457デフォルトの名無しさん:2007/06/29(金) 16:55:02
変な人?
ググれば見つかるのに何を言ってるんだ低脳
458デフォルトの名無しさん:2007/06/29(金) 17:16:58
>>453-455
ありがとうございました。
SearchPath()で戻り値がファイル名より長ければとしました。
459デフォルトの名無しさん:2007/06/29(金) 17:58:26
>IMEの使用はそのままで、IMEパッドのみ起動を抑制する

まったくレスが付きませんが、これは結局無理なんでしょうかね?
460デフォルトの名無しさん:2007/06/29(金) 18:06:59
>>459
イメージわかないんだよねえ
461デフォルトの名無しさん:2007/06/29(金) 18:12:40
最近のUACとかよくわかんないしうざいんだなー
462デフォルトの名無しさん:2007/06/29(金) 18:44:59
>>459
多分無理だと思うが、そもそも何でそんなことがしたいんだ?

IMEの変換ウィンドウなんか出さずにすべて自前描画しているような
ゲームでさえ、IMEパッドは使えてしまうからなぁ。

IMEを自作しないと駄目だと思う。
463デフォルトの名無しさん:2007/06/29(金) 18:46:37
SendMessage で WM_KEYDOWN/UP 送るときに、
VK_LBUTTON って送れない?
464デフォルトの名無しさん:2007/06/29(金) 19:41:04
>>462
フルスクリーン時にフォーカスが移るのが
イヤだったので、抑制したかったんですよね。
やっぱ無理なんでしょうね。
465デフォルトの名無しさん:2007/06/29(金) 20:47:55
>>456
ゴルァ
1回の質問で複数のことを聞くな。
466デフォルトの名無しさん:2007/06/29(金) 20:54:16
変な人がいるので再投稿しますね…
467デフォルトの名無しさん:2007/06/29(金) 21:02:38
>>464
HIDEすりゃいいじゃん
468デフォルトの名無しさん:2007/06/29(金) 21:03:08
>>456
トレイのハンドル取ってDC取得してコピー
これで分からないならこのスレではもう相手にされないよ

−−−−−−−−終了−−−−−−−−−−
469デフォルトの名無しさん:2007/06/30(土) 00:25:53
タスクバーを自動的に隠す設定にしている
俺への挑戦だな。受けて立とう。ちょんわちょんわ。
470デフォルトの名無しさん:2007/06/30(土) 00:30:39
関係ないよ
471デフォルトの名無しさん:2007/06/30(土) 08:29:52
なんでこんな高圧的なんですか?
琴線に触れてしまいましたか・・・
472デフォルトの名無しさん:2007/06/30(土) 08:31:59
誰だお前
473デフォルトの名無しさん:2007/06/30(土) 08:55:14
琴線の使い方間違ってる。
474デフォルトの名無しさん:2007/06/30(土) 08:58:25
逆鱗と勘違いしてんだろうな。リア中かも名。
475デフォルトの名無しさん:2007/06/30(土) 09:11:16
俺の金銭に触れたら大逆鱗だぜ。
476デフォルトの名無しさん:2007/06/30(土) 09:15:17
逆鱗は小さいと思うんだ。
477デフォルトの名無しさん:2007/06/30(土) 11:38:45
ぎゃくりんで変換されないんですけど本当はなんて読むんですか
478デフォルトの名無しさん:2007/06/30(土) 11:39:16
ぎゃくうろこ
479デフォルトの名無しさん:2007/06/30(土) 11:44:47
>>477
「逆鱗」で検索すれば判ると思いますよ。
480デフォルトの名無しさん:2007/06/30(土) 11:54:18
>>477
メモ帳にコピペして「変換」キーを押せば分かる。
481デフォルトの名無しさん:2007/06/30(土) 12:12:12
C#をつかってます。
ユーザーさんからあるAPIでEntryPointNotFoundExceptionがでるって報告があがりました。
まあぶっちゃけILCreateFromPath なわけなんですが
MSDNには

Minimum operating systems Windows 2000

とあって、そのユーザーさんはスクショからみるにXPなんです。
うちのXPでは動いてるんですが、ありえるんでしょうかこんなこと。
私がしでかした間抜けで不可解な未知のバグの可能性と、
その人のshell32.dllがぶっこわれてる可能性と
どっちが高いでしょうか?
482デフォルトの名無しさん:2007/06/30(土) 12:17:01
ジャンクション(フォルダへのシンボリックリンク)内にあるファイルの実体のpathを
取得する方法を教えてください。
483デフォルトの名無しさん:2007/06/30(土) 12:24:47
僕ハッカー
484デフォルトの名無しさん:2007/06/30(土) 13:08:03
Win98でもXPに見せることはできる
485デフォルトの名無しさん:2007/06/30(土) 13:24:48
>>482
DeviceIoControl使えば取得できる。
486デフォルトの名無しさん:2007/06/30(土) 15:06:27
PROCESS_INFORMATIONの、dwProcessIdか、dwThreadIdからウィンドウハンドルを求めたいんですが、
方法ありますでしょうか、情報ありましたらよろしくお願いします。
487デフォルトの名無しさん:2007/06/30(土) 15:14:18
ものすごくありふれた情報だけどググったの?
488デフォルトの名無しさん:2007/06/30(土) 15:55:36
スレも検索してないだろ。昨日か一昨日見たぞ
489486:2007/06/30(土) 17:59:00
コメントありがとう御座います。
ひととおり検索はしてみたのですが情報が多く期待した情報が見つけることが出来ませんでした。
できましたら、検索キーワードだけでも教えていただけないでしょうか。
よろしくお願いします。
490デフォルトの名無しさん:2007/06/30(土) 18:03:09
具体的に何で何を検索したのか言ってみろよ
491デフォルトの名無しさん:2007/06/30(土) 18:13:23
>>489
えぇ〜!?どんだけ〜(ry
492デフォルトの名無しさん:2007/06/30(土) 19:04:48
493デフォルトの名無しさん:2007/06/30(土) 19:47:12
385じゃね
494デフォルトの名無しさん:2007/06/30(土) 20:07:09
>>489
なんでお前の代わりに俺がスレを読み直さないといけないんだ?
やることはわかってんのに、なんで自分でやらないの?
495デフォルトの名無しさん:2007/06/30(土) 20:25:57
無知の無知に愛の鞭
496デフォルトの名無しさん:2007/06/30(土) 20:28:45
>>485
どうもありがとうございます。これから調べてみます。
497デフォルトの名無しさん:2007/06/30(土) 21:22:24
>>481
エントリポイント名を ILCreateFromPathW に変えてみる、とか。
家のXP SP2のshell32.dllはA、W、無し(=W)と3つエクスポートされてるけどなあ。
498486:2007/06/30(土) 21:29:04
さくっと、検索キーワード教えて頂けませんでしょうか。
499デフォルトの名無しさん:2007/06/30(土) 21:32:29
PID2HWND これでぐぐればおkじゃん?
500デフォルトの名無しさん:2007/07/01(日) 05:29:22
うぜーから放置で
501デフォルトの名無しさん:2007/07/01(日) 09:39:03
DllMain の DLL_PROCESS_ATTACH でLoadLibraryしたら×
DllMain の DLL_PROCESS_DETACH でFreeLibraryしたら×
とMSDNにあります。
Dllの利用元に処理をしてもらうわけでなく、何かの関数を呼んでもらうわけでなく、
DllのATTACH時に別のDllを動的にLoadLibrary〜初期処理、DETACH時にそのLoadしたDllを終了処理〜FreeLibrary
する実装の代替案ってどういうふうに書いたらいいですか?
設定ファイルにかかれたDllファイル名からを動的にDllから読み込んで、
前処理しておいて、設定毎に処理を変更する動作をつくりたいんです。
いまのところATTACH時にLoadLibraryして、DETACH時にFreeLibraryするのを作ったんですが
問題がでてないんですけど、MSDNにすんなってかいてあるんで・・・。
初めてDLLのなにかの関数が呼ばれたときにLoadLibrary〜前処理するってのは無しで。
502デフォルトの名無しさん:2007/07/01(日) 09:55:13
やっぱ初めてDLLのなにかの関数が呼ばれたときにLoadLibrary〜前処理するってのは有りで。
503デフォルトの名無しさん:2007/07/01(日) 09:56:56
確か他のDLLが初期化途中だとループする可能性があるから駄目なんだったかな

A初期化中にBをロード→B初期化中にCをロード→C初期化中にAをロード→・・・

みたいな
DLL_PROCCESS_ATTACHが処理を返してからなら参照カウンタが増える
(カウンタが1以上ならDLL_PROCCESS_ATTACHは投げられない)からループしない
504デフォルトの名無しさん:2007/07/01(日) 10:44:44
質問なんですけどダイアログで使えるコントロール(タブとかシークバー)を自前のWindowで使いたい場合はどうすればいいのでしょうか?
CreateWindowで作れるコントロールの中には無いっぽいのでどうすればいいか困ってます。
505デフォルトの名無しさん:2007/07/01(日) 10:53:35
commctrl.h
506デフォルトの名無しさん:2007/07/01(日) 11:33:25
>>501
CoInitialize/CoUninitializeみたいに別途初期化・終了処理の関数を用意したり、
暗黙的リンク(必要に応じて遅延読み込み)したり。
507デフォルトの名無しさん:2007/07/01(日) 11:57:39
Microsoft Platform SDKとはなんですか?
これだけでほかの開発環境なくてもプログラミングできるのでしょうか
508デフォルトの名無しさん:2007/07/01(日) 12:10:29
>>507
Windowsアプリを作るうえで必要になるライブラリ群。
ライブラリなので、当然これだけでは何も作れない。
509デフォルトの名無しさん:2007/07/01(日) 12:15:58
ここは既にプログラミングの環境が構築できてる、
あるいはできるという条件の元でWin32APIについて質問するスレです。

環境の構築ができてないレベルだと、>507の質問に回答が出ても理解できないかもしれないが
そこまで面倒見れない
510デフォルトの名無しさん:2007/07/01(日) 12:23:08
そうですか
WIN32APIとはまた違ったものなんですね
511デフォルトの名無しさん:2007/07/01(日) 12:26:28
まあでもWin32 APIを使うためのヘッダやインポートライブラリと、
ドキュメント・サンプル・ツールなんかが入っているセットと言えばいいかな。

でも、今はWindows SDKになったが。
512デフォルトの名無しさん:2007/07/01(日) 13:19:04
>>507
百聞は一見に如かず

無償でダウンロードできる代物なのだから、
とりあえずインストールしてみて、
HDDにコピーされたファイル群を眺めてみれ。

必要かどうか分からないなら、とりあえず、
潰してもいい環境にインストールすりゃいい。

潰してもいい環境を用意できないようなら、
HDDに十分な空き容量とVirtualPCを。
513デフォルトの名無しさん:2007/07/01(日) 13:20:18
Windows SDKはコンパイラ・リンカが付いてくるよ。
514デフォルトの名無しさん:2007/07/01(日) 14:07:20
Windows SDKのコンパイラは /analyze が付いてるよ。
515デフォルトの名無しさん:2007/07/01(日) 16:04:39
ファイルをドラッグ&ドロップして起動した時に、
そのドロップされたファイルを読み込ませたいのですが、
lpCmdLineを引数にfopenしてもオープンできません。
どうすれば読み込ませられますか?
516デフォルトの名無しさん:2007/07/01(日) 16:08:34
それでできないことはないはず。
まずは試しにlpCmdLineを表示させてみな。
517515:2007/07/01(日) 16:23:37
表示してみました。
"C:\Documents and Settings\〜中略〜\aa.mp3"
正しいパスが表示されてるっぽいです。
518デフォルトの名無しさん:2007/07/01(日) 16:31:49
「"」を取り除け
519501:2007/07/01(日) 16:42:33
IDないと502にみたいな偽者がでてくるのか・・・

>>503
そうなんですよ。でも別の代替の処理を考えつかないんです。
>>506
暗黙的に行うと、DLLのパスが設定ファイルから渡して動的ロードできないので使ってないです。
CoInitialize/CoUninitializeはなんで制約がないのか調べて見ます。
520515:2007/07/01(日) 16:57:26
いけました。本当にありがとう。
521デフォルトの名無しさん:2007/07/01(日) 16:59:45
>>519
すみません、代替処理見つからないなんて釣りだと思いました。
522デフォルトの名無しさん:2007/07/01(日) 20:40:22
>>514
マジですか。お得ですね。
VSのコンパイラをSDKのものに差し替えたくなりますな。
523デフォルトの名無しさん:2007/07/01(日) 20:45:14
>>519
CoInitialize/CoUninitializeの話は、

DLL_PROCESS_ATTACHでLoadLibraryするのではなく、
そのDLL特有の、LoadLibraryなどの初期化処理を行う関数をExportして、
それをDLLを使う側に呼んでもらうことにする

ってことかと。
524デフォルトの名無しさん:2007/07/01(日) 20:48:38
>>517
CommandLineToArgvW
とか使ってパースしる!
525デフォルトの名無しさん:2007/07/01(日) 21:00:45
ANSI考慮するなら__argc,__argv。
標準ライブラリが必要だけど
526デフォルトの名無しさん:2007/07/01(日) 21:38:43
>>519
プログラム側でロードが終わった時点で初期処理すればいいだけのような気がするんだけど
CreateでロードしてんならLoadLibraryが処理返してから初期処理とやらをすれば良いじゃん
527デフォルトの名無しさん:2007/07/01(日) 21:52:59
>>514
まじで?!
70万だして買っちまったよ・・・
528デフォルトの名無しさん:2007/07/01(日) 22:00:15
まじだよ。/? すると
                         -CODE ANALYSIS-
/analyze[:WX-] enable code analysis
    WX- - code analysis warnings should not be treated as errors even if /WX is invoked

って出る。バージョンとかは同じだけど、付属のバイナリ群はdiffとるとどれもちがうっぽい。
まあ使い方わかんないし、最近Cやってないから必死こいて調べないし、スレ違いだけど
529デフォルトの名無しさん:2007/07/01(日) 22:19:48
>>523
>>526
そのやりかただとフックとかしかけたときにそのDLLの
アタッチ時に別のDLLを呼べない。
というわけで初めてCALLBACKされたときに初期化するしかなくなる。
530デフォルトの名無しさん:2007/07/01(日) 22:32:41
>>529
>というわけで初めてCALLBACKされたときに初期化するしかなくなる。

これが正しいんだと思うが
適当にメッセージ投げろよ

>そのやりかただとフックとかしかけたときにそのDLLの
>アタッチ時に別のDLLを呼べない。

グローバルにフック仕掛けてたら必要ないプロセスに無駄なDLLロードすることになるじゃん
531デフォルトの名無しさん:2007/07/01(日) 23:26:12
お前ら。

DLL作るときは、ロードアドレス、ちゃんと設定しとけよな。
VCとかのデフォルト値のままだと、リロケートすることになるし、仮想メモリ空間をぶった切ることになるぞ。
532デフォルトの名無しさん:2007/07/01(日) 23:31:02
どっちにしろ、デフォルト1000:0000でグローバルフックする
ような連中もいるんだから無駄
仮想メモリがぶった切られるったって、MS純正のDLLとしてが
4000:0000とかに存在する現状では寂しい限り。
533デフォルトの名無しさん:2007/07/01(日) 23:36:45
64bitいや128bitの時代はまだか
534デフォルトの名無しさん:2007/07/01(日) 23:37:46
128bitになるころは画面はホログラムになってますか?
535デフォルトの名無しさん:2007/07/01(日) 23:50:29
>>532
行儀が悪い輩がいるからといって、自分まで行儀悪くしてどうするよ。

人様が作った行儀が悪いDLLはReBaseでベースアドレスを変更しちまえ。
536デフォルトの名無しさん:2007/07/02(月) 00:41:53
どのへんに置いとくのが適切なのかわからん
537デフォルトの名無しさん:2007/07/02(月) 00:46:11
>>536
MSDNライブラリ等で
ReBaseImage
のところに説明がある。
538デフォルトの名無しさん:2007/07/02(月) 00:59:03
Comboboxのedit controlを取得するのってGetWindow(コンボのハンドル, GW_CHILD)しかない?
ComboboxexならCBEM_GETEDITCONTROLがあるんだけど、、
Comboboxで安全にeditを取得する方法があるのなら、知ってる人いませんか?
539デフォルトの名無しさん:2007/07/02(月) 01:27:39
CB_GETCOMBOBOXINFO
540デフォルトの名無しさん:2007/07/02(月) 02:02:06
>>539
ずばりのもの、ありがとう。解決しました。
MSDNをみるとCB_GETCOMBOBOXINFOはXp、
windows2000では、GetComboBoxInfoが使えますね。
541デフォルトの名無しさん:2007/07/02(月) 02:46:42
>>528
Windows2000環境にインストールしようとして断られた・・・orz

ちなみに、どのバージョンのWindowsSDKなのか教えてもらえると助かります。
542デフォルトの名無しさん:2007/07/02(月) 11:14:35
>>541
因みに、私は教えてあげません。
543デフォルトの名無しさん:2007/07/02(月) 11:46:53
/analyzeというか、PREfastには2種類ある。

先にDDKで提供されていたドライバ開発者向けと、
後からVCの上位版に提供されたアプリ開発者向けが。

Windows SDK付属のコンパイラで使えるのは前者だけだったりしてね。
544デフォルトの名無しさん:2007/07/02(月) 14:05:50
>>543
ちょっと試してみたけど、VSTS付属のものと同じ出力だった。
Windows SDKの方はコマンドラインからしか試してないけどVS連携はまあきつそうか。

以下テストコード。タブを全角に変換してるので注意ね。

#include <CodeAnalysis/SourceAnnotations.h>
#include <windows.h>
[returnvalue:SA_Post(MustCheck=SA_Yes)]
double CalcSum ([SA_Pre( Null=SA_No )] double* source,unsigned int size);
double CalcSum (double* source, unsigned int size)
{
  double sum = 0;
  for( int i = 0; i < size; ++i ) sum += *source;
  return sum;
}
int f()
{
  double buf[100];
  for (int i = 100; i >= 0; i++) buf[i] = i;
  CalcSum(buf, 99);
  return (int) 1;
}
int main()
{
  wchar_t buf[255];
  GetEnvironmentVariableW(L"PATH", buf, 256);
  return f();
}
545544:2007/07/02(月) 14:10:04
続き。

上のコードのコンパイル結果。

c:\test>cl test.cpp /analyze
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.

test.cpp
c:\test\test.cpp(14) : warning C6292: Ill-defined for-loop: counts up from maximum
c:\test\test.cpp(14) : warning C6201: Index '100' is out of valid index range '0' to '99' for possibly stack allocated buffer 'buf'
c:\test\test.cpp(15) : warning C6031: Return value ignored: 'CalcSum'
c:\test\test.cpp(14) : warning C6386: Buffer overrun: accessing 'buf', the writable size is '800' bytes, but '808' bytes might be written: Lines: 13, 14
c:\test\test.cpp(21) : warning C6202: Buffer overrun for 'buf', which is possibly stack allocated, in call to 'GetEnvironmentVariableW': length '512' exceeds buffer size '510'
c:\test\test.cpp(21) : warning C6386: Buffer overrun: accessing 'argument 2', the writable size is '510' bytes, but '512' bytes might be written: Lines: 20, 21
Microsoft (R) Incremental Linker Version 8.00.50727.762
Copyright (C) Microsoft Corporation. All rights reserved.

/out:test.exe
test.obj
546デフォルトの名無しさん:2007/07/02(月) 14:58:39
?
547デフォルトの名無しさん:2007/07/02(月) 15:29:42
>>545
これって、VCProのcl.exe関連を差し替えて、SDK付属のCodeAnalysis関連ヘッダもコピーしてやればIDE上で使えるんだろか
548デフォルトの名無しさん:2007/07/02(月) 15:37:33
ファイル差し替えなくてもディレクトリ設定変えてやればいんじゃね?
IDE上での設定UIは無いだろうから手動でclのパラメータ追加しないとだめだろうが。
549544:2007/07/02(月) 16:12:09
>>547
すまんがVC++Proはすぐに使えるところにないのでその辺の検証は誰かやってちょ。

あとはまあコード分析とかそんなにしょっちゅう使わなくても
たまにとかリポジトリにコミット前にとか自動テスト前とかでもいいんじゃね? とか。
vcbuild.exeをうまいこと使うと自動化できるんじゃなかろかと。
550デフォルトの名無しさん:2007/07/02(月) 17:38:37
VC++Proの場合。

VC++ディレクトリの「実行ファイル」に
C:\Program Files\Microsoft SDKs\Windows\v6.0\VC\Bin
を追加し、これを優先度一番上に。
(x64なら...\v6.0\VC\Bin\x86_x64)
同じく「インクルードファイル」に
C:\Program Files\Microsoft SDKs\Windows\v6.0\VC\INCLUDE
を追加し一番上に。

あとはプロジェクトオプションで「構成プロパティ」-「C/C++」-「コマンドライン」で
「追加のオプション」に「/analyze」を記述してやればいい。
本格的なアノテーションまではチェックしてないが、簡単なバッファオーバーラン検出
程度は動作しているのを確認。

ちなみにこれDebugビルドでは使えるがReleaseビルドでは使えないという認識でOK?
厳密にはAPIの話題ではないが、Win32 APIの引数や戻り値チェックもしてくれるのでとりあえず。
551501:2007/07/02(月) 19:35:00
DLLロード後に初期化処理関数をDLLロード側から呼んでもらうようにします。
>>503
>>506
>>521
>>523
>>526
>>529
>>530

レスポンスありがとうございました。
552デフォルトの名無しさん:2007/07/02(月) 22:49:54
Analysisってそんなにすごいものなの?
70万もだしたというひとがいたが
553デフォルトの名無しさん:2007/07/02(月) 23:00:05
>>552
Analysisだけに70万ではないし、
プロ用の開発ツールが高価なのは普通のことだから。

RationalのPurifyとか、
CompuwareのDevPartnerStudioとか、
かなりの金額するでしょ。
554デフォルトの名無しさん:2007/07/02(月) 23:20:11
たとえ趣味でもつぎ込む人はつぎ込むしね
555デフォルトの名無しさん:2007/07/02(月) 23:43:15
現在開いてるページのURLとタイトルを取得したいのですが、
そのような関数がございましたらご教授下さい。

たとえばここでしたら、
タイトル→Win32API質問箱 Build54
URL→http://pc11.2ch.net/test/read.cgi/tech/1181645965/
と、獲得したいです。
556デフォルトの名無しさん:2007/07/02(月) 23:46:56
脱力
557デフォルトの名無しさん:2007/07/02(月) 23:57:42
>>555
FindWindowEx使って力業で探せ
558デフォルトの名無しさん:2007/07/03(火) 00:06:31
何でもAPI一つで出来ると思うな
559デフォルトの名無しさん:2007/07/03(火) 00:11:19
普通IWebBrowser2使うだろ
560デフォルトの名無しさん:2007/07/03(火) 00:13:48
>>559
IEとは言ってない。

意地悪な解釈ではあるがな。
561デフォルトの名無しさん:2007/07/03(火) 00:18:57
つーか
>現在開いてるページのURLとタイトルを取得したいのですが、
>そのような関数がございましたらご教授下さい。

この質問通りに答えるなら「無い」が正解
562デフォルトの名無しさん:2007/07/03(火) 00:33:13
>>560
「現在開いてる」というのを詳しく。

何が、誰が、
そういう情報がゴッソリ欠落しているぞ。


563デフォルトの名無しさん:2007/07/03(火) 00:37:27
>>560
どういうわけか、
インタフェースとしてではなく、クラスを指してIWebBrowser2という人達が多いのです。

IEそのものや、既存のIEコンポーネントを使ったプログラムに対してではなく、
タイトルを取得するためだけに、新たにIEコンポーネントを使い、
URLのドキュメントを取ってこさせ、タイトルを取得するという手もなくはないです。
564デフォルトの名無しさん:2007/07/03(火) 06:50:32
ダイアログベースのアプリで、キーリピートのときに鳴り続ける警告音を消したいのですが
どうしたらよいのでしょうか。
565デフォルトの名無しさん:2007/07/03(火) 08:47:12
もっと詳しく書かないと。
566デフォルトの名無しさん:2007/07/03(火) 10:00:17
WM_KEYDOWNのLPARAM見てリピートが1より大きかったらメッセージ潰せばいいんじゃね
567デフォルトの名無しさん:2007/07/03(火) 10:58:12
そのダイアログのせいで鳴ってるの?
キューいっぱいとか。キーメッセージ握りつぶしてる?
568デフォルトの名無しさん:2007/07/03(火) 11:04:29
メッセージポンプを自分で止めている可能性もあるな。
569デフォルトの名無しさん:2007/07/03(火) 12:13:46
>>561
IE6まではDDE使って取得できたんだがな、IE7以降これが動作しなくなった
しかしFirefoxやOpera等使われていたら動かないわけで。
2chスレに限って言えば専ブラ使われていたらだめなわけで。
570562:2007/07/03(火) 12:33:58
アンカーミスしてました。

>>562>>555あてです。
571デフォルトの名無しさん:2007/07/03(火) 13:16:38
そんくれーわかるっつの
572デフォルトの名無しさん:2007/07/04(水) 08:16:50
>>550
ちょwww
俺のPro版、なんかアナライズしてるww
573デフォルトの名無しさん:2007/07/04(水) 09:11:47
IEでグーグル開いたときに検索窓でますよね
あそこに文字列をいれるのにいい方法ってありますか?
キーダウンで擬似的にキーボードおされた状態ってのはうまくいったのですが
たまに失敗したり、一文字ごとにウェイトいれないとだめなのでちょっと・・・
セットウインドウテキストが良さげなので
全てのIEの子ウインドウハンドルに送ってみたのですがまったく反応ありませんでした
574デフォルトの名無しさん:2007/07/04(水) 09:23:51
フォームに入力するのVBのサンプルならいっぱいある
575デフォルトの名無しさん:2007/07/04(水) 09:24:58
Google限定なら別のアプローチのがよさげ
576デフォルトの名無しさん:2007/07/04(水) 09:27:29
どうでもいいけど「キーダウン」とか「セットなんとか」とか
強烈に読みづらいから素直にアルファベット表記してくれ。
あとIEのテキストフォームはデザインがWindowsと同じってだけで
IE独自の実装してるからテキストボックスに見えて
テキストボックスじゃない。
API通していじるのは諦めた方がよさげ。
577573:2007/07/04(水) 09:32:47
あ、ウインドウのタイトルが変わりましたw
これ面白いですね

そうなんですかどうりで反応しないわけだ
VB覚えようかな
578デフォルトの名無しさん:2007/07/04(水) 09:41:48
1.クリップボードに好きな単語を入れる
2.C-V を送る

でいいじゃん?
俺だったらそんな面倒くさいことせずに、
検索語を別の窓から入力させて、結果をIEで開くように作るが。
579デフォルトの名無しさん:2007/07/04(水) 09:55:31
あ、クリップボードも試してみたのですが
効かなかったから・・・ハッ!Σ(゚□゚;)!!
その貼り付けたには気づかなかったorz

別窓のは技術が高くないと無理かと
580デフォルトの名無しさん:2007/07/04(水) 09:58:50
IE上のコントロールはドロップダウンリスト以外は全部ウィンドウハンドル持たないIEの独自描画。
581デフォルトの名無しさん:2007/07/04(水) 10:04:28
いや、http://www.google.com/search?&q=hoge とかを
そのままシェルに渡してやればいいだけだと思うんだが…
582デフォルトの名無しさん:2007/07/04(水) 10:06:42
別窓作って文字入力
入力文字をURLエンコードして連結
シェルに渡す
583デフォルトの名無しさん:2007/07/04(水) 10:08:05
      _人人人人人人人人人人人人人人_
        >    な なんだってー!!    <
        ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
試行錯誤したのが馬鹿みたいだ
584デフォルトの名無しさん:2007/07/04(水) 10:16:16
そうだね。
585デフォルトの名無しさん:2007/07/04(水) 10:18:45
試行錯誤すること自体は無駄じゃないよ
586デフォルトの名無しさん:2007/07/04(水) 10:26:35
質問の仕方がわるいんだからしょうがない。
587デフォルトの名無しさん:2007/07/04(水) 10:39:00
どうしても、IE上のコントロールを制御したいと言うなら、
↓スレあたりが参考になるやもしれん

IEコンポーネントを使い倒すスレ Ver.2
http://pc11.2ch.net/test/read.cgi/tech/1145189322/
588デフォルトの名無しさん:2007/07/04(水) 10:40:49
>>576
読みづらい以前に、

特別なキーワードを、
言い換え可能な普通の言葉で書いたら、
わけわかんないよ。

WM_KEYDOWNではなく、他のものかもしれないと気をつけて読まないといけないから。
589デフォルトの名無しさん:2007/07/04(水) 10:42:35
>>577
VBでやると簡単だが、VBでしかできないわけじゃない。

Win32APIには、Cスタイルのものと、COMのものがある。
VBはCOMを扱うのが楽。VCだと慣れるまで面倒。
VB6ならともかく、VB.NETでやるくらいならC#でやりなされ。
590デフォルトの名無しさん:2007/07/04(水) 10:57:36
いやあ日本人なのでカタカナの方が読みやすいかなと思ってw
しかし天才がいるもんですね
cgiとかってのに直接送ってるみたいなもんでしょ?驚きました
591デフォルトの名無しさん:2007/07/04(水) 11:00:28
>>590
日本語版のMSDN に 「WM_KEYDOWN」 が 「キーダウン」 と書かれたらすげー迷惑
発音しているものが動作を指しているのか、特定のキーワードなのかを即座に区別できねーじゃん
592デフォルトの名無しさん:2007/07/04(水) 12:58:05
プログラムの定数的なのは、別に英語でもそのまま定数で書くよw
593デフォルトの名無しさん:2007/07/04(水) 13:11:46
ダブリューエム_キーダウンと書くかWM_KEYDOWNとするかは
翻訳者の自由だぁ〜〜!!
予約語いずフリーダム♪
ハイ一緒に!
594デフォルトの名無しさん:2007/07/04(水) 13:16:14
消えろ
595デフォルトの名無しさん:2007/07/04(水) 14:20:11
キーダウンと書いたのを見て、実際にキーを押した事だと思ったよ・・・
596デフォルトの名無しさん:2007/07/04(水) 16:50:55
こんにちは、ちょっとした疑問の解決作を教えてください。

エディタをサブクラッシングしようと思い、以下のコードを書きました。


WNDPROC OldEditProc;
LRESULT CALLBACK EditSubProc(HWND,UINT,WPARAM,LPARAM);

...

OldEditProc=(WNDPROC)SetWindowLong(hEdit,GWL_WNDPROC,(LONG)EditSubProc);


しかし、これだとデフォルトの警告レベルで、warningが2つもでるんですよね・・・。
( 『LRESULTからLONGに切り詰めます』 というのと、『LONGからWNDPROCへ変換します』 というもの )

これ、どうにかしてwarningを取る方法は無いでしょうか? ご教授御願いいたします。

環境はWinXPPro-sp2 ,VC++.NET です。
597デフォルトの名無しさん:2007/07/04(水) 18:04:20
何故warningになるのか考え、それの対処を調べるんだ
ヒント:64bit
598デフォルトの名無しさん:2007/07/04(水) 18:28:42
>>596
#include <atlwin.h>した上で、SetWindowLongではなく、SetWindowLongPtrを使え。
その際、そのLONG型のキャストをLONG_PTR型へのキャストにする必要がある。。
http://msdn.microsoft.com/library/ja/jpwinui/html/_Win32_SetWindowLongPtr.asp

<atlwin.h>をインクルードする理由は、<windows.h>をインクルードしただけだと、
32ビット版でのSetWindowLongPtrがあまりにもお粗末なので、
結局警告が表示されることに変わりがないから。
599596:2007/07/05(木) 00:32:56
おぉ〜凄いっ!
教えていただいた通りにやってみると、warningが出ないです〜っ!!

大変参考になりました。
本当にありがとうございました。 m(。−_−。)m
600デフォルトの名無しさん:2007/07/05(木) 11:26:11
int APIENTRY WinMain(HINSTANCE, HINSTANCE, LPSTR, int);
これを
int APIENTRY WinMain();
こういう風にしたんですが、できませんか?
601デフォルトの名無しさん:2007/07/05(木) 12:37:22
できません
602デフォルトの名無しさん:2007/07/05(木) 12:40:38
できます
603デフォルトの名無しさん:2007/07/05(木) 12:42:48
できますん
604デフォルトの名無しさん:2007/07/05(木) 12:43:56
つかわないんならなくてもいいだろ
605デフォルトの名無しさん:2007/07/05(木) 12:44:06
できます

606デフォルトの名無しさん:2007/07/05(木) 13:01:44
APIENTRYだから、できませんね。
__cdeclならできるんだけど。
607デフォルトの名無しさん:2007/07/05(木) 13:33:23
できます


608デフォルトの名無しさん:2007/07/05(木) 13:34:51
あぴえんとりー
609デフォルトの名無しさん:2007/07/05(木) 13:44:52
キチガイが住み付いてるな。
610デフォルトの名無しさん:2007/07/05(木) 13:53:45
自己紹介乙
611デフォルトの名無しさん:2007/07/05(木) 13:53:54
自分で分かってるなら大丈夫だから安心していいよ
612デフォルトの名無しさん:2007/07/05(木) 13:54:48
ワレワレハ、ウチュウジンダ
613デフォルトの名無しさん:2007/07/05(木) 14:08:55
そういえば言語言ってなかった・・・
C言語なんですがやっぱ無理かったです
本当にありがとうございました
614デフォルトの名無しさん:2007/07/05(木) 15:16:05
プログマーが日本語おかしいのはヤバイ
数学より国語的な能力が必要だとおもう
615デフォルトの名無しさん:2007/07/05(木) 15:17:37
プログマー
616デフォルトの名無しさん:2007/07/05(木) 15:19:02
釣られるプロだクマー
617デフォルトの名無しさん:2007/07/05(木) 15:20:19
プラグマー
618デフォルトの名無しさん:2007/07/05(木) 15:21:26
>>617
差し替えで簡単に置きかえられるプログラマー?
619デフォルトの名無しさん:2007/07/05(木) 15:23:10
#pragmar
620デフォルトの名無しさん:2007/07/05(木) 15:25:44
プギャー
621デフォルトの名無しさん:2007/07/05(木) 15:37:07
まるで動物園だな、ここは
622デフォルトの名無しさん:2007/07/05(木) 16:34:57
人間だって動物さ
623デフォルトの名無しさん:2007/07/05(木) 18:31:04
マ板は釣り易いことで有名くま
624デフォルトの名無しさん:2007/07/05(木) 18:33:42
プラモデルみたいなプラグラマ
625デフォルトの名無しさん:2007/07/05(木) 19:35:36
>>624
語源は両方ともギリシア語だけど、出所が違うの。

スレ違いだからほどほどに。
626デフォルトの名無しさん:2007/07/05(木) 21:38:06
プログマー笑ったwwwwwwwwwwwwwww
627デフォルトの名無しさん:2007/07/05(木) 21:45:13
面白くない。いい加減にしとけ
628デフォルトの名無しさん:2007/07/06(金) 00:08:47
ウィンドウのタイトルバー上のホイール操作で
ウィンドウを半透明にできるユーティリティを作りたいんだが
システムフックしてDLL上でコードを長々と書いて一応できることはわかった。
だけどexe側で処理させたいのだが、なにかよい方法はないだろうか?
exeに、呼び出されたDllのインスタンスハンドルを送ってそこで明示的な関数ロードとかやったけどできなかったよ
629デフォルトの名無しさん:2007/07/06(金) 01:00:07
今市意味が分からないんだけど

ホイール操作を捕まえて半透明化するサブクラス化用のプロシージャを書いて
フックを入れてからサブクラス化すればいいと思う
630デフォルトの名無しさん:2007/07/06(金) 01:36:59
>>628
そういう機能のWindowTPというソフトがあるが、自分で作りたいだけ?
631デフォルトの名無しさん:2007/07/06(金) 02:12:13
>>629
おk、サブクラス化試してみるわ
ありがと

>>630
今作ってる奴の機能の一部として搭載予定。
まぁ自己満足だけどね
ありがとー
632628:2007/07/06(金) 03:28:14
('A`)・・・・?


http://techtips.belution.com/ja/vc/0026/
>指定されたウィンドウの属性を変更する SetWindowLong() は、
>指定するウィンドウが呼び出し側のスレッドと同じプロセスに属していない場合に失敗します。

これを信じて四苦八苦してたのに
自身のexe側から他のプロセスのウィンドウを半透明化できちゃったぞ・・・?
う〜む・・・
633デフォルトの名無しさん:2007/07/06(金) 04:25:29
そんな古い上にどこの馬の骨が書いたか分からんようなサイト見ずに、MSDN読めよ。

http://msdn2.microsoft.com/en-us/library/ms633591.aspx
> Windows 95/98/Me: The SetWindowLong function may fail if the window specified by the hWnd parameter does not belong to the same process as the calling thread.
634デフォルトの名無しさん:2007/07/06(金) 13:45:15
Dllから呼び出したダイアログにXPスタイルが効かないんだけどなんでだかわかる?
manifestやらcomctl32やらをexeの設定方法でやってんのがダメなのか…。

わかんなくて頭爆発しそうなのでそろそろ米国行きの飛行機に乗りに行きます。

635デフォルトの名無しさん:2007/07/06(金) 13:51:55
どうぞ。
636デフォルトの名無しさん:2007/07/06(金) 13:52:50
そのDLLを呼んでるEXEの設定はどうなのよ
637634:2007/07/06(金) 15:08:31
>>636
最終的に写真屋のフィルタ(8bf)にするDLLなんでナカミはよぅわからんのです。

ただ、さっき「猫でも〜」の外部DLLからダイアログ呼ぶプログラムでも
試してみたけどコレもダメだったので
写真屋のAPIの問題っつーより私の問題らしいです。

638デフォルトの名無しさん:2007/07/06(金) 15:52:17
>>634
ISOLATION_AWARE_ENABLEDについて調べるんだ
639634:2007/07/06(金) 21:29:52
うおおおおおおおおおお!
プリプロセッサにISOLATION_AWARE_ENABLED書いただけで
うまくいきましたッ!

>>638

ありがとーーーーーーー!
愛してるッ!
640デフォルトの名無しさん:2007/07/06(金) 22:21:54
きんもー☆
641デフォルトの名無しさん:2007/07/07(土) 08:08:18
任意のプロセスがCreateFileしたファイルのパス、それを取得する方法て何かないですか?

使用OSはVistaです

フィルタドライバ書かなきゃいけないんでしょうか?…
642デフォルトの名無しさん:2007/07/07(土) 08:26:24
CreateFileのAPIフッ(ry
643デフォルトの名無しさん:2007/07/07(土) 08:52:36
DLL側から、呼ばれているプロセスのIDかウインドウハンドルを取得するにはどうすればいいですか?

FindWindowでウインドウタイトル指定して取得していたんですが、
多重起動されたらだめじゃんってことに気が付いて・・・・

おしえてくださいm(_ _)m
644デフォルトの名無しさん:2007/07/07(土) 09:05:30
普通に自分のプロセスIDを取得しろよ。
DLLをなんだと思っているんだ?
645デフォルトの名無しさん:2007/07/07(土) 09:43:56
>>642
VistaでAPIフックしたら実行時に警告出ませんか?
646デフォルトの名無しさん:2007/07/07(土) 10:31:26
>>644
普通にプロセスIDを取得する方法を教えてくださいm(_ _)m
647デフォルトの名無しさん:2007/07/07(土) 10:33:33
GetProcessID()
648デフォルトの名無しさん:2007/07/07(土) 10:35:14
649デフォルトの名無しさん:2007/07/07(土) 10:44:49
>>646
GetCurrentProcessId()

名前からしてそのものズバリな訳だが
このくらいググれ
650デフォルトの名無しさん:2007/07/07(土) 10:54:50
>>645
> VistaでAPIフックしたら実行時に警告出ませんか?
そりゃあドライバでも一緒だと思うが?
651デフォルトの名無しさん:2007/07/07(土) 10:56:57
人を利用する事しか頭に無い奴に回答をくれてやるな。
652デフォルトの名無しさん:2007/07/07(土) 12:05:24
32bitVistaだとドライバの場合ロゴとらないとWindowsの動作自体に制限かかるんだっけ?

64bitだとフックもドライバも現実的じゃないよな
653デフォルトの名無しさん:2007/07/07(土) 12:15:12
いつも思うんだけど
なんでこんなにフックしたい奴が多いんだ
654デフォルトの名無しさん:2007/07/07(土) 12:23:35
フックで躓く奴が多いんだと思われ
別に集まりたくてフックしたい奴らばっかり集まってるわけじゃないでそ
655デフォルトの名無しさん:2007/07/07(土) 13:42:09
あやしげなソフト作ろうとしてんだろうな
656デフォルトの名無しさん:2007/07/07(土) 14:36:33
>>649
ググるよりも前に、PlatformSDKのヘルプ、または、MSDNライブラリだろう。
検索してもいいし、普通に目次から辿っても見つけられる。
ていうか、普通に目次から辿って見つけられないのは、よほどのアレだぞ。
657デフォルトの名無しさん:2007/07/07(土) 14:41:47
>>653
質問のしかたを見ると、厨房くさい
やろうとしていることを見ると、怪しい

>>555あたりなんかは、
特定のサイトにアクセスしているときだけキーログを取ろうとしている
とも見れるしなぁ。

怪しいプログラムを書くなら、人に聞かずに自力で何とかしろってんだ。
658デフォルトの名無しさん:2007/07/07(土) 15:09:00
するどい人だな。まったく想像できなかったぜ
659デフォルトの名無しさん:2007/07/07(土) 19:10:52
>>653
そりゃあ2ちゃんだから釣り師が多いんだろ
660デフォルトの名無しさん:2007/07/07(土) 19:55:26
上手い事言ったつもりかも知れんが面白くない
661デフォルトの名無しさん:2007/07/07(土) 21:45:07
俺窓プログラム作って初めて実用的なの作ったのはフック使ったネトゲーツールだったな
調べながら実装したし窓プログラムの根本的な概念もそんな理解してなかったから
コードはめちゃくちゃ汚かったが勉強にはなったな。
そうこうしながら1年後あたりにAPIフック使ってパケット取得ツールも作ったわ。
APIフックは俺がしょぼいからだろうが4ヶ月かかってやっとできたんだけどなw

フックぐらいはちょっと頑張ればすぐできるだろ。
人に聞くのが悪いとは言わないが、フックに関しては
参考サイトいっぱいあるんだから自分で調べようぜ。
特に目的が限りなく黒に近いものを作るんならなおさら。
662デフォルトの名無しさん:2007/07/07(土) 21:48:36
単なる物臭か根性無しだろ

どうせヒマ人が答えるんだしいいじゃねーか別に
663デフォルトの名無しさん:2007/07/07(土) 21:49:53
オレには真っ黒にしか見えないが、
そういうことをやってる当人には灰色に見えるんだろうな
664デフォルトの名無しさん:2007/07/07(土) 21:56:14
ためしに検索したらたくさんでてきた

しょぼいキーロガー程度ならすぐできるな
665661:2007/07/07(土) 22:06:04
>>663
まあ真っ黒だわなw

ただ、そういうの作る奴が全部俺みたいな考えだとは思わないが
俺自身はネトゲーツール作って使おうという思考よりも
技術的な勉強をする為にそれを作ろうっていうのが
どっちかって言うと大きかったな。


それの作成にあたっての動機付け(動機があったほうが頑張るから)
が欲しかったからたまたまやってたネトゲーをターゲットにした感じ。

まあ、ここはそういう議論スレじゃないから以降これに関しての発言はしない。
666デフォルトの名無しさん:2007/07/07(土) 22:15:24
逆だろ。
升ツール作る為に技術的な勉強をする必要があったんだろ。

まぁ一般的な解凍ツールやブラウザとかは既に便利なものを作ってるヤツがいるからな
自分が利用する便利なツールで世の中に出回ってないものしか作ろうとしたら
真っ黒なツールしかねーんだろうけど。
667デフォルトの名無しさん:2007/07/07(土) 22:18:43
フックが真っ黒ならTClockすら真っ黒だし
悪用できる技術=悪じゃないでしょ

スレ違いも程々にしとけ
668デフォルトの名無しさん:2007/07/07(土) 22:23:16
犯罪幇助にしか使われなくなったら京都府警がUSER32.DLLを取り締まるから無問題。
669デフォルトの名無しさん:2007/07/07(土) 23:30:04
>>668
京都府警じゃ信用ならん
神奈川県警にしとけ
670デフォルトの名無しさん:2007/07/07(土) 23:34:47
フックは夢が広がるから困る
671デフォルトの名無しさん:2007/07/07(土) 23:36:08
いい加減にしろ
672デフォルトの名無しさん:2007/07/08(日) 00:00:38
いい加減にしろ
673デフォルトの名無しさん:2007/07/08(日) 00:06:15
どうもありがとうございました。
674デフォルトの名無しさん:2007/07/08(日) 00:25:49
フックってなんだよ素人の俺に説明しろ
675デフォルトの名無しさん:2007/07/08(日) 00:26:15
ヒント:船長
676デフォルトの名無しさん:2007/07/08(日) 00:34:23
ガッツ石松の左
677デフォルトの名無しさん:2007/07/08(日) 00:49:02
ワロスw
678デフォルトの名無しさん:2007/07/08(日) 01:23:45
上岡龍太郎
679デフォルトの名無しさん:2007/07/08(日) 02:42:57
こんな時間に人がいるとは思えないが。。

リソースファイルを使わずにアイコンをロードして使いたい場合
CreateBitmapを使えばいいんでしょうか?
それとも他にアイコン専用のAPIがあるんでしょうか?
680デフォルトの名無しさん:2007/07/08(日) 04:04:32
意味が分からない。
ファイルから読み込むならLoadImage使え。
作るならCreateIcon使え。
681デフォルトの名無しさん:2007/07/08(日) 07:29:42
LoadIcon
682デフォルトの名無しさん:2007/07/08(日) 10:36:43
WinAPIを勉強しようと思いWindowsゲームプログラミングという本を読みながら勉強
してるんですが、この本の通り打ち込んでもエラーでコンパイルできないところ
があります。
このソースなんですが何故でしょうか?すみませんが教えてください(´・ω・`)
ソフトはPlatformSDKをインストールしてVisual C++ 2005でやっています

#include <windows.h>

int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
) {
BYTE * bytes = "BYTE *";
PBYTE pByte = "PBYTE";
LPBYTE lpByte = "LPBYTE";

MessageBox(NULL , bytes , NULL , MB_OK);
MessageBox(NULL , pByte , NULL , MB_OK);
MessageBox(NULL , lpByte , NULL , MB_OK);
return 0;
}
683デフォルトの名無しさん:2007/07/08(日) 10:39:25
>>682
どう見てもスレ違いです
684デフォルトの名無しさん:2007/07/08(日) 10:42:38
ごめんスレ違いだったのか
685デフォルトの名無しさん:2007/07/08(日) 10:57:34
>>682
たぶん、コンパイラ設定だろうね。
エラーさらしてみ
686デフォルトの名無しさん:2007/07/08(日) 10:57:53
>>682
まず質問として何のエラーかを明確にしてくれないと困る。

それのソースはCか?C++か?
Cだとしたら値を代入する前に型宣言を最初に全てやってないと
コンパイル時エラーになったと記憶してるが。

BYTE * bytes = "BYTE *";
PBYTE pByte = "PBYTE";
LPBYTE lpByte = "LPBYTE";

BYTE *byte;
PBYTE pByte;
LPBYTE lpByte;

byte = "BYTE *";
pByte = "PBYTE";
lpByte = "LPBYTE";
※但し、実験してないから間違ってるかもしれん(そこまで保証する義理はないが)

環境がVC2005ならMessageBoxの第二引数の型をキャストしないと警告も出ないか?
687デフォルトの名無しさん:2007/07/08(日) 11:08:57
> Cだとしたら値を代入する前に型宣言を最初に全てやってないと 
> コンパイル時エラーになったと記憶してるが。 
ブロック冒頭の変数宣言時の初期化する/しないは自由です。

/* cでもOK */
void test()
{
  int n1;
  int n2 = 1;
  int n3;
  int n4 = n2;
    :
688688:2007/07/08(日) 11:12:17
>>687
ああ、宣言時は可能だったっけか
689デフォルトの名無しさん:2007/07/08(日) 11:13:54
>>682
マジレスすると拡張子がcじゃなくてcppだから
俺、2冊も買っちゃったし良本だよな
がんがれ
690デフォルトの名無しさん:2007/07/08(日) 11:17:35
全部見当違い。

2005のデフォルトのオプションを考えれば分かるだろ。
なんでここはこんなに馬鹿しかいないんだ?
691デフォルトの名無しさん:2007/07/08(日) 11:23:25
>>690
バカ筆頭の人が言うと、
さすがに迫力がありますね
692デフォルトの名無しさん:2007/07/08(日) 11:28:06
僕バッカー
693デフォルトの名無しさん:2007/07/08(日) 11:28:26
>>685-686
スレ違いなのにありがとうございます。
ソースは.cppのC++です。事前に宣言してみましたが無理でした
エラーは、ちゃんと文字型の宣言に入れろ。ってことかなと思ってますが本でも
CDに入ってたサンプルもこの通りだったのでやっぱり問題はコンパイラの設定でしょうか?
試しにCHAR型で宣言してやってみたらそれならうまくいきました

文字数制限にひっかかったのでtxtですみませんがエラーです
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4549.txt
694デフォルトの名無しさん:2007/07/08(日) 11:28:35
底の浅い知識すらも持っていないくせに、
確認すらしないで適当を並べる馬鹿は何とかならないのか?
695デフォルトの名無しさん:2007/07/08(日) 11:31:55
MessageBoxWが呼ばれてるのかなゃ
696デフォルトの名無しさん:2007/07/08(日) 11:32:48
コンパイルオプションに/J
697デフォルトの名無しさん:2007/07/08(日) 11:32:54
>>689
ごめんなさい更新する前に書き込んでしまって見てなかった
まさしくそれでした…
.cに変えたらちゃんとコンパイルしてくれました
これからコツコツ勉強して以降と思います。みなさんありがとうございました
698デフォルトの名無しさん:2007/07/08(日) 11:34:56
書籍のサポートは作者がやるべきだよな
699689:2007/07/08(日) 11:37:50
いえーいあたった。
お前らジュース一本だ
690はパンも買って来い
700デフォルトの名無しさん:2007/07/08(日) 12:40:48
なんでcppじゃダメなん?
上位互換じゃないの?
701デフォルトの名無しさん:2007/07/08(日) 12:48:09
型チェックが厳しくなってるから
702デフォルトの名無しさん:2007/07/08(日) 12:50:00
2重引用符で囲った文字列はリードオンリーになるので、
constが必要。

また、BYTEはunsigned char型であって、char型とは別物。

const BYTE* bytes = "BYTE *";
なら通る。
MessageBoxA(NULL, reinterpret_cast<char*>(bytes), NULL, MB_OK);
なら通る。
703デフォルトの名無しさん:2007/07/08(日) 12:52:22
ちゃうわぼけ
704デフォルトの名無しさん:2007/07/08(日) 12:53:27
>>682
エラーが出ます教えてください

という人に限って、
エラーメッセージを読んでない。
しかも、
エラーメッセージをコピペしない。


エラーメッセージによっては難解だったり、
本当の間違いを指していなかったりするが、
少なくとも>>693のtxtのエラーメッセージは、
非常に親切で適切なものだから、
エラーメッセージを読めば分かる。
705デフォルトの名無しさん:2007/07/08(日) 13:12:21
エラーメッセージって
的を得ないことが多いのと
一般的に言っても不親切なのは
なんとかなりませんかね?
706デフォルトの名無しさん:2007/07/08(日) 13:21:16
中に人が入ってるわけじゃないから
文句言うだけ無駄
707デフォルトの名無しさん:2007/07/08(日) 13:23:07
>>705
的を得ないならいいじゃないか。的を得たら射掛けられちゃうぞ。
708デフォルトの名無しさん:2007/07/08(日) 13:24:54
>>705
そりゃぁ、お前さんの書いたコードが「的を得てない」からだろう。

コンパイラが、わけわかんねーぞ、というのは、わけわかんないコードを食わせるからだ。
709デフォルトの名無しさん:2007/07/08(日) 13:43:56
VC++のエラーメッセージなんて随分質が高いと思うけどねぇ

まぁC++でテンプレート絡みのエラーメッセージがイミフなのは
そういうもんだとあきらめれ
710デフォルトの名無しさん:2007/07/08(日) 13:51:05
的をもらいました やったね!
711デフォルトの名無しさん:2007/07/08(日) 14:02:37
まぁ、エラーメッセージは、直訳みたいなので英語でおkみたいなのはあるw
712デフォルトの名無しさん:2007/07/08(日) 15:27:07
夜店の射的の話。的は人形だったり。
713デフォルトの名無しさん:2007/07/08(日) 15:33:57
タブコントロールを作ってそれをデバッグ(@err,hr)でみてたら

ERROR_NO_IMPERSONATION_TOKEN
現在、クライアントを偽装していないスレッドが・・・・

とかいうエラーが出てくるんですがこれの意味に心当たりがある方は
教えていただけないでしょうか?
714501:2007/07/08(日) 17:20:57
会社でよくいそうな堅物っぽいやつが
見当違いとか、知識が無いとか、確認してないとか
がんがってかっこつけたのに結果をだされてるのにワロタ
いいものを見せてもらった
715501:2007/07/08(日) 17:23:11
俺の質問も相手してくれよ
716デフォルトの名無しさん:2007/07/08(日) 17:40:59
>>715
>>551で終わっていないの?
717デフォルトの名無しさん:2007/07/08(日) 17:44:20
ウインドウにボタンをはっつけて、
ウインドウのWM_PAINTでBeginPaintしてウインドウを真っ黒に塗りつぶしても、
ボタンは塗りつぶされないのですが
なんでかチラチラします、これはどういう仕組みでしょうか?
718デフォルトの名無しさん:2007/07/08(日) 17:56:34
ボタンはゲイツ仕様だから
719デフォルトの名無しさん:2007/07/08(日) 18:55:17
そういう仕組みだぼけ
720デフォルトの名無しさん:2007/07/08(日) 19:14:17
実装に興味があるならwineかReactOSがオヌヌメ
後者のほうが詳細まで追えるからオヌヌメ
721デフォルトの名無しさん:2007/07/08(日) 19:31:23
その前に基本的なことを勉強
722デフォルトの名無しさん:2007/07/08(日) 19:38:04
>>717
>>717がボタンも含めてウィンドウを真っ黒に塗りつぶした後、Windowsがボタンを描いているから。
黒く塗ってあとから書き直したら、そらチラチラするわ。
723デフォルトの名無しさん:2007/07/08(日) 19:50:37
ボタンを塗りつぶすとWINDOWS法違反によって逮捕されますから
辞めた方がいいですよ
724デフォルトの名無しさん:2007/07/08(日) 19:50:51
>>717
そりゃぁ背景を黒く塗っても、手前にあるボタンは塗られないよ。
ボタンまで黒く塗りたければ、ボタンをオーナードローで黒く濡るべし。
725デフォルトの名無しさん:2007/07/08(日) 20:35:06
つーか、ボタンがチラチラしない方法が知りたいんじゃないの?
726デフォルトの名無しさん:2007/07/08(日) 21:07:04
ボタンの所だけクリップ領域から外せばいい
727デフォルトの名無しさん:2007/07/08(日) 21:20:38
WS_CLIPCHILDREN
728デフォルトの名無しさん:2007/07/08(日) 21:55:07
Enterで通知がくるIDOKを別の定義IDに切り替えたいんですが
何か方法はありますか?

因みにダイアログじゃないです
729デフォルトの名無しさん:2007/07/08(日) 21:58:07
IDOKが来たら切り替えたい定義IDをSendする
730728:2007/07/08(日) 23:06:07
>>729
!?
盲点だったそんな簡単なことも気づかなかったのか俺orz
教えてくれてありがとうございます。
731729:2007/07/09(月) 00:09:55 BE:99304122-2BP(0)
おいw

ジョークだよな?
732デフォルトの名無しさん:2007/07/09(月) 12:46:20
いいえ本気です
733デフォルトの名無しさん:2007/07/09(月) 12:49:23
「本気」と書いて「マジ」と読む
734デフォルトの名無しさん:2007/07/09(月) 14:22:56
up
735デフォルトの名無しさん:2007/07/09(月) 18:34:50
ヘルプみたさに
プラットフォームSDK入れてみたんだけど
hxsファイルってどうやってみればいいんでしょうか?
736デフォルトの名無しさん:2007/07/09(月) 18:47:15
ドキュメントエクスプローラー、かな?
ついてなかった?
737デフォルトの名無しさん:2007/07/09(月) 19:19:09
さがしてみます。ありがとう
738デフォルトの名無しさん:2007/07/09(月) 20:44:47
さがしたけどなかった。次は一時間後にさがしに行くです。
739デフォルトの名無しさん:2007/07/09(月) 20:47:21
普通に入れたら、スタートメニューに登録されるよ。

740デフォルトの名無しさん:2007/07/09(月) 21:25:11
すみませんさっき気づきました
ぐぐったりVCいれたりといろいろってみましたが
まさかこれ系がスタートメニューに登録されるとはorz
741デフォルトの名無しさん:2007/07/11(水) 03:12:58
USBゲームパッドを使いたい場合はwin32apiでは対応できませんか?
やっぱダイレクト系しかないんでしょうか
742デフォルトの名無しさん:2007/07/11(水) 04:57:38
joyGetPos
743デフォルトの名無しさん:2007/07/11(水) 05:02:51
いいことおもいついた、お前俺のケツのなかにションベンしろ!
744デフォルトの名無しさん:2007/07/11(水) 05:28:12
ウホスレは間に合ってます
745デフォルトの名無しさん:2007/07/11(水) 09:24:01
>>742
ありがとうございます
これマルチメディアの欄にあったりして
なかなか見つからない
746デフォルトの名無しさん:2007/07/11(水) 10:37:23
Windows3.0 MMEを思い出した
747デフォルトの名無しさん:2007/07/11(水) 11:49:46
>>745
マルチメディアAPIのジョイスティックAPIはゲームポート接続想定した仕様だからおすすめできない。
(認識軸数、ボタン数に制限)
748デフォルトの名無しさん:2007/07/11(水) 20:49:32
>>747
アナログ6軸、ハットスイッチ1つ、32ボタン対応してるから十分だと思うが。
749デフォルトの名無しさん:2007/07/11(水) 22:05:10
突然だけどLocalFreeって使わない方がいいのか?

LocalFree使うぐらいならHeapAllocとか使った方がいいとか言う
記事があったもんで。それとHeapAllocとVirtualAllocの使いどころは
大体確保するメモリがどのくらいを目安にすればいいのかね。

そういうレス見たこと無いから参考までにお前さん方の意見聞いてみたい。

因みに俺はLocalAllocが簡単に使えるからそっち使ってる。
後mallocに関してはAPIじゃない(最終的にHeapAlloc呼んでるみたいだが)
から省いてくれい。
750デフォルトの名無しさん:2007/07/11(水) 22:07:21
>LocalFree使うぐらいならHeapAllocとか使った方がいいとか言う記事
なんだその腐った記事。
751デフォルトの名無しさん:2007/07/11(水) 22:18:29
>LocalFree使うぐらいならHeapAllocとか使った方がいい
わろた

ところで VirtualAlloc HeapAlloc でぐぐったか
ttp://www.geocities.jp/i96815/windows/win11.html
752デフォルトの名無しさん:2007/07/11(水) 22:24:06
>>749
俺はAPI関数を直接呼ぶとしたら、確かにHeapAlloc/VirtualAlloc系というつもりでいる。
「Local/Global関数ではなく、Heap関数を使え」とは、MSDNライブラリにも書いてある。
http://msdn2.microsoft.com/en-us/library/aa366723.aspx
http://msdn.microsoft.com/library/ja/jpmemory/html/_win32_localalloc.asp
特に移動可能メモリなんて今では利点も必要性もない。

//でも実際はクリップボードなんかでGlobal関数を多用する現実。
//Heap関数を直接使わずmallocやnew、std::vectorを使う毎日。

でも、どうせどうせメモリ確保なんて時間のかかることだし、
Local/GlobalからHeapに変えて速度向上するようなアプリケーションがあったら、
メモリ確保の戦略自体を見直すべきで、
わざわざHeapに変える必要なんてないなんて言う奴もどこかにいた。
でもこれから書くコードで必要がなければあえてGlobal/Local関数を選ぶ理由もないはず。

ところで、VirutalAllocを使う目安はMSDNライブラリによれば1、2MBから。
http://msdn2.microsoft.com/en-us/library/aa366597.aspx
753デフォルトの名無しさん:2007/07/11(水) 23:24:54
なんとなく気になってCRTのソース読んでみたのだが、
VC2005のリリース版CRTのmallocは、HeapAllocに直結してるのな。
CRT内部で改めて分割して使っていると思い込んでたよ。
754デフォルトの名無しさん:2007/07/12(木) 00:11:18
crt no source ha iduko?
755デフォルトの名無しさん:2007/07/12(木) 00:16:52
>>754
Visual C++ならVisual C++のフォルダ(bin, include, libなどがあるフォルダ)
にあるcrtというフォルダ。ただし、Expressには付属していない。
756デフォルトの名無しさん:2007/07/12(木) 01:06:41
GlobalAllocとLocalAllocの違いがわからない
757デフォルトの名無しさん:2007/07/12(木) 01:15:16
758デフォルトの名無しさん:2007/07/12(木) 01:15:35
Win16では、nearポインタ・farポインタの違いがあったが、
Win32では違いなし。
もしかしたら9xではだめかもしれないが、
NTでは、GlobalAllocしたものをLocalFreeすることすら可能なはず。
759デフォルトの名無しさん:2007/07/12(木) 01:35:59
Windows 3.1 SDK のヘルプからコピペしてみた。Win32では殆ど無意味だけど。
Global memory is all memory in the system that has not been allocated by an application or reserved by the system.
Local memory is the memory in the data segment of a Windows application.
760デフォルトの名無しさん:2007/07/12(木) 01:51:49
LocalAllocは内部でHeapAllocと同じ事してるんだろ確か
761デフォルトの名無しさん:2007/07/12(木) 02:35:41
ぶっちゃけ、何かの理由がない限り、
HeapCreate()の引数dwMaximumSizeには0を指定するわけで、
ということは、HeapAlloc()で巨大なメモリを確保しようとしたら、
自動的にVirtualAllocに飛ばされるわけで、
意識してVirtualAllocを呼ばなくてもいいんじゃないかな。

それどころか、C++ なら 何か理由がない限り、new 一択だろう。
もしヒープの速度がネックになるようなら、
ヒープ上ではなくスタック上に取れるようなアルゴリズムを検討すべき。

自分は遅いプログラムのチューニングをしていて、
ヒープの速度がネックになっているのを見たことがないよ。
762デフォルトの名無しさん:2007/07/12(木) 08:28:40
>>755
thank u. express dakara nakata
763デフォルトの名無しさん:2007/07/12(木) 14:49:19
Local/GlobalAllocって、戻り値が専用型なもんで、「解放する方法が明確に解る」
って理由で外部にAPI公開するDLLなんかでは採用してる例がある。

確かにポインタだけ返して「解放はVirtualFreeで」とかいう仕様だと勘違いで
他の解放関数に渡してしまうケースが無いともいえない。
764デフォルトの名無しさん:2007/07/12(木) 14:59:06
>>761
>自分は遅いプログラムのチューニングをしていて、
>ヒープの速度がネックになっているのを見たことがないよ。

漏れもそんなのは見たことないが、malloc/free 系と memcpy 系の
関数を差し替えるのは、ほとんど手間がかからずある程度の効果が
期待できるのでまず手始めにやっちゃうな。
765デフォルトの名無しさん:2007/07/12(木) 15:00:00
そんな怪しい挙動するくらいなら、解放するAPI用意したほうがいいと思うんだけどなぁ・・・
766デフォルトの名無しさん:2007/07/12(木) 15:05:04
IMalloc/CoTaskMemAllocはどうよ
767デフォルトの名無しさん:2007/07/12(木) 15:09:25
COM のときは使うな CoTaskMemAlloc 。
768デフォルトの名無しさん:2007/07/12(木) 15:12:36
>>761
それはプロファイラに捕捉されてないだけだと思うぞ。
ヒープは頻繁に呼ばれるので、僅かなコストが積もって大きくなる。
InitializeCriticalSectionAndSpinCount()のスピンカウントの説明を読めば片鱗が知れよう。

とはいえ、下手なアルゴリズムやコーディングによる遅さに比べれば、微々たるものだが。
769デフォルトの名無しさん:2007/07/12(木) 15:16:19
カーソルの影って、APIでオンオフはできるんですけど、そもそもシステムカーソルにしか
適用されませんよね。

とあるアプリで独自のカーソルにも影が付くのがあったんで、リソースを見てみましたけど
元カーソルは影付きではありませんでした。
影を付けるAPIみたいなのはあるんでしょうか?
770デフォルトの名無しさん:2007/07/12(木) 15:16:46
>>768
google mallocの話とか、読み物としてはおもしろいからなぁ。
ttp://slashdot.jp/comments.pl?sid=364575&cid=1172165

まあ初心者の手の届かないところに保管しておくべき話だけどね。
771デフォルトの名無しさん:2007/07/12(木) 16:27:02
>>770
gccやglibcにパフォーマンスを要求すること自体が間違ってる。
ポータブルでフリーであることが目的で、ちゃんと動けば十分という代物なんだから。

ついでに言うと、
unixの世界ではプロセスをポコポコforkする文化が長かったし、
フリーのOSはSMP性能が悪いのが普通だった。
パフォーマンスよりも、動くこと、簡単なことが優先されてた。

バグの原因になるのでmallocしたメモリはfreeするな
なんて真顔で言う連中が跋扈していた世界だから。
772デフォルトの名無しさん:2007/07/12(木) 16:29:36
>>771
過去がどうであれ、今それを真顔で言われてもわりと困るんだが。
773デフォルトの名無しさん:2007/07/12(木) 18:00:59
要は、Linuxの世界は後発であるが故に遅れている、ということ。
もちろんLinux上で走るからといって、glibcを使う必要はないわけで、
フリーだろうがプロプライエタリだろうが、別のライブラリを使えばいいだけのこと。

ただ、何でもかんでも別のライブラリを使うのが良いとは限らない。
Windowsのバージョンが上がると、
MSVCRTやOSのヒープマネージャが、
より現状のPC環境に向いたものに変るので。
774デフォルトの名無しさん:2007/07/12(木) 18:14:22
Unixについて言ってるのかLinuxについて言ってるのかはっきりしろと。
775デフォルトの名無しさん:2007/07/12(木) 18:18:23
ていうかスレ違い
776デフォルトの名無しさん:2007/07/12(木) 18:22:26
IDEのバスをリセットする(RESET#端子をアサートする)方法を教えてください。

IDEのデバイスに対してDEVICE RESETコマンドを送ることはできたのですが、
いざデバイスがハングアップした状態では、コマンドも受けとってもらえないわけで。
777デフォルトの名無しさん:2007/07/12(木) 20:48:02
Documents and Settings\ユーザー名\NTUSER.DATとかの
OS可動中に開けないファイルを読み込み専用で良いので
開く方法を教えてください。
破壊がないか定期的にチェックをしたいので。
778デフォルトの名無しさん:2007/07/12(木) 20:54:30
ACPIが有効なPC上で、CPU温度を定期的に取得する方法を教えてください。
以下のvbsを実行すれば温度を取得できるのですが、
一定間隔で実行しても温度に変化がありません。
(OS起動時に一度だけ取得してる様に見える)
なんとか更新させるか、別の方法がないか探してます。


cputemp.vbs------------------------------
Set fs = CreateObject("Scripting.FileSystemObject")
Set outFile = fs.CreateTextFile("CPUtemp.txt", True)
Set wbemServices = GetObject("winmgmts:" & "\\localhost\root\wmi")
Set wbemObjectSet = wbemServices.InstancesOf("MSAcpi_ThermalZoneTemperature")
For each Item in wbemObjectSet
outFile.WriteLine "CPU Temperature: " & (Item.CurrentTemperature - 2732) / 10 & "°C"
Next
outFile.Close
cputemp.vbs------------------------------
779デフォルトの名無しさん:2007/07/12(木) 21:15:07
みんなやたら高度だな
780デフォルトの名無しさん:2007/07/12(木) 21:43:08
PatchGuardてIATへの書き込みもガードするんですか?

カーネル領域でないのにガードされるんですか?(´;ω;`)

教えてエロい人(´・ω・`)
781デフォルトの名無しさん:2007/07/12(木) 21:43:20
>>777
2003 Server以降なら、シャドー・コピーという手がある。

XPの場合はAPIとして表には出ていないがntbackupが使っている。
ダサい方法だが、ntbackupを子プロセスとしてキックして、
目的のファイルにバックアップ取って、
すぐさまntbackupで別の場所にリストアするという手がある。

ちなみに、
CreateFileでFILE_FLAG_BACKUP_SEMANTICSつけてダメだった?
782デフォルトの名無しさん:2007/07/12(木) 22:19:02
>>781
色々ありがとうございます。
SE_BACKUP_NAME、SE_RESTORE_NAMEの特権を取得した後、

{ HANDLE h;
h = CreateFile("C:\\Documents and Settings\\user\\NTUSER.DAT"
,GENERIC_READ
,FILE_SHARE_READ
,0
,OPEN_EXISTING
,FILE_FLAG_BACKUP_SEMANTICS // FILE_ATTRIBUTE_NORMAL|
,0
);
if (h != INVALID_HANDLE_VALUE) {
printf("pass\n");
CloseHandle(h);
} else {
printf("ng\n");
}
}
の様にしましたがダメでした。
ntbackupの方法も検討してみます。
783デフォルトの名無しさん:2007/07/12(木) 22:33:25
ちなみにGetLastErrorのコードは
CreateFile 20h:プロセスはファイルにアクセスできません。別のプロセスが使用
中です。
でした。
784デフォルトの名無しさん:2007/07/12(木) 22:35:30
FILE_SHARE_WRITEとFILE_SHARE_DELETEも付けたほうがいいよ。
785デフォルトの名無しさん:2007/07/12(木) 22:37:19
FILE_SHARE_WIFEとFILE_SHARE_DAUGHTERもつけたほうがいいよ
786784:2007/07/12(木) 22:40:26
MSDNライブラリのCreateFileのFILE_SHARE何とかのところには、
"Subsequent open operations"と書かれているけど、
それは自分が一番最初にCreateFileする時の話で誤解がある。

実際には、同時にオープンする他者全員に対しての許可なので、
FILE_SHARE_WRITEを付けない = 許可しない場合には、
すでにWRITE有りでオープンしている人がいると、エラーになる。
787デフォルトの名無しさん:2007/07/12(木) 22:45:51
>>781
ntbackupでバックアップ/別フォルダへのリストアに成功しました。
コマンドラインオプションから指示を出せる様なので、
この方法でできそうです。
ありがとうございました。
788デフォルトの名無しさん:2007/07/12(木) 22:50:39
>>784
,FILE_SHARE_DELETE|FILE_SHARE_WRITE|FILE_SHARE_READ
としましたが同じエラーでした。
789デフォルトの名無しさん:2007/07/12(木) 23:16:10
>>777
そんなこと聞く人が破壊がないかチェックなんてできるの?
790デフォルトの名無しさん:2007/07/12(木) 23:20:40
楽勝だよ
791778:2007/07/12(木) 23:26:06
>>778お願いします。
できないと死にそうです。
792デフォルトの名無しさん:2007/07/12(木) 23:28:24
出来ないと死にそうなくらい、ヤバい温度になるのか?
793デフォルトの名無しさん:2007/07/12(木) 23:37:07
>>789
たぶんレジストリの内容をまとめて盗むスパイウェアでも作ってるんだろう。

>>791
自分だったらACPIではなく、SMBus(I2C)で温度センサーの値を読むが。
794デフォルトの名無しさん:2007/07/12(木) 23:46:24
>>792
部屋が灼熱地獄なんです
熱中症になる前にお願いします
795デフォルトの名無しさん:2007/07/12(木) 23:47:57
>>761
標準の new は、小さなサイズの要求を大量に行うと、
メモリを無駄に使用してしまう。

数年前でも2GBのメモリ空間はかなり窮屈で
無駄にされるとかなり痛いので、
自前のアロケータを書いたことがある。
796デフォルトの名無しさん:2007/07/12(木) 23:51:50
>>793
何故ですか?
センサー毎にハードコーティング要るんじゃかったですか?
そんな馬鹿馬鹿しい事やってられません
797793:2007/07/12(木) 23:56:49
>>796
SpeedFanやEverestなどのメジャーなツールが取っている手段だから。
できるかどうかわからない方法を調べるよりは、
できることがわかっている方法を調べるほうがいいでしょ。
798デフォルトの名無しさん:2007/07/12(木) 23:57:58
>>793
>SMBus(I2C)で温度センサーの値を読むが。
どのようにするのですか?
なんか、デバドラ作らないと出来ないような気がしますが、
簡単にAPIで値読めるのですか?
799デフォルトの名無しさん:2007/07/13(金) 00:00:56
>>795
数年前なら、64ビットが選択肢に入ってたろうに。

自分ならまず設計を見直すよ。
大量にnewするオブジェクトたちが、本当に個別に寿命管理が必要なのか、と。
800デフォルトの名無しさん:2007/07/13(金) 00:11:43
Boost.Pool最強説
801795:2007/07/13(金) 00:20:51
>>799
漏れは、マシンもOSも調達されてから投入されたので、
64bit化しようとは、流石にいえない。
そもそも、実装されるメモリの量も余裕は無かったし。

個別の寿命管理は確実に必要だったと今振り返っても思うよ。
802デフォルトの名無しさん:2007/07/13(金) 00:28:50
つーか温度計る手段がいまだに規格化されてないってのがアホだよな
WMIで得られる筈が>>778みたいな半端な物で形骸化してるみたいだし
今ではデスクトップPCでさえサスペンド/レジュームする時代なんだぜ
803デフォルトの名無しさん:2007/07/13(金) 01:06:26
804デフォルトの名無しさん:2007/07/13(金) 01:07:30
805デフォルトの名無しさん:2007/07/13(金) 02:33:43
>>803
(゚д゚)ハァ?
806デフォルトの名無しさん:2007/07/13(金) 03:01:36
>>787
もしVistaで動かす予定があるならntbackupは廃止されたから
まじめにボリュームシャドウコピーを使う方法も併用する必要がある
807デフォルトの名無しさん:2007/07/13(金) 07:17:28
>>802
計測ってより計測法でも利権が絡むからね。
808デフォルトの名無しさん:2007/07/13(金) 08:05:05
>>801
それは、
何かよほどのこと
って奴だったんだよ、たぶん。

ラージアドレス(/3GB)を使ってもアドレス空間が足りないが、
かといってPAEなんて使いたくないという場合には、
いっそのことプロセスを分けてしまうという手もある。
プロセスを跨ぐオーバーヘッドが巨大だけどね。
809デフォルトの名無しさん:2007/07/13(金) 08:09:20
>>806
強引な荒技もあるよ。

デフラグのAPIを使ってファイルのディスク上の所在を調べて、そこを直に読んでしまうという手もある。
もちろん、そんな行儀の悪いことは、よほどの理由がないとダメだが。
810デフォルトの名無しさん:2007/07/13(金) 17:13:50
CreateProcessでCREATE_SUSPENDEDを利用してNotepad.exeを起動して、
とまってるときのMessageBoxAとMessageBoxWのアドレスと、

その後、ResumeThreadした後のMessageBoxAとMessageBoxWのアドレスが違うような気がするんですけど、
これって気のせいですか?
811デフォルトの名無しさん:2007/07/13(金) 17:17:33
DefineDosDevice()で、特定のフォルダを新規ドライブとしてマウントできるけど、
そのとき、元のフォルダのほうをACLなりEFSなりで自プロセス以外から見えなくすることは可能?


812デフォルトの名無しさん:2007/07/13(金) 17:53:48
>>810
CREATE_SUSPENDEDで作成されたプロセスは初期化が完了している保証は無い
813デフォルトの名無しさん:2007/07/13(金) 18:37:58
むしろ初期化終わってないのが普通じゃない?
この段階だとGetModuleFileNameExのようなAPIが失敗するもんで、
どうやってこの初期化だけを完了させるのか知りたかったりする
(forでResume/sleep/Suspendを細切れにしてまわしてた)
814デフォルトの名無しさん:2007/07/13(金) 18:45:57
PEヘッダ解析して、PE.EntryPointのアドレスを書き換えるか、
ブレークポイントをしかけておくってのはどうだい?
815デフォルトの名無しさん:2007/07/13(金) 19:50:28
CREATE_SUSPENDEDで止まっているときに色々やるのはオススメしない。

Windowsのサービスパックで挙動が変るのならまだしも、
WindowsUpdateで配られるモジュールのアップデートで挙動が変ってしまうから。

安全なのはプロセスのエントリポイントを乗っとること。
816デフォルトの名無しさん:2007/07/14(土) 00:47:29
なるほど。
こういうことやってるから、環境依存・OS依存で動かなくなるんだな。
817デフォルトの名無しさん:2007/07/14(土) 01:03:12
そういや、WindowsUpdateしたら動かなくなった、APIフックしてるプログラムがあったな。
818デフォルトの名無しさん:2007/07/14(土) 01:10:47
再起動したらなおるんじゃないかな
819デフォルトの名無しさん:2007/07/14(土) 01:32:26
短径の透明の度合いをいじりたいです
BitBltで透明度50%なら出来るんですが、
透明の度合いをいじる方法が思いつきません・・・何かありますでしょうか?
820デフォルトの名無しさん:2007/07/14(土) 03:15:05
DIB使うのが手っ取り早い気がする
コピー先とコピー元のビットデータを取得してブレンドしてから元々のコピー先に転送

それが嫌なら255*アルファ値%でグレースケールに塗ったデバイスコンテキストを用意して
グレーのDCとコピー元をAndコピー、
グレーのDCを反転してコピー先にAndコピー、
最後にコピー先とコピー元をOrコピー
821デフォルトの名無しさん:2007/07/14(土) 03:33:13
>>814
サンクス! 
ブレーク作るって発想はなかった(ポピュラーな方法らしいね)
これだと向こうのプロセスから自発的に発信してくれるんで、かなりスマートに実装できるんだな
822デフォルトの名無しさん:2007/07/14(土) 04:58:52
>>819
×短径(たんけい)
○矩形(くけい)
823デフォルトの名無しさん:2007/07/14(土) 07:09:35
コナンキターwすごい推理力だ
824デフォルトの名無しさん:2007/07/14(土) 10:05:11
そういうことだったのか!
なぞが解けてすっきりした。
825デフォルトの名無しさん:2007/07/14(土) 10:16:44
>>819
LayeredWindowEX
826デフォルトの名無しさん:2007/07/14(土) 10:26:42
短小包茎なんですがどうしたら直りますか?
827デフォルトの名無しさん:2007/07/14(土) 10:28:57
直りません
828デフォルトの名無しさん:2007/07/14(土) 10:38:08
>>815
はじめてしった。
プログラムの先頭でGetProcAddressとかして関数アドレスとってるプログラムとかの
APIフックはプロセス作成した直後ではできないのか。勉強になった。
829デフォルトの名無しさん:2007/07/14(土) 12:34:11
名探偵コナンだけどなにか質問ある?
830デフォルトの名無しさん:2007/07/14(土) 12:38:37
>>828
GetProcAddressフックしろ。
831デフォルトの名無しさん:2007/07/14(土) 12:58:09
すれ違いな気がするが、どこに投稿して良いやらわからないので。
MPEGファイルのフォーマット、特にオーディオがAC3かLayer1〜3を
知るためのAPIってありますかね?
832デフォルトの名無しさん:2007/07/14(土) 13:54:50
>>829
どうやって犯人いや
短径トリックを見破ったのですか?
833デフォルトの名無しさん:2007/07/14(土) 14:08:01
>>830
CreateProcess直後のSupend中だとできないんでないの?
834デフォルトの名無しさん:2007/07/14(土) 14:33:23
>>831
DirectShow
835デフォルトの名無しさん:2007/07/14(土) 17:12:26
質問です。
AVIのビットレートやピクセルのビット深度を取得するには
AVIFileInfoを使用してAVIFILEINFOを取得すればいいのでしょうか?
836835:2007/07/14(土) 17:14:46
すいません、あと、ARGBなのかRGBなのかも知りたいのですが、
どのAPIを使えばいいでしょうか?
837デフォルトの名無しさん:2007/07/14(土) 19:20:38
AVIって実態はただのコンテナだから微妙じゃね
コーデック無いと再生できないって事は一つの方法では内部データが読めないって事だろ

データヘッダは読めてもストリーム内の情報は読めないと思う
838デフォルトの名無しさん:2007/07/14(土) 19:23:54
>>835
DirectShow

それが面倒だというのなら、真空波動研のDLLでも使いなされ。
839デフォルトの名無しさん:2007/07/14(土) 19:49:58
>>837
一応再生できる物なのですが…
コンテナの中には格納されていないんですかね?

>>838
DirectShowですか…
今までマネージドコードしかさわったことがないので
いきなりそれは無理かも…

まだこういったことをするには経験が浅すぎるみたいなので
もう少し勉強してから出直してきます。
ありがとうございました。
840デフォルトの名無しさん:2007/07/14(土) 23:30:35
画面のプロパティ−デザイン
の中にあるタイトルバーやメニューやスクロールバーのサイズなどはどこに保存されているのでしょうか?
プログラムで参照したくて、ググったりしけど一向に出てくる気配がないので質問しました。
レジストリ内のどこかだと思うのですが・・・。
かなり基本的な質問で申し訳ないですが教えてやってくださいませ。
841デフォルトの名無しさん:2007/07/14(土) 23:33:06
とあるプログラムでA.DLLとB.DLLを使っていてB.DLLからA.DLLを使っています
そのプログラムの終了時にA.DLL、B.DLLの順に開放されるようで
B.DLLのデタッチ時にA.DLLのリソースを使おうとしたときに
A.DLLはすでに開放されているのでアクセスエラーになります
動的にロードして動的に開放順をきめれば問題が解決できるのですが
それができない場合でプロセス終了時のDLLの開放順を決めるAPIとか方法はありますか
842デフォルトの名無しさん:2007/07/14(土) 23:33:36
HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics
いまどきじゃVisualStyleファイルの中の場合もあるけど
843デフォルトの名無しさん:2007/07/14(土) 23:53:19
>>841
そんな都合の良いAPIがあるかどうかは知らんが、
Advanced Windows改訂第4版の「22.9 APIフック: 例」にそれと全く同じ状況の話が載っている。
著者Jeffrey RichterはAPIフックを使ってExitProcessをフックして解決したそうな。
844デフォルトの名無しさん:2007/07/14(土) 23:53:58
>>841
B が A を import してるんなら開放されることは無いんじゃない?
dll の書き方がまずいよ。
845デフォルトの名無しさん:2007/07/15(日) 00:05:33
>>840

SystemParametersInfo
GetSystemMetrics
GetSysColor
846デフォルトの名無しさん:2007/07/15(日) 00:30:16
>>843
呼んでみました。似たような状況です
解決法として自分でLoadLibraryしてFreeLibraryする順を制御するか
GetModuleHandleして既にいなくなっているかどうかを確認する方法をつかっていますが
自分で都合よく制御できる方法はないかなぁと

>>844
BはAをLoadLibraryしてGetProcAddressで関数ポインタを保存して呼んでいます
しかしながらプロセス終了時にはAから先に開放されてしまっています
何度やっても一緒でした=なにか法則がある=その法則を変更できるかなぁとおもっています
開放されているかどうかはAのデタッチ時にデバッグメッセージを出して確認しています
847デフォルトの名無しさん:2007/07/15(日) 00:32:54
>> 842
>> 845

蟻がd
848デフォルトの名無しさん:2007/07/15(日) 00:36:56
>>844
LoadLibraryした奴はFreeLibraryしようぜ
849848:2007/07/15(日) 00:38:05
アンカーミス

× >>844
○ >>848
850デフォルトの名無しさん:2007/07/15(日) 00:44:26
参照カウンタの原理から言って、
後からロードされたのが先に開放されるのは道理なんじゃないか?
851デフォルトの名無しさん:2007/07/15(日) 02:06:24
>>841
B.DLLからA.DLLをLoadLibraryするってのは駄目なの?
静的リンクされていても、LoadLibraryで参照カウンタを1つ上げておくってこと。
852デフォルトの名無しさん:2007/07/15(日) 02:37:10
〜Library系はAttach/Detach中に呼んじゃいけないんだよ
853デフォルトの名無しさん:2007/07/15(日) 03:06:08
EXE→Bはインポートテーブルにのっとったリンクで
B→AはBがロードされた時に明示的にLoadLibraryでリンクされてるって事?
だったらEXEがAを解放するってのはありえない処理だと思うんだけど…

>>841の問題を解決したいなら
EXEの方でBを明示的にロードしてEXEの終了前にFreeすりゃいいとも思う。
ラッパプログラミングでEXEの挙動を制御できないってなら話は変わってくるけど
854デフォルトの名無しさん:2007/07/15(日) 03:15:41
>>844
そもそもDLLの依存関係はツリーじゃなくて循環が起きうる有向グラフなので
ノード操作時には非常に強い制約をもうけないとどうしようもない。
OSもがんばりはするけど、理想的な解放順序は常には期待できないよ。

んで結果としてDllMainではkernel32.dll以外のDLLの存在を期待するなということになっている。
一方で、DllMainがアンロード時に呼ばれるのを利用して
自DLL内で作ったリソースの解放処理を行う実装も結構多いためややこしい。

この2つが組み合わさると今回みたいな問題が起きる。
例えばDLL内にC++のグローバル変数を置くとき、
そのデストラクタが呼び出す処理はkernel32.dll以外のDLLに依存してはならない。
(厳密にはコンパイラとランタイムライブラリに依存する話だろうけど)

んで、今回ルールを破っているのは、
(おそらく終了処理で)別のDLLを呼んでしまっているB.DLLなので文句は言えないんじゃなかろうか。
一応有名なルールのはずだし。
たとえ結果が「OSとしてありえない処理」にみえたとしても。
855819:2007/07/15(日) 07:23:50
>>820
かなり自分自身まだ理解出来てないけどそれでやってみます!

>>825
検索にヒットしませんでしたorz
856デフォルトの名無しさん:2007/07/15(日) 07:32:22
>>852
それって、循環参照で無限ループになる可能性があるから
呼ぶべきではないって話で、呼べないわけじゃないんじゃない?
ProxyDLLはAttachProcessでLoadLibraryするのが普通だと思うけど。
857デフォルトの名無しさん:2007/07/15(日) 08:28:28
>>852
呼べることは呼べるし、実際それやってくれる困ったAPIフックのソースコードも見たことあるけど
かといって普通と言っていいほど安全じゃないと思うけどな。

Advanced WindowsでもDllMain中でのLoadLibraryは循環が起きることがあるから避けろって書いた上で
実際API HookのサンプルでもAttachProcess中のLoadLibraryはやってない。

というか別にAttachProcess中で別のDLLロードしなくても、遅延ロード使えばいいんでは?
あと循環で困るのは無限ループというよりはローダーロックがやばいんじゃないかと思う。
本来DllMainは同時に1つしか走らないはずなので。
858デフォルトの名無しさん:2007/07/15(日) 10:03:18
ローダーロックは問題ないかと。
同一スレッドならブロックしない仕様だから。
859デフォルトの名無しさん:2007/07/15(日) 15:32:53
APIでUnicodeな入力をできるWindowを作るにはどうしたらいいでしょうか。
860デフォルトの名無しさん:2007/07/15(日) 15:38:09
-DUNICODE
861デフォルトの名無しさん:2007/07/15(日) 21:43:22
>>860
UNICODEオプションはMFCのおまじないだと思うんですが、
Win32APIでウインドウの作り方は、どうなりますか。
862デフォルトの名無しさん:2007/07/15(日) 21:43:57
-D_UNICODE_
863デフォルトの名無しさん:2007/07/15(日) 21:53:19
それは、MFCのおまじないなんぞではない。
れっきとしたWin32API用のもの。
だからMFCでも引きづられて使用可能というだけ。

ちなみに、860と862の両方が要るぞ。
864デフォルトの名無しさん:2007/07/15(日) 21:56:43
げ、862は-D_UNICODEかと思ったら後ろの一文字が余計だ。
-D_UNICODEに読み替えてやれ。
865デフォルトの名無しさん:2007/07/15(日) 21:57:53
>>862
-D_UNICODE じゃないか?
866デフォルトの名無しさん:2007/07/15(日) 22:24:10
Win32API → UNICODE
CランタイムとかMFC → _UNICODE

なんで分かれてるんだよぉ。
867デフォルトの名無しさん:2007/07/15(日) 22:27:38
__UNICODEとかは?
868デフォルトの名無しさん:2007/07/15(日) 23:15:16
俺は、UNICODEと_UNICODEを両方定義するが?
869デフォルトの名無しさん:2007/07/15(日) 23:20:24
ウニコード
870デフォルトの名無しさん:2007/07/15(日) 23:23:06
grep初感だけど、
tchar.h絡みは_UNICODEで
その他はUNICODEみたいだなー
871デフォルトの名無しさん:2007/07/15(日) 23:26:28
>>869

   ,ll/   /lll /lll |  |  |  | | | | | | | | '''''l||l l||l l||l/  ./ /
   .'リ|  | /lll /lll |  |  | | | | | |`‐|┼!┼|‐| |  |  / / / ̄`/
   .:l|\| |lll /lll |   | | | | | | | || |_|// |  | // /  /
  .:l||/ | |lll |lll| | |  | | | ,| | | |. | ,イ::::::ヾ'| |  | / /  /
  l|/  | |lll |llll | |  |  |/| | | ′ 弋:::ン//  |//  /.,,
  `ヽ,、., \|lll |llll || |  |/ |_ _| |        \ /,,,,,_. | /l
      `゙| `゚'゙/llll゙|/| '| /:::::ヽ      """ / /__ /\|,,//
      ゚!、 /llll゙,ン  \゙x 弋:::ン  `  _     |∠'' ((,,(..,,,. '''''
       \|llレ'/== ゙'\       丶 )   | _ ∨''     _ _____,,、
        /  (__ ,,,,/ ゙'フ"       ,/  ヤr―−''''''""""¨        |_
          (⌒ 、)/./ ,, ̄/``:゙゚'ヶv ,, -‐'''ソ   l l              ,-‐-`.、
         ̄)) \ ''''',' ,/ /-== - 〜l´    ,.'-‐-、  ×ウニコード  ,=ニヾ||l l||l |l:
          ̄     ̄/ ヽ、,′   | `、  〈_,.rニ=、           ,ニ=d λ ̄``|||
              /、      |  .|  \/( r_rk=ニ、○ユニコード  >‐-.、_ r  .:ll l||
             /:: ::\ \/  |  | /|||l λ _,.-‐く          "''‐-、._).!||i'//
             \:: ::\  、  |   | ̄ ̄ K_,.-‐''"            | /|lll/ /
             /            | `、  |__,,,......--―─=''''''''フ''''''''.::l||/ /
             `、   \     \ |  .`、       ` .||l:     . l||/  /



872デフォルトの名無しさん:2007/07/15(日) 23:30:37
誰だこいつ
873デフォルトの名無しさん:2007/07/15(日) 23:30:43
雲丹cord
874デフォルトの名無しさん:2007/07/16(月) 00:20:06
WinMain内のメッセージループで

int msg[8];
while(GetMessage((MSG *)msg,hWnd,0,0)!= -1){
if(msg[1] == 15){
...

と処理をしているコードを発見しました。
この場合の msg[1]は何を指してるんでしょうか??
どなたかご存知の方、教えてください・・・。
875デフォルトの名無しさん:2007/07/16(月) 00:26:00
16/32bit版では、MSG msgとしたときの、msg.messageと同じ。
876デフォルトの名無しさん:2007/07/16(月) 00:39:08
7行プログラミングとか3行プログラミングとか
構造体の定義をうだうだ書いてられないときにそうなる
877デフォルトの名無しさん:2007/07/16(月) 00:55:15
ネイティブなUnicodeのウィンドウなら、
RegisterClassW/RegisterClassExWで登録したクラスを元にウィンドウを作成、
というのが答えなんだけどなあ。

9x系含めてUnicodeな入力って話なら以下の所が詳しそう。
ttp://www.honet.ne.jp/~tri/ の「プログラムの小ネタ」
とりあえずRichEdit2.0以降を使っとけってことか?
878874:2007/07/16(月) 00:55:27
>>875
>>876
なるほど〜っ!
素早いレスありがとうございました^^;)
879デフォルトの名無しさん:2007/07/16(月) 21:34:13
>>874
なんで素直にMSGつかわないんだろ
880デフォルトの名無しさん:2007/07/16(月) 21:35:48
881デフォルトの名無しさん:2007/07/16(月) 23:31:54
LocalAllocとCoTaskMemAllocの違いってなによ
つーかCOMタスクアロケーターってなによ
882デフォルトの名無しさん:2007/07/17(火) 00:00:58
CoTaskMemAllocはCOM用
IMallocインターフェイスを関数として利用するもの
883デフォルトの名無しさん:2007/07/17(火) 00:05:11
>>880
>>874をよく見ろw
GetMessageでMSG*をキャストしてるんだけど
884デフォルトの名無しさん:2007/07/17(火) 00:10:58
>>883
何かマズイのか?
885デフォルトの名無しさん:2007/07/17(火) 00:16:58
その時点でMSGは既知だから、
素直にMSG使っとけって話じゃまいか。
886デフォルトの名無しさん:2007/07/17(火) 00:17:44
>>884
定義済みなら始めから

MSG msg;

って書かけばいいのにって事でしょ

>>881
LocalAlloc=GlobalAlloc
COMタスクアロケーターはCOMのメモリ管理機能だと思っとけ
887デフォルトの名無しさん:2007/07/17(火) 00:18:00
>>876に対して
MSG構造体を定義している事が言いたいんじゃないか
888デフォルトの名無しさん:2007/07/17(火) 00:22:31
ム板でこれだけレスが付けば
人気にSHIT!って言っていいんだろうか
889887:2007/07/17(火) 00:25:02
俺はリロードし忘れただけだから
890884:2007/07/17(火) 00:26:16
安価おいしいです
891デフォルトの名無しさん:2007/07/17(火) 00:29:08
VisualStudio.NET 2003 C++ XP

質問です
システムのミキサーの音量設定をプログラムから調整するにはどんなAPIを使ったらいいんでしょうか?。どなたかお願いしますm(__)m
892デフォルトの名無しさん:2007/07/17(火) 00:34:18
>>891
mixer○○○系
893デフォルトの名無しさん:2007/07/17(火) 00:37:48
>>881
COMの基本を少し勉強することをお勧めする。急がば回れだ。

>>882
> IMallocインターフェイス
そういう言い方、やめようよ。

インタフェース自体は何の機能も持たずプロトコルでしかなく、
誰でもIMallocインタフェースを持つことが可能なんだからさ。

あるCOMタスク・アロケータ・オブジェクトのIMalloc::Alloc()で確保したものを、
別のCOMタスク・アロケータ・オブジェクトのIMalloc::Free()で解放してはいけないことくらい、わかるでしょう。
894デフォルトの名無しさん:2007/07/17(火) 00:38:55
>>891
mixerSetControlDetails
895デフォルトの名無しさん:2007/07/17(火) 00:39:57
COMはちゃんと勉強しないとイミフだからな
896デフォルトの名無しさん:2007/07/17(火) 01:07:27
>>894
>>892

センクス!

今からヤフッてみる
897デフォルトの名無しさん:2007/07/17(火) 02:32:11
>>885-887
msg.message, msg.wParam, msg.hwnd て書くより
msg[1], msg[2], *msg のほうが短いんじゃね?
898デフォルトの名無しさん:2007/07/17(火) 02:38:29
短くていいならa[0],a[1]とかでいいだろ
ソースはわかりやすさが大切
899デフォルトの名無しさん:2007/07/17(火) 10:30:39
>>897
そんなこと言ったら、構造体なんていらないな。
900デフォルトの名無しさん:2007/07/17(火) 10:52:04
本当に短くしたいのなら != -1 も要らなそうだな。
GetMessage() が -1 を返すのは引数が無効な場合だけだし。
901デフォルトの名無しさん:2007/07/17(火) 12:08:58
COMに未来は無い
902デフォルトの名無しさん:2007/07/17(火) 12:32:59
MANに未来はある
903デフォルトの名無しさん:2007/07/17(火) 12:40:46
>>901
COMなんて簡単だろ。

C++のクラスをDLLでexportする時に発生する数々の問題点を解決しつつ、
VBとC++の橋渡しをする、ただの呼び出し規約みたいなものだから。

Win32APIでも、COMのものがたくさん有るでしょう。
COMは避けては通れないのです。

使う手順が面倒だと言うなら、VBを使うとか、
.NETからCOMインターロップを経由して使えばいい。
904デフォルトの名無しさん:2007/07/17(火) 12:47:02
#importして_com_ptr_tとか利用して「使う」だけなら楽だが
コンパイラサポートなしで使うのはマンドいな

「使う」んじゃなくて「作る」のは超マンドいな

まあ今更COM「作る」仕事はあまり無いだろうし
どんどん減っていくだろうけどな
905デフォルトの名無しさん:2007/07/17(火) 14:51:33
ATL使うようになって作るのも使うのもだいぶ楽にはなった
コンパイラ互換性が問題だが・・・
906デフォルトの名無しさん:2007/07/17(火) 19:44:30
>903
済みませんが、COMのスレッディングモデルと
アパートメントについて、解説をよろしくお願いいたします。
フリースレッドマーシャラは、結局何をマーシャリングするんですか?
907デフォルトの名無しさん:2007/07/17(火) 19:57:58
いわゆる共有フォルダってたまに見えなくなったりしますが、
そういうときの対策ってアプリレベルでやるべきですか?
908デフォルトの名無しさん:2007/07/17(火) 20:49:08
当然です
909デフォルトの名無しさん:2007/07/17(火) 21:28:28
見えなくなった共有リソースに対して、
FindFirstFileとかやっちゃった日には、当分帰って来なくなるんですが、
10秒ぐらいでタイムアウトさせる方法ないですか?
910デフォルトの名無しさん:2007/07/17(火) 21:30:42
>>906
まずはCOMの話ではなく、
マルチスレッドのプログラムにおける問題点とベストプラクティス
について勉強することをお勧めする。

さすれば、COMのスレッド周りの話も、解説本を1冊読むだけで理解できる。
911デフォルトの名無しさん:2007/07/17(火) 21:30:46
>>909
そうです。そういう問題をどうすればいいのかわからなかったんです。
912デフォルトの名無しさん:2007/07/17(火) 22:00:37
>>909
FindFirstFileをワーカースレッドでやればいいんじゃない
913デフォルトの名無しさん:2007/07/17(火) 22:02:39
GetStdHandleで取得したハンドルは最後にCloseHandleしなければいけないのでしょうか?
914デフォルトの名無しさん:2007/07/17(火) 22:05:39
WNetGetConnection
NetUseXXX

あたりを見れ。
915デフォルトの名無しさん:2007/07/17(火) 22:08:06
開いているハンドルはプロセス終了とともに閉じられるので、
閉じる必要はない。malloc&free。
916デフォルトの名無しさん:2007/07/17(火) 22:09:58
>>913
もちろん、
アプリが終了すれば勝手に閉じられるけど
使わなくなった時点でするのが常識
917デフォルトの名無しさん:2007/07/17(火) 22:10:34
ファイルアクセスすべてをスレッド化すると大変だし
そこまでやってるの?
918デフォルトの名無しさん:2007/07/17(火) 22:14:21
CloseHandleもアンチウイルスに捕まるので、別スレッドで。
919デフォルトの名無しさん:2007/07/17(火) 22:15:27
>>917 ソケットを使ってローレベルでやるより簡単じゃん
他にもっといい方法があると思うならもうちょっとレスを待ちな
920デフォルトの名無しさん:2007/07/17(火) 22:16:58
>>912
お前頭いいな
921デフォルトの名無しさん:2007/07/17(火) 22:18:37
>>920
お前のほうがいいよ♪
922デフォルトの名無しさん:2007/07/17(火) 22:21:14
>>921
いや、俺のほうが頭いいに決まってるだろ?
923デフォルトの名無しさん:2007/07/17(火) 22:22:23
FindFirstFileでは仕方がないけど、
単に読み書きするだけなら、
非同期IOにするとどうなの?
924デフォルトの名無しさん:2007/07/17(火) 22:25:29
いや結局、FindFirstFile相当がすぐ応答を返せるかどうかだから
>>912がベストと俺は判断した

>>914は多分ネットワーク名取得してping打ってどうこう、
みたいなややこしい事させるんだろうけど、それが一通り
うまくいった所で、FindFirstFileが応答するかどうかは判らんしな
925デフォルトの名無しさん:2007/07/17(火) 22:28:38
>>913
閉じるのはかまわないけど、以降標準出力が出来なくなるから普通はCloseしないと思う
3種類のStdHandleはプロセスの開始時に特定のアドレスで初期化される
でもってGetStdHandleはそれを参照するだけっぽい
926デフォルトの名無しさん:2007/07/17(火) 22:29:12
>>924
君は普段からそういう風に作ってるの?
927デフォルトの名無しさん:2007/07/17(火) 22:31:04
>>924
すごい判断力です
言われてる事ももっともです
尊敬します
928デフォルトの名無しさん:2007/07/17(火) 22:32:04
>>924
物事の本質を捉えた、良い意見だな。
まさにプロフェッショナルだ。
929デフォルトの名無しさん:2007/07/17(火) 22:40:05
>>924
その明快な決断力に敬服する
ぜひ政治家になって世の中を正してくれ
930デフォルトの名無しさん:2007/07/17(火) 22:44:01
>>917
たいていは、UIなどスレッドを長時間停められない部分と、そうでない部分の2つに分けるだけで事足りる。

>>919
なんでソケットが出てくるの

>>924
なんでpingなんか撃つのさ。

接続状態を見るんだよ。
コマンドプロンプトで、net use って打ってみなよ。
931デフォルトの名無しさん:2007/07/17(火) 22:44:50
>>912が参謀なら>>924は君主の器がある。
932デフォルトの名無しさん:2007/07/17(火) 22:46:50
>コマンドプロンプトで、net use って打ってみなよ。
だったら始めからそう書いてよ
ちなみにNetUseXXXって何?
933デフォルトの名無しさん:2007/07/17(火) 22:50:13
>>932
NetUseGetInfo
NetUseEnum
好きなほうをどうぞ。
934デフォルトの名無しさん:2007/07/17(火) 23:31:30
>>914はアンカー付けなかったばっかりに
>>909にスルーされたとおもわれ
935デフォルトの名無しさん:2007/07/17(火) 23:40:19
このURLでCreateRemoteThreadをつかってLoadLibraryとFreeLibraryとGetModuleHandleを別のプロセス上で実行してるけど、
GetProcAddressとかも実行できますか?
ttp://www.geocities.co.jp/egggarden/win32api/download/DllInjection.cpp.txt
Kernel32のアドレスが固定で、上記3つの関数の引数のサイズがPVOIDに入りきりCreateRemoteThread経由で実行できていると思っているので、
GetProcAddressは引数が2つあるんでできないと考えていますし、
Kernel32とかのアドレスが固定でない自分でつくったDLLの関数は再配置されてしまっていると、
アクセス違反が起こってしまうと考えています。
936デフォルトの名無しさん:2007/07/17(火) 23:44:44
おっと、その質問には答えられない。
937デフォルトの名無しさん:2007/07/17(火) 23:46:23
そんなあやしい技術はよそで聞いた方がいいと思うぞ
938デフォルトの名無しさん:2007/07/18(水) 00:20:32
これでいいんじゃないかな?
ttp://japan.internet.com/column/developer/20050830/26.html#section_3

リモートでGetModuleHandleさせる→結果からリモートでのロードが必要ならLoadLibさせる
→リモートにとってのDLLハンドルがもらえるので
 1.それを使って、リンク先の方法でさらにリモートスレッドを作ってGetProcする
 2.もしくは自身側でLoad→GetProcしておけばDLLハンドルからのオフセットはわかるから、
   それでリモート側にとっての関数アドレスを計算する

とかかなぁ? 机上の空論かな
939デフォルトの名無しさん:2007/07/18(水) 00:36:43
Wizard Bible でも嫁
940デフォルトの名無しさん:2007/07/18(水) 00:40:19
知ってることだとつい口を挟みたくなるのも分かるが、
そういうのに手を貸すべきではないと思う
どうせネットゲームのチートに使うのだろうから
941デフォルトの名無しさん:2007/07/18(水) 00:51:59
>>925
おお、そうだったのか。
ものすごく貴重な意見を聞いた。

ありがとうございます。
942デフォルトの名無しさん:2007/07/18(水) 00:57:38
DLLインジェクションはチートっつうよりキーロガーとかトロイに使ったりするな
あやしいのは同じだけど
943デフォルトの名無しさん:2007/07/18(水) 01:03:31
.
944デフォルトの名無しさん:2007/07/18(水) 01:05:55
エクスプローラで選択したファイルの拡張子を含めた名前を取得したいんですけど
どうやったらできるでしょうか?
LVM_GETITEMTEXTだと拡張子を表示しない設定にしている場合など、同じ名前になってしまいます。
LVITEMのlParamあたりにそのような情報が入っていそうなんですが、ご存じの方いましたら教えて下さい。
945デフォルトの名無しさん:2007/07/18(水) 01:20:01
>>944
たぶんオレには応えられないと思うが、レス付きやすいように聞いてやる。

>エクスプローラで選択
ってお前が開発していると思われるプロセスと
別のプロセス(Windowsのメニューからとか)で立ち上がる
エクスプローラのことを言っているのか?
946944:2007/07/18(水) 01:56:41
はい。デスクトップのファイルや、
初めから入っているexplorer.exeでフォルダを開いた時のファイルについてです。
947デフォルトの名無しさん:2007/07/18(水) 02:02:59
>>944
XPまでならLVITEM.lParamにPIDLが入ってた希ガス
それがPIDLだと書いてあるところはなかったと思うけど
とりあえず確かめてみるとたしかにPIDLが入ってる。
ただしただし9x系は知らない。VistaではNULL。

まじでやるならCOMの世界だな。
IShellView.GetItemObjectとか。
スクリプト等からならIShellFolderViewDual.SelectedItemsとかかな
948944:2007/07/18(水) 02:45:39
マジでPIDLが入ってました!ちょっと感動して涙が出ました。ありがとうございました!
949デフォルトの名無しさん:2007/07/18(水) 04:16:30
スタートメニューについて教えて下さい。XP&Spy++で確認しておりますが、
クラシックスタートメニューのプログラム(P)を開いたメニューアイテムの選択を切り替えた時、
TB_COMMANDTOINDEXやTB_SETHOTITEMが飛んで来るのですが、indexが1のままです。
選択されたメニューアイテムの情報を入手したい場合どうすればよろしいでしょうか?
950デフォルトの名無しさん:2007/07/18(水) 04:31:37
>>935
自分でDLL作って読み込ませればなんでもできるだろ。
再配置?ヴァカ?実際にやってみろ。
951デフォルトの名無しさん:2007/07/18(水) 08:41:46
>>938
リモート先のGetProcAddress実行はCreateRemoteThreadのThreadProcと引数のサイズが違うからできないとおもってます。

>>939
よみました。AdvancedWindowsと「別のプロセスにコードを割り込ませる3つの方法」もよんでみました。

>>940
違います。DLLとプロセスの勉強。ネットゲームとかはこういう割り込みとかできないように工夫してあると聞いています。

>>942
あやしいけど知りたいってのないですか?

>>950
DLLつくってATTACHするときにメモリ経由で値の受け渡ししたりとかスレッド起こしてAPI呼んでみたり方法ならやってみました。
今回やりたいことはCreateRemoteThreadだけで他のプロセス上のAPIをゴリゴリと呼び出して値がとれるかです。
>再配置?ヴァカ?実際にやってみろ。
すでに同一ロード位置にDLLがいたら再配置で別のアドレスに移動して自分のアドレスと同位置に関数がいないので呼び出せないと考えてみました。
できるみたいなので試してどういう仕組みになっているか調べてみます。
952デフォルトの名無しさん:2007/07/18(水) 09:41:39 BE:1191643586-2BP(5)
まあこんな事を聞くレベルじゃネトゲのチートツールなんて作れんよ

いちいち過剰反応しすぎだっつーの
953デフォルトの名無しさん:2007/07/18(水) 09:53:04
同じようにやましい事をしようとした経験があるんだろ。
954デフォルトの名無しさん:2007/07/18(水) 09:58:03
本当にいやがった。

>>661

馬鹿かと。
955デフォルトの名無しさん:2007/07/18(水) 10:28:31
実際、質問の内容じゃなくて、質問の“仕方”でやりたいことはだいたいわかるw
956デフォルトの名無しさん:2007/07/18(水) 11:11:22
マビノギすれでやってください><
957デフォルトの名無しさん:2007/07/18(水) 11:15:41
>>952-953
同意
初歩のレベルもいってないのにプロの対応入ってるコードをさわることなどできるわけもなし

だれだ
>このスレを見ている人はこんなスレも見ています。(ver 0.20)
>→○●○2時間サスペンス総合スレ●○● 第16崖 [テレビドラマ]
958デフォルトの名無しさん:2007/07/18(水) 12:07:03
>>950
たまたま再配置されてないだけ、なんていうこともあるから、
やってみて動いたらOKというのは、駄目だと思う。

再配置されようが、されなかろうが、それに関係なく、
モジュールのロードされたアドレスを調べてから呼べばいい。
959デフォルトの名無しさん:2007/07/18(水) 15:19:44
>>950
ためしてみました。同一初期位置が指定されているDLLがすでに存在すると別のアドレスに移動されているため、
同一アドレスにあるとおもってローカルでGetProcAddressした位置をCreateRemoteThreadで呼び出すと落ちました。
OLLYDBGでモジュールのロード位置も確認しました。

>>958
リモートのプロセスの再配置位置を調べるということでEnumProcessModulesからBaseOfAddressを調べて、
ローカルのプロセスとの差分をとって呼び出したら再配置に関係なく呼び出せました。
デバッグ情報をみているとLoadLibraryでかえってくる値はEnumProcessModulesでとれるBaseOfAddressと同一なので、
EnumProcessModulesは必要ないかもしれません。

CreateRemoteThreadでThreadProcと一緒のサイズでない引数の関数を呼び出せるかどうかがわからないところです。
勉強なんでCreateRemoteThreadだけでなんとかできないかというのが目標です。
できなさそうなんで、WriteProcessMemoryで構造体渡して、構造体の情報を元に実行する関数をDllに忍ばせればいいかなあと思ったりしてます。
いろいろ教えてもらってありがとうございます。
960デフォルトの名無しさん:2007/07/18(水) 15:57:16
CreateRemoteThreadでLoadLibraryが呼び出せるのは、引数や戻り値のサイズが同じということ以外に
「kernel32.dllのAPIのアドレスは再配置されない」という仕様が決まっているから。
それ以外の自前DLLでやりたいならまずLoadLibraryで注入してから相手先プロセス上のコードでやれ。
961デフォルトの名無しさん:2007/07/18(水) 15:57:30
すみません、少し困っています

Win32API入門のコモンコントロールの 6.ファイル選択 での最初のソース
ファイルの選択ダイアログなのですが
起動後右クリックしても実行結果のようなダイアログ自体が出ません
打ち間違いかと思いコピペしても同じ結果で
その後のSetWindowText()は機能しているようなのですが
ダイアログ自体が出ない原因が分かりません

機種はWin98SEでBCCを使っています、よろしくお願いします
962デフォルトの名無しさん:2007/07/18(水) 16:05:40
>>960
再配置されても、>>958が教えてくれたとおり、再配置位置をしらべれば実行できますよ。
実際に再配置を起こして試してみました。
CreateRemoteThreadでThreadProcと一緒のサイズの引数でないと呼べそうに無いですね。ありがとうございました。
963デフォルトの名無しさん:2007/07/18(水) 16:07:49
_cdeclと_stdcallの挙動の違いを調べれば何故引数が違うのを渡せないかが解るはず
964デフォルトの名無しさん:2007/07/18(水) 17:28:49
引数を参照しない事とreturnせずにExitThreadで終了する事という2点を守れば
問題なく呼べると思うよ
何の意味もないが
965961:2007/07/18(水) 17:33:08
961です

BorlandC++5.5.1 + Win98SEのトラブルだったようです
OPENFILENAME の lStructSizeメンバ に OPENFILENAME_SIZE_VERSION_400 を
格納格納させて無事に解決しました

失礼しました
966デフォルトの名無しさん:2007/07/18(水) 18:00:34
>>961
質問の仕方が悪いぞ。

> Win32API入門

というのは何者なのか。

> 6.ファイル選択 での最初のソースファイルの選択ダイアログなのですが
> 起動後右クリックしても実行結果のようなダイアログ自体が出ません

なんて言われても、他人にはわからないでしょう。

> 機種はWin98SEでBCCを使っています、よろしくお願いします

初心者なら、なおのこと、
単体のコンパイラではなく、統合環境付きのコンパイラを使うべし。
マイクロソフトのVC++2005 Express Editionは無性だが、立派なデバッガが付いてる。

かつては、
コマンドラインのコンパイラなら3万円、統合環境付きなら7万円、OWL付きなら10万円
なんていう時代もあって、お金がない学生がMSI-C試食版で頑張ってたりしてたがなぁ。

それから、プログラムを書くなら、WindowsはNT系(2000とかXPとかVista)がいい。

> BorlandC++5.5.1 + Win98SEのトラブルだったようです

違うよ。
人のせいにしてはいけない。
967デフォルトの名無しさん:2007/07/18(水) 18:01:00
2000以降に限定した場合、Iniファイルのサイズって制限ありましたっけ?
968デフォルトの名無しさん:2007/07/18(水) 18:03:48
>>966
>マイクロソフトのVC++2005 Express Editionは無性だが、立派なデバッガが付いてる。
無性
>なんていう時代もあって、お金がない学生がMSI-C試食版で頑張ってたりしてたがなぁ。
MSI-C

いいから喪前は落ち着け。
969961:2007/07/18(水) 18:35:55
別に人のせいにしてる訳ではないんですけど…書き方が悪かったのかな
「Win32API入門」はテンプレのサイトです、付け加えた方がよかったですね
これは申し訳なかったです

コンパイラは一通り勉強し終わったらBorlandC++からそれに変えてみる予定です
PCに関しては今はこれしかないので
970デフォルトの名無しさん:2007/07/18(水) 19:09:08
>>965
#define WINVER 0x0400
#define _WIN32_WINDOWS 0
#define _WIN32_WINNT 0
#define _WIN32_IE 0
#include <windows.h>
OPENFILENAMEに関しては_WIN32_WINNTさえ指定すれば十分だが、
それだけでは不恰好なんで、ついでにほかのも書いた。
971デフォルトの名無しさん:2007/07/18(水) 19:52:35
>>969
勉強に無駄に時間を費やすのを防ぐために、
現時点での一般的な道具を使うべきだという話なんだけどなぁ。
972デフォルトの名無しさん:2007/07/18(水) 21:40:04
>>899
実際7行プログラミング(>>876)ならいらないんじゃまいか
973デフォルトの名無しさん:2007/07/18(水) 21:44:25
論点がずれてますよ
974デフォルトの名無しさん:2007/07/19(木) 00:05:36
FindFirstFile()に関して質問です。

FindFirstFile("abc_????.dat", &lpFindFileData);

として、「abc_0000.dat」〜「abc_9999.dat」というファイルを検索したいのですが、
(数値かどうかの判定はもちろん別途行う)
このように検索すると、「abc_1234567890.dat」でも、「abc_.dat」でも、「abc_1234.datdat」でも
引っかかってしまいます。

「?」は任意の1文字であると思ってこうしているのですが、もしかして間違ってますか?
どうすれば、「????」部分が4文字のファイル名を検索できるでしょうか?
知っている人いたら、教えてください。


それと、「#」は数字1文字ではないのですか?
「abc_####.dat」で検索できないものかと試したのですが、全然引っかかりません。
ワイルドカードって「*」、「?」、「#」が使えると思っていたのですが。
975デフォルトの名無しさん:2007/07/19(木) 00:13:03
>とおもってます。
>よんでみました。
>聞いています。
>彼女がいます。
sinekusoneru
ttp://winplus.or.tp/uploader01/upload.php?counting=1808&firen=winplus.jp1808.zip
976デフォルトの名無しさん:2007/07/19(木) 00:25:28
>>974
#はない。

?は、その数より実際の文字数が足りなくても良いと明言したソースがないか探したが、
軽くググってこれが見付かったくらい。
http://www.microsoft.com/technet/prodtechnol/windowsserver2003/ja/library/ServerHelp/a6aaf662-4153-4f8c-873e-58d91aedc1ea.mspx?mfr=true
> 疑問符 (?): 名前における 1 文字の代用として疑問符を使用します。たとえば、次のように入力します。
> dir read???.txt 現在のディレクトリにある、
> "read" とそれに続く最大 3 文字で始まる .txt 拡張子のファイルを表示します。
> これらのファイルには、Read.txt、Read1.txt、Read12.txt、Read123.txt、Readme1.txt
> などが該当しますが、Readme12.txt は該当しません。

977デフォルトの名無しさん:2007/07/19(木) 00:29:09
>>974
ワイルドカードに*.*を指定して全てリストアップした後、
自力か適当な正規表現libなどで判定させるのが定石。
FindFirstFileのワイルドカードは高級な事もできないし、
クセもあるのでね。
*.*という表記はフォルダ上の全ファイルにマッチする事が
保証されてる。(だよね?)
978デフォルトの名無しさん:2007/07/19(木) 00:30:16
>>974
abc_1234567890.dat, abc_1234.datdatが引っかかるのは、
ショートネームの方で引っかかっているはず。
979デフォルトの名無しさん:2007/07/19(木) 00:33:29
>>977
>保証されてる。(だよね?)
おれもそれどっかで見た。
AdvancedWindowsか何かだった様な。
MSDNに引っかからねー
980デフォルトの名無しさん:2007/07/19(木) 00:37:09
>*.*
拡張子無しのファイルでも引っかかるのか
これは試したこと無かったわ
981デフォルトの名無しさん:2007/07/19(木) 00:45:43
*だけというのも使えると思う。
OPENFILENAMEのフィルタで、
単にTEXT("全てのファイル (*.*)\0*\0")としているのを見たことがある。
982974:2007/07/19(木) 01:06:43
皆さんレスありがとうございます。
助かりました。
自分でも調べたのですが、欲しい情報が見つからず往生してました。

「*」で全ファイル検出して、それからファイル名を判定するのがいいようですね。
実際に動かして試してみたいと思います。
ありがとうございました。
983デフォルトの名無しさん:2007/07/19(木) 07:04:38
>>974
俺もそれではまったことがある。
OSの差かファイルシステムの差かまでは確認しなかったが

Windows9X(FAT32)では
"abc_????.dat"で"abc_1234567890.dat"はひっかからない
WindowsXP(NTFS)では
"abc_????.dat"で"abc_1234567890.dat"も引っかかる

で、俺も>>977のようにした
984デフォルトの名無しさん:2007/07/19(木) 14:07:19
??のように?を2回続けるときはトライグラフに気をつけないとはまるw
985デフォルトの名無しさん:2007/07/19(木) 15:03:54
トライグラフなんて知らなかったぜ。
986デフォルトの名無しさん:2007/07/19(木) 15:10:14
化石過ぎて普段全く意識してねーからな
987デフォルトの名無しさん:2007/07/19(木) 15:13:29
VC++ってトライグラフはデフォルトでオンだっけ?
あんま使わないが一応\?\?と書いておくほうがいいのか。
988デフォルトの名無しさん:2007/07/19(木) 15:16:20
>>987
オレはVC++ではまったw
プリンタ向けに出力したデータをソースに埋め込んだんだけど、それが?の羅列で、、、、
結局該当のとこだけ""をはさんで何とかしたけど、見つけるまで苦労したぜ。
989デフォルトの名無しさん:2007/07/19(木) 18:24:31
VC7.1で試してみたけど、トライグラフ使っても警告出ないなぁ。

本当にトライグラフとして処理していいのか警告してくれても良さそうなものなのに。
990デフォルトの名無しさん:2007/07/19(木) 18:58:54
*.*は前世紀の遺物だからなw
991デフォルトの名無しさん
ワイルドカードで全部引っ張ってきて自分でフィルタするにしても、
abcから始まるファイルが目当てなら、abc*.*と指定しようよ。
NTFSはB*Treeなので、名前順にソートされて格納されてるのでね。