Win32API質問箱 Build14

1 名前: ◆ncKvmqq0Bs :03/10/05 13:33
.NET Framework!? 知らんな!!
そんなヤル気のあるネィティブプログラマ集まれ!

スレ立てるまでもない、Win32APIについての質問はこちらへどうぞ。
やさしい にいさま達がきっと答えてくれる(ハズ)。
でも、質問する前に検索ぐらい汁!!
過去スレ・参考は
>>2 ぐらいを参照するべし。

2 名前: ◆ncKvmqq0Bs :03/10/05 13:34
- 過去スレ
Build13:
http://pc2.2ch.net/test/read.cgi/tech/1059549320/
Build12:http://pc2.2ch.net/tech/kako/1056/10560/1056033645.html
Build11:http://pc2.2ch.net/tech/kako/1052/10526/1052651750.html
Build10:http://pc2.2ch.net/tech/kako/1047/10478/1047819779.html
Build9:http://pc2.2ch.net/tech/kako/1044/10449/1044929160.html
Build8:http://pc2.2ch.net/tech/kako/1040/10409/1040964626.html
Build7:http://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
Build6:http://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
Build5:http://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
Build4:http://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
Build3:http://pc.2ch.net/tech/kako/1017/10170/1017072275.html
Build2:http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Build1:http://pc.2ch.net/tech/kako/991/991576947.html


- MSDN Online
http://www.microsoft.com/japan/msdn/default.asp
- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/index.html
- Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/

3 名前:デフォルトの名無しさん :03/10/05 14:11
>>1 オツ─wwヘ√レvv〜(゚∀゚)─wwヘ√レvv〜─ !!

4 名前:デフォルトの名無しさん :03/10/05 14:32
前スレ995より:
--------------------------------------------------------------------------------
ShellExecuteという関数を使って
関連付けがなされているファイルを
起動できると聞きました
プログラム中にwindows.hがIncludeされていて
windows.hの中にshellapi.hがIncludeされています
shellapiの中に
SHSTDAPI_(HINSTANCE) ShellExecuteA(HWND hwnd, LPCSTR lpOperation, LPCSTR lpFile, LPCSTR lpParameters, LPCSTR lpDirectory, INT nShowCmd);
#define ShellExecute ShellExecuteA
と書かれていてぐぐって見たのですが
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shellexecute.asp
くらいしかなくどうやって使ったらいいかわかりません
具体的にはC:\testフォルダの中のaaa.xlsを指定すると
エクセルが立ち上がってaaa.xlsが読み込まれるというようにしたいです
windows2000+BCC551です
どうかよろしくお願いします
--------------------------------------------------------------------------------
だそうな。マルチでなければ誰か面倒見てやってくれ

5 名前:前スレ995 :03/10/05 15:08
自己解決しました
がネットワーク上のファイルを指定すると
サーバに登録されていないユーザの為
アクセス拒否されます
プログラムソースにユーザ−IDとPASSを書いておいて
接続してからというやり方は出来ないものでしょうか


6 名前:前スレ981 :03/10/05 16:24
前スレ>>990
テキストファイルなんかの表示ならわかるのですが・・・。
よろしくお願いします。

7 名前:デフォルトの名無しさん :03/10/05 16:36
>>6
ええっ、じゃあ絵の描き方から説明が必要なのかな煤i゚Д゚;

1、ウィンドウを作成
2、WM_PAINTメッセージを受けてクライアント領域に絵を表示
3、絵を書きたいタイミングにInvalidateRectを発行して再描画

辺りから始めてみてはどうでしょう。
描きたい絵は、BYTE buf[width*height*4]とか確保して
ベタデータで絵を描いたら、上記2の箇所で
SetDIBitsToDeviceを呼び出してHDCへ描画すれば絵が描けます。


8 名前:デフォルトの名無しさん :03/10/05 17:00
>>6
テンプレにある猫でも(ry見に行けば勉強になると思うよ。

>>7
StretchDIBitsも(・∀・)イイ

9 名前:デフォルトの名無しさん :03/10/05 18:11
モニターの電源をOn/OffするAPIってなんでしょう?

10 名前:デフォルトの名無しさん :03/10/05 18:12
>>5 携帯からだから記憶テキトーだけど、WNetAddConnection2 とか?

11 名前:デフォルトの名無しさん :03/10/05 18:38
>>9
すみません自己解決しました.
SendMessage(hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF);
これでON.
SendMessage(hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF);
これでOFF.
これで実現できました

12 名前:デフォルトの名無しさん :03/10/05 18:39
>>9
間違えました
SendMessage(hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_ON);
これでONです

13 名前:デフォルトの名無しさん :03/10/05 18:49
SendMessageについて質問があります。
1文字だけあるウィンドウに送ろうとしたときに

SendMessage(hWnd, WM_CHAR, Asc("a"), 0)

だとうまくメッセージを受信できるのですが、
以下のように、2バイト文字にすると

SendMessage(hWnd, WM_CHAR, Asc("亜"), 0)

文字化けしてうまく受信できません。
どうしたらうまく送信できるのでしょうか?
よろしくお願いいたします。

言語はVBです。

14 名前:デフォルトの名無しさん :03/10/05 18:56
ASC("亜")でなにが返ってくるの?
0x88きゃ?

15 名前:デフォルトの名無しさん :03/10/05 18:59
>>13
Asc()はascii文字セット専用だからでは?
shift-jisには対応できてないから文字化けするんだと思うけど。

16 名前:デフォルトの名無しさん :03/10/05 19:00
>>14
戻り値を16進に変換したら889Fと帰ってきました。

17 名前:デフォルトの名無しさん :03/10/05 19:03
>>15
なるほど・・・。
shift-jisに対応するAscに変わる関数というのは
存在するものなのでしょうか?

18 名前:デフォルトの名無しさん :03/10/05 19:05
というか問題はWM_CHARでないのか?
889FはShift-JISの"亜"でそ

19 名前:デフォルトの名無しさん :03/10/05 19:13
すこし状況を説明しますと
すでにC++で書かれたソースがあって
それを元にVBに落としているところなのです。
そのサンプルソースが

LPCSTR pString = InputView->Lines->GetText();
if(pString[0])
{
for(i=0;pString[i];i++)
SendMessage(hWnd,WM_CHAR,(UCHAR)pString[i],0);
PostMessage(hWnd,WM_KEYDOWN,'\r',0);
m_pHistory->AddString(pString);
}

このような感じになっていまして
それでWM_CHARをそのまま使ってしまったのです。
上記のソースは問題なく2バイト文字も送信できています。

20 名前:デフォルトの名無しさん :03/10/05 19:26
>>19
受け側でどう化けてるのか調べるのが手っ取り早いと思うけど。
思いつきだけど、0x889Fじゃなくて0x9F88で受信してるとか?

21 名前:デフォルトの名無しさん :03/10/05 19:50
>>20
受け側はすでに完成されたプログラムでコードまで
判別できないのですが「 」とか「・」が表示されています。
ネットで、【5.本日のお題 WM_CHAR による2バイト文字取得サンプル】
procedure THoge.WMChar(var Message: TWMKey);
var
CH, CL: Char;
M: TMsg;
S: String;
begin
if Message.CharCode in [$20..$7E, $A0..$FF] then
// 1バイト文字
S := Chr(Message.CharCode)
else
begin
// 2バイト文字
CH := Chr(Message.CharCode);
if (CH in LeadBytes) and
PeekMessage(M, Handle, 0, 0, PM_NOREMOVE) and
(M.Message = WM_CHAR) and
(M.wParam in [$40..$FF]) and
PeekMessage(M, Handle, 0, 0, PM_REMOVE) then
begin
CL := Chr(M.wParam);
S := CH + CL;
end;
end;
end;
みたいなサンプルを拾ったのですが
Delphiなのでさっぱりわかりません・・・。
似たようなことをやっているのでしょうか?

22 名前:デフォルトの名無しさん :03/10/05 20:10
>>21
SendMessage(hWnd, WM_CHAR, Asc("亜")>>8, 0)
SendMessage(hWnd, WM_CHAR, Asc("亜")&255, 0)
は?

23 名前:デフォルトの名無しさん :03/10/05 20:18
>>13
1バイトずつデータを送ると、受け取るアプリによっては文字化けする。
WM_IME_CHARで、2バイト文字も1回で送れば、文字化けしないかも。


24 名前:デフォルトの名無しさん :03/10/05 20:23
>>19
>>SendMessage(hWnd,WM_CHAR,(UCHAR)pString[i],0);
>>PostMessage(hWnd,WM_KEYDOWN,'\r',0);

これだと、2バイト文字の1バイト目と2バイト目の間に、
"\r"が入ってしまわないか?


25 名前:デフォルトの名無しさん :03/10/05 20:41
みなさんありがとうございました。
>>23さんの方法ですんなり成功しました。
またよろしくお願いいたします。

ちなみに値は WM_IME_CHAR = &H286 でした。

26 名前:デフォルトの名無しさん :03/10/05 21:48
学校の卒業研究でデータベース(Acces)をVisual C++6.0で
読み書きするプログラムを作っています、アプリケーションの種類は
ダイアログベースです。勉強になるサイトや本などがありましたが
教えていただけませんか。おねがいします。
あとODBCを使うとかいってました。

27 名前:デフォルトの名無しさん :03/10/05 23:27
>>26
ADOつかっとけ


28 名前:デフォルトの名無しさん :03/10/06 06:27
CreateWindowでスタイルをWS_CHILDWINDOW|WS_OVERLAPPEDWINDOWとして
子ウィンドウを作成して表示もできてるんですが、
表示の優先が、完全に逆になってます。
親ウィンドウを最小化して戻すと、一番手前に描画されるウィンドウが
一番下の優先になってます。
ウィンドウの作成のしかたが悪いんでしょうか?


29 名前:26 :03/10/06 07:22
ADOって何ですか?
できればサイトを教えてほしいのですが。
よろしくお願いします

30 名前:デフォルトの名無しさん :03/10/06 07:30
ttp://www.google.co.jp/search?q=ADO+site%3Amicrosoft.com&hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8

31 名前:デフォルトの名無しさん :03/10/06 09:21
ListViewのColumnをフラットにするにはどうすればいいですか?
LVS_EX_なんとか辺りで出来そうな気がするんですが探しても見つかり
ませんでした…。


32 名前:31 :03/10/06 09:40
ごめんなさい、海外のサイト漁ったら出てきました_| ̄|○
LV_NOSORTHEADERですね、マジすまんです。


33 名前:デフォルトの名無しさん :03/10/06 12:29
UNIXみたいに使用中のファイルを削除する方法はありませんか?

34 名前:デフォルトの名無しさん :03/10/06 14:29
>>31
ClumnClick:=False;


35 名前:デフォルトの名無しさん :03/10/06 20:52
>>28
CHILDとOVERLAPPEDは両立しないのでどっちか選べ

36 名前:デフォルトの名無しさん :03/10/07 01:42
>>35
あわわ、ありがとう。 半端に動くんだね・・・。

ところで、MDIを自力で実現することは難しいんでしょうか?
MDIを使えということなのか・・・。つか、MDIにしたほうがいいですかね。


37 名前:デフォルトの名無しさん :03/10/07 02:22
すごい房な質問で申し訳ないんですが、
友達にデバイスコンテキストハンドルは、
取得したあと、早いうちに解放しないといけないって聞いたんですけど、
本当にそうなんですか??

WM_CREATEでGetDCでとったデバイスコンテキストハンドルを
起動中ずっと使おうと思っていたんですが…

38 名前:デフォルトの名無しさん :03/10/07 03:15
>33
フロッピーのインストーラーなんかだと削除どころか引っこ抜く事が出来る。

39 名前:デフォルトの名無しさん :03/10/07 03:41
>>37
俺もためしたこと無いんで知らないがGetDC取りっぱなしだと画面の色数を変えたりウィンドウを移動させたときにうまく行かなくなるかもね

40 名前:デフォルトの名無しさん :03/10/07 09:15
>>37
WinMEなど9x系ではDCの総数に制限がある場合がある

41 名前:デフォルトの名無しさん :03/10/07 23:34
Common Control 6で EDITBOX に対してEM_LIMITTEXTで入力制限をかけると
「文字数単位」で制限がかかる仕様みたいなんだけど、
これを「バイト数単位」で制限をかけるようにはできないのでしょうか?


42 名前:デフォルトの名無しさん :03/10/08 00:59
>41
Common Controlと"EDIT"とには関係無い気がするのだが...

43 名前:37 :03/10/08 01:12
>>39 >>40
あー、なるほど…。
だから、使うたびに取得、解放が望ましいんですね〜。

44 名前:デフォルトの名無しさん :03/10/08 05:51
>>43
全部で5個しかなかったはず。うるおぼえだけど。

45 名前:デフォルトの名無しさん :03/10/08 08:06
OWNDCにしとけば?

46 名前:デフォルトの名無しさん :03/10/08 11:13
>>45
それでもWin9xではGDIヒープを食いつぶすんでないかい
32ビットヒープから取られるならいいけど
16ビットヒープから取られるなら問題

47 名前:デフォルトの名無しさん :03/10/08 11:14
>>33
自己レス
削除はできないけどリネームはできました

48 名前:デフォルトの名無しさん :03/10/09 06:26
最新のPlatformSDKだとダイアログが真っ白になりませんか?


49 名前:デフォルトの名無しさん :03/10/09 08:54
CreateProcess のコマンドラインに32kの制限があるのは何故なんでしょうか?

50 名前:デフォルトの名無しさん :03/10/09 12:26
>>49
CreateProcessAだから? (てきとー

51 名前:デフォルトの名無しさん :03/10/09 22:20
>>49
それぐらいで十分だと思ってるからじゃないか。

DOS は、確か 128byte だったし、ちょっと前の Unix は 4K ぐらいじゃなかったっけ ?

52 名前:デフォルトの名無しさん :03/10/10 09:35
CapsLockが押されているかどうかの判定(CapsLockのOn/Offではない)は
どのようにしたらいいのでしょうか?


53 名前:デフォルトの名無しさん :03/10/10 13:11
DirectInputのBuffered Dataでも使えば?

54 名前:デフォルトの名無しさん :03/10/10 14:04
>>52 GetKeyState とか GetAsyncKeyStateとか

55 名前:デフォルトの名無しさん :03/10/10 15:28
>54
それだと、日本語キーボードでは、Shift+CapsLockのときしか
判定できないよ。

56 名前:54 :03/10/10 16:09
Σ(´Д` な、なんだってー!!英語キーボード使ってるんで気づかんかった。

57 名前:52 :03/10/10 16:25
>>54さん
>>55さんのいうとおりなんですよね

>>53さん
IDirectInputDevice::GetDeviceDataとかいうものを使うということですか?
DirectX自体ほとんど使ったことないですが頑張ってみます

58 名前:デフォルトの名無しさん :03/10/10 16:47
ネットワークプログラミングのスレで書いたらこっちできいたほうがいい、
と言われたので転載します。
何かご存知の方がいましたら教えてください。

-----

ネットワーク接続を行うマルチスレッドDLLを作っているのですが、
DLLを呼び出す側のプログラムの終了処理に、

dllcleanup();//DLLの関数。スレッド止めてリソースを解放する
FreeLibrary(hMod);
WSACleanup();

ってな感じで呼び出すと、
WSACleanup内で強制終了になります。
FreeLibraryをWSACleanupの後にしたり、
dllcleanup内でスレッドを止めたりした後に
Sleepを数百msec入れると何故かエラーしません。

なんかWSACleanupする際に気を付けるべき点があれば
教えていただけないでしょうか?


59 名前:デフォルトの名無しさん :03/10/10 17:27
スレッドが全て終了したか確認してる?

60 名前:デフォルトの名無しさん :03/10/10 17:36
Winsock が影でスレッド作ってるから、WSACleanup される前に FreeLibrary されて
あぼーんしちゃうんじゃない?

61 名前:58 :03/10/10 18:21
>>59
生成したスレッド全てに対してWaitForSingleObject(handle,INFINITE)
を使って停止を確認してます。

>>60
winsockのDLLをFreeLibraryする、っていうことでしょうか?

色々試した結果やっぱりスレッドを停止した後に何かしら
処理を挟むと(printfとかでも)エラーしないようです。

62 名前:58 :03/10/10 18:56
解決したっぽいので書いておきます。
ワーカースレッドを10個生成していて、
それらに対してWaitForMultipleObjectで終了待ちしていたのですが、
第3引数のbWaitAllをtrueにしていても何故か実際には
終了していなかったスレッドがあったようです。
原因はわかりませんが、とりあえず代わりに
10個のスレッドに対して一つずつWaitForSingleObjectすることで解決しました。

63 名前:デフォルトの名無しさん :03/10/10 21:45
>>62
WaitForMultipleObject って何 ?

って言うお約束の突っ込みはおいといて、WaitForMultipleObjects の戻り値ちゃんと確認してる ?
WAIT_FAILED とか WAIT_TIMEOUT が返って来てたなんてことないよね。

64 名前:58 :03/10/10 22:01
>>63
あー、戻り値確認してませんでした。
タイムアウト時間はINFINITE指定してたんで
まぁ、WAIT_TIMEOUTは来ないし、WAIT_ABANDONED来てもいいか、
と勝手に思ってました。

ちなみにWAIT_FAILEDってどういう時にでるんですか?

65 名前:デフォルトの名無しさん :03/10/10 23:06
>>64
変なハンドル指定してるときとか。

66 名前:デフォルトの名無しさん :03/10/11 17:16
改行の仕方を教えて下さい!

以下のように子ウィンドウを作って、テキストを表示しようとしたのですが、
\nで上手く改行できませんでした。

//子ウィンドウの作成
edt_out=CreateWindow("EDIT","",
WS_CHILD | WS_VISIBLE | ES_WANTRETURN | ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | ES_AUTOHSCROLL | WS_HSCROLL,
10,50,width-10,height-20,hw,(HMENU)ID_EDTOUT,hi,NULL);

//ボタンを押した時の操作(の一部)
wsprintf(host_add,"公式名:%s\nIP:%d.%d.%d.%d",
host->h_name,
(BYTE)*(host->h_addr_list[0]),
(BYTE)*(host->h_addr_list[0]+1),
(BYTE)*(host->h_addr_list[0]+2),
(BYTE)*(host->h_addr_list[0]+3)
);
lstrcpy(buff_out,(gho.host_add));
SetWindowText(edt_out,(LPTSTR)buff_out);

67 名前:デフォルトの名無しさん :03/10/11 17:32
>>66

Windowsの改行って何だったっけ?


68 名前:デフォルトの名無しさん :03/10/11 17:33
\r\n

69 名前:66 :03/10/11 17:41
上手くいきました、ありがとうございます

70 名前:デフォルトの名無しさん :03/10/11 18:09
あるウインドウに、マウスが移動するたびその座標を使ってRectangleで四角を描くようにしたのですが、過去に描いた四角が消えません。
ダブルバッファリングを使ってFillRectで消してから四角を書くと、過去のものは消えますが子ウインドウ(ボタンなど)も一緒に見えなくなってしまいます。
なんとかできないでしょうか?

71 名前:デフォルトの名無しさん :03/10/11 18:23
WS_CLIPCHILDREN

72 名前:デフォルトの名無しさん :03/10/11 18:47
>>71
できました。どうもありがとうございます。

73 名前:デフォルトの名無しさん :03/10/12 13:07
マスクファイルからリージョンへ変更出来るようにしたいのですが何かいい方法は無いでしょうか?

1ピクセルづつ調べてCreateRectRgn();で1ピクセル分のリージョンを作成してCombineRgn();で結合していくと言う方法を
考えたのですが、大きい物になると結構遅くなってしまいます

調べてみたところ、結合されて出来たリージョンが複雑な物の場合CombineRgn();がとても遅くなるようなのですが
もっと早くできる方法は無いでしょうか?


74 名前:デフォルトの名無しさん :03/10/12 13:20
左手の法則などでマスクの境界の形状を調べてポリゴンの組み合わせにするとか
(これはこれで複雑なのであまり解決にはならないが)

1ピクセルずつ調べて、まとまったピクセルを1行n列まとめて矩形として結合するとか

二番目の方は簡単だし実用的

75 名前:73 :03/10/12 13:31
>>74
1番目は前に自分でやって見たら無理でしたが、2番目をやってみたらかなりいい感じです
これで行こうと思います、ありがとうございました


76 名前:デフォルトの名無しさん :03/10/12 20:30
設定とかのウィンドウは最初に作っておいて設定ボタンで表示させたり消したりするのと
設定ボタンが押された時に作って設定し終わったら破棄するのとどっちがいいですか?

77 名前:デフォルトの名無しさん :03/10/12 20:39
頻繁に出したり消したりするもんでなければその都度作ったほうが資源を浪費しなくていい。

78 名前:デフォルトの名無しさん :03/10/12 20:48
タスクトレイに常駐するアプリで、設定ウィンドウ(っていうかそれがメイン
ウィンドウになってる)非表示にしてるだけの見ると萎え萎え

79 名前:デフォルトの名無しさん :03/10/12 21:01
>>78
非表示にしてるのにどうやって見るのか?

80 名前:デフォルトの名無しさん :03/10/12 21:05
>>79 Spy++とか

81 名前:デフォルトの名無しさん :03/10/12 21:05
Spy++って便利だよね(*^o^*)

82 名前:デフォルトの名無しさん :03/10/12 21:07
Spy++ユーザのための設計なんかしてられるか、ボケ。

83 名前:デフォルトの名無しさん :03/10/13 00:10
チェックボックスを最初からチェックした状態で作るにはどうしたらいいですか?

84 名前:デフォルトの名無しさん :03/10/13 00:19
>83
http://pc2.2ch.net/test/read.cgi/tech/1063029371/

85 名前:デフォルトの名無しさん :03/10/13 03:16
>>83
BS_CHECKEDじゃないの?

86 名前:デフォルトの名無しさん :03/10/13 03:37
>>85
そんなもんない。

87 名前:デフォルトの名無しさん :03/10/13 03:43
なぜこのスレに誘導したのかそいつの意図が読めんな
Win32にチェックボックスがないわけじゃないのに。

88 名前:デフォルトの名無しさん :03/10/13 07:39
>>87
何言ってんのこの人 ?

89 名前:デフォルトの名無しさん :03/10/13 10:29
初心者レヴェルのネタだからだろ?

90 名前:デフォルトの名無しさん :03/10/13 10:50
>>83
BM_SETCHECK

91 名前:デフォルトの名無しさん :03/10/13 13:10
2ch風のフォントを出したいのですよ
2ch風のフォントってMS Pゴシックの12ですよね?
それで設定してTextOutで出力しても,なんか雰囲気が違うんです
(ずれてる)いろいろ考えてみたんですがこの.

hFont=CreateFont(fontSize,
0,0,0,600,0,0,0,SHIFTJIS_CHARSET,//キャラクタセット
OUT_DEFAULT_PRECIS,//出力精度
CLIP_DEFAULT_PRECIS,//クリップ精度
DEFAULT_QUALITY,
DEFAULT_PITCH | FF_DONTCARE,
FontType);

この部分に問題がありそうだなと…
それで教えていただきたいのですが,2chのAAと同じフォントを出力できる
APIの引数を教えていただきたいのです


92 名前:デフォルトの名無しさん :03/10/13 13:14
肝心なフォント名とサイズが伏せてあるのはなぜだ

93 名前:デフォルトの名無しさん :03/10/13 13:16
FontTypeは MS Pゴシックです
FontSizeにはもちろん 12が入ってます


94 名前:デフォルトの名無しさん :03/10/13 13:19
MS PゴシックなのかMS Pゴシックなのかはっきりしる
あとFontSizeはフォントの高さであってポイントじゃない

95 名前:デフォルトの名無しさん :03/10/13 13:26
MS Pゴシック ですねすみません(汗
>>あとFontSizeはフォントの高さであってポイントじゃない
えっと…じゃどうすればいいんでしょう?(滝汗


96 名前:デフォルトの名無しさん :03/10/13 13:27
>>95
MSDNでCreateFont調べりゃ変換の仕方書いてあるから・・・

97 名前:デフォルトの名無しさん :03/10/13 13:38
変換はわかりました!
それから設定でかなり2ch風に近づけることができました…
ですが…まだ微妙に違うんですよ…
AAEditer


98 名前:デフォルトの名無しさん :03/10/13 13:39
うわまだ書いてる途中だったのに(TT
AAEditerと比べるとよくわかるのですが…微妙に違うんです…
何がおかしいんでしょう…

99 名前:91 :03/10/13 13:54
できました!!
みなさんありがとう!

100 名前:デフォルトの名無しさん :03/10/13 16:32
100Gets!

101 名前:デフォルトの名無しさん :03/10/13 17:48
ウィンドウ@の子ウィンドウの子ウィンドウは@と同じプロシージャにメッセージが返ってこないのですが
そういうものなんですか?

102 名前:デフォルトの名無しさん :03/10/13 22:36
そういうもんです。子ウインドウの子ウインドウの親宛てのメッセージはウインドウ@の子ウインドウに行きます。

103 名前:デフォルトの名無しさん :03/10/13 22:45
ウィンドウ@の子ウィンドウのプロシージャーがウィンドウ@のプロシージャーと同じ物の場合は
ウィンドウ@の子ウィンドウの子ウィンドウのメッセージはウィンドウ@のプロシージャーに行くんだよね?

104 名前:デフォルトの名無しさん :03/10/14 04:52
>>103
> ウィンドウ@の子ウィンドウのプロシージャーがウィンドウ@のプロシージャーと同じ

ってすさまじー状態だな。
親ウィンドウと子ウィンドウが同じ挙動を示すのか。

105 名前:デフォルトの名無しさん :03/10/14 17:04
mciでmp3ファイルを再生する方法ですが、
mciGetDeviceID("test.mp3");
でデバイスIDを取得できるのでしょうか?

106 名前:デフォルトの名無しさん :03/10/14 23:11
>103
論より証拠。コード吊るせ!

107 名前:デフォルトの名無しさん :03/10/14 23:34
>>103
同じプロシージャを定義していれば同じところにいくだろうが、
結局ハンドルは子ウィンドウになってるぞ。


108 名前:デフォルトの名無しさん :03/10/15 18:55
自作親ウィンドウの中に作った"STATIC"の中に"BUTTON"だけがあるプログラムとかでは
親のプロシージャで制御したくねぇ?

109 名前:デフォルトの名無しさん :03/10/15 23:56
自分のレンタル鯖のmySQLのデータベースからデータを参照するために必要な
Win32APIの関数ってどの辺を使えばいいの?

関数を教えてもらったらWeb製作板へ逝きますので、使えそうな関数を教えて!


110 名前:デフォルトの名無しさん :03/10/16 06:21
任意のプログラムが起動したり終了したりしたタイミングを検知するにはどうしたらよいのでしょうか?

111 名前:デフォルトの名無しさん :03/10/16 07:22
delphiで作ったdllをc++で作った他人のプログラムに
読み込ませようとしましたが、読み込み違反が出てうまくいきません。
グローバルメモリの辺りで躓いていると思うんですが。

まず、これがc++の関数部分(画像の受け渡しです)
//---------------------------------------------------------------------------
typedef bool __stdcall (*GetImageProc) ( char* HGLOBAL* );
void __stdcall LoadJpegImage(AnsiString FileName Graphics::TBitmap*
pBitmap)
{
if ( FileExists(FileName) != true ) return;
HINSTANCE hDLL = LoadLibrary( AnsiString("Conv.dll").c_str() );
GetImageProc GetImage = (GetImageProc)GetProcAddress( hDLL "GetImage" );
HGLOBAL data;
GetImage( FileName.c_str() &data );
TMemoryStream* Memory = new TMemoryStream();
Pointer DataPtr = ::GlobalLock( data );
Memory->WriteBuffer( DataPtr ::GlobalSize(data) );
Memory->Position = 0;
::GlobalUnlock( data );
::GlobalFree( data );
pBitmap->LoadFromStream( Memory );
delete Memory;
FreeLibrary( hDLL );
}
//-------------------------------------------------------------------------

112 名前:111 :03/10/16 08:09
それでこっちがdelphiのメソッド部分

var
buffer:Pointer;

function load(fn:PChar):PCardinal;
var
bImage1:TBitmap;
jImage:TJpegImage;
x:Integer;
car:Cardinal;
stream:TMemoryStream;
begin

stream:=TMemoryStream.Create();
jImage:=TJpegImage.Create();
JImage.PixelFormat:=jf24Bit;
JImage.LoadFromFile(fn);
bImage1:=TBitmap.create();
bImage1.HandleType:=bmDIB;
bImage1.PixelFormat:=pf32bit;
bImage1.Width:=jImage.Width;
bImage1.Height:=jImage.Height;
bImage1.Canvas.Draw(0,0,jImage);
bImage1.SaveToStream(stream);
stream.Position:=0;
x:=stream.Size;
つづく

113 名前:111 :03/10/16 08:10
car:=GlobalAlloc(GHND,x); // GPTRもためしました
buffer:=Pointer(car);
GlobalLock(car);
stream.ReadBuffer(buffer^,x);
GlobalUnLock(car);
result:=PCardinal(buffer);
stream.Free;
end;

function GetImage(fileName:PChar;var data:PCardinal):boolean;
begin
data:=PCardinal(load(fileName));
result:=true;
end;

114 名前:デフォルトの名無しさん :03/10/16 09:44
>>111-113
お前はMSDN読んでこい

115 名前:デフォルトの名無しさん :03/10/16 12:58
DelphiにはMSDNはついてきません。
WebのMSDNは使いにくいし中途半端なことしか書いてありません。

116 名前:デフォルトの名無しさん :03/10/16 13:02
やる気無いならおとなしくあきらめてね。

117 名前:デフォルトの名無しさん :03/10/16 13:21
ヽ(`Д´)ノ モウコネエヨ!!

118 名前:デフォルトの名無しさん :03/10/16 13:24
エキスポートしてないからか?

119 名前:111 :03/10/16 13:42
>>114
すみません。色々弄っている内に
バグだらけのコードを送ってしまったようで。
特にgetImageにstdcallが無いのは最悪ですね。

肝心の不都合は何だか
よく分からないうちに自己解決しました。


120 名前:111 :03/10/16 13:48
>>115
delphiには英語版のwin32.hlpがついてますよ。
programFileの下のcommonfileを見るべし。



121 名前:デフォルトの名無しさん :03/10/16 14:01
英語版でいいなら最新のSDK落としてくれば済む話だと思うが。

122 名前:デフォルトの名無しさん :03/10/16 15:14
Web上で見てもSDKインストールしてローカルで見ても、MSDNの情報は同じだ。

123 名前:デフォルトの名無しさん :03/10/16 16:48
結論:MSDNライブラリサブスクリプションを買え

124 名前:デフォルトの名無しさん :03/10/16 19:04
ちょっとやってわからなかったらすぐ質問・・・・・

125 名前:デフォルトの名無しさん :03/10/16 22:00
EDITを一行のみで使う場合で、スタイルにES_AUTOHSCROLLを指定しなかったときは
Ctrl+Vなどで貼り付けをするとウィンドウからはみ出す部分は、
貼り付けてくれないような仕様になっているのですか?

126 名前:デフォルトの名無しさん :03/10/16 22:39
>>125
自分で試せ、ボケ

127 名前:デフォルトの名無しさん :03/10/16 22:43
GetTextExtentPoint32で得られる文字列の高さと幅って
改行は考慮されないんでしょうか?
俺の環境じゃ幅に加えられてるだけなんだけど・・・

128 名前:127 :03/10/16 22:55
上の質問じゃ意味なさすぎなんで...
やりたい事は、文字列を表示するのに
必要な領域を知りたいって事なんですけど、
定石的な方法ってあるでしょうか?

129 名前:デフォルトの名無しさん :03/10/16 22:57
なんつーか高さを加算すりゃいいと思うんだけど

130 名前:デフォルトの名無しさん :03/10/16 23:00
そもそもTextOutだって改行面倒みてくれないんだから、
一旦自力で改行ばらして処理するしかなかろて。

状況によってはDrawText一発だったりもするが。

131 名前:127 :03/10/16 23:51
レスサンクスです。
やっぱ自力でやるしかないですね。
難しい事じゃないんですけど、
どうも文字列操作を自分でやるのに変な抵抗感があったりして。

132 名前:デフォルトの名無しさん :03/10/17 01:03
>>131

130 が言ってるように DrawText 一発じゃだめなの?
DT_CALCRECT 指定してさ。

133 名前:デフォルトの名無しさん :03/10/17 01:03
プロシージャー間のデータ渡しはどうやったらいいでしょうか?
自作コールバックメッセージとか作って渡したほうが良いのか、グローバル関数にしちゃっていいのか
どっちにするべきでしょうか?

134 名前:デフォルトの名無しさん :03/10/17 02:05
>>133
何言ってるのかよく分からないので勘で答えると、普通は構造体。

135 名前:127=131 :03/10/17 02:26
DT_CALCRECTは縦横のどちらか一方しか
修正してくれないと思ってたんですが...
今試してみたらバッチリOKでした。
これでコードがクリーンに!ありがとー

136 名前:デフォルトの名無しさん :03/10/17 15:28
「MENUITEMINFO構造体でMIIM_BITMAPマスクを立てて
ビットマップハンドラの代わりにHBMMENU_SYSTEMを指定すると
dwItemDataで指定したウィンドウのアイコンが表示される」
とヘルプに書いてあるんですが……

それって「HBMMENU_SYSTEMを指定する場合は、dwItemDataに
ユーザ定義の値を自由に書き込むことはできない」ってことですか?

自分で試したら、そのメニュー項目が表示された時点で、前もってMIIM_DATAで
書き込んだdwItemDataの値が上書きされるみたいなんですが、何か回避法は
ないのでしょうか。

137 名前:デフォルトの名無しさん :03/10/17 20:49
>>134
その構造体はグローバル関数にするんですか?それともSendMessage()でアドレスを渡したりするんですか?

138 名前:デフォルトの名無しさん :03/10/17 20:55
>>137
そもそもプロシージャー間のデータ渡しって何よ。
構造体を関数にするとはなかなかハイセンスなプログラム作ってるみたいだが。

139 名前:デフォルトの名無しさん :03/10/17 20:55
>>137
あなたの言う「グローバル関数」について、誰にでもわかるよう
200字以内で説明せよ (3点)

140 名前:デフォルトの名無しさん :03/10/17 21:08
>>133 >>137
そもそもその質問はWin32APIに関するものなのか?文章からはさっぱり見えないのだが。

141 名前:137 :03/10/17 21:50
ああ、違うグローバル変数だ

142 名前:デフォルトの名無しさん :03/10/17 22:46
>>140
プロシージャーというのは、ウィンドウプロシージャのこと
ではないかと思う。

143 名前:デフォルトの名無しさん :03/10/17 22:54
勘で要約すると、ウィンドウプロシージャAからウィンドウプロシージャBに構造体を渡したい。
でも自作コールバックメッセージとかグローバル関数とかよくわからないで用語を使ってるのでわけのわからないことに。

144 名前:デフォルトの名無しさん :03/10/17 23:16
>>136
なんか無理っぽいね。
でもなんでHBMMENU_SYSTEMを使うの?


145 名前:デフォルトの名無しさん :03/10/18 01:13
>>143
多分そうなんだろうね。
このスレ的にはWM_COPYDATAをお勧めしておくか。

146 名前:デフォルトの名無しさん :03/10/18 01:44
>>145
別プロセスでやり取りしたいようには見えないのだが。

147 名前:デフォルトの名無しさん :03/10/18 08:46
じゃあ、
SetWindowLongでウィンドウハンドルに構造体のポインタを関連付ける
それで、プロシージャにそのウィンドウハンドルを渡せば・・・あれ?w

148 名前:デフォルトの名無しさん :03/10/18 10:40
とりあえず、SetPropでいいんでない?

149 名前:デフォルトの名無しさん :03/10/18 17:58
Win32APIで画面解像度を変更する事はできるでしょうか?
画面解像度を取得するには
GetSystemMetrics(SM_CXSCREEN)
GetSystemMetrics(SM_CYSCREEN)
で出来るのですが、この値を変えたいのです。
いちいち画面のプロパティで設定変えるのがメンドクサイので
プログラムの中でやりたいと考えてます。

150 名前:デフォルトの名無しさん :03/10/18 18:32
GetSaveFileNameを使って「名前を付けて保存」のダイアログを開いたときに,
ファイル名を入力するところへ初期値として文字列を入力しておくことは
できますか?

151 名前:デフォルトの名無しさん :03/10/18 18:46
>>150
できますよ

152 名前:デフォルトの名無しさん :03/10/18 18:48
Pointer to an OPENFILENAME structure that contains information used to initialize the dialog box. When GetSaveFileName returns, this structure contains information about the user's file selection.
typedef struct tagOFN { // ofn
DWORD lStructSize;
HWND hwndOwner;
HINSTANCE hInstance;
LPCTSTR lpstrFilter;
LPTSTR lpstrCustomFilter;
DWORD nMaxCustFilter;
DWORD nFilterIndex;
LPTSTR lpstrFile;
DWORD nMaxFile;
LPTSTR lpstrFileTitle;
DWORD nMaxFileTitle;
LPCTSTR lpstrInitialDir;
LPCTSTR lpstrTitle;
DWORD Flags;
WORD nFileOffset;
WORD nFileExtension;
LPCTSTR lpstrDefExt;
DWORD lCustData;
LPOFNHOOKPROC lpfnHook;
LPCTSTR lpTemplateName;
} OPENFILENAME;



153 名前:150 :03/10/18 18:55
>>152
どれが当たりなんでしょうか・・・

154 名前:デフォルトの名無しさん :03/10/18 18:59
>>149
できますよ

155 名前:デフォルトの名無しさん :03/10/18 19:14
>>154
関数名を教えていただけませんか
後は自分で調べますので

156 名前:デフォルトの名無しさん :03/10/18 19:18
>>149
ChangeDisplaySettings

157 名前:デフォルトの名無しさん :03/10/18 19:27
Pointer to an OPENFILENAME structure

158 名前:デフォルトの名無しさん :03/10/18 19:41
>>156
ありがとうございました

159 名前:デフォルトの名無しさん :03/10/18 21:18
>>150
ファイル名を受け取る所に初期値として文字列を入れとくといいよ

160 名前:デフォルトの名無しさん :03/10/18 22:07
GDI+を使って16色のGIFファイルを書き出したいのですが。
EncoderParametersで設定できそうなのですが、良くわからないので
知ってる方いますか?
Jpegの品質設定はできたのですが・・・

VC++.NETを使っていて
ソースとしてはこんな感じで書き出してます。
CLSID encoderClsid;
EncoderParameters EncParam;
Image *in = new Image(infile);
GetEncoderClsid(L"image/gif", &encoderClsid);

in->Save(outfile, &encoderClsid, &EncParam);
delete in;

161 名前:デフォルトの名無しさん :03/10/18 22:08

SetTextCharacterExtraで文字間隔の設定が出来ますが、これと同じように
行間隔を設定するようなAPIは存在するのでしょうか?



162 名前:デフォルトの名無しさん :03/10/18 22:47
RichEditが強烈に重かったので、RTFをプログラム側で作成して、
EM_STREAMINでRTFを直接流し込む事によってだいぶ速くなりました。
しかし、これでも数千行程度になるとまだ重いです。
他にRichEditを軽くする技はどんなものがありますか?

163 名前:デフォルトの名無しさん :03/10/18 23:31
>>162
まずメモリに持っておいて
表示する時だけ表示させるとか。

164 名前:136 :03/10/19 11:21
>>144
レスどうもです。やっぱ無理ですか……。

ツールウィンドウみたいなのを何種類か表示するかも知れなかったので、
そのツールウィンドウのアイコンをメニューアイテムの横に
表示できるといいなあと思ったんです。

mii.fMask = MIIM_BITMAP | MIIM_DATA;
mii.hBitmap = HBMMENU_SYSTEM;
mii.hItemData = (LONG_PTR) hToolWnd; // ツールウィンドウへのハンドル

という感じで。
ちなみにhItemDataには、メニューアイテムを表す自作クラスの
インスタンスへのポインタを代入して逆引きできるようにする予定でした。
仕方ないので、HBMMENU_SYSTEMを使う場合のみ、ポインタではなく
hToolWndから逆引きするようにします……。

165 名前:デフォルトの名無しさん :03/10/19 13:29
>>163
既にそうしているんですが…
RichEditではWebブラウザのように、
別スレッドでストリームに流し込みながら、
ユーザーが流し込んでいる途中のRichEditを自由にスクロールさせながら観覧させる事は出来ないですか?

166 名前:デフォルトの名無しさん :03/10/20 07:00
>>165
全然なんのことかわからんが、表示に必要な分だけ扱うように処理してみたら?

167 名前:デフォルトの名無しさん :03/10/20 09:49
>>166
お返事ありがとうございます。
現在表示される分だけStreamInに流し込んで表示し、
スクロールバーは自分で制御して、
バーが押されたりカーソルキーやPageUp,Downキー
が押された時にスクロール後に表示される部分だけを、
ストリームに流し込み直せという事ですか?

それだとCtrl+Aとか押されてすべて選択された時とかマウスドラッグ等で
選択が1画面以上に渡った時に困りますよね。
もしかしてJaneで言うTHogeTextViewのように、
自分で1からコントロール書かないと無理なのでしょうか?

168 名前:デフォルトの名無しさん :03/10/20 14:03
MSDNで日本語版のWindowsAPIリファレンスってダウンロードできるのでしょうか?
MSDN歩いてみたり「MSDN Windows API ダウンロード」なんかで検索してみたのですが、だめでした

169 名前:デフォルトの名無しさん :03/10/20 14:09
メモリ上のmidiファイルを再生する方法はあるのでしょうか?
DirectXを使わない方法でお願いします。
waveだとsndPlaySoundだと思うのですが。

よろしくお願いします。

170 名前:デフォルトの名無しさん :03/10/20 14:10
>>167
色分けやフォントサイズだけが望みなら、作るか持ってくればRichEditよりはるかに軽い。面倒は面倒だがそれに見合う速度は出る。
表示部分だけストリームで〜〜とかやるほうがむしろ手間かもしれない。
OLEだかなんだかまで必要なら、自分で作ってもRichEditを超えるのは無理。

>>168
MSDN Library Subscription に入会。

171 名前:デフォルトの名無しさん :03/10/20 17:28
自分のアプリが、XPのビジュアルスタイルで動いているか、
クラシックで動いているか調べる方法はあるでしょうか。

172 名前:デフォルトの名無しさん :03/10/20 19:19
リストビューコントロールでエクセルのようにセルとセルの境界の線を表示するにはどうしたら良いですか?

173 名前:デフォルトの名無しさん :03/10/20 19:32
>>171
comctl32.dll のバージョンを調べてくれ。


174 名前:デフォルトの名無しさん :03/10/20 19:53
>>172
LVS_EX_GRIDLINES

175 名前:デフォルトの名無しさん :03/10/20 23:20
CreateFont()関数を使ってフォントや、論理高や角度などを決めて設定する問題なのですが、
HFONT型の変数を一つ宣言し、CreateFont()関数で生成したらSelectObject()関数で
設定すればそれ以降が生成したフォントになるのは分かるのですが、
問題には
 作成したフォントをDeleteObject()する前に、元のフォントに戻すこと
とあるのですが、どうやって元のフォントにもどせばいいのでしょうか?

176 名前:デフォルトの名無しさん :03/10/20 23:24
SelectObjectのヘルプをきちんと読みましょう。

177 名前:デフォルトの名無しさん :03/10/20 23:53
>>169
もちろん方法はあるけど面倒だよ。
諦めることをオススメするが、どうしてもというならmidiOutOpen、midiOutShortMsgあたりを調べてみ。

178 名前:175 :03/10/21 00:03
hFont = SelectObject(ps.hdc, hFont);
TextOut(ps.hdc, 0, 0, "(*゚∀゚)=3ムハー", strlen("(*゚∀゚)=3ムハー"));
SelectObject(ps.hdc, hFont);

こんな感じでよいんでしょうか?同じ変数でやるよりも
hFontOldとかにしたほうが分かり良さそうですが、↑のでも出来ますよね??

179 名前:デフォルトの名無しさん :03/10/21 00:09
>>178
strlen("(*゚∀゚)=3ムハー")はsizeof "(*゚∀゚)=3ムハー"-1でいいだろ。


180 名前:デフォルトの名無しさん :03/10/21 00:15
>>178
戻すときにまたhFontに代入しとかないと消すやつ間違えるぞ

181 名前:169 :03/10/21 00:15
>>177
レスありがとうございます。
調べてみます。

182 名前:デフォルトの名無しさん :03/10/21 00:57
>>178
同じ変数使ったら CreateFont()した hFont を DeleteObject() できないジャン?

183 名前:デフォルトの名無しさん :03/10/21 01:15
hFont = SelectObject(ps.hdc, hFont);
TextOut(ps.hdc, 0, 0, "(*゚∀゚)=3ムハー", strlen("(*゚∀゚)=3ムハー"));
hFont = SelectObject(ps.hdc, hFont);
DeleteObject(hFont);

で一応消せるジャン。やってる奴見たら窓から投げるけど。

184 名前:デフォルトの名無しさん :03/10/21 02:03
漏れなんか最近はこうだ。
hFont = SelectObject(ps.hdc, hFont);
TextOut(ps.hdc, 0, 0, "ゴラァ"));
DeleteObject(hFont = SelectObject(ps.hdc, hFont));

こんなところのエラーチェックなんてマンドクセー&エラー起きられても対応できねーもん。
365・7・24 てな感じのサーバ製品でもないしさ。

185 名前:182 :03/10/21 02:10
>>183
うむ。書いた後に気づいて、こんなこと↓考えてた

DeleteObject(
 SelectObject(ps.hdc,
  SelectObject(ps.hdc, CreateFont() ) | TextOut(ps.hdc, 0, 0, "(*゚∀゚)=3ムハー", strlen("(*゚∀゚)=3ムハー"))*0
 )
);
これでhFontもいらない。

186 名前:デフォルトの名無しさん :03/10/21 02:22
つまんねーこと質問スレで披露するなよ。まねするだろ。

187 名前:デフォルトの名無しさん :03/10/21 02:33
>>185
計算式の各項の評価順は(? : や && や || の場合以外は)不定だから好ましくない。


188 名前:デフォルトの名無しさん :03/10/21 04:48
ウィンドウプロシージャをC++クラスの中に入れようと思い、

class A{
 A(){m_pThis = this;}
 static A *m_pThis;

 BOOL OnCreate(HWND hWnd, WPARAM wParam, LPARAM lParam);

 static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 {
  switch(uMsg){
  case WM_CREATE:
   return m_pThis->OnCreate(hWnd, wParam, lParam);
  }
  return DefWindowProc(hWnd, uMsg, wParam, lParam);
 }
};

こんな感じでthisポインタを静的変数に入れて、そこからメッセージハンドラを
呼び出しているのですが、これって問題ありますか?

189 名前:デフォルトの名無しさん :03/10/21 04:54
APIフックをしたいんですけど
簡単なサンプルありませんか?

190 名前:デフォルトの名無しさん :03/10/21 05:00
恐ろしいですなぁ

191 名前:デフォルトの名無しさん :03/10/21 05:06
>>188
一個しかインスタンス作らないなら別に構わないと思うけど、WM_CREATE より前には
何のメッセージもハンドリングしなで良いんだったら、CreateWindow の最後の引数を
使って、こうした方が良くない?

class A{
 HWND m_hwnd;
LRESULT OnMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {...};

 static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 {
  if (uMsg == WM_CREATE) {
   A* pA = reinterpret_cast<A*> (((CREATESTRUCT *)lParam)->lpCreateParams);
   pA->m_hwnd = hwnd;
   SetProp(hwnd, TEXT("hogehogebarbar"), (HANDLE) ((CREATESTRUCT *)lParam)->lpCreateParams);
  }
  HANDLE h = GetProp(hwnd. TEXT("hogehogebarbar"));
  if (h)
   return (reinterpret_cast<A*>(h))->OnMessage(hwnd, wParam, lParam);
  return DefWindowProc(hWnd, uMsg, wParam, lParam);
 }
};

192 名前:デフォルトの名無しさん :03/10/21 05:07
>>188
なんなら勝手に new A しても良いし。

class A{
A(HWND hwnd) : m_hwnd(hwnd) {};
 HWND m_hwnd;
LRESULT OnMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {...};

 static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 {
  if (uMsg == WM_CREATE) {
   A* pA = new A(hwnd);
   SetProp(hwnd, TEXT("hogehogebarbar"), reinterpret_cast<HANDLE> (pA));
  }
  HANDLE h = GetProp(hwnd. TEXT("hogehogebarbar"));
  if (h)
   return (reinterpret_cast<A*>(h))->OnMessage(hwnd, wParam, lParam);
  return DefWindowProc(hWnd, uMsg, wParam, lParam);
 }
};

193 名前:デフォルトの名無しさん :03/10/21 10:15
俺も似たようなことやってるが、staticメンバだと別スレッドでCreateWindowを
呼び出したら明らかにヤバイと思う。もしスレッドを使う場合はTLSを使うといいよ。

192のやり方はかなりスマートでいいが、クラスインスタンスだけ先に作って
サイズなんかを指定してからCreateWindowを呼び出したい、というやり方を
とった場合に困るのと…

それからCreateWindowを呼び出したときかならずしもWM_CREATEメッセージが
真っ先に送られるんじゃなく、まずWM_GETMINMAXINFOとかが送られてる。
191,192手法だと、これらにきちんと対処できなくないかな。

194 名前:デフォルトの名無しさん :03/10/21 10:26
すいません
スレッド扱いたいのですが

_endthread関数と_beginthread関数が定義されていないとエラーメッセージが出ます

一応、下のものはインクルードしてあるのですが他何か
インクルードすべきものはあるのでしょうか?
#include <windows.h>
#include <stdio.h>
#include <process.h>

195 名前:デフォルトの名無しさん :03/10/21 11:44
>>194
どの処理系使ってるのか知らんが、例えばVC++の場合プロジェクトの設定で
使用するC/C++ランタイムライブラリがマルチスレッド版になっている必要がある。


196 名前:デフォルトの名無しさん :03/10/21 11:50
CreateProcessなどに渡して実行されるファイルのフルパスを取得するAPIの名前を教えて下さい。

例えば、
cmd
を渡すと
c:\winnt\cmd.exe
が返ってきて

cmd.exeを渡すと
c:\winnt\cmd.exe
が返ってきて

c:\winnt\cmd.exeを渡すと
c:\winnt\cmd.exe
がそのまま返ってきて

c:\winnt\cmdを渡してもやっぱり
c:\winnt\cmd.exe
が返ってくるようなAPIです。

197 名前:デフォルトの名無しさん :03/10/21 12:02
(^∀^)ゲラゲラ おもしろい

198 名前:デフォルトの名無しさん :03/10/21 12:16
>>196
ありません

CreateProcessのlpProcessInformationの中身使ってなんとかしる。

ちなみにNT系と9xだと取得の仕方が違う。
(9x系のやりかたで取るとNT系はファイル名しか帰ってこない)

199 名前:デフォルトの名無しさん :03/10/21 12:20
>>198
CreateProcessする前にパスが分からないと意味がないのです。
フォルダ部分をCreateProcessに渡したいので…

200 名前:デフォルトの名無しさん :03/10/21 12:26
>>199
パス通ってるディレクトリを全検索

201 名前:デフォルトの名無しさん :03/10/21 12:36
やっぱりいいです。ちょうどいいAPIを自分で見つけました。

202 名前:デフォルトの名無しさん :03/10/21 12:49
>>173
それだとわからないです。XPで画面のデザインを戻されている場合とかを知りたいので。

203 名前:デフォルトの名無しさん :03/10/21 13:12
自作のサービスプログラムをサービス登録後、
コンパネ>管理ツール>サービスの画面から、開始、停止って
やった後、サービス削除を行うと、状態が無効になってきちんと
削除されないんですが(再起動すれば削除されますが)
なんででしょうか?
VC6.0のサンプル(simple.exe(サービス)とclient.exe(サービスと通信用))
を元に作成してて、simple.exeでも削除されませんでした。

サービスの削除を行うとき、停止+削除(OpenSCManager、OpenService、
QueryServiceStatus、ControlService(停止)、DeleteService)と動作させる時は、
きちんとサービスが削除されますが、
削除のみ(OpenSCManager、OpenService、QueryServiceStatus、
DeleteService)の場合に削除されないです。
サービス停止時には、StartServiceCtrlDispatcher()から復帰してmain関数
から抜けてるし、使用したハンドルも全てクローズしてるんですが。

うう、わかりにくい・・・
サービスの停止・削除で注意点とか、サンプルソースとかあったら
教えてぷりーず。


204 名前:デフォルトの名無しさん :03/10/21 13:20
アクティブじゃないときにクリックされてもアクティブになるだけで
zオーダーそのままで最前列まであがってこないようなウィンドウを作る方法は
ありませんか?
WM_MOUSEACTIVATEの戻り値はアクティブにするかどうかしか設定できない
ようですし

205 名前:デフォルトの名無しさん :03/10/21 13:35
>>196
実際にシェルが同じことをしてるわけだから何かありそうだけどね。
でも、知らない。

206 名前:デフォルトの名無しさん :03/10/21 13:37
>>205
だからもう自分で見つけました。SearchPathです。

207 名前:デフォルトの名無しさん :03/10/21 13:43
なんでSearchPathなんだ・・・

208 名前:デフォルトの名無しさん :03/10/21 13:50
SearchPath(NULL, command, ".bat", _MAX_PATH, path, &file) ||
SearchPath(NULL, command, ".com", _MAX_PATH, path, &file) ||
SearchPath(NULL, command, ".exe", _MAX_PATH, path, &file) ||
SearchPath(NULL, command, ".cmd", _MAX_PATH, path, &file)

これで実際>>196の通りの結果が返ってきたからです。

209 名前:205 :03/10/21 13:52
>>206
ふんふん。意外とそのまんまな名前だったね。

210 名前:デフォルトの名無しさん :03/10/21 13:58
ふーん、それでいいならいいけど

211 名前:デフォルトの名無しさん :03/10/21 15:16
LineDDAと同じような挙動をする リージョンやパス対応版の
関数ってあるんですか

212 名前:161 :03/10/21 15:54
161です。
やはり行間設定するAPIは見つかりませんでしたが、DrawTextには外部レディングを
考慮して改行する機能はあるみたいです。
これを利用して、自分で外部レディングを設定する方法は無いでしょうか?

フォント作成時に設定出来ないものかと思いましたが・・・見つかりません。

213 名前:デフォルトの名無しさん :03/10/21 16:06
>202
すまん。
OpenThemeDataがエラーになるかどうかで判断でどうだ。


214 名前:デフォルトの名無しさん :03/10/21 16:32
おまいら!マイネットワークの設定を切り換えるAPIはありませんか?

215 名前:デフォルトの名無しさん :03/10/21 16:39
>>212
外部レディングって改行とは関係ないが。
つうか、改行なんか自分でやるものだ。

216 名前:161 :03/10/21 17:15
>>215
改行の話ではありません。行間です。

MSDNによると

DT_EXTERNALLEADING
行の高さに、外部レディングの高さ (テキストの行間として適切な高さ) を加算します。
通常、外部レディングはテキスト行の高さに加えられません。

とありますので、行間に関係あると思います。

自分で実装するとなると、DrawTextが持つ機能のほとんども自作せねば使い物になりません。
なにかいい方法はないでしょうか?

217 名前:デフォルトの名無しさん :03/10/21 18:08
確かに外部レディングは行の高さに大いに関係はあるのだが、
それはフォントによって固定な情報なので、外部からどうこう出来る
物ではない。

そもそも、日本語フォントだと外部レディングも内部レディングも0しか
設定されていないので、このフラグによる違いは出ない。

結論。
自作汁。

218 名前:デフォルトの名無しさん :03/10/21 18:22
すいませんが教えてください
VC++6.0使ってるんですが
メモリ開放のfree関数使うとエラーで止まるんですが
なんでなんでしょう
Cygwinだと動くんだけど・・

GlobalFreeとかも試したんですが
現象は同じです



219 名前:デフォルトの名無しさん :03/10/21 18:34
>>218
お前の書いたプログラムがバグってるから。

220 名前:デフォルトの名無しさん :03/10/21 18:38
VirtualAllocを試してみたら(w

221 名前:161 :03/10/21 18:57
>>217
外部レディングをなんとか後から設定出来れば簡単解決かと思ったんですが・・・(´・ω・`)
ありがとうございました。ノ☆

222 名前:デフォルトの名無しさん :03/10/21 19:04
ところで、DrawTextって、そんな大層なことをやっていたのか?

223 名前:デフォルトの名無しさん :03/10/21 20:16
アラインとか切り詰めとかかな。

224 名前:161 :03/10/21 20:31
http://www.microsoft.com/japan/developer/library/jpgdipf/_win32_drawtext.htm

かなり色々やってます。
全部使う訳ではないですが、自作にあたってこれを参考にしてたら気が遠くなってきます。

225 名前:デフォルトの名無しさん :03/10/21 20:34
>>208
.vbsとか.vbeとか.jsとか.jseとか.wsfとか.wshはいいんだ…。
a.batとa.comとa.exeとa.cmdとかあった場合はcmd.exeと
挙動が違っていいんだ…。


226 名前:sage :03/10/21 21:42
Windows2000AdvancedServerでAWEを使おうとしているのですが、
どうもうまくいきません。

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/memory/base/awe_example.asp

とりあえず、ここにあるサンプルのコードを試してみようと思ったのですが、
どうやらAdvancedServerとは関係ないような(勝手に思っているだけですが)部
分でAPIが失敗してしまいます。下記コードはそのまま丸写しですが、
AdjustTokenPrivileges の後で、GetLastError()が
ERROR_NOT_ALL_ASSIGNEDを返します。

AdjustTokenPrivilegesで、メモリーをロックしようというのは
正常に動作するのでしょうか?


227 名前:デフォルトの名無しさん :03/10/21 21:56
プリントプレビューを作成しようとしています。
対象となるデータは印刷ダイアログで「ファイルに出力」にチェックを入れて
得られるファイルなのですが、スプーラにWritePrinterで吐くのと同様に簡単に
処理できる物なのでしょうか?
自分的にはPSなりLIPSを解釈して描画し直す必要があると思っているのですが
解決策があれば教えて下さい。

# 通常のプレビュー(例えばtext)は、出力処理のCreateDCするところで
# プリンタでなくディスプレイを指定すれば良さそうなのですが…


228 名前:デフォルトの名無しさん :03/10/21 22:39
>>226
特権を持ってないんじゃないの?

229 名前:デフォルトの名無しさん :03/10/21 22:42
>>227
すでにプリンタの制御コードになってしまっているのであれば、
自力でコードを解釈してプリンタをエミュレートする必要がある。

230 名前:デフォルトの名無しさん :03/10/21 22:48
APIの実行コストについて質問です。
OpenProcessで他プロセスのメモリ書き換えを行っているのですが、
同じプロセスに対して複数関数で処理を行う場合、
関数単位でOpen/Closeを行うのとOpenしてから各関数を実行してCloseするのでは大きなコスト差が発生するのでしょうか?
問題がなければ関数単位でプロセスのOpen/Closeを行いたいのですが‥‥




231 名前:226 :03/10/21 23:02
>>228
Administrator権限でログインしていますが...

232 名前:デフォルトの名無しさん :03/10/21 23:05
リストビューで列の幅を変えさせないようにするにはどうしたらいいですか?

233 名前:デフォルトの名無しさん :03/10/21 23:23
ListViewをサブクラス化し、HDN_BEGINTRACK にTRUEを返すとか?

234 名前:デフォルトの名無しさん :03/10/21 23:40
>>233
ありがとうございます
その線で行ってみます

235 名前:デフォルトの名無しさん :03/10/21 23:42
現在起動しているプログラム(プロセス)リストを取得する
APIってありますか?

236 名前:235 :03/10/21 23:49
具体的にはMSNメッセンジャーの起動をチェックしたのですが・・・

237 名前:デフォルトの名無しさん :03/10/22 00:18
ToolHelp32

238 名前:235 :03/10/22 00:33
>>237
ありがとうございます。
謝謝!

239 名前:デフォルトの名無しさん :03/10/22 11:22
質問の仕方が悪かったようなので、再び。

ここでいうパスはファイルのパスではなく、グラフィックの方です。

パス上にあるすべての座標を知りたいです。
パスを構成している頂点座標だけではなくて、です。

例えばフォントを用いてパスを作成し、Aという文字の形をしたパスの
すべての座標を知りたいのですが、それはムリなのでしょうか。

240 名前:デフォルトの名無しさん :03/10/22 12:25
CreateThreadの戻り値って使わなければCreateThreadの直後にCloseHandleしていいよね?

241 名前:デフォルトの名無しさん :03/10/22 13:01
>>240
いいけどスレッドIDが信用できなくなる可能性がある
(ハンドルを閉じなければIDが再利用されることはない)

242 名前:デフォルトの名無しさん :03/10/22 13:11
>>241
IDも使わないからいいんだけど、MSDNでCloseHandleのところに
「スレッドオブジェクトを削除するには、最初にスレッドを終了し、
次にそのスレッドのすべてのハンドルを閉じなければなりません。」
ってあって、「最初にスレッドを終了」と書いてあるので気になった。

243 名前:デフォルトの名無しさん :03/10/22 15:52
>>239
一番簡単なのはモノクロビットマップにを描画して、ピクセルの色を調べることだな。

244 名前:デフォルトの名無しさん :03/10/22 16:20
質問です。
クリップボードから取得したテキストをファイルに出力したく、
GetClipboardDataで取得、fprintfで出力した所、メモ帳で見る限り正常なのですが、
秀丸やあふの内蔵ビュアなどで見ると改行が全て二重に出力されているようなのです。

hoge
hoge



hoge

hoge

になります。
さらに出力したファイルにメモ帳で変更を加えて保存すると
全ての改行が無くなってしまいます。

hogehoge

と言うふうに。
ちなみにfputsでも同様でした。
GetClipboardDataで取得した改行は何か特別な処理をしないといけないのでしょうか?

245 名前:デフォルトの名無しさん :03/10/22 17:03
>>244
よくわからんけど、キャリッジリターンとラインフィードの処理はちゃんとしてる?
つか、秀丸とかの設定は?

246 名前:デフォルトの名無しさん :03/10/22 17:43
GetLastErrorについて質問です。
API内でエラーが発生した場合にセットされるのは分かるのですが、

・エラーが発生してもセットされないケースがあるのか
・エラーが発生しない場合、変更されないか値がNO_ERRORである保証があるのか

この二点お願いします。
もちろん実装によるのは分かるので、
kernel32,user32,gdi32のAPIについてのみでいいです。



247 名前:244 :03/10/22 17:47
>>245
ヒントありがとうございます!
無事に解決しました!

248 名前:デフォルトの名無しさん :03/10/22 19:28
>>246 普通に考えてMSDNに書いてる範囲が保証されると思うけど。 全てのAPIがセットするわけじゃないよ。念のため。

249 名前:デフォルトの名無しさん :03/10/22 19:48
すみません おしえてください。

CreateWindow 関数で ボタンコントロールを作成した場合.
WS_TABSTOPをいくら指定してもダイアログで無い場合処理されない
でした?
昔 うまくやった気がしますが。
アドバイスあったらお願いします。

250 名前:デフォルトの名無しさん :03/10/22 19:52
>>249
メッセージループでダイアログのメッセージ処理した?

251 名前:デフォルトの名無しさん :03/10/22 19:57
>>250
いえ していないです。
そういえば なんとなく思い出した・・
もしよければ具体的な命令を教えてください。

252 名前:デフォルトの名無しさん :03/10/22 20:04
IsDialogMessage

253 名前:デフォルトの名無しさん :03/10/22 20:20
解決しましたありがとうございます。

254 名前:253 :03/10/22 21:03
すみません うまくいかない・・・・
TABキーは反応するけど 1つめのボタンから
次のボタンへフォーカスが移動しないです。
やはり ダイアログでつくるしかないのでしょうか?

255 名前:デフォルトの名無しさん :03/10/22 23:59
解決しましたありがとうございます。

256 名前:227 :03/10/23 00:11
>>229
回答ありがとうございます。簡単に実現は無理でしたか。
実装するのは茨の道ですね。

257 名前:デフォルトの名無しさん :03/10/23 02:45
同期オブジェクトのミューテックスについて質問させてください。

あるスレッドで待機関数を使ってミューテックスの所有権をもらい、
さらに、同じスレッドでもう一度待機関数を使って同じミューテックスの
所有権を(すでに持っているにもかかわらず)もらいます。
で、この場合、ReleaseMutexは2回実行する必要があるのでしょうか?
早い話、ミューテックスオブジェクトは内部に参照カウントみたいなのを
持っているのでしょうか?

どうも、自分の感触じゃあ2回実行する必要があるような気がするんですが
MSDNにはその辺のことについての記述が見つからないもので・・・。
よろしくお願いします。


258 名前:デフォルトの名無しさん :03/10/23 02:54
createDIBSection(ベース)とSetDIBits(コピー用ソース)の設定を32ビットでビットフィールドにしたら、
透過処理はAPIがやってくれますか?

259 名前:デフォルトの名無しさん :03/10/23 03:06
>>258
聞く前に試してみれば?

260 名前:デフォルトの名無しさん :03/10/23 03:19
>>259
色々やってはいるんだけど、そろそろ疲労感さえ持ち始めてます。
CreateDibSectionいじる事、もうどれ位だろうか。半年・・・いやもっとか。
説明にMASKの文字はあるけど、具体的にどうとは書いてないし、巧くいかないし。
具体的な方向性とかなんかありませんか?

261 名前:デフォルトの名無しさん :03/10/23 03:52
やってくれないから、白黒2値にして、それでANDとってからORだっけか。
元画像の方もマスクでAND取らないとまずいよね?

262 名前:デフォルトの名無しさん :03/10/23 03:52
>>258
やってくれませんよ。説明にMASKうんぬんは、何かの勘違いでしょう。

263 名前:デフォルトの名無しさん :03/10/23 03:56
OSのバージョンが限定されるがTransparentBltってのはあるが。
あとはリージョン適用して*Bltするぐらいしかなかった気がするが。

264 名前:258 :03/10/23 05:06
うーん。これに出てるマスクってどういう意味ですか?
もー、わけがわからない。

http://support.microsoft.com/default.aspx?scid=kb;ja;94326
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_mfc_bitmapinfo_structure.asp



265 名前:デフォルトの名無しさん :03/10/23 05:26
>>264
たとえば0x00FFFFFFからRGB成分を取り出すためのマスク
0x00FF0000 0x0000FF00 0x000000FFの3つ

266 名前:デフォルトの名無しさん :03/10/23 05:29
32bppや16bpp の BI_BITFIELD 型のビットマップの場合、1pixel をあらわす 32bit や 16bit の中の
どこが Red, Green, Blue の各成分をあらわしているかを、BITMAPINFOHEADER に続く3つのDWORD値
(マスク値)で格納しておくわけです。

通常32bppの場合 Red : 0x00FF0000, Green: 0x0000FF00, Blue: 0x000000FF となります。
16bpp の場合は、 0xF800, 0x07E0, 0x001F (RGB565), 15bpp の場合は 0x7C00, 0x03E0, 0x001F とかが使われます。


267 名前:266 :03/10/23 05:30
↑書いた後に気づいたんだけど、
>>264 の上の URL で詳しくわかりやすく説明されてるし。。。

268 名前:264=258 :03/10/23 05:47
>>261-263
レスthx!
混乱してて、書くの忘れてた。

できれば駄目もとでWin95位からAPIでサポートしてくれてたら良かったのに。。。
マスクって言うから、透過マスクだと思ってたのに、減色マスクのような気がしてきたなぁ。

>>261
白黒2値化は管理するデータが増えるから他の方法を探していたのです。でも、最後の砦も没っぽいですね。
この手しかないのか。

>>262
勘違いかもしれないです。

>>263
TransparentBltってWin2K以降だった気がします。
開発環境は、MEなんです。いま、デバッグやっててリソースメータが、8%,19%,8%指してます。ガクブル。



269 名前:デフォルトの名無しさん :03/10/23 05:54
>>265-267
レスthx!
なるほど、長い戦いが終わりました。完敗です。(笑
いやー、まさかマスクって言葉が意外と広域な意味で使われるとは思いもしなかったです。
それを透過マスクだと思い込んだばっかりに・・・。いや〜、馬鹿すぎ。
しかしまー、切り替えができました。
ありがとう。

270 名前:269=264 :03/10/23 06:06
>>269
えーっと名前書き忘れてる。

マスク値で色を表現するからBITFIELDなんですね。(APIがANDとるなりするから。
やっと意味がわかりました。
今、いい感じで気が抜けちゃったので寝ます。
おやすみ〜。

271 名前:デフォルトの名無しさん :03/10/23 06:52
コントロール(リストビューとか)の親ウィンドウを動的に変更しているのですが、
コントロールのWM_NOTIFYの送り先ってどうやって指定するのでしょうか?
現在の親ウィンドウだと思っていたのですが、
どうも送られてこないのでSPY++で確認したら はじめにSetParentされたウィンドウのようです。
現在の親ウィンドウに正しく送信させる方法をご存知でしたら教えてください。

272 名前:デフォルトの名無しさん :03/10/23 07:28
>>257
用語の使い方がよく分からんからソース晒せ。
Mutexに関してはWeb上の解説サイトによく誤解を含むサンプルが載ってるから気をつけないとね。

273 名前:257 :03/10/23 14:37
272さん、よろしくお願いします。
volatile HANDLE g_hMutex,g_hEvent;
void __cdecl testThread3(void* param)
{
    TCHAR title[32],*lpsz;
    wsprintf(title,"test2:%d",(int)param);

    while(::WaitForSingleObject(g_hEvent,50) == WAIT_TIMEOUT){
        switch(::WaitForSingleObject(g_hMutex,0)){//←ここ
            case WAIT_ABANDONED:
                lpsz = "WAIT_ABANDONED:他人の忘れ物を拾ったのかな?"; break;
            case WAIT_OBJECT_0:
                lpsz = "WAIT_OBJECT_0:自分のものだった?or誰も持っていなかった?"; break;
            case WAIT_TIMEOUT:
                lpsz = "WAIT_TIMEOUT:タイムアウト。他人のものだった?"; break;
            case WAIT_FAILED:
                lpsz = "WAIT_FAILED:失敗。"; break;
        }
        switch(MessageBox(NULL,lpsz,title,MB_YESNOCANCEL)){
            case IDYES:
                ::WaitForSingleObject(g_hMutex,INFINITE); break;//←ここ
            case IDNO:
                ::ReleaseMutex(g_hMutex);
                Sleep(250); break;
            case IDCANCEL: goto EXIT;
        }
    }
EXIT:
    if(ReleaseMutex(g_hMutex) == FALSE) MessageBox(NULL,"Release失敗",title,MB_OK);
    _endthread();
}


274 名前:257 続き :03/10/23 14:40

こんな感じで、いくつかのスレッドを走らせてやると、それぞれメッセージボックスに状態を
表示してどうするか選ぶんですが、あるスレッドで「はい」を選んで「待ち」状態にしておき、
現在ミューテックスを所有しているスレッドで「いいえ」をえらんで一度だけReleaseMutexを
呼んでも、さっき待たせておいたスレッドに所有権が移らないんです。

で、ちょっといじって待機関数を呼んで成功した回数だけReleaseMutexを呼ぶと
(戻り値はすべてTRUEで)うまくいきました。所有権もきちんと移りました。
これはやっぱり内部に参照カウントみたいなのを持っているんじゃないのかな〜と。
でもMSDNとかにはReleaseMutexはただ所有権を解放するとしか書いてなくて、
なんか違うぞと思うんですがどうなんでしょう?


275 名前:デフォルトの名無しさん :03/10/23 14:51
O'REILLYの「Win32/C++マルチスレッドプログラミング詳説」には
「スレッドが、同じミューテックスを、開放する前に繰り返し獲得した場合、
スレッドは、そのミューテックスの所有権を獲得したのと同じ回数だけ
それを開放しなければならない」
と書かれてるな。根拠は知らんが。

276 名前:デフォルトの名無しさん :03/10/23 14:58
>>257
俺は272じゃないが、その辺いじったことあるので横レス。
結論から言うと、ロックした数だけ解放する必要あり。

余談だが以下、Win32APIの「Mutex」と「最大参照カウンタが1のSemaphore」の違い。

「最大参照カウンタが1のSemaphore」は同じスレッドから2回ロック
(WaitForSingleObject)するとデッドロックを起こす。

Mutexは同じスレッドから何度ロックしてもデッドロックは起こらない。
ただしロックした回数だけ解放を行わない限り、他のスレッドは
Mutexをロックできない。

要するにどちらの同期オブジェクトも、ロックした回数解放しろと。

277 名前:257 :03/10/23 15:15
276さんありがと〜。

やっぱそうだよね。これで自信を持ってやってけます。
誰かにそう言ってもらえるだけで安心感がぜんぜん違うなぁ。


278 名前:デフォルトの名無しさん :03/10/23 15:45
質問です。

Creating an Internet Explorer-style Menu Bar
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/faq/iemenubar.asp

を読んで、エクスプローラ風メニューバーを作っているのですが、
マウスがホバーした際、他のツールバーのようにボタンの凸になってしまいます。
これを本物のメニューと同じように文字が反転させたいのですが、どのようにしたら良いでしょうか。
エクスプローラではそのような挙動を示しています。


279 名前:デフォルトの名無しさん :03/10/23 15:46

ちなみに、

該当ツールバーのスタイル:
WS_CHILD|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|
TBSTYLE_TRANSPARENT|TBSTYLE_LIST|TBSTYLE_FLAT|
CCS_NODIVIDER|CCS_NOPARENTALIGN|CCS_NORESIZE|CCS_TOP

拡張スタイル:
WS_EX_TOOLWINDOW|TBSTYLE_EX_DOUBLEBUFFER

個々のボタン:
tbb[0].iBitmap=I_IMAGENONE;
tbb[0].idCommand=1;
tbb[0].fsState=TBSTATE_ENABLED;
tbb[0].fsStyle=BTNS_AUTOSIZE/*=TBSTYLE_AUTOSIZE*/|BTNS_DROPDOWN/*=TBSTYLE_DROPDOWN*/;
tbb[0].dwData=0;
tbb[0].iString=(INT_PTR)"File(&F)";

ツールバーへのメッセージ:
SendMessage(hMenubar,TB_BUTTONSTRUCTSIZE,(WPARAM)sizeof(TBBUTTON),0);
SendMessage(hMenubar,TB_ADDBUTTONS,(WPARAM)3,(LPARAM)(LPTBBUTTON)&tbb);
SendMessage(hMenubar,TB_SETIMAGELIST,0,0);
SendMessage(hMenubar,TB_AUTOSIZE,0,0);
ShowWindow(hMenubar,SW_SHOW);

です。なお、ツールバーはレバーコントロールに入れています。

280 名前:デフォルトの名無しさん :03/10/23 20:21
>>277
なんでマニュアル読まないの?

281 名前:276 :03/10/23 20:45
補足だがまあ一応、ヘルプのCreateMutexにそれらしき表記はあるよ……。
「1 つのミューテックスを所有しているスレッドは〜」ってとこだな。

同期オブジェクトに限らず、APIが何かリソースを使用する場合
そのリソースの説明はリソースを作成する関数のヘルプに
書いてあることが多いね。

282 名前:デフォルトの名無しさん :03/10/24 02:46
くだらない質問で申し訳無いのですが、
ReadFileなどでバッファに読み込んだ文字列から、
書式付きで変数への格納を行うにはどうすればよいのでしょうか?

283 名前:デフォルトの名無しさん :03/10/24 02:55
>282 '文字列を書式付きで変数へ格納' ??? 意味わからん。

284 名前:デフォルトの名無しさん :03/10/24 03:10
sscanf

285 名前:デフォルトの名無しさん :03/10/24 08:02
>>282
scanfとか使えば?
ただし、内容が保証できない場合(たぶんこの場合も)、
for (i=0;i < len;i++) {
switch (proc) {
case 1:
if (readBytes[i] == x) {proc=2;}
break;
case 2:
if (readBytes[i] == y) {proc=1;}
else if (readBytes[i] == z) {proc=3;}
break;
}
等として、少しでも不安要素を無くすのが良いかと。

286 名前:デフォルトの名無しさん :03/10/24 10:48
ある別のプログラムを起動させて
そのプログラムが起動時に DLL を読み込んで
DllMain が呼ばれた処理をフックしたいのですが
できる方法はあるでしょうか?

287 名前:デフォルトの名無しさん :03/10/24 17:58
>>280
なんでそんな書き方しかできないの?

288 名前:デフォルトの名無しさん :03/10/24 18:01
>>287
なんで生きてるの?

289 名前:デフォルトの名無しさん :03/10/24 19:14
現在、勉強のために、
タイマーを使ったアプリケーションを作っているのですが、
タイマーを使っている時に、DialogBox()を実行すると、
失敗します。何故でしょうか?

言語はCで、VisualC++6.0sp5を使っています。

290 名前:デフォルトの名無しさん :03/10/24 19:24
>>289
失敗って、具体的にはどの API がどんなエラーコードを返してきて、
そのときの GetLastError の戻り値は何なの?

291 名前:289 :03/10/24 20:24
>>290
>>そのときの GetLastError の戻り値は何なの?
1812 です。
FormatMessage でメッセージ文字列に変換すると、
[指定されたイメージ ファイルはリソース セクションを含んでいません。]
という文字列になります。

292 名前:デフォルトの名無しさん :03/10/24 21:06
VC++.Netを買ったのですが Win32API のドキュメントが英語のしか
見つかりませんがそんなもん? 日本語のは無いの?

293 名前:デフォルトの名無しさん :03/10/24 21:09
>>291
FormatMessageって・・・ ぽりぽり
もまいの環境には「エラールックアップ」がないのか?

294 名前:デフォルトの名無しさん :03/10/24 21:12
ならDialogBoxの1番目か2番目の引数が間違っているのでは。。



295 名前:289 :03/10/24 22:23
>>293
FormatMessage だとすぐに表示できるし別にいいと思うんですが。(エラールックアップ知りませんでした。

>>294
タイマーを使う前は正常に表示できてました。

296 名前:デフォルトの名無しさん :03/10/24 22:49
めんどくせーからソース晒せ

297 名前:デフォルトの名無しさん :03/10/24 23:00
WindowsMediaPlayer6.4は高レベルAPI(MCI ウィンドウ)で作られているのでしょうか?

というか、WindowsMediaPlayer6.4くらい軽いメディアプレーヤーを作るには高レベルAPIでも出来ますか?
それとも中レベルとか低レベルとかまで下がんないと無理ですか?

298 名前:289 :03/10/24 23:11
>>296
2chだと見難いかも

SetTime()のソース
if(!SetTimer(hWnd,1,1000,NULL))
{
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),(LPTSTR)&lpMsgBuf,0,NULL);
MessageBox(hWnd,(LPTSTR)lpMsgBuf,"Error",MB_OK | MB_ICONERROR);
LocalFree( lpMsgBuf );
}

WM_COMMANDの中のDialogBox()のソース
case IDM_SETTING:
if(DialogBox(hInst, (LPCTSTR)IDD_SETTINGBOX, hWnd, (DLGPROC)Setting)==-1)
{
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),(LPTSTR)&lpMsgBuf,0,NULL);
MessageBox(hWnd,(LPTSTR)lpMsgBuf,"Error",MB_OK | MB_ICONERROR);
LocalFree( lpMsgBuf );

299 名前:289 :03/10/24 23:16
case WM_TIMER:
time(&long_time);
wsprintf(strTime,ctime(&long_time));
InvalidateRect(hWnd, NULL, FALSE);
break;

300 名前:デフォルトの名無しさん :03/10/25 00:17
>>297
DirectShow丸投げでできると思われ

301 名前:デフォルトの名無しさん :03/10/25 03:10
>>298
貼るときはエラー処理外しなさいな
WM_PAINTで何やってるか次第かなぁ

302 名前:デフォルトの名無しさん :03/10/25 03:18
time(&long_time);
wsprintf(strTime,ctime(&long_time));
InvalidateRect(hWnd, NULL, FALSE);

ここでバッファオーバーランかなにかしてるんじゃないの?

303 名前:デフォルトの名無しさん :03/10/25 03:31
Win2KのSystem環境変数のPathへパスの追加を行いたいのですが、APIでレジストリに
直接書き加えても反映してくれません。
一旦、ログオフすると反映されるんですが、実際にpathを見ると%SystemRoot%のような
参照を行っている部分がそのまんまの形で出てくるのでシステムディレクトリにパスが
通らなくなってしまいます。
GUIで環境変数を更新してやるとこの%SystemRoot%も正しく展開されるようになります。
APIでPathを書き換えるにはどうしたらよいのでしょうか?

WSHで環境変数の書換もやってみましたがログオフしなくても反映されるものの、
やっぱり%SystemRoot%は展開されないままでした。

304 名前:デフォルトの名無しさん :03/10/25 04:11
>>303
レジストリいじるときはタイプを REG_SZ じゃなくて REG_EXPAND_SZ にしてる?


305 名前:デフォルトの名無しさん :03/10/25 04:32
>>303
REG_EXPAND_SZ & WM_SETTINGCHANGE

306 名前:デフォルトの名無しさん :03/10/25 10:17
WaitForSingleObjectについての質問なんですが、
現在タイムアウト時間を1msecにしてスレッドにて、
Bitbltでビットマップをスクロールさせています。
ぶっちゃけ、よっしーニュースバーなんですけどね・・・
このスクロールスピードが速いのと遅いパソコンがあって
ついこの前まではグラフィックボードの違いだろうって
思っていたんですが、フラッシュを表示すると・・・
なんといままでのろのろスクロールしていたスクロールが
猛スピードスクロールしはじめて(ノ゜凵K)ノびっくり!!しました。
http://yossy.vis.ne.jp/japanese.html
ここからダウンロードしてニュースのスクロールスピードを
最速にしてみてスクロールスピードが速くならなった方は
どこかのホームページ上・・たとえば、
http://www.macromedia.com
でフラッシュを表示してみると、猛スピードでスクロールし始めます。
これはいったいどういうことなんでしょうね?。
何かすれば1msecのWaitが正常になるってことだろうとは思うのですが
ちょっと調べてみてもよくわからないので、わかる方がいらしたら教えてください。
ちなみにSleepに変更しても結果は同じで、CPUのWait処理(ただのループ)に
変更するとどのパソコンでも一定の速度になります。

307 名前:デフォルトの名無しさん :03/10/25 10:58
>>306
WaitForSingleObjectの戻り値はWAIT_TIMEOUTが返ってますか?


308 名前:デフォルトの名無しさん :03/10/25 11:01
>>306
キイハナで申し訳ありませんが、通常時のタイマの分解能は
あまり高くなくて、しかもOSによって違うらしいです。
マルチメディアタイマを起動すると、分解能が1msecまで上がるそうですよ。

309 名前:デフォルトの名無しさん :03/10/25 11:04
>>308
 timeBeginPriodで精度をせっていすればSleepの精度があがります。
 でもスレッド大麻が一番正確です。



310 名前:デフォルトの名無しさん :03/10/25 11:09
横入りゴメン!
>309
スレッドタイマって何?
VCでも使える?

311 名前:デフォルトの名無しさん :03/10/25 11:20
スレッド立ててアイドリングで無限ループして、
常にタイマを見張るというのがもっとも正確。タイマ時間が経過した時点で、
他スレッドに制御を渡す、と。

ただそれだとCPU時間をフルに食ってしまうので、実際はたとえば
周期時間の90%はスリープさせて、残りはループで見張るというのが現実的。

309がいってるのもこれかな?

312 名前:デフォルトの名無しさん :03/10/25 11:22
スレッドスイッチング(タスクスイッチング)の分解能が20msだから別スレッドでやっちゃったら、
マルチメディアタイマより精度低いんじゃないの?

313 名前:デフォルトの名無しさん :03/10/25 11:27
>>306
ひょっとして、1msごとにBltしてるんじゃ?
それだとマシンによって速度が変わるのは当然かと。

1msごとにやってるなら描画間隔を30msくらいまで下げて見れ。


314 名前:デフォルトの名無しさん :03/10/25 15:44
よっしーの中の人も大変だな。w

315 名前:デフォルトの名無しさん :03/10/25 17:07
>>312
マルチメディアタイマーも基本的には仕組みはスレッドタイマー同じだったはず(内部でスレッドを作ってたと思う)
 ただ、ある条件で精度が滅茶苦茶になるとどっかのHPで書いてあったはずなんだけどよく覚えてません。
切替制度はどうなってたかよくわからない。


316 名前:デフォルトの名無しさん :03/10/25 17:28
キタ━━━━━(゚∀゚)━━━━━!!

317 名前:デフォルトの名無しさん :03/10/25 17:28
地震スレと誤爆した

318 名前:デフォルトの名無しさん :03/10/25 17:43
じゃ、やっぱtimeBeginPriodが最強ってコト?

319 名前:デフォルトの名無しさん :03/10/25 17:48
16bit 時代はマルチメディアタイマーはハードウェア割り込みその物だったね。
Win9x は 32bit 側の処理がよろしくないようで精度がガタガタになったので、
MSはthunk使って、16bit 側でタイマー使えとか平気でKnowledgeに書いてたな。
そうでもしないと、MIDI シーケンサーの様に精度が必要なアプリが使い物にならな
くなったとか。この辺の問題は NT では発生しなかったのかな?
発生してもthunk使って 16bit側にコード置くなんて芸当ではできないが。


320 名前:デフォルトの名無しさん :03/10/25 17:59
>>312
そんなことは無い、タスクスイッチの引き金(API呼び出しなど)がおきれば
滞りなくスイッチされるし、20msは最長でのスイッチング保証時間

321 名前:デフォルトの名無しさん :03/10/25 18:22
>>319
Windows NT/2000/XP では問題ないらしい。


322 名前:デフォルトの名無しさん :03/10/25 19:05
なんか、Win98でも動作させるのが大変そうだな・・・。

323 名前:デフォルトの名無しさん :03/10/25 19:41
>311
> 周期時間の90%はスリープさせて、残りはループで見張るというのが現実的。

この場合Sleep()の精度が問題になるから、やっぱりtimeBeginPeriod()が必要な罠


324 名前:デフォルトの名無しさん :03/10/25 21:39
1msごとに描画を繰り返すのではなく、
タイマーを見て描画位置を決定するほうが賢いと思うが

325 名前:デフォルトの名無しさん :03/10/25 22:14
各ディレクトリの"ディスク上のサイズ"を取得する方法はないのでしょうか?
SH系のAPIにもそれっぽいものはないし、やはりクラスタサイズから自分で計算するしかないのでしょうか。

やろうとしているのはフォルダ単位のバックアップ処理で、どのみちバックアップ先での必要量は計算しないと
いけないといわれてしまえばそれまでなのですが...



326 名前:デフォルトの名無しさん :03/10/25 22:23
フォルダ内のファイルも含めた合計容量?
普通に全部辿るしかないと思われ

327 名前:デフォルトの名無しさん :03/10/25 22:32
リストビューで項目をクリックして選択されたことを知るにはどうしたらいいですか?

328 名前:デフォルトの名無しさん :03/10/25 22:36
LVN_ITEMCHANGED

329 名前:325 :03/10/25 22:47
>>327
LVN_ITEMCHANGING、LVN_ITEMCHANGEDメッセージあたり?

>>326
もちろんフォルダ内のファイル込みです。
つーかフォルダのみのサイズって0でしょう(もちろん管理領域は別として)。

330 名前:デフォルトの名無しさん :03/10/25 23:30
>>329
LVN_COLUMNCLICK?

331 名前:327 :03/10/25 23:52
>>328,329,330
リストビューをサブクラス化して、取りあえず↓のようにしてみたんですが出来ませんでした・・・
こんな感じじゃないんでしょうか?

LRESULT CALLBACK ListViewProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){
 switch(message) {
 case WM_NOTIFY:
  switch(((NMHDR *)lParam)->code) {
  case LVN_ITEMCHANGING:
/* もしくは
  case LVN_ITEMCHANGED:
  case LVN_COLUMNCLICK:
*/
    /* 処理 */
  }
 }
 return CallWindowProc(oldListProc, hwnd, message, wParam, lParam);
}



332 名前:デフォルトの名無しさん :03/10/26 00:02
コンソールアプリで WM_DEVICECHANGEを得る方法はないでしょうか?
GetMessage()してもWM_DEVICECHANGEを含め、何もメッセージが送られてきません。


333 名前:デフォルトの名無しさん :03/10/26 00:09
>>331
ちゃんとNOTIFYメッセージのリフレクションをしてる?
出なければ親ウインドウで受け取れ

334 名前:327 :03/10/26 00:14
ごめんなさい、
  case LVN_ITEMCHANGING:
  case LVN_ITEMCHANGED:
  case LVN_COLUMNCLICK:
は親に返ってくるんですね、取りあえずできるようになりました
ありがとうございました


335 名前:111 :03/10/26 10:14
すみません。やっぱり駄目なようです。
どうやら、XP環境では肝心のアプリで動くのですが、
WIN98の場合は、読み込み違反が出てしまいます。

WIN98でも自作プログラムにイメージを渡した場合はうまく行くので、
VCLの命令の仕業ではないと思うのですが。

このコードよりもより旧式(もしくは安定した)な
メモリの渡し方はあるのでしょうか?


336 名前:111 :03/10/26 10:18
(*画像をポインタの形に置き換える*)
function createImage(var bitmap:TBitmap):PCardinal;
var
x:Integer;
car:PCardinal;
buffer:Pointer;
stream:TMemoryStream;
begin
stream:=TMemoryStream.Create();

try
bitmap.SaveToStream(stream);
stream.Position:=0;
x:=stream.Size;
car:=PCardinal(GlobalAlloc(GPTR,x));
//GHNDでの受け渡しは検証済み。
buffer:=Pointer(car);
stream.ReadBuffer(buffer^,x);
finally
stream.Free;
bitmap.Free;
end;

result:=car;

end;



337 名前:111 :03/10/26 10:20
(*要求を受け取り、画像をポインタで返す*)
function GetImage(fileName:PChar;var data:PCardinal):boolean;stdcall;
var
bitmap:TBitmap;
director:TImageDirector;
begin

result:=false;
director:=TImageDirector.Create();


bitmap:=director.loadImage(fileName);

if(bitmap<>nil)then
begin
data:=createImage(bitmap);
result:=true;
end;

end;

338 名前:デフォルトの名無しさん :03/10/26 12:07
SDKインストールしたhelpフォルダのヘルプってどうやって見るんでしょう?
拡張子がhxs,hxj,hxk,hxtとかになっていて、
テキストで開くとXMLのようなんですが。


339 名前:デフォルトの名無しさん :03/10/26 12:32
>>338
スタートメニューからPlatform SDK Documentationをクリック




340 名前:338 :03/10/26 12:46
>>339
THX!

341 名前:デフォルトの名無しさん :03/10/26 14:56
RichEditコントロールで、
現在画面内に何行目から何行目まで表示されているかを知るにはどうしたらいいですか。

342 名前:デフォルトの名無しさん :03/10/26 18:45
>>341
文字幅と高さから計算するしかないんでないの?


343 名前:デフォルトの名無しさん :03/10/26 18:59
>>341
EM_GETFIRSTVISIBLELINEと・・・

344 名前:デフォルトの名無しさん :03/10/26 19:04
EM_CHARFROMPOSでウィンドウサイズ(x=0, y=rc.bottom-rc.top)から最終行の文字番号取って、
EM_EXLINEFROMCHARで行番号を取得、
で良いと思われ。


345 名前:111 :03/10/26 20:52
いくら探しても他の手段が見つからない(うまく行かない)んで、
メモリ受け渡しに問題はないと勝手に納得しました。

とりあえず、諸悪の権化はdllでの
デバイスコンテキスト複数精製と仮定して、(ロックしてもだめだった)。
ひとつのデバイスコンテキストで全ての画像変形を
こなすことに決めました。

ところで、利用側のプログラムでdllのデバイスコンテキスト数を
制限される、と言うのはよくあることなんでしょうか?

346 名前:デフォルトの名無しさん :03/10/26 21:32
>111
VC使い何で、ボーランドのソースはよくわからんが、とりあえず
Globalメモリ操作関数、ちゃんと調べて使ってるか?

347 名前:デフォルトの名無しさん :03/10/27 01:40
HWND  hWnd;
HANDLE hProcess;
DWORD ProcessID, ExitCode;

 if((hWnd = FindWindow(NULL, "ExitWindow")) != NULL){
   if(GetWindowThreadProcessId(hWnd, &ProcessID) != 0){
     if((hProcess = OpenProcess(PROCESS_ALL_ACCESS, TRUE, ProcessID)) != NULL){
       if(GetExitCodeProcess(hProcess, &ExitCode)){
         ExitProcess(ExitCode);
        }
     }
   }
 }

このコードを実行した場合、"ExitWindow"のプロセスが終了するのではなく
自分自身のプロセスが終了してしまいます。何故でしょう?
"ExitWindow"のプロセスを終了させるにはどう書けば良いのでしょうか?

348 名前:デフォルトの名無しさん :03/10/27 02:32
>>347
TerminateProcess(hProcess, anyExitCode);

それはさておき、GetExitCodeProcess()が失敗したときってそもそも終了させられない気がするんだが。

349 名前:デフォルトの名無しさん :03/10/27 02:40
>348
Terminateヤバくない?
適当なメッセージ(WM_CLOSEとか?)を送って、
自主的に終了してもらうよう要請するのが、健全なアプリじゃないかな。

350 名前:デフォルトの名無しさん :03/10/27 03:18
他のアプリを正常に終了させたいときは
WM_QUERYENDSESSION + WM_ENDSESSION
だと思うが。Terminate*は最後の手段。

351 名前:111 :03/10/27 06:49
>>346
レスありがとうございます。
試行錯誤したところ、win98はxpに比べて、
ハンドルの寿命が早いと分かりました。
グローバル変数を増やして対処したいと思います。

では消えますんで。

352 名前:デフォルトの名無しさん :03/10/27 07:19
>>350
ENDSESSION系送っても終了するとは限らないと思うが。
Terminateが最後の手段なのは同意

353 名前:デフォルトの名無しさん :03/10/27 09:13
相手のプロセスハンドルをFindWindow()から手繰ってくるようなアプリだから
相手が自主的に終了してくれるのなんて当てにできないと思うのだが。

354 名前:デフォルトの名無しさん :03/10/27 16:53
それでもまずメッセージを送ってどうしても協調してくれないときだけ
最後の手段としてTerminateすべき。
ようするにタスクマネージャと同じだが

355 名前:347 :03/10/27 18:31
レスどうもです。

>>348
ヘルプには、TerminateProcessはなるべく使わずに
ExitProcessの方を使えと書いてあったのでExitの方を使ってました。
でも、ココで聞く前に自分でTerminateの方も試したのですがダメでしたね。

>>349
自分もWM_CLOSEメッセージを送って終了させる事は出来ていたのですが、
>>347に書いたコードがなぜ動かないのか分からなかったので質問しました。

>>350>>352
やはり終了させるのは、メッセージを送るのが良いようですね。

>>353
他に良いプロセスハンドルの取得方法は何かありますか?

356 名前:デフォルトの名無しさん :03/10/27 18:34
誰もハンドルの取得方法が悪いとは言っていないと思うが

357 名前:347 :03/10/27 18:39
>>356
いや… 他に良い方法があるのかな と思いまして。


358 名前:デフォルトの名無しさん :03/10/27 21:16
>347
何故動かないのか、は、とにかくExitProcess()の説明をよーく見ろ。

359 名前:347 :03/10/27 23:03
>>358
MSDNの説明だけではよく分かりません…
なぜだか教えて頂けませんか??

360 名前:デフォルトの名無しさん :03/10/27 23:05
>>359
ExitProcess は呼び出したプロセスを終了する API。


361 名前:347 :03/10/27 23:10
>>359
やっぱりそうでしたか…
引数にプロセスハンドルが無いので
どうやって識別するのかなと不思議に思ってました。
どうもです。


362 名前:347 :03/10/27 23:11
>>359 ×
>>360

363 名前:デフォルトの名無しさん :03/10/27 23:20
>>359
確かにMSDN見たら呼び出し元を終了するとは一言も書いて無いな。
引数にハンドルが無いことと、"Exit"という名前から普通はわかるもんだが。
しかも日本語訳がa processをご丁寧に1つのプロセスと訳してくれちゃってるのが問題だな。

364 名前:デフォルトの名無しさん :03/10/27 23:53
>>304
>>305
ありがとうございました。パスの追加はうまくいきました。
ただ即時にシステムに反映させるのがうまくいきませんでした。
SendMessageTimeoutでHWND_BROADCAST指定してみたんですが、WPARAMに何か必要だったのでしょうか?
今のところ強制ログオフさせることで回避しています。

365 名前:デフォルトの名無しさん :03/10/28 00:01
>>359
ワラタ

まあ書いてる本人が解ってないのを
読んで解れってのも原理的にシュールな話だな

366 名前:347 :03/10/28 00:13
MSDNのTerminateProcess()項にも
TerminateProcess()を使わずに、
なるべくExitProcess()の方を使うように
みたいな事が書いてましたので
完全に勘違いしてました…

367 名前:デフォルトの名無しさん :03/10/28 10:52
サービスAからアプリBを起動。
サービスAは自作。アプリBは自作ではないため修正不可。
ログオフしてもアプリBは起動したまま。
アプリBが死んだらサービスAがアプリBを再起動ではだめ。
アプリBはシャットダウンか、サービスA停止まで起動したまま。

こういうことってできますか?
外部プロセスからの、アプリBへのログオフイベントの抑止方法が
わかんないです。お願いします。

368 名前:デフォルトの名無しさん :03/10/28 11:17
>>367
MsgWaitForMultipleObjectsを使えば?

369 名前:デフォルトの名無しさん :03/10/28 12:07
>>367
親プロセスがコンソールイベントを無視に設定しておけば、
子プロセスに継承されるはず。

370 名前:デフォルトの名無しさん :03/10/28 12:57
数種類のビットマップを BitBlt で何度も描画したい時に、
毎回 SelectObject するのが面倒くさいので、各 HBITMAP 毎に
デバイスコンテキストを作成しておく、というのは
まともなやり方でしょうか?


371 名前:デフォルトの名無しさん :03/10/28 15:17
それってCreateCompatibleDCで作成したDCの話?

372 名前:デフォルトの名無しさん :03/10/28 15:30
>>364
2000のSP1だか2だか忘れたけど
システム環境変数の反映がうまくいかないバージョンがあった気がする
ログオフさせても問題ないならそれでいいんじゃない

373 名前:367 :03/10/28 16:14
>>368>>369
レスありがとうございます。

>>368
これは、アプリBへのログオフイベントを横取りして
捨てるってことでしょうか?
試してみます。


>369
サービスAの方で、
SetConsoleCtrlHandler(NULL, TRUE);
ってやってから、プロセス起動ってことでしょうか?
(全然見当ちがいだったらすまんです)
ためしにやってみたら、だめだった。
イベント無視は引き継いでるんですが、アプリBの方で
コンソールイベントの処理があるようです。
(アプリBをnotepad.exeでためしてみたらnotepadは起動しっぱなし
になりました)


374 名前:デフォルトの名無しさん :03/10/28 16:50
Admin 権限を持っているユーザにのみ実行が許されるソフトを書こうとしています。
プログラムの頭でユーザが Admin 権限を持っているかどうかをチェックしたいです。

IsUserAnAdmin に拠らずに別の方法で Admin 権限の確認を取る方法はありますか?


375 名前:デフォルトの名無しさん :03/10/28 17:09
IEでマウスのホイールボタンをクリックすしてスクロールさせる方法を、
Win32APIのmouse_eventを使ってやりたいのですが、
どのような引数を渡してあげればいいでしょうか?

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpwinui/html/_win32_mouse_event.asp

MSDN見ても特に記述が無いのですが・・・

376 名前:デフォルトの名無しさん :03/10/28 19:18
mouse_event(MOUSEEVENTF_MIDDLEDOWN, 0,0,0,NULL);
mouse_event(MOUSEEVENTF_MIDDLEUP, 0,0,0,NULL);

377 名前:名無し@沢村 :03/10/28 20:22
リッチエディットで特定の予約語だけ色づけするにはどうすればいいですか?

378 名前:367 :03/10/28 20:28
>>368
これってアプリBへのログオフイベントを検出できても
横取りできずにプロセス終了してしまうんじゃないでしょうか?


379 名前:名無し@沢村 :03/10/28 20:36
リッチエディットで、キャレットの置かれている行と列をステータスバーに表示したいんですが、
case WM_NOTIFY:
lpN = (LPNMHDR)lParam;
switch (lpN->code ) {
case EN_SELCHANGE:
のタイミングでステータスバーに行と列を表示すると、文字を選択していってマウスを話したタイミングでしか表示されません。
文字を選択してマウスをドラッグしていくと、リアルタイムで行と列が変化するようにしたいんですが、
case EN_MSGFILTER:
pmf = (MSGFILTER *)lParam;
if (pmf->msg == WM_MOUSEMOVE)
のタイミングでステータスバーに行と列を表示しようとしてもうまくいきません。
どうすればいいですか?

380 名前:デフォルトの名無しさん :03/10/28 21:14
>>379
沢村っぽくないぞ

381 名前:375 :03/10/28 21:50
>>376
駄目でした・・・
MIDDLEボタンではないのでは?

382 名前:ataraw :03/10/28 22:48
ファイナルデータやフリーソフトの復元はハードディスクにまだ生きてるファイルを探しますが、そういうのを操作するAPIってあるんですか?
それともアセンブラを使って直接ハードを制御するのですか?

383 名前:デフォルトの名無しさん :03/10/28 23:00
DeviceIoControl・・・・かも

384 名前:デフォルトの名無しさん :03/10/28 23:13
>>374
あります。

385 名前:デフォルトの名無しさん :03/10/28 23:27
VCで作ったDLLをASP(VBScript)から直接呼び出すことは出来ますか?
ASPでAPIを使うときってレジストリに登録されてないと呼び出せませんよね?
VCのDLLはレジストリに登録できないし。
(regsvr32では出来ませんでした)

VCでATL(COM)で作り直すしかないんですかね?


386 名前:デフォルトの名無しさん :03/10/28 23:28
あげ

387 名前:デフォルトの名無しさん :03/10/28 23:30
http://jbbs.shitaraba.com/news/1370/

388 名前:デフォルトの名無しさん :03/10/29 00:22
WinFX API
ttp://pc.watch.impress.co.jp/docs/2003/1029/pdc01.htm

数年後(数ヵ月後?)には WinFX API 質問箱ってのが立ってるんだろうなぁ〜
とか思いつつ、すれ違いなので sage てみる今日この頃。

389 名前:デフォルトの名無しさん :03/10/29 01:18
初めまして。
ネットのhtmlファイルを取得するためにURLDownloadToFileがあることはわかりました。
ところがこれはファイルを保存しなければいけない模様です。

当方は複数のhtmlファイルのソースがわかればいいので
いちいち保存はしたくないのですがなんかいい方法はないでしょうか?
VB6を使用しているのでWebBrowserコンポーネントなども使ったのですが
オリジナルのソースは取得できませんでした。

390 名前:デフォルトの名無しさん :03/10/29 01:21
>>389
WinSock及びWinSock系ライブラリで余裕。


391 名前:デフォルトの名無しさん :03/10/29 01:43
ふつー、その程度ならWinInetだろ。

392 名前:デフォルトの名無しさん :03/10/29 04:25
>>388
確かにスレ違いだが、このAPIがDLLベースなのか否かが気になる所。
オブジェクト指向OSとなるらしいが、オブジェクト指向では無い言語は
切り捨てなのかも気になる。
まあ、過去資産はエミュレータ上で動かせと言う事なのか。

393 名前:デフォルトの名無しさん :03/10/29 05:02
Win32API質問箱でWinFXの質問をしたりその逆だったりで「スレ違いだ!」と言われる初心者も出てくるわけだ

394 名前:デフォルトの名無しさん :03/10/29 07:38
GDI+の立場っていったい、、

395 名前:デフォルトの名無しさん :03/10/29 09:17
マウスポインタが砂時計状態か否かを判定することはできますか?

396 名前:x :03/10/29 09:36
WindowsXPの複数モニタ環境にて、セカンダリモニタを
(まずは手動で)Disableするツールを作りたいのですが、
どの辺のAPIを使ったらよいのでしょう?
どなたかヒントをください。

397 名前:デフォルトの名無しさん :03/10/29 09:53
http://longhorn.msdn.microsoft.com/lhsdk/port_lhsdk_home.aspx
ここ見るとWinFXはWin32APIの次期版というよりも、.NETとWin32APIを含んだものみたいだけどどうなん?
両者を総称してWinFXってこと?

398 名前:デフォルトの名無しさん :03/10/29 10:02
つまりWinFXが入ったPCを、PC-FXと呼ぼうというわけだな

399 名前:デフォルトの名無しさん :03/10/29 10:14
MFCみたいな構成だったら非常に萎え

400 名前:デフォルトの名無しさん :03/10/29 11:04
なんかWinFXで新スレ立てたい勢いだけど…
>>397の右上に言語の選択ボックスがあって.NET対応言語しか出てないんだよね。
一応本文には依然としてunmanagedも有効だ、みたいなこと書いてあるけど。
>>388みる限り構成としては.NETっぽい階層なんだろうか。
WinFXクラス階層みたいのがあって、そのクラス経由でmanagedとunmanagedが使えるってことなのかな。
よくわからないよ…

401 名前:デフォルトの名無しさん :03/10/29 11:21
システムコール>低レベルAPI>高レベルAPI>クラスライブラリ(仮想マシン)
という階層構造そのものは変化しないが、この先x86、IA-64、x64(だっけ)と対応
CPUが増えてくるからネイティブは推奨しないって程度じゃないのか?

402 名前:デフォルトの名無しさん :03/10/29 11:24
WinFXのオブジェクト図ポスターをはっきり見たい

403 名前:デフォルトの名無しさん :03/10/29 11:27
Longhorn SDK で遊んでる猛者はおりませんのんか

404 名前:デフォルトの名無しさん :03/10/29 11:44
じゃあWin32APIと.NETライブラリを新しくして、あわせてWinFXって呼ぼうってだけの話か?
中身は新APIとそれをラップする.NETライブラリだと。
それならそうと早く言ってくれよー。
てっきりAPIと.NETを包含するWinFXっていうまったく新しいクラスライブラリでもできるのかと思ったよ。

405 名前:デフォルトの名無しさん :03/10/29 12:51
Win32と.NETの混合というより、Win32を.NETに移植したって感じかな。

406 名前:デフォルトの名無しさん :03/10/29 12:58
Win32APIを大幅に変更し、それらのAPIをサポートするように.NETクラスライブラリを拡張しました、
とかの方がわかりやすいのにな。
WinFXなんて新しい単語作らなくても。

407 名前:デフォルトの名無しさん :03/10/29 13:05
API名がCreateFileFXみたいになんじゃねーの

408 名前:デフォルトの名無しさん :03/10/29 13:18
Win32APIとWinFXの混在コードが可能なのかな。
可能なら>>407もあり得なくも無いところが恐い。

409 名前:デフォルトの名無しさん :03/10/29 13:30
昔ゲームで「○○システム」と付けるのが流行った時期があった。
大して違わないモノに別の名前付けるのもそーゆーノリじゃねーの?

410 名前:デフォルトの名無しさん :03/10/29 13:38
まぁMSはやたらActiveってつけたり.NETってつけたりするのが好きだからな

411 名前:デフォルトの名無しさん :03/10/29 13:42
【お題】 ところでFXってなんかの略か?

412 名前:デフォルトの名無しさん :03/10/29 13:47
とりあえずLonghornSDKのサイト見ても.NET一色なのでこのスレ的にはこれ以上大して盛り上がらんか。

413 名前:デフォルトの名無しさん :03/10/29 14:05
http://www.zdnet.co.jp/news/0310/29/nj00_winfx.html
これがちょっとわかりやすかな。

414 名前:デフォルトの名無しさん :03/10/29 14:13
あ、Win32APIを元に考えるから混乱するのか。
Win16→Win32→WinFXってわけね。
Win32APIも.NETもWin32だもんな。
それが次の新Win32APIと新.NETでWinFXになるってことか。

415 名前:デフォルトの名無しさん :03/10/29 14:13
Avaron で .NET の form じゃない部分(従来は GDI でシコシコやってたとこ) は
xml ベースの dom になってるっぽい感じですね。。。

416 名前:デフォルトの名無しさん :03/10/29 14:33
http://www.zdnet.co.jp/news/0310/29/l_avalon.jpg
この図見るとGDI/GDI+もそのまんまあるね

417 名前:デフォルトの名無しさん :03/10/29 14:44
>>416
多分 GDI/GDI++ や Direct3D Graphics を通してその下にある HAL にアクセスする、って言う意味なんじゃないかな。
既存のアプリは動くようにするそうだからどっちにしろインターフェイスとしての GDI は残すと思うよ。

418 名前:デフォルトの名無しさん :03/10/29 14:49
http://www.zdnet.co.jp/news/0310/29/l_winfx.jpg
これ見るとWinFX=.NETクラスライブラリだと思ってしまうけどどうなの。
Win32APIに相当する WinFX API ってのは公開されないわけ?

419 名前:デフォルトの名無しさん :03/10/29 14:58
なぜ Microsoft.WinFX ではなく System 名前空間を使ったのか問い詰めたい。

420 名前:デフォルトの名無しさん :03/10/29 17:34
プロセスIDから実行時のコマンドラインを得るにはどうすればいいですか?
小一時間ググッてるんですが、見つからない…

421 名前:デフォルトの名無しさん :03/10/29 17:40
OpenProcess>CreateRemoteThread>GetStartupInfoかな

422 名前:420 :03/10/29 17:47
>421
蟻がd。調べてみます。

423 名前:420 :03/10/29 19:07
STARTUPINFOにコマンドライン系のデータがない…
_| ̄|○

424 名前:デフォルトの名無しさん :03/10/29 19:32
>>398
>>399
>>404
ワロタ

425 名前:420 :03/10/29 19:48
そうか
OpenProcess>CreateRemoteThread>getCommandLine
これでいけるのかな

426 名前:420 :03/10/29 20:38
HANDLE pHandle = OpenProcess(PROCESS_CREATE_THREAD, FALSE, PID);
if(pHandle == NULL){
 return TRUE;
}
char cmdLine[_MAX_PATH + 256];
DWORD threadId;
HANDLE threadHandle = CreateRemoteThread(pHandle, NULL, 0, ThreadProc, cmdLine, 0, &threadId);


アクセスが拒否されました。 だって、…

427 名前:デフォルトの名無しさん :03/10/29 21:28
【質問】
DBxSTANDなどでプロセスを選択すると、そのプロセスが使用しているメモリ領域が分かりま
すが、他のプロセスが使用しているメモリ領域を取得するにはどうすればよいのでしょうか?

【できていること】
このスレを見てOpenProcess、ReadProcessMemoryなどは上手くいった。
(ReadProcessMemoryのアドレスはDBxSTANDのアドレスを手動で入力した。)

【やってみたこと】
方向違いかもしれませんが・・・
1.GetProcessMemoryInfoを使おうと思ったが上手くいかなかった。
 そのまま単にGetProcessMemoryInfo使おうとするとコンパイルエラー。
 プロジェクトのディレクトリにpsapi.hを作ると(MSDNのソースそのままコピー)
 コンパイルは通るが、リンクのときに
  CSpy.obj : error LNK2001: 外部シンボル "_GetProcessMemoryInfo@12"
                                        は未解決です。
 と怒られる。

こんな所で挫折しています。

428 名前:427 :03/10/29 21:33
ちょっと分かりにくい表現だったので補足します。
「他のプロセスが使用しているメモリ領域」とは、
そのプロセス見えのアドレスが分かればいいです。
たとえば 0x00400000番地〜0x0040CFFF番地を使用しているなど。

429 名前:デフォルトの名無しさん :03/10/29 21:38
>>427
MSDNのGetProcessMemoryInfoの説明の下にヘッダファイルだけじゃなくてインポートライブラリが書いてあるでしょ。
それリンクして。
今後他のAPI使う時も同じね。

430 名前:デフォルトの名無しさん :03/10/29 22:32
結果として開発者は,Longhorn向けのアプリケーションを記述する場合に,
Win32と.NET Framework,およびWinFXの三つのAPIから選択しなければならない。
Allchin氏は,Win32および.NET FrameworkのAPIを使った既存のアプリケーションは
Longhornで動作することを保証した。WinFXはカバー範囲が.NET Frameworkよりも
広く,WinFXでなければ実現できないものもある。一方Win32で事足りる
アプリケーションであってもWinFXを使えば,「新しいAPIではアプリケーションの
インストール時に再起動する必要を取り除く努力をしている」

http://itpro.nikkeibp.co.jp/free/NBY/NEWS/20031028/2/

結局Win32もめでたく残る、と。
おまえら、生き残りましたよ。

431 名前:デフォルトの名無しさん :03/10/29 22:42
SUN と違って MS はレガシー API / ABI をそう簡単に切り捨てないでしょ。
いまだに Win16 のアプリだって動くし。。

432 名前:デフォルトの名無しさん :03/10/29 22:51
もしかしてWinFX使ったら2k、XPで動かない?
だったら誰も使いそうにないな。

433 名前:デフォルトの名無しさん :03/10/29 22:55
動くわけ無いジャン

434 名前:420 :03/10/29 22:57
>426
何でこれでアクセスが拒否されるのでしょうか?

435 名前:デフォルトの名無しさん :03/10/29 23:01
おー、>>430が一番わかりやすい解説だ。

436 名前:427 :03/10/29 23:06
>>429
psapi.lib(サンプルの中にあったんですね)をリンクしたら通りました。
どうもありがとう。
果たして方向性はあっているのだろうか・・・・

437 名前:デフォルトの名無しさん :03/10/29 23:07
>>430
典型的な上位互換OSとなるわけだな。無問題。

438 名前:デフォルトの名無しさん :03/10/29 23:07
3つから選択ってあるけど実質2つだよね。WinFXも on .NETなわけだから。

439 名前:デフォルトの名無しさん :03/10/29 23:11
>>436
ちなみにpsapi.dllはNT系にしかないから配布したりするアプリなら注意な

440 名前:デフォルトの名無しさん :03/10/29 23:21
>>438
ですね。

> WinFxはLonghornのメインAPIになる。これまでの.NET Frameworkに,
> (1)画面描画機構「Avalon(開発コード名)」,
> (2)データベースを使ったファイル・システム「WinFS(同)」,
> (3)そしてWebサービス用の非同期通信機能「Indigo(同)」を
> 新機能として追加する。

441 名前:427 :03/10/29 23:22
>>439
静的にリンクしました。
後、GetProcessMemoryInfoはとりあえず動作しました。
が、しかし・・・・
もうちょっと見てみます。

442 名前:デフォルトの名無しさん :03/10/29 23:25
やっぱ用語変えただけかー。数時間踊らされた。

443 名前:427 :03/10/30 00:35
GetProcessMemoryInfoで一応、いろんな値が取り出せたのですが、
どうも欲しい値との関連性が見出せないので、ひょっとして方向違い?

ということで別の関数を探すとGetWindowLong見たいなのがあったので、
IndexにGWL_HINSTANCEをセットして先頭アドレスを取得。
最終アドレスは取得方法が良く分からなかったため、
「先頭アドレスからReadProcessMemoryで取得できなくなるまで探す」
という路線で解決しました。

尚、最終アドレスをパッと取得できる方法は引き続き募集中です。

444 名前:デフォルトの名無しさん :03/10/30 01:17
>>372
WPARAMに"Environment"とだけいれたらうまくいきました。
レジストリキーの名前を全部入れてたのが敗因だったようです。

445 名前:デフォルトの名無しさん :03/10/30 01:24
>>443
VirtualQueryEx

446 名前:デフォルトの名無しさん :03/10/30 04:43
>>420
CreateRemoteThreadするまえに
対象プロセスをsuspendにしなくていいの?

447 名前:名無し@沢村 :03/10/30 08:56
>>66
改行の仕方を教えて下さい!
\nで上手く改行できませんでした。
>>67
Windowsの改行って何だったっけ?
>>68
\r\n
>>69
上手くいきました。ありがとうございました。


プッ

448 名前:デフォルトの名無しさん :03/10/30 15:54
>>447
そんな前の書き込み掘り起こしてどうすんだよ・・・。

449 名前:デフォルトの名無しさん :03/10/30 16:43
http://itpro.nikkeibp.co.jp/free/NBY/NEWS/20031028/2/

> WinFxはLonghornのメインAPIになる。これまでの.NET Frameworkに,
> (1)画面描画機構「Avalon(開発コード名)」,
> (2)データベースを使ったファイル・システム「WinFS(同)」,
> (3)そしてWebサービス用の非同期通信機能「Indigo(同)」を
> 新機能として追加する。

別に.NETは.NETのままなんだね。

450 名前:デフォルトの名無しさん :03/10/30 16:49
http://pc.watch.impress.co.jp/docs/2003/1030/pdc02.htm
そう簡単な話でもないらしい。

451 名前:デフォルトの名無しさん :03/10/30 17:04
【WinFX】次世代Windows Longhornを語るスレ
http://pc2.2ch.net/test/read.cgi/tech/1067489881/

FX関係はこちらへどうぞおこしやす。

452 名前:427 :03/10/30 21:05
>>445
下記の手順でで上手くいきました。
m_EndAdr = m_InstanceHandle
iInfo.RegionSize = 0;
while(iInfo.AllocationProtect != 0) {
  m_EndAdr += iInfo.RegionSize;
  VirtualQueryEx(m_hProc, (LPCVOID)(m_EndAdr), &iInfo, sizeof(iInfo));
}
m_EndAdr--;
どうもありがとう。

453 名前:427 :03/10/30 21:34
ごめんなさい。嘘がありました(たまたま動いてはいるけど)。
正しくは下記です。
m_EndAdr = m_InstanceHandle;
iInfo.RegionSize = 0;
do {
  m_EndAdr += iInfo.RegionSize;
  VirtualQueryEx(m_hProc, (LPCVOID)(m_EndAdr), &iInfo, sizeof(iInfo));
} while(iInfo.AllocationProtect);
m_EndAdr--;

454 名前:デフォルトの名無しさん :03/10/30 22:42
質問です。
Windows2000から、ディスクにはBasicとDynamicという種類がありますよね?
これを判別できる方法を、どなたかご存知ないでしょうか?
どうか、よろしくお願いします。

455 名前:デフォルトの名無しさん :03/10/30 23:48
LFNがitteyoshi.txtでSFNがITTEYO~1.TXTのファイルがあるフォルダに
ITTEYO~1.TXTをコマンドプロンプトからコピーしようとすると
上書きの警告が表示されますが、エクスプローラからコピーすると
何事もなくコピーが終了して、しかも勝手にitteyoshi.txtのSFNが
変えられています。
これってどうやってるんでしょうか? 隠しAPI?

456 名前:デフォルトの名無しさん :03/10/31 00:02
MSDNでAPIのリファレンスを英語と日本語で見たいのですが、
どうやって検索するのでしょうか?
http://search.microsoft.com/japan/
だと全然ヒットしないです。


457 名前:デフォルトの名無しさん :03/10/31 00:12
http://www.microsoft.com/japan/msdn/library/default.asp
http://msdn.microsoft.com/library/default.asp
ここで検索。

しかし、googleで検索したほうがhit分かりやすい罠
'API名 site:microsoft.com'

458 名前:デフォルトの名無しさん :03/10/31 00:14
Googleで引く

459 名前:デフォルトの名無しさん :03/10/31 00:17
>>456
ttp://www.microsoft.com/japan/msdn/library/default.asp
ここを見ると左のMSDN ライブラリが開けないので無理では?
昔はできてた気がするけどやり方違うのかな。

460 名前:456 :03/10/31 00:37
レスありがとうございます。Googleが良いですね。

http://www.microsoft.com/japan/msdn/library/default.asp
で CreateWindowEx を検索すると、
http://search.microsoft.com/search/results.aspx?st=b&qu=CreateWindowEx&view=ja-jp
になって見つからないのに、
http://www.google.com/search?q=CreateWindowEx+site%3Amicrosoft.com
だと英語も日本語もヒットしました。

英語版MSDNは
http://search.microsoft.com/search/results.aspx?View=msdn&st=a&qu=CreateWindowEx&c=4&s=2
でヒットしました。

461 名前:デフォルトの名無しさん :03/10/31 08:27
VC++6.0のAppWizardで開発してます。
winsockで非同期処理をする為にWSAAsyncSelectを
下記のように使っているのですが上手くいきません。

WSAAsyncSelect(Socket,m_hWnd, WM_ACCEPT,FD_ACCEPT);

Viewクラス内で処理しています。
受け取ったメッセージはDefWindowProcで処理しています。
恐らくウインドウハンドルが正しく指定されていないと思うのですが、
どのように指定すればいいのでしょうか?



462 名前:デフォルトの名無しさん :03/10/31 20:20
>>455
itteyoshi.txt (ITTEYO~1.TXT)を適当な名前tmpにリネーム

ITTEYO~1.TXTをコピー

tmpを itteyoshi.txt にリネームし itteyoshi.txt (ITTEYO~2.TXT) になる

だったかな。filemon.exe なんかで調べると何やってるかわかるよ。

463 名前:デフォルトの名無しさん :03/10/31 20:40
[test]
test=1

上のiniファイルのエントリーをGetPrivateProfileInt()で読み込んだ後
iniファイルを手動で下の様に編集して、

[test]
test=0

再度、GetPrivateProfileInt()で読み込んでも
0が帰って来ないで1が帰ってきます…
最初のGetPrivateProfileInt()の時に
別のテンポラリファイルでも作ってるのでしょうか?

464 名前:デフォルトの名無しさん :03/11/01 03:48
C最高
age

465 名前:デフォルトの名無しさん :03/11/01 04:16
>463
ファイルアクセスで速度が落ちないようにキャッシュしているのでは。


DDEで起動してるVS.NET 2003にcppファイルとかを表示させたいんだけど、成功した人いる?
IEとかのDDEは目的どおり動くんだけど、VSは::DdeClientTransaction()がNULLを返してくる。
しかも::DdeGetLastError()は0を返してくるから原因がわからず。
何がまずいのかなぁ。


466 名前:デフォルトの名無しさん :03/11/01 16:04
>>463
Windows9x系の場合は、iniファイルのキャッシュが働いてるのかも。
途中で、
WritePrivateProfileString(NULL, NULL, NULL, iniファイル名);
を実行すれば、キャッシュがフラッシュされる。


467 名前:デフォルトの名無しさん :03/11/01 16:17
共有ファイルを、CreateFileでオープンできるのは分かったんだが、
その共有ファイルに、パスワードを設定してある場合、
どうやってオープンしたらいいですか?
SECULITY_ATTLIBUTESを使うかと思ったんですが、解説読んでも
良く分からないんで。

468 名前:463 :03/11/01 18:34
>>465
やはりメモリにキャッシュしているようですね。

>>466
環境書いてなかったですが、その通りWin98SEでこうなります。
言われた通りにWritePrivateProfileString()で一旦キャッシュをフラッシュしてから読み込むようにします。

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

469 名前:デフォルトの名無しさん :03/11/01 18:47
>>467
共有ファイルにパスワード ?
OS とファイルシステムを書いてくれ。

> SECULITY_ATTLIBUTES

SECURITY_ATTRIBUTES のことか ?

470 名前:デフォルトの名無しさん :03/11/01 19:14
>469
OS:Windows95シリーズ
ファイルシステム:FAT32

471 名前:デフォルトの名無しさん :03/11/01 19:58
95でFATってファイルにパスワードかけられたっけ?

472 名前:デフォルトの名無しさん :03/11/01 20:32
無理じゃと思う。

473 名前:デフォルトの名無しさん :03/11/01 20:34
ファイルじゃなくて、リモート端末だったりして。

474 名前:デフォルトの名無しさん :03/11/01 21:08
WinSockのDLLの、Cソースはオープンじゃないの?

475 名前:デフォルトの名無しさん :03/11/01 21:32
つーか、どっかで入手できるのか ?

476 名前:デフォルトの名無しさん :03/11/01 21:46
半自己解決
IEのDDEはREQUESTでも動いて、VSのはEXECUTEじゃないと動かないのね。
でもリリースだとVSに「パラメータが間違っています。」と怒られて実行不可。
デバッグで動くからわけがわからん。

477 名前:デフォルトの名無しさん :03/11/01 22:19
単純に"があるかないかだった。吊ってくる。

478 名前:デフォルトの名無しさん :03/11/02 02:07
質問です。
コンソールアプリでキー入力がされるまで待機したいのですが、
以下のコードではうまくいきません。

HANDLE hStdIn;
hStdIn = GetStdHandle(STD_INPUT_HANDLE);
if(INVALID_HANDLE_VALUE != hStdIn)
WaitForSingleObject(hStdIn, INFINITE);

キー入力をしなくてもWaitForSingleObject()がWAIT_OBJECT_0を返して
抜けてしまいます。GetStdHandle()ではなくCreateFile()も試しましたが駄目でした。
何がまずいのでしょうか?

479 名前:デフォルトの名無しさん :03/11/02 03:00
ReadConsoleInput

480 名前:478 :03/11/02 03:12
>479
WaitForMultipleObjects()等を使って他のイベントと同時に待機しようとしています。
質問がおかしかったですね。すみません。

481 名前:デフォルトの名無しさん :03/11/02 05:58
ダイアログでスライダー(トラックバー)を使おうと思ったんですが
値の取得や設定はどのようにすればいいでしょうか。
サンプルを探しても、MFCだったり.NETだったりと。
使い方が良く判りません。他のダイアログのコントロールも使いたいと
考えているのですが、調べ方なども一緒に教えていただけませんか?

482 名前:481 :03/11/02 06:26
もしや、MFCじゃないと使えないですか?

483 名前:デフォルトの名無しさん :03/11/02 06:31
ドローソフトなんかによくあるラバーバンド(蟻の行進?)を実装したいのですが、
HDCに対してHPENでXOR描画って出来ないんでしょうか?
#DrawFocusRectだと点滅処理が出来なさそう。

484 名前:481 :03/11/02 06:40
やった事ないけどGetDlgItemでいけるんでないの?

485 名前:481 :03/11/02 07:08
>>484
すんません、それでハンドル取得してどうすりゃいいんでしょう?

486 名前:デフォルトの名無しさん :03/11/02 07:12
>>2を参照しる

487 名前:467 :03/11/02 10:43
なーんだ。誰も答えてねーじゃん。
パスワードって、共有ファイルでパスワードを設定できんのは、フォルダ単位だろが。
しょうがねーから必要なときに自分でいろいろやってみるわ。
分かっても教えてやんね

488 名前:デフォルトの名無しさん :03/11/02 11:00
>>487
大丈夫。あんたが教えるまでもなく自力で調べられる奴か
教わっても分からない香具師か、どっちかしかいないだろうから。

489 名前:467 :03/11/02 11:03
ツマンネ

490 名前:デフォルトの名無しさん :03/11/02 11:06
>>483
私もそれ知りたい。
旧VBだと簡単にできるんだがあれはどうやってるんだろう。

やっぱり自分で線分上の座標計算して色取得してXORとってプロットする
コード書かないとだめなのか。

491 名前:デフォルトの名無しさん :03/11/02 11:07
>481
http://www.kumei.ne.jp/c_lang/sdk2/sdk_190.htm
ここに載ってるじゃん!

492 名前:デフォルトの名無しさん :03/11/02 11:09
>>488
厨にかまうなよ。

493 名前:デフォルトの名無しさん :03/11/02 12:04
当方マカで申し訳ないのですが、ラバーハンドというのはいわゆる投げ縄ツールのことでしょうか。
それならば、領域をXORで描画しながら、一定時間毎にペンのパターンを変えていくことで実現できますよ。


494 名前:デフォルトの名無しさん :03/11/02 12:10
>>493
領域内じゃなくて囲んだ線だけがウニウニするやつ。

495 名前:デフォルトの名無しさん :03/11/02 13:10
あれは白黒斜め縞のペンでひたすら線を書いてるだけだと思うが。

496 名前:デフォルトの名無しさん :03/11/02 13:23
>>493
×ラバーハンド
○ラバーバンド

輪ゴム処理やね。投げ縄ツール(ラッソ?)というよりも、普通のセレクションツールのイメージかな。

497 名前:デフォルトの名無しさん :03/11/02 17:55
>>483,490
どっちか1だろ

498 名前:デフォルトの名無しさん :03/11/02 19:15
Windowsの終了ダイアログで、Ctrl+Alt+Shiftキー押しながらキャンセルすると
explorerが終了し、そのままになってシェル拡張DLLのデバッグなんかが出来る
ようになりますよね。

シャットダウン/ログオフ系のAPIか何か使って、同じことできるんでしょうか?
(さもなきゃ keybd_eventで強引に...)

499 名前:デフォルトの名無しさん :03/11/02 21:30
>>498
シェル拡張のデバッグ方法とか知らんので外してるかも
しれないけど。
ログオン状態でexplorer.exeに居てほしくないなら、
レジストリでshell書き換えればそういう状態になるよ。

500 名前:481 :03/11/03 05:42
>>491
あ、どうも。>>486に言われて過去ログを6つくらいさかのぼったら
トラックバー関連にぶちあたって、メッセージがTBM_〜であることが
わかったので、そこから自力で調べてました。

.NETだとSliderとしか書いてないので、検索してもほとんど出てこなくて
ウツでした。 みなさん、ヘルプはすみずみまで目を通してるんでしょうかねぇ。



501 名前:デフォルトの名無しさん :03/11/03 06:02
>>2の下の方だったんだがなぁw

502 名前:デフォルトの名無しさん :03/11/03 10:09
>>500-501
スマン、ツボに入って爆笑しますた

503 名前:デフォルトの名無しさん :03/11/03 10:15
GlobalAllocの第1引数でGMEM_MOVEABLEを指定すると「移動可能メモリを確保」するとありますが、
これはガーベジコレクションが働くという意味なんですか?

504 名前:デフォルトの名無しさん :03/11/03 12:21
>>503
Win16時代にはGCが働いていた(過去形)。
今は実際には決して移動することはないので実質的に意味ない。
HGLOBALは間接ポインタに決まってると決め付けていた
Win16アプリを移植しやすくするために存在しているだけ。

505 名前:デフォルトの名無しさん :03/11/03 13:22
えー、スレ違いでしたら無視してください。

ゲームを外部から操作できるのかと思い、PostMessage を使って
WM_KEYDOWN をメッセージキューにポストしてみたのですが
何の反応も有りませんでした。Spy++を使ってキューを監視してみても
キーボードから入力したときと全く同じメッセージがポストされているのですが……
ご助言いただければ幸いです。


506 名前:デフォルトの名無しさん :03/11/03 13:31
できると思うがその内容ではコメントしようも無い。

507 名前:デフォルトの名無しさん :03/11/03 17:59
>>505
普通は、keybd_event() or SendInput() じゃないかと。

508 名前:デフォルトの名無しさん :03/11/03 19:00
>>503
memory compactionね。
garbage collectionとはちょいニュアンス違う。

移動可能メモリをハンドルで表現する意味も
昔はmemory compactionへの対応だったが
今ではプロセス境界を跨ぐための拡張アドレスと
ニュアンス変わってきてる。

509 名前:デフォルトの名無しさん :03/11/03 19:45
つまり、移動可能メモリというのは
Mac OS の Handleみたいなものですか?


510 名前:デフォルトの名無しさん :03/11/03 20:06
>>509
みたいなものではなく、全く同じもの。

511 名前:478 :03/11/04 02:31
478ですがレスが無いようなので質問を他の場所で投げてみようと思います。
一応その旨書いておきます。

512 名前:デフォルトの名無しさん :03/11/04 10:06
kbhit()
じゃだめなん?

513 名前:デフォルトの名無しさん :03/11/04 18:00
>>512
>>480

514 名前:デフォルトの名無しさん :03/11/04 21:08
>>506
申し訳ございません。具体的にはどのような情報が必要なのでしょうか。

PostMessage(hWnd, WM_KEYDOWN, 0x4E, 3211265);
PostMessage(hWnd, WM_KEYUP, 0x4E, 3224436737);

このような形でポストしました。

>>507
助言ありがとうございます。しかし以下のようにやっても、やはり反応が有りません。

SetFocus(hWnd);
keybd_event(0x4E, 0, 0, 0);
keybd_event(0x4E, 0, KEYEVENTF_KEYUP, 0);

これもやはりテキストエディタに放り投げてみると正しくキーが押されていました。
何かよく分からないことだらけですが、もう少し調べてみようと思います。

515 名前:デフォルトの名無しさん :03/11/04 22:13
DirectInput使ってるんじゃねーの?

516 名前:デフォルトの名無しさん :03/11/05 00:01
>>514
PostMessage(hWnd, WM_KEYDOWN, 0x4E, 3211265);
Sleep(500);
PostMessage(hWnd, WM_KEYUP, 0x4E, 3224436737);

こうしてもダメ?

517 名前:デフォルトの名無しさん :03/11/05 00:29
漏れもDirectInputに一票

#SendMessageを使ってみたらどうよ?

518 名前:デフォルトの名無しさん :03/11/05 02:03
リストビューの内容を変更するために表示されるDEITBOXの位置を変更しようと思い、
最初のLVN_BEGINLABELEDITが送られてきた時に
 int offset = 10;
 hEdit = ListView_GetEditControl(hwnd);  //DEITBOXのハンドルを取得
 GetWindowRect(hEdit , &rect);
 SetWindowPos(hEdit , HWND_TOP , rect.left + offset , rect.top , 0 , 0 , SWP_NOSIZE | SWP_NOZORDER);
としたのですが、DEITBOXの位置は変わりませんでした
EDITBOXの位置が初期化されるのはこのメッセージの時ではないのでしょうか?
LVN_BEGINLABELEDITからLVN_ENDLABELEDITまでの間にどのようなメッセージが送られ、
EDITBOXの位置が初期化されるメッセージはどれなのか教えていただけないでしょうか?

519 名前:デフォルトの名無しさん :03/11/05 10:52
>>515,517
むしろゲームでDirectInput使ってなかったら・・・


520 名前:x :03/11/05 10:59
>>396
WinFXネタに埋もれてしまったのですが、この件で
何かご存じの方はいらっしゃいませんかねぇ?

521 名前:デフォルトの名無しさん :03/11/05 11:12
>>520
セカンダリモニタはドライバ側の機能だろうから、
APIでは無いのでは?


522 名前:デフォルトの名無しさん :03/11/05 11:22
>>520
OFFにできるかは知らないが、GDIのAPIにマルチディスプレイ用APIがある。
解像度切り替えはChangeDisplaySettingsExでできるっぽい。


523 名前:デフォルトの名無しさん :03/11/05 11:25
>>521
ドライバによっては独自のマルチモニタ機能を提供しているものもある(初期のG4x0とか)が、
基本的にはマルチモニタはWindowsの機能だ。

524 名前:デフォルトの名無しさん :03/11/05 15:25
FindFirstFile() で c:\winntを "*aa*" で検索すると
$NtUninstallKB824105$
がヒットするのだけど、どういう理屈なんでしょうか?

525 名前:デフォルトの名無しさん :03/11/05 15:30
Σ(゚Д゚; SFNか

526 名前:デフォルトの名無しさん :03/11/05 22:28
win98,VisualC++6.0で開発しています。
デスクトップ画像を送受信する処理を下記の様に作っています。

(サーバ側)
[デスクトップ画面取得]
CWindowDC cSrcDC(NULL);
CDC m_cDC;
CBitmap m_cBitmap;
m_cDC.CreateCompatibleDC(NULL);
m_cBitmap.CreateBitmap(GetSystemMetrics (SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN),cSrcDC.GetDeviceCaps(PLANES),cSrcDC.GetDeviceCaps(BITSPIXEL),NULL);
m_cDC.SelectObject(&m_cBitmap);
m_cDC.SetMapMode(MM_TEXT);
m_cDC.BitBlt(0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN),&cSrcDC,0,0,SRCCOPY);
[画像送信]
send(dstSocket,(char*)&m_cDC,sizeof(m_cDC),0);

(クライアント側)
[画像取得]
recv(sock, (char*)&m_cDC, sizeof(m_cDC), 0);
[画像表示]
CClientDC cDstDC(this);
cDstDC.BitBlt(0,0,1600,1200,&m_cDC,pos.x,pos.y,SRCCOPY);

(1)一台のPCでサーバとクライアントを兼任すると正常に表示されるけど、
(2)サーバとクライアントを別々のPCで起動すると画像が表示されません。
win2000とXPだと(1)すら表示されません。
正しくデスクトップ画面を送受信するにはどのようにすればよいのでしょうか?


527 名前:デフォルトの名無しさん :03/11/05 22:30
CDCはデバイスコンテキスト
画像データではないから、送信できなくて当然。


528 名前:デフォルトの名無しさん :03/11/05 22:47
俺はむしろ
> 一台のPCでサーバとクライアントを兼任すると正常に表示される
事に驚愕した。

529 名前:デフォルトの名無しさん :03/11/05 23:04
まぁ、Win98だし。

530 名前:デフォルトの名無しさん :03/11/05 23:14
GDIハンドルをソケット経由でコピーしただけだな

531 名前:デフォルトの名無しさん :03/11/06 00:18
>>524
どうあってほしい?
Unixのshellやregexpのような振る舞いは期待するだけ無駄。

532 名前:デフォルトの名無しさん :03/11/06 02:33
CDCには仮想関数テーブルもあるんじゃないの?

533 名前:デフォルトの名無しさん :03/11/06 02:49
>>532
仮想関数テーブルがあっても参照されなければエラーにはならんと思うが

534 名前:x :03/11/06 09:19
>>521
>>522
>>523

ありがとうございます。
ChangeDisplaySettingsEx()
も見てみたんですけど、ON/OFFは見あたらないんですよね...
でも、この辺に絞ってもう少し探してみます。

535 名前:デフォルトの名無しさん :03/11/06 10:04
TreeView でルートアイテムだけにイメージを表示して、
子以下のアイテムは出さないってできますか?

ルートにはこれ、

TV_INSERTSTRUCT tvis;
tvis.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
tvis.item.iImage = 0;
tvis.item.iSelectedImage = 0;

子にはこれ、

TV_INSERTSTRUCT tvis;
tvis.item.mask = TVIF_TEXT;
tvis.item.iImage = 1;
tvis.item.iSelectedImage = 1;

を使いましたが、子までiImage、iSelectedImageが有効になります。
ちなみにWinXP SP1、VC++6.0 SP5です。

536 名前:デフォルトの名無しさん :03/11/06 11:30
atoiみたいなAPI教えてください

537 名前:デフォルトの名無しさん :03/11/06 13:11
>>536
その前に atoi でダメな理由を教えてください

538 名前:デフォルトの名無しさん :03/11/06 14:34
その前にくだらんやりとりしないでください。StrToInt。

539 名前:デフォルトの名無しさん :03/11/06 16:03
その前にさっさと教えやがってください。

540 名前:デフォルトの名無しさん :03/11/06 16:07
その前にすでに教えてもらってるのに無視しないでください。

541 名前:デフォルトの名無しさん :03/11/06 17:08
その前にHEX文字を数値に変換する方法を教えてください。

542 名前:デフォルトの名無しさん :03/11/06 17:09
StrToIntEx

543 名前:デフォルトの名無しさん :03/11/06 17:26
初めまして2chに書き込むのははじめてなのでここに書き込んでいいのか
わかりませんが..逆アセンブラについて質問なのですが、逆アセンブラ
を使えるようになるには、何を学べばよいですか??
もしよかったらメッセで暇な時ちゃちゃと答えてくれる人いませんか??


544 名前:デフォルトの名無しさん :03/11/06 17:28
放置よろ

545 名前:デフォルトの名無しさん :03/11/06 18:39
>>544
放置できない馬鹿

546 名前:デフォルトの名無しさん :03/11/06 19:08
>>545
放置できない馬鹿を放置できない馬鹿

547 名前:デフォルトの名無しさん :03/11/06 19:31
>>544-547

放置すべき馬鹿を相手にして喜ばせるアホ。


548 名前:デフォルトの名無しさん :03/11/06 19:45
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n

549 名前:デフォルトの名無しさん :03/11/06 20:02
>>543
(1) CPUアーキティクチャ
(2) アセンブラ
(3) API
(4 )OS

550 名前:デフォルトの名無しさん :03/11/06 20:07
同期でシリアルポート読んだあと、タイムアウトで戻ってきたかどうかを
ReadFileの戻り値で知ることは出来るの?

551 名前:デフォルトの名無しさん :03/11/06 20:16
>>538
atoiの為だけにShlwapi.dllをロードするのも哀れだな(w

552 名前:デフォルトの名無しさん :03/11/06 20:20
>>550
読み取ったバイト数がゼロで返ってくる。
つか、MSDN嫁!


553 名前:550 :03/11/06 20:22
>>552
ご教授ありがと〜

554 名前:デフォルトの名無しさん :03/11/06 20:31
WM_KEYDOWNメッセージで二つのキーの組み合わせをPostMessageするのは
どうすれば良いのでしょう?


555 名前:デフォルトの名無しさん :03/11/06 20:35
>>551
Shlwapi.dllに何か恨みでもあんのか?

556 名前:デフォルトの名無しさん :03/11/06 20:45
>>551さんはちょっとキティなんでそっとしておきましょうよ

557 名前:526 :03/11/06 21:59
DIB 送受信 winsockで検索したらやり方モロに書いてたページがヒットして解決しました。
卒研の中間発表の予稿に「デスクトップ画面を送受信できる」と書いたので何としても作らなければいけなかったので本当に助かった。

明日は発表日。今から発表の練習します。

558 名前:551 :03/11/06 22:12
>>555
いや、たった1つの関数、それもStrToIntの為だけにShlwapi.dllロードするなんて、贅沢だなと思って。
資源少ない時代の貧乏性が抜けきれてなくてね・・・

559 名前:デフォルトの名無しさん :03/11/06 22:17
>>552
ゼロになるのはファイルの終点で読みこんだ時としかかいてないぞ。
何所に書いてる?

560 名前:デフォルトの名無しさん :03/11/06 22:20
>>551 うん、その気持ち分かる

561 名前:デフォルトの名無しさん :03/11/06 22:20
>>558
おまえが哀れ。

562 名前:デフォルトの名無しさん :03/11/06 22:35
>>558
shlwapi.dll なんて大抵の環境ですでにメモリ上に存在するから、
リソース的には問題なしだと思ってたけど、どうなんだろう。。

563 名前:デフォルトの名無しさん :03/11/06 23:13
>>554
相手のアプリの実装による。
特にCtrl,Alt,Shiftの状態を、相手のアプリがGetAsyncKeyState()を使って
チェックしている場合は、物理的な状態なので再現するのは無理なはず。
代わりにWM_COMMANDなどを直接送ったほうが。

564 名前:デフォルトの名無しさん :03/11/06 23:36
atoi使わない方がCランタイム使わなくて嬉しいことあるですか?

565 名前:デフォルトの名無しさん :03/11/07 00:32
質問です。

timeGetTimeの返す値って、PC起動してから時間が立つほど不正確になるもんなんですか?

Cでゲームを作っていて、ゲームなので高速な処理をするためにメッセージループをいじって
while (TRUE){
  if( PeekMessage(&msg, NULL, 0, 0,PM_REMOVE)) {
    if(msg.message == WM_QUIT) break;
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  } else {
    gameMain();
  }
} return (msg.wParam);

処理のほとんどをgameMainに費やすようにしています。
で、例えば敵機の弾とかの移動距離を算出するために、
「(今のtimeGetTime()の値 - 前回ループ時のtimeGetTimeの値)/1000*1秒間に移動したい距離」
とすることで、CPUの処理能力によって差が出ないようにしてるのですが、
PC起動してから長時間たっていると、動きがガクガクするのです。

漏れのPCがヘタレなだけ?

566 名前:デフォルトの名無しさん :03/11/07 01:05
>>554
2回呼び出して、50ミリ秒以内なら一緒に押したと見なす。

567 名前:デフォルトの名無しさん :03/11/07 02:59
RECT構造体のメンバはlogical unitなので、DrawText()などで
この構造体を使うときはMapping Modeの影響を受けると思います。
で、RECTをGetClientRect()などで取得するとMapping Modeのことは
計算されていないと思うのですが、この取得した値ををMM_TEXT以外の
モードで使うにはどうすればいいのでしょうか?

568 名前:デフォルトの名無しさん :03/11/07 11:17
>>565
ゲーム制作系のスレに行くべき

569 名前:デフォルトの名無しさん :03/11/07 11:38
>>565
( ´∀`)ノ
http://www2.bbspink.com/erog/kako/1050/10509/1050908540.html

570 名前:デフォルトの名無しさん :03/11/07 11:48
WS_VISIBLE WS_CHILD WS_BORDER ES_MULTILINE
WS_VSCROLL WS_HSCROLLのスタイルで作った
EDITコントロールに、複数行のテキストをバッファの文字に
変更があった時などSetWindowTextで表示させると、
その度 勝手に垂直スクロールバーが元の一番上に移動して
怖いです。

止めさせる方法教えて下さい。

571 名前:デフォルトの名無しさん :03/11/07 11:53
EM_SETSEL と EM_REPLACESEL ではどうですか?

572 名前:670 :03/11/07 12:01
>>571
レスどうも。テキストは一行ごと追加して
行自体が下にずれていくから、そのやり方だと難しそう・・・

573 名前:570 :03/11/07 12:09
>>571
ああ、EM_REPLACESELは文字列置換だから簡単にできそうですね。
削除かと勘違いしてた。 いい方法をありがとう。   

574 名前:デフォルトの名無しさん :03/11/07 16:48
>>567
自分で変換

575 名前:デフォルトの名無しさん :03/11/07 18:09
>>565
つうかPeekMessage使うなボケ。
藻前、本のサンプル理解しねーで丸写ししただろ?

576 名前:デフォルトの名無しさん :03/11/07 18:25
>>575
なんで?

577 名前:デフォルトの名無しさん :03/11/07 18:40
>>552
お前こそちゃんと読んだか?
読みこめたバッファを伴って処理を戻すからゼロとは限らないよ。
たんに、関数の最初にその変数が、0リセットされるだけ。

578 名前:りょ :03/11/07 18:43
いま、困っています。
MXでとれてしまった画像ファイル(JPEG)
が削除できないのです。
どうしたらいいのですか?
削除をおすと
(ファイル削除できません。指定されたファイル名は、無効か
または長すぎます。別の名前を指定してください。)
とでます。
名前を変えてみたりしたんですが
(ファイル名を変更できません。指定されたファイル名は、無効か
または長すぎます。別の名前を指定してください。)
とでてしまいます。どうしたらいいのですか?


579 名前:デフォルトの名無しさん :03/11/07 18:54
アクセス権の設定ダイアログを表示する方法を教えてください

580 名前:デフォルトの名無しさん :03/11/07 20:41
>>575
漏れも気になる
なんでPeekMessageダメなん?

581 名前:デフォルトの名無しさん :03/11/07 21:56
ListView についてくる Header の高さを変える方法はありますか?
ListView に WM_SETFONT を送って字を大きくしたのはいいのですが、
Header の高さが変わってくれません。

582 名前:デフォルトの名無しさん :03/11/07 23:42
>>564
これとか。
> ランタイムライブラリのサイズは 20KB もあるので、
> ランタイムライブラリを使わないだけで、
> 20KBのダイエットに成功します。
ttp://www.nitoyon.com/vc/tips/light_exe.htm

583 名前:デフォルトの名無しさん :03/11/08 00:58
>>578
IOCTL_DISK_FORMAT_VOLUME

584 名前:デフォルトの名無しさん :03/11/08 01:58
WM_MOUSEWHEELを後ろのウィンドウに透過して送りたいのですが、
下のよりスマートな方法はないのでしょうか?

case WM_MOUSEWHEEL:
  ShowWindow(hWnd, SW_HIDE);
  hBackWnd = WindowFromPoint((POINT)lParam);
  ShowWindow(hWnd, SW_SHOW);
  SendMessage(hBackWnd, WM_MOUSEWHEEL, wParam, lParam);


585 名前:デフォルトの名無しさん :03/11/08 02:25
>>579 EditSecurity ?

586 名前:デフォルトの名無しさん :03/11/08 09:59
>>584
後ろのウィンドウは不定なの?

587 名前:デフォルトの名無しさん :03/11/08 10:00
駆動中のプロセスを列挙して,任意のプロセスを終了させたいのですが.
PIDとかがまったくわからない状態で,プロセスの名前だけをたよりに
そのプロセスを終了させたいのですが.
どのようにしたらよいのでしょうか?

588 名前:565 :03/11/08 11:09
>>568
板違いですか。誘導どうもです。

>>569
ためになりそうですね。読んでおきます。

>>575
お察しの通り丸写しです…。
なんで?

589 名前:デフォルトの名無しさん :03/11/08 11:22
>>587 プロセス列挙して探す

590 名前:589 :03/11/08 11:29
列挙て書いてたか。オープン→ベースネームか?

591 名前:デフォルトの名無しさん :03/11/08 12:25
>>587
似たようなプログラムのソースを見る

592 名前:デフォルトの名無しさん :03/11/08 13:54
>>565
CPU使用率、常に100%の予感。

593 名前:デフォルトの名無しさん :03/11/08 14:10
>>592
そお思う理由を書きたまゑ

594 名前:デフォルトの名無しさん :03/11/08 16:39
>>587

CreateToolhelp32Snapshot

Process32First & Process32next(要するに列挙)

lstrcmp(ProcessName , PROCESSENTRY32::szExeFile)

でどうですか?


595 名前:594 :03/11/08 16:48
訂正

CreateToolhelp32Snapshot

Process32First & Process32next(要するに列挙)

lstrcmp(ProcessFileName , PROCESSENTRY32::szExeFile)

OpenProcess(PROCESSENTRY32::th32ProcessID)

GetModuleFileName

lstrcmp(yours , ProcessFullPathName)

PROCESSENTRY32::szExeFileはファイル名だけだから
こっちの方が確実かな。


596 名前:587 :03/11/08 17:39
やっぱり列挙して比較するしか方法はないのですね.
みなさんありがとう!

597 名前:デフォルトの名無しさん :03/11/08 18:08
なるほど、名前で一発検索できる関数を探していたのか

598 名前:デフォルトの名無しさん :03/11/08 18:20
>>592
CPU使用率が100%近くになるのは意図通りだろ

599 名前:デフォルトの名無しさん :03/11/08 20:22
質問です。
Programming Windows 5th Editionを読んでいるんですが、プロセスの中で
GDIオブジェクトを使うと大体DeleteHogeみたいな関数で使い終わった
オブジェクトを消すよう書いてあります。

これを守らずに放置してプロセスを終了した場合メモリリークしますか?
それともあるプロセスで使ったものはプロセスの終了とともに回収され
ますか? (もちろんそういう仕組みに任せるのは好ましくないですが)

600 名前:565 :03/11/08 21:31
言い忘れてた。
ゲ製作技術のほうにいきますんで、
>>565の質問は放置願います。

>>CPU100%
作ってるのは音ゲーなので、CPU100%でいいです。
まぁ「いい」とか「わるい」とか言うのは使う側なんだけども。

601 名前:デフォルトの名無しさん :03/11/08 22:49
ゲームでも無駄なCPU使用はやめれ。

602 名前:デフォルトの名無しさん :03/11/08 22:56
>>599
プロセス終了時点で破棄されるので、終了時に消して回る必要はない。
むしろバグを生みそうなのでやらないほうがよい。

つまり、
起動時に一度作って、ずっと使いまわすものはDeleteしなくてよい。
ユーザ操作などで動的に作られるものであれば、Deleteする仕組みを
あらかじめ入れておいたほうがよい。

MFCが使えるならばそれに任せたほうが楽。

603 名前:デフォルトの名無しさん :03/11/08 23:18
>>601
まずは目的の動きができあがってから、減らしますよ。

604 名前:デフォルトの名無しさん :03/11/08 23:39
>プロセス終了時点で破棄されるので、終了時に消して回る必要はない。

ここまでは、まあそういう考えの人もいるってことでいいが


>むしろバグを生みそうなので

これは戯言。そんなヘボPGは廃業しろ。入門者なら破門だ。

605 名前:デフォルトの名無しさん :03/11/08 23:57
俺はハンドル作ったらauto_ptrみたいはスマートハンドルクラスに突っ込んでる

606 名前:デフォルトの名無しさん :03/11/09 00:12
>>604
原文書いた人じゃないけど
余計なことはしない方が良いって思ってるだけかもしんない。
それもひとつの信念。そんなに跳ね飛ばすほどのことでもなかろうに。

607 名前:デフォルトの名無しさん :03/11/09 00:48
>プロセス終了時点で破棄されるので、終了時に消して回る必要は

こんな余計なこと考えるくせにな


608 名前:デフォルトの名無しさん :03/11/09 00:53
プロシージャを書くのがめんどうという理由でウィンドウラッパークラスを作っています。
が、そのプロシージャの動作(なんかwhile〜〜メッセージで分岐するの)をどうすれば楽チン
になるのか思いつきません。汎用的に色んなアプリでも簡便に使い回せるクラスにしたいのですが
どうすればいいでしょうか?

609 名前:デフォルトの名無しさん :03/11/09 00:57
>>608
ATL使え

610 名前:デフォルトの名無しさん :03/11/09 01:01
whileでは普通分岐しないと思うんだが。switchのことか?

611 名前:デフォルトの名無しさん :03/11/09 01:05
>>609
すいません。どんな風に楽できるんでしょうか?
>>610
すいません。それです。

612 名前:デフォルトの名無しさん :03/11/09 01:15
>>611
ATL(WTL)には君が再発明しようとしている車輪が全て格納されてる。

613 名前:デフォルトの名無しさん :03/11/09 01:15
>>607
考え事はどれだけしても無駄にはならないが、
コードは書けば書くほどミスが出る確立は上がる。

614 名前:デフォルトの名無しさん :03/11/09 01:22
リソースの回収でバグを生むかも知れないとか言うようなやつは、
どうしても自力で回収しないといけない状況で使い物にならんのでどっちにしろ廃業。

615 名前:デフォルトの名無しさん :03/11/09 01:26
確率の話だろ。

616 名前:デフォルトの名無しさん :03/11/09 01:30
問題はどのリソースが確実に回収されると
決まっているかという話なんだが。

617 名前:デフォルトの名無しさん :03/11/09 01:34
9x系はかなりダメだった気がするんだが。

618 名前:デフォルトの名無しさん :03/11/09 02:50
>>614同意
確率とか言い出す手合いの頭の中は
リソース枯渇の確率が低ければOK

619 名前:デフォルトの名無しさん :03/11/09 10:13
ハードディスクのセクタに直接アクセスするプログラムを作っています。
CreateFile()で"\\\\.\\PHYSICALDRIVE1"(二台目のハードディスクで、システムは入っていません)をオープンし、
DeviceIoControl()のIOCTL_DISK_GET_PARTITION_INFOでディスクのバイト数を取得し
そのサイズだけReadFile()を用いてハードディスクを読み込むというプログラムです。
それで、CreateFile(),DeviceIoControl()共に成功していて、ディスクのバイト数もちゃんと取得できているみたいです。
しかし、ReadFileでハードディスクを読み込んでいるとき、途中までは成功しているみたいなんですが、
ディスクの最後の10MBぐらいにさしかかるとReadFileが失敗します(0を返します)。
GetLastError()で詳細を見てみたところ、「I/Oデバイスエラーが発生した
ため要求できませんでした」となっていました。
もともとハードディスクの最後のほうというのはアクセスできないようになっているんでしょうか?
それとも私のプログラムが悪いのでしょうか?ソースは必要ならば公開します。
ちなみに、WindowsXP HomeEdition SP1 で、VisualC++6.0を使用しています。

620 名前:デフォルトの名無しさん :03/11/09 10:20
>>619
その HDD が壊れていると言う可能性
HDD の容量の先をさらに読もうとしている可能性

は、ないんか ?

621 名前:619 :03/11/09 10:29
別のHDD2個で試してもやはり最後の方は読み込めませんでした。
それと、容量の先を読もうとしてはいないと思うのですが、
仮にHDDの容量の先を読もうとしてもReadFileは0を返さずに、読み込んだバイト数に0が
返されるのではないですか?

MSDNライブラリのReadFileから引用:
関数が成功すると、0 以外の値が返ります。
戻り値が 0 以外で、かつ、実際に読み取られたバイト数が 0 の場合、読み取り操作の時点でファイルポインタがファイルの終端を超えていたことを示します。

622 名前:デフォルトの名無しさん :03/11/09 11:07
パーティションが分かれてるとか?


623 名前:デフォルトの名無しさん :03/11/09 11:37
>>619
XPではHDDの未確保領域が必ずできる仕様になっています。
ttp://homepage2.nifty.com/winfaq/c/ntdisk.html#1118


624 名前:デフォルトの名無しさん :03/11/09 11:46
で、結局>>575はPeekMessage禁止の理由を言えないワケだが

625 名前:デフォルトの名無しさん :03/11/09 13:33
>>624
禁止の理由の一つが >>592 だと理解できなかったわけか...。

626 名前:デフォルトの名無しさん :03/11/09 13:44
まぁSleepを入れれば必ずしも100%にはならないのだが。

つうかそのへんは>>569を読めと。

627 名前:デフォルトの名無しさん :03/11/09 14:14
普通入れるでしょ

628 名前:デフォルトの名無しさん :03/11/09 14:18
>>625
ほほぉ、PeekMessage使うとCPU使用率が100%になるのか
寡聞にして聞いた事がなかったぜ(w

629 名前:デフォルトの名無しさん :03/11/09 14:19
>>627
いやだから、寝るくらいなら待てって話でそ。

630 名前:デフォルトの名無しさん :03/11/09 14:23
Sleep入れるとたとえSleep(0)だとしても20ms程度の遅延が起きるよ。

631 名前:デフォルトの名無しさん :03/11/09 14:28
RDTSC(QueryPerformanceCounter)で時間測って60FPSにしようとすると、
稀に100msくらい止まるってマジ?
でもtimegettimeだと58.8fpsか62.5fpsになっちゃうよね。
flip以外で60fpsにするにはどうしてるの?
(flipだとCPU100%になっちゃうし)

632 名前:デフォルトの名無しさん :03/11/09 14:30
>630
タイマの精度の問題だよね
timeBeginPeriod/timeEndPeriodを使うべし

633 名前:デフォルトの名無しさん :03/11/09 16:58
アプリを起動する時、WinMain関数のnShowCmdを
指定して起動する事は出来るのですか?

634 名前:デフォルトの名無しさん :03/11/09 17:20
できる

635 名前:デフォルトの名無しさん :03/11/09 17:36
>>631
それ、たぶん一部のPentium3のバグだと思う。
どっちにしろリフレッシュレートを60Hzにしてない限り、RDTSCでキッチリ
60fpsに調節しても意味ないから、そんなに精度に拘らなくていいよ。
58.8fpsでも全く問題ないし、そもそもNTSCは59.97Hzだから60fpsピッタリ
というのも間違ってる。
NTSCと関係ないなら無理に60fpsに合わせる意味もない。

それでもtimeGetTimeで60fpsにしたい場合は、画面を更新するたびに誤差を
計算しながら16msと17msを切り替える方法があるけど、これだと画面の更新
間隔が一定ではなく1msのゆらぎが出来てしまう。
しかし、例えばリフレッシュレート85Hzのディスプレイに理想的な60fpsの
映像を表示した場合は、表示される時間が11.76msと23.53msの2種類の
フレームが混在することになり、その場合のフレーム間の揺らぎは11ms以上
あるわけで、それに比べたら1msの揺らぎなんて気にするだけ無駄。

>>633
実行ファイルのショートカットを作って、そのショートカットのプロパティ
を覗いてごらん。

636 名前:633 :03/11/09 18:03
>634-635
ありがとうございます!

637 名前:デフォルトの名無しさん :03/11/09 18:50
> 636
>>>633
>実行ファイルのショートカットを作って、そのショートカットのプロパティ
>を覗いてごらん。

この回答だけでわかったのか…
すげーな。

638 名前:デフォルトの名無しさん :03/11/09 21:51
>>637
これでわからん方がすごいと思うが…

639 名前:デフォルトの名無しさん :03/11/10 06:44
>>630
それじゃCPU利用率100%に対しては解決になってない。

640 名前:デフォルトの名無しさん :03/11/10 06:44
リンク先間違えた
>>632

641 名前:デフォルトの名無しさん :03/11/10 09:35
>>640
timebeginperiod使った後でもSleep(1)とtimegettime使って
タイミング待ちすればCPU使用率落ちるだろ。

642 名前:575 :03/11/10 11:41
要するに空ループぶん廻して平気な面してるのが信じられんということ。
コンシューマーやDOSのように1アプリが全リソース占有してもいい思想ならともかく、
Winは他のタスクとの協調が前提。例えゲームであってもだ。

今は確かにタイムシェアリングで強制的にタスクスイッチするが、それでも無駄に
CPU使っていい訳じゃないぞ。特に最近のは熱が凄いからな。

Sleep入れりゃいいじゃんと言うが、Winアプリとしてはイベントドリブンで処理するのが
真っ当ってモンだろう。

アクション系でそんなややこしいことやってられるか、と言う意見はその通りだと思うが、
それでも常にループ廻す部分は必要最低限にすべき。
メッセージポンプごときでやるべきではないだろ。

万一、シングルスレッドでリアルタイムゲームやろうと思ってるんなら止めた方がいい。
勉強用ならば話は別だが、それで完成を目指すのは無謀。
絶対に完成しないとは言わないが、労力が見合わないことは断言出来る。

643 名前:デフォルトの名無しさん :03/11/10 12:06
つーか、1メッセージに1回ゲーム処理入ってるのが良くないんだな。
で、メッセージが溜まりまくって異様に遅くなる事があると。

>>642
どこらへんを縦読みすればいいんだ?

644 名前:デフォルトの名無しさん :03/11/10 12:23
>>641
Sleep()使った段階で精度が20msになるから
timeBeginPeriod()を使う意味がないような。
でも>>639-640はそもそも激しく勘違いしてたので
忘れてください

645 名前:デフォルトの名無しさん :03/11/10 12:29
>>644
SleepはtimeBeginPeriodが反映されるはず

646 名前:デフォルトの名無しさん :03/11/10 13:01
あ、なるほど。timeBeginPeriod()で精度を上げるって
話だったのか

647 名前:デフォルトの名無しさん :03/11/10 13:04
WaitMessage使いなよ

648 名前:デフォルトの名無しさん :03/11/10 15:31
>647
タイムアウトがないから、かえってこねーよ。
MsgWaitForMultipleObjects()だろ。

649 名前:デフォルトの名無しさん :03/11/10 22:02
>>642
で、結局「PeekMessageがイケナイ」という話しでは無かった、
というコトか?
>>575からはそうとは微塵も読みとれない訳だが

650 名前:デフォルトの名無しさん :03/11/10 22:03
>>649
粘着質けーよ。。。。。。。。。。。。。。。

651 名前:デフォルトの名無しさん :03/11/10 22:10
>>650
ププッ
逃げがそれかよ(w
もっと勉強してから大きな口叩く様にしましょうね

652 名前:デフォルトの名無しさん :03/11/10 22:15
>>651
逃げも何もスレ自体呼んでいませんが何かぁぁぁl

653 名前:デフォルトの名無しさん :03/11/10 22:16
スレを呼ぶの?

654 名前:デフォルトの名無しさん :03/11/10 22:17
呼ぶのです。

こーりんぐみすていく。

655 名前:デフォルトの名無しさん :03/11/10 23:10
邪道っぽいんですが、dll呼び出し元のアプリにある
メインウィンドウのハンドルを取得する方法ってありますか?
関数の引数に含める、と言う方法以外で。


656 名前:デフォルトの名無しさん :03/11/10 23:13
>>655
呼び出し元がトップレベルウィンドウを複数持っていたらどうする気ですか?

657 名前:デフォルトの名無しさん :03/11/10 23:31
トップレベルウィンドウを列挙してDLLを呼び出したプロセスのプロセスIDと
一致するものをリストアップ。

658 名前:デフォルトの名無しさん :03/11/11 00:39
UNICODEで作るとWin9x系で動かない以外になんか弊害あるまするか?

659 名前:デフォルトの名無しさん :03/11/11 00:41
>>642
普通ゲーム作るときはポーリングだと思うけどなぁ。
紙芝居はその限りじゃないが。
イベントドリブンで、まともなシューティングやら音ゲーなんかは作れるもんなのかい?

660 名前:デフォルトの名無しさん :03/11/11 00:57
イベントドリブンのガンシューなら知ってる。
勿論マルチスレッドだけど。

661 名前:デフォルトの名無しさん :03/11/11 01:14
A WTL Game Loop
http://www.codeproject.com/wtl/wtlgameloop.asp

WTLだけど出てるコードはほとんどWin32APIだからわかると思う。

662 名前:デフォルトの名無しさん :03/11/11 02:10
エミュレータとかソース出てる奴を色々見たけど、ポーリングが多いかも。

663 名前:デフォルトの名無しさん :03/11/11 12:11
>>658
動かないんだっけ?

664 名前:デフォルトの名無しさん :03/11/11 12:13
>>663
動くよ。
使えるAPIに制限はあるかもしれないけど。

Win9x系でUNICODEが駄目ってのは、MFC使った場合の話だと思う。

665 名前:デフォルトの名無しさん :03/11/11 14:24
本気でUNICODEで作るとRegisterClass(Ex)Wの時点で止まると思うが。

666 名前:デフォルトの名無しさん :03/11/11 15:05
使えるAPIに制限がある、これ。

667 名前:デフォルトの名無しさん :03/11/11 15:23
制限があるつか、そもそも文字列を引数に取るAPIのうちUNICODEが
通るAPIは数えるほどしかない。

668 名前:デフォルトの名無しさん :03/11/11 15:26
質問。
垂直スクロールバーを左側に付けるにはどうすればいい?

669 名前:デフォルトの名無しさん :03/11/11 15:32
「左に付ける」以外の答えが思い浮かばないわけだが...

670 名前:668 :03/11/11 15:37
解決しました。 スタイル弄ればできそうです。

671 名前:デフォルトの名無しさん :03/11/11 15:48
>>667
基本的には TextOutW とかごく少数の API しかサポートしていないんだけど、
最近の Platform SDK 入れてるんなら、"Microsoft Layer for Unicode"で大半は吸収してくれる。


672 名前:デフォルトの名無しさん :03/11/11 19:31
>>658

皆Unicodeで作る

Windows 95/98/98SE/Me等で動かない

Windows 2000/XP/LongHorn売れる

Microsoft儲かる

糞OS(Windows 95/98/98SE/Me等)無くなる

Windows NT系と98系の違いを初心者に偉そうに説明できなくなる

(゚д゚)マズー


673 名前:デフォルトの名無しさん :03/11/11 19:36
UNICODEアプリは作ってないけど、

> 糞OS(Windows 95/98/98SE/Me等)無くなる

これは大変有り難いぞ。
ぜひみんなでUNICODEアプリ作ってください。

674 名前:デフォルトの名無しさん :03/11/11 19:45
それが理想だけど現実はねぇ・・・。
皆Unicodeで作るというよりは、キラーアプリケーションがUnicodeで作られた方がエンドユーザは動くかも。
例えばny(略

675 名前:デフォルトの名無しさん :03/11/11 19:53
まあ何がきっかけになるかはわからんから、とにかくUNICODEで作ってください。
というか、作れ。今すぐだ。3秒以内に反論が無い場合は同意した物とみなす。

676 名前:デフォルトの名無しさん :03/11/11 20:03
つかWindows 95/98/98SE/Me等をサポートしないものを作ればいいなら無駄に半透明機能を付けるとか

677 名前:デフォルトの名無しさん :03/11/11 21:09
>>676
さらにウィンドウ回転機能を無駄につけて2k,XPなども切り捨てるとか

678 名前:デフォルトの名無しさん :03/11/11 21:30
UNICODEに無い漢字とかなかったっけ?
白と臼が似てるから一緒にされた、というような話を昔聞いたことあるんだが。

679 名前:デフォルトの名無しさん :03/11/11 21:45
あああ

680 名前:デフォルトの名無しさん :03/11/11 23:26
もんがまえにうし?

681 名前:デフォルトの名無しさん :03/11/12 00:43
>>676-677
未だに GetDiskFreeSpaceEx を GetProcAddress して呼んでるし

682 名前:デフォルトの名無しさん :03/11/12 00:46
でも実際NT系ユーザと9x系ユーザの割合ってどれくらいなんだろう?
XPユーザが増えてきたなんてニュースを見た気がするけど。

683 名前:デフォルトの名無しさん :03/11/12 01:55
パソ音痴のうちの姉はME、実家の老母は98使ってますんで
まだまだかと。

684 名前:デフォルトの名無しさん :03/11/12 02:01
>>681
うちもそう。開発者以外から見ると9x系ユーザを捨てるメリットが無いんだなこれが。

685 名前:デフォルトの名無しさん :03/11/12 02:14
うちのアクセス解析だと50%以上がXPだよ
2kが25%で、98は20%

686 名前:デフォルトの名無しさん :03/11/12 03:45
20は結構でかいな。

687 名前:デフォルトの名無しさん :03/11/12 03:51
>>681 Win95OSR1とは決別しても罰はあたらない気もする

688 名前:デフォルトの名無しさん :03/11/12 10:53
>>684
そうだなー。
そして開発者にとっても、安定する&ちっとだけ速い以外のメリットはあんまない。
つまりユーザーを説得するだけの材料は無いんだなこれが。

689 名前:デフォルトの名無しさん :03/11/12 11:32
>>688

>安定する&ちっとだけ速い以外のメリットはあんまない。

実行ファイルサイズ5GBのソフトか、
起動時に5GBのファイル必要なプログラム作れば・・・

いや、テキストボックスを全てUnicodeにして、
完全Unicode対応を歌い、新製品として販売すれば・・・

690 名前:デフォルトの名無しさん :03/11/12 11:47
ASCII・UNICODE両方でビルドできるよう意識して書いてる?
_Tマクロとか使ったりして

691 名前:デフォルトの名無しさん :03/11/12 12:20
>>690
一応はしている。






使う日が来るとは思ってないがな。


692 名前:デフォルトの名無しさん :03/11/12 12:32
てんねっとふれーむわーくに移行すれば
自動的にUnicodeになるがこのスレでは関係のない話でしたね

693 名前:デフォルトの名無しさん :03/11/12 12:35
>>678
従来文字コードにある文字は互換性のためすべて分離されてる
だから新しく文字が使えるようになることはあっても
今まで使えていた文字が使えなくなることはない

694 名前:デフォルトの名無しさん :03/11/12 14:36
>>690
してる。でもついGetProcAddressにも_T("")を渡しちゃったり。

695 名前:デフォルトの名無しさん :03/11/12 14:50
>>694
実際に -D_UNICODE を付けてコンパイルするまで
エラーにならないのが厄介だな

696 名前:デフォルトの名無しさん :03/11/12 15:13
なんか、楽したいから無駄に必要スペック上げてる、
って陰口を実証しそうな流れだなぁ……。

697 名前:デフォルトの名無しさん :03/11/12 15:40
おまえらNT3.51を見捨てるな!

698 名前:デフォルトの名無しさん :03/11/12 16:35
>>696
富豪的プログラミングですよ

699 名前:デフォルトの名無しさん :03/11/12 17:08
ハード・OSに合わせてソフトを開発するのは愚の骨頂。
使いたいソフトのためにハード・OSを揃えるのが賢人。


700 名前:デフォルトの名無しさん :03/11/12 17:19
>>696
事実ですが伺か?

701 名前:デフォルトの名無しさん :03/11/12 17:30
>>699
それ開発側とエンドユーザ側がごっちゃになってないか

702 名前:デフォルトの名無しさん :03/11/12 17:37
>>693
従来のUNICODEバージョンに存在する文字は〜、な。
文字セットはかなりブラッシュアップされてるよ。


703 名前:デフォルトの名無しさん :03/11/12 18:25
>>702
ソースセパレーションのことを言ったつもりだったんだが。
とりあえず
> 白と臼が似てるから一緒にされた
ってことは絶対無い(そもそも一緒にされてたらこの書き込み
自体できないし)

704 名前:デフォルトの名無しさん :03/11/12 18:32
>>703
個別コード内での文字統合は起こってないけど、
漢字圏の文字はまとめられてしまっている。
日本と中国などで字体が違う似た文字は
同一のテキストでは混在できなくなっているよ

705 名前:デフォルトの名無しさん :03/11/12 18:34
UNICODEって何?

706 名前:デフォルトの名無しさん :03/11/12 18:58
>>704
ここはAPIスレだし話の流れから
シフトJISアプリからの移行を前提に書きますた。
その場合もともと日中の混在なんてできないでしょ。
文字コード周りだけ独自にやるならシフトJISだろうが
Unicodeだろうが関係ないし

707 名前:デフォルトの名無しさん :03/11/12 19:00
>>704は言語タグを使えばできないことも無いけど文字コードとしては
致命的なまでに複雑だな。

>>705
いろんな文字コードをunify(統合、まとめ)された文字コード
universalでもunique(character)でもなんでもない

708 名前:デフォルトの名無しさん :03/11/12 19:07
日本語のアプリケーションを開発している限り
今まで使えた日本語の文字が使えなくなることはないし
新たに補助漢字も使えるようになるけど
Unicodeに移行しただけで自動的に多言語対応になるほど
世の中甘くないぞってことで

709 名前:デフォルトの名無しさん :03/11/12 19:13
半角全角のマッピング問題でのコード変化は?


710 名前:デフォルトの名無しさん :03/11/12 19:17
>>709
Windowsの世界に閉じてる限り問題ないでしょ。
しつこいけどここはAPIスレなので。
むしろ「内部処理用の」コードを「情報交換用の」規格に
合わないとかいう理由でコロコロ変えられたほうが困る。
もちろん内部処理用のコードをそのまま外部に
垂れ流す設計は逝ってよしだが

711 名前:デフォルトの名無しさん :03/11/12 19:36
>>699
ハード・ソフト両面からの努力でコストパフォーマンスを両立させるのが技術者
自分のパートだけ楽したいというクズPG →早く今すぐ氏ね

712 名前:デフォルトの名無しさん :03/11/12 20:08
unicodeなんて日本語でxmlでしか使わんから
日経ソフトウェアの記事を鵜呑みにしているわけだが、
文字コードの互換性を考えているから、
白と臼みたいなものを一緒にしてしまうのはありえないんじゃ?
ただ、意味でまとめられているみたいだから、
自体の違う日本と中国の漢字では混在ができないんだよね?

713 名前:デフォルトの名無しさん :03/11/12 20:14
意味でまとめているのではなく、音と字形でまとめているから
文字の成り立ち背景とかは無視されまくりでどうしようもない。

714 名前:デフォルトの名無しさん :03/11/12 20:28
つーか、今のunicodeの割り当てられ方が気に入らないなら、
日本語は後ろの方のコードページに引っ越して再定義すればいいと思うのだが。
たくさん空いているし。

715 名前:デフォルトの名無しさん :03/11/12 20:29
unicode ウニコード
  @ 漢字なんて使ったこともないアメ公が
  英語版ソフトを日本人や中国人にも売れれば儲かるな
  みたいな安易な発想のやっつけ仕事で作った文字コード
  A 使うと頭がウニになる文字コード
新キラッと解決国語辞典 第45版より

716 名前:デフォルトの名無しさん :03/11/12 20:36
>>713
嘘はやめれ
> Ideographs that are unrelated in historical derivation
> (non-cognate characters) have not been unified.
「土」と「士」のようなものは統合しないと
例まで挙げて明確に書かれてるが?

717 名前:デフォルトの名無しさん :03/11/12 20:40
CJK部分を誰が作ったのかも知らない奴が知ったかしてるし
まあやっつけ仕事なのは事実だが
期間内に作らなきゃ本当にアメリカの作った案で
通されてしまいかねなかったんだから仕方ない

718 名前:デフォルトの名無しさん :03/11/12 20:53
以上のすべての文字コード問題、C#では解決済みでしょうか。


719 名前:デフォルトの名無しさん :03/11/12 20:54
C#では強制的にうにこーどになるので
避けたくても避けられません。

720 名前:デフォルトの名無しさん :03/11/12 21:08
>719
了解。

721 名前:デフォルトの名無しさん :03/11/12 21:41
Unicodeの包摂基準が曖昧なのがむかつく

722 名前:デフォルトの名無しさん :03/11/12 22:00
GetClassLong(hWnd, GCL_HICON)
でウィンドウハンドルからアイコンのハンドルを取得しているのだけど
「Windows Media Player」に対しては必ず失敗してしまいます。
解決策を教えてください。


723 名前:デフォルトの名無しさん :03/11/12 22:02
結局、\はUnicodeで¥になるのか、バックスラッシュになるのか決着ついたの?
コードはバックスラッシュに変換して、あとはフォントで\と表示しましょうとか?

724 名前:デフォルトの名無しさん :03/11/12 22:36
つくわけない

725 名前:デフォルトの名無しさん :03/11/12 23:04
APIを勉強することは、業務系SE、PGにとって役に立つことですか?

726 名前:デフォルトの名無しさん :03/11/12 23:05
>>725
範囲が広すぎて答えようがない
もっと絞れ

727 名前:デフォルトの名無しさん :03/11/12 23:07
>>723
MultiByteToWideCharでは0x5CはU+005Cに変換される。
と答えればこのスレ的にはいいのか?

728 名前:デフォルトの名無しさん :03/11/12 23:11
>>726
すいません。
Win32APIを勉強することは、銀行や証券会社等のシステム開発をするSEやPGにとって役に立ちますか?

729 名前:デフォルトの名無しさん :03/11/12 23:19
>>728
ED

730 名前:デフォルトの名無しさん :03/11/13 00:31
今の多くの業務系(∋銀行証券会社)はDBを使う必然性から
APIレベルのプログラミングよりもSQLやJavaの知識の方が有用。
但し、↑の世界はPGは使い捨て、SEでさえ使い潰すのが当たり前の状況。
なんせ、人件費の安い中国に出した方が安く仕上がるんだからね。
なので、業務系に拘るなら業務知識を身に付けて上流工程に食い込むか
使い捨てられるままに任せるくらいしか生き残る道は無いんで無いかい?
ま、728が今更API覚えて他の世界に行かれるかどうかは知らんが。

731 名前:デフォルトの名無しさん :03/11/13 00:38
API使うだけの奴は結局OSの中で生かされているだけ。
OS変わればまったく使えなくなるし覚えなおしだし、
潰しが利かない。

732 名前:デフォルトの名無しさん :03/11/13 00:47
>>731
所詮はノイマン型コンピュータ、OSが変わってもAPIの考え方なんて
そんなに変らないので応用は利きます。

ま、APIの機能と言うか使い方を表面的にしか理解していない
香具師は潰しは利かないけど。

733 名前:280 :03/11/13 00:56
>>730-732
ありがとうございます。
でも>>730さんのレスを見てとっても憂鬱になりました。とりあえずjavaやります。

734 名前:×280 ○728 :03/11/13 00:57
 

735 名前:デフォルトの名無しさん :03/11/13 01:04
>>730
言語と文化の壁があって中々巧くは逝かないのよ。
ソフトウエアは工業製品とは違うからねぇ〜。

736 名前:デフォルトの名無しさん :03/11/13 01:13
日本人同士で緊密なコミュニケーションを持っている場合さえ
委託開発にはトラブルがつきものなのに、中国に委託してそう簡単に
うまくいくはずなかろう。
ま、中身ボロボロでもシステムを作ったフリができりゃいいだけ
なら別だけど。

737 名前:デフォルトの名無しさん :03/11/13 15:14
>>685のサイトがXPファンクラブとかだったら、面白いな

738 名前:デフォルトの名無しさん :03/11/13 15:43
俺のサイトはWin98が95%、他は誤差だたよ・・・。
全部アタック(;_;)

739 名前:デフォルトの名無しさん :03/11/13 15:57
やっぱ仕事ならクライアント、趣味なら自作ソフトのユーザーの統計取った方が確実だな。
雑誌やサイトの調査って所詮その雑誌やサイトを読む層に偏るし。

740 名前:デフォルトの名無しさん :03/11/13 19:17
品質が悪くても安い方がいい、という企業はたくさんあるんじゃないか?
まあ、それで思い知ることになるだろうが。

741 名前:デフォルトの名無しさん :03/11/13 20:52
>>740
品質の悪さを思い知ったことのないヒヨッ子はおねんねの時間だよ

742 名前:デフォルトの名無しさん :03/11/13 22:35
チルトホイールや第4第5ボタンつきマウスのメッセージ拾う方法教えてくらはい。

743 名前:デフォルトの名無しさん :03/11/13 22:44
ボタンの方はWM_XBUTTON〜だ罠

744 名前:デフォルトの名無しさん :03/11/14 09:43
>>730 >>735 >>736
日経コンピュータ最新刊に野村総研の中国オフショアの成功事例が載ってたね。

#同じ号のニュース欄にはNECの中国オフショアの失敗で損失がでた話も。

745 名前:デフォルトの名無しさん :03/11/14 18:02
WindowsXPで標準スクリーンセーバ(WindowsScreenSaverClass)が
表示されている状態で、消去する方法を教えてください。
OpenDesktop、FindWindowでスクリーンセーバが
起動しているかどうか判定できませんでした。


746 名前:デフォルトの名無しさん :03/11/14 21:24
EnumProcessesみたいなのもアリかもしれんが、
最初からスクリーンセーバーの起動を禁止させた方が確実じゃない?

747 名前:デフォルトの名無しさん :03/11/14 21:33
ちょっと質問なんだけど。
ただのコンソールアプリからAfxBeginThreadを
使用したいんだけど、どのライブラリとヘッダが必要になりますか。
言語はC言語です。

748 名前:デフォルトの名無しさん :03/11/14 21:39
>>747
使えねーよ

749 名前:デフォルトの名無しさん :03/11/14 21:53
+、-のボタン付きのツリービューで、項目のテキストをダブルクリックしても
子項目が出たり入ったりしないようにするにはどうすればいいでしょうか?
+-ボタンだけで子項目の表示を操作するようにしたいです。

750 名前:デフォルトの名無しさん :03/11/14 21:58
>>747
MFC だから afx.h じゃない?
プロジェクトウィザードで適当に MFC アリのコンソールAPでも作って設定見てみるのが
ラクでは。

751 名前:デフォルトの名無しさん :03/11/14 22:00
「言語はC言語です。」

752 名前:デフォルトの名無しさん :03/11/14 22:01
mciSendString()でmidiファイルを演奏中にsndPlaySound()でwavを鳴らそうとしても鳴りません。
どのようにすればmidiを演奏したままwavを鳴らせるでしょうか?

753 名前:730 :03/11/14 22:07
成功か失敗かは兎も角、事例を知っているからこそ書いたわけだが。
そうか、失敗したのか(謎

754 名前:デフォルトの名無しさん :03/11/14 22:10
マルチスレッドで、ソケット通信してるスレッドが一つあります。

そのスレッドがWSACleaupする前に、呼び出し元を終了させちゃマズイんでしょうか?
それとも自動的にDLLを開放してくれるんでしょうか?
(DLLの初期化と開放ってのも良くわかってないんですが……)

755 名前:747 :03/11/14 22:17
全くお前らつかえねー奴らだな。
自己解決したよ。でも教えない。

所詮POSIX互換なんだから
Cでも使えるやつがあるだろ。
これだからwinなんて嫌なんだ。




756 名前:デフォルトの名無しさん :03/11/14 22:18
まぁ、CでBeginThreadを使おうとしていないことを祈ってやろう。

757 名前:デフォルトの名無しさん :03/11/14 22:51
CreateThreadと勘違いしてない?

758 名前:745 :03/11/14 23:37
>>746
ありがとう。EnumProcessesを調べてみます。

何もしていないときは、スクリーンセーバを表示させておいて、
デジタル入力とか通信で計測開始されたら、
スクリーンセーバを消去しようと思っていたわけで。


759 名前:デフォルトの名無しさん :03/11/14 23:47
>>757
ワロタ

760 名前:デフォルトの名無しさん :03/11/15 00:23
初心者のためのwinsockの勉強サイト教えてください。
winsock2が使えるようなところがいいです。

761 名前:デフォルトの名無しさん :03/11/15 00:28
>>760
店頭で本を立ち読みしてよいものを選らべ
といいたいけど、>>760が何処までできるか知らないし。

762 名前:747 :03/11/15 00:28
>まぁ、CでBeginThreadを使おうとしていないことを祈ってやろう。
しょうがないな。このスレにいる知ったか厨に教えてやるよ。
_beginthread

感謝しな。

763 名前:デフォルトの名無しさん :03/11/15 00:33
>>761
ネットワークとかp2pとか使う側としての知識はいくらかありますが、
どう動いているのかほとんど分からない状態です。
サーバーとクライアントで何かやり取りするんですよね?知ってるのはそこまで。

764 名前:デフォルトの名無しさん :03/11/15 00:37
>>763
漏れよりはありそうだ。
C言語入門サイト>Win32API入門サイト>Winsock2とどんどん減ってるから探しにくいね

765 名前:761 :03/11/15 00:54
>>764
もしかしてwinsockより主流なライブラリとかあるんですかね?
winsockも名前を知ってるだけなんですが・・・

766 名前:デフォルトの名無しさん :03/11/15 01:00
>>765
誤解を与えたならごめん。
windowsでのネットワークライブラリはwinsockが一番でかいと思うよ。

んで、漏れはWin32APIが解らなかったから Winsock2 のソースを見て諦めた香具師です
winsock2 入門でぐぐってみた?

767 名前:デフォルトの名無しさん :03/11/15 01:01
winsock は Win32Api とは違うのかな?とも思ってみた

768 名前:デフォルトの名無しさん :03/11/15 01:05
WinSock2.0プログラミング。

769 名前:デフォルトの名無しさん :03/11/15 01:06
>>768
本ではなくサイトを聞いてるんだよ。
ちなみに漏れはソレを読んでWIN32APIが解らずリタイヤ

770 名前:デフォルトの名無しさん :03/11/15 01:10
>>769
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/

771 名前:デフォルトの名無しさん :03/11/15 01:12
おぉすごい
・・・
って思ったらところどころ英語じゃん

大事なところは英語・・・アーゴの法則か?

772 名前:デフォルトの名無しさん :03/11/15 01:15
つか、本はダメとか英語はダメとか本当に勉強する気あんのか

773 名前:デフォルトの名無しさん :03/11/15 01:16
>>772
漏れはサイト教えてっていった人とは別の人だよ

in 771

774 名前:デフォルトの名無しさん :03/11/15 01:18
元質問者がすでにいないんじゃ?だったらやめるべ。

775 名前:761 :03/11/15 01:19
>>766
うーむ、やっぱり主流なんですか。ググると本がいっぱい出るんですがあんましお金がないです。
>>770
ありがとうございます。

776 名前:デフォルトの名無しさん :03/11/15 03:10
例えばtxtファイルをCreateFileで開こうとして
ERROR_SHARING_VIOLATIONがでて開けなかったとき
誰が共有ロックしているか、ユーザ名やコンピュータ名を調べることはできるのでしょうか?

Excelなんかだと誰がロックしているか表示されますが特殊?

777 名前:デフォルトの名無しさん :03/11/15 03:32
>>776
特殊はありえない
ファイルにファイル情報があるわけだから、そこから取り出してるんだと思う

と、勝手な想像すまそ

778 名前:776 :03/11/15 03:42
>>777
レスどうもです。
そう思うんですが、それがみあたらないんですよ(TT
ファイル情報取得系のAPIを探してみたんですが・・・

で、Excelはファイル開いたときにファイル自身に情報保存したりしてるのかなぁ
なんて考えてたもので。

あ〜あ、ファイルそのまま開かずにロックファイルでも作って開くアプリ
作るしかないかなぁ・・・

仕事忘れてもう寝ます(泣

779 名前:デフォルトの名無しさん :03/11/15 03:44
>>778
なるほど、ファイルに個人情報を組み込むって手かぁ・・・
M$とか企業アプリならやりそうですね・・・

でもユーザーが違って開けないって言うのは、ファイルシステムの概念ではないですよね?

780 名前:デフォルトの名無しさん :03/11/15 03:51
Excelはファイル開いた時に隠しファイル作ってますよ

781 名前:デフォルトの名無しさん :03/11/15 04:41
ファイルを開いているのはプロセスなわけだが。

782 名前:デフォルトの名無しさん :03/11/15 07:29
これのことでしょ?
ttp://www.atmarkit.co.jp/fwin2k/win2ktips/083opened_net_file/083opened_net_file.html

どうAPIを使えば実現できるのかはわからないけど、そういうツールはあった。
ttp://www.dr-hoiby.com/WhoLockMe/index.html

783 名前:デフォルトの名無しさん :03/11/15 07:36
>>782
上の記事を見た限り
CreateHandleだっけ?(ファイル操作まだやってないので。
アレの引数で指定すれば共有して開けないね

784 名前:デフォルトの名無しさん :03/11/15 08:33
>>782
そのファイルを開いているプロセスがローカルなのかリモートなのか
判断して処理を切り替えてやらんといかん分けだな。。。

そんなもんウイソの標準のコマンドかツールで用意していてホスイぞ。
つか、漏れが知らないだけ?


785 名前:デフォルトの名無しさん :03/11/15 08:56
>>745
ttp://pc2.2ch.net/tech/kako/1056/10560/1056033645.html
の233あたりから読みたまえ。

786 名前:745 :03/11/15 10:23
>>785
レスありがとう。

スクリーンセーバ設定を無効にしたりとか、
スクリーンセーバを表示させないのではなく、
スクリーンセーバが表示されていたら、消去したいのだが。

SystemParametersInfo(SPI_GETSCREENSAVERRUNNING)
keybd_event(VK_SHIFT)



MessageBox を使って、スクリーンセーバーの設定を切ってくださいとユーザーに頼む

が使えそうな気がするので、これで試してみます。

"WindowsScreenSaverClass"クラスのスクリーンセーバだったら、
9X, 2000の場合、
FindWindow("WindowsScreenSaverClass")
NT4の場合、
OpenDesktop("screen-saver")
と思っていたわけで、
XPでは特別な方法があるのではと思い質問しました。


787 名前:デフォルトの名無しさん :03/11/15 14:22
>>776
Wordの場合だと、隠しファイルが作られて
その中にユーザ名が書き込まれている。
Excelでもたぶん同様。
その隠しファイルからユーザ名を拾ってくればいいのでは?


788 名前:デフォルトの名無しさん :03/11/15 16:40
ウインドウラップライブラリを作ろうと思っています。
Java風にActionListenerを実装して各オブジェクトでイベントを受けとるようにするか、
それともメッセージが来たら自分の仮想関数を呼び出すようにするか迷っています。
どっちがいいでしょうか?

789 名前:776 :03/11/15 17:12
>>780
>>787
情報どうもです。
やはりそうでしたか、ちなみにどこに隠しファイル作っているかご存じでしょうか?

>>782
TIPSの方は知ってたんですが、全員に管理者権限渡すわけにもいかず・・・

ツールはまさにこれか!!と思ったのですが残念ながらだめでした。
ロックしていることはわかるのですがそれが誰かはわからないようです。

クライアントでサーバのxlsをロック。
 クライアント側でツールを使ってチェック
  Domain User ともに自分自身を示す。
 サーバ側でツールを使ってチェック
  Domain=NT AUTHORITY
  User=SYSTEM
となってしまい、ほかのPCからでは誰がロックしているかわからない状態です。

現状ファイルオープン時にロックファイルを作りそれをチェックするような
ツールを作るしかなさそうです・・・



790 名前:デフォルトの名無しさん :03/11/15 17:29
>>788
先ず第1にATL/WTLを使うことを考える。
それがダメなら.NETのように、先ず自分の仮想メソッドを呼び出し、そのメソッド内でリスナーにイベントを飛ばす。

>>789
同じフォルダに無いか?俺はよく見かけるが。

791 名前:788 :03/11/15 17:36
>>790
なるほど。両方とは思いつきませんでした。どうもありがとうございました。

792 名前:デフォルトの名無しさん :03/11/15 19:27
MSDNのWindows Shell Namespaceの説明を読んでいるんですが、
PIDLというのは{0x00,0x00}でターミネートするってことは中身Unicode
ってことですよね。
これはWin9x,NT系のどちらでも同じですか?

793 名前:デフォルトの名無しさん :03/11/15 19:34
ちょっと質問させてください。
自プログラムからファイルをドラッグ&ドロップしたときに、
自プログラムがドロップ先のフォルダを知るのはどのようにすればよいでしょうか?(SDKで)
何故このようなことがしたいのかと言うと、
ある暗号化されたファイルをドラッグ&ドロップで移動したら、
復号化してドロップ先に出力するようにしたいんです。

794 名前:デフォルトの名無しさん :03/11/15 19:37
>>792
> PIDLというのは{0x00,0x00}でターミネートするってことは中身Unicodeってことですよね。
飛躍しすぎ。

>>793
ドロップ先のフォルダを知る事は出来ない(なにせドロップ先がエクスプローラのフォルダビューであるかどうかすら分からないのだから)
どこかに複合化して、それをドラッグしたことにすれば良い。

795 名前:デフォルトの名無しさん :03/11/15 19:37
>>784
> そんなもんウイソの標準のコマンドかツールで用意していてホスイぞ。
> つか、漏れが知らないだけ?
うん。あんたが知らないだけ。


796 名前:793 :03/11/15 19:44
>>794
そうですか…。
OLEとか使えばなんとかなるのかもしれないと思っていたのですが、残念です。
WinZIPとかWinRARとかみたいにしたかったんですが、
あれもいったんどこかに一時的に展開してるっぽいですね。
そのわりにどのドライブに展開しても速度が変わらないような気がするのですが…。


797 名前:デフォルトの名無しさん :03/11/15 20:22
VC6でGDIリークまたはリソースリークを検出する関数ってありますか??
crtdbg.hにはそういう記述はみあたらなかったので。

798 名前:デフォルトの名無しさん :03/11/15 20:39
>>797
いや、君の調べが足りない。
ctrdbgをもっと解析しる。

799 名前:デフォルトの名無しさん :03/11/15 20:51
>>794
すると、PIDLの中身ってどういうものが格納されているのでしょう。

800 名前:デフォルトの名無しさん :03/11/15 21:00
>>799
PIDLで検索してでないの?
うにこーどは0xffefだったはず

801 名前:デフォルトの名無しさん :03/11/15 22:13
shlobj.hにSHGetFolderLocation()が無いのですが、
これは古すぎですか?

802 名前: :03/11/15 22:14
質問!  2重起動防止で

HANDLE hMutex;
hMutex = CreateMutex(NULL, TRUE, "UniqueName");
if(!hMutex)
return FALSE;
if(GetLastError() == ERROR_ALREADY_EXISTS) {
return FALSE;
}

が正しくて

HANDLE hMutex;
hMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, "UniqueName");
if(hMutex)
return FALSE;
CreateMutex(NULL, TRUE, "UniqueName");

これは理論的に誤りとあるんですが、
下のは何所に割り込める余地があるのか教えてください!

803 名前:デフォルトの名無しさん :03/11/15 22:20
>>802
openが失敗してcreateする間

804 名前:デフォルトの名無しさん :03/11/15 22:22
>>802
プロセス1が、OpenMutex() して CreateMutex() する前に、プロセス2が割り込んで OpenMutex() したら両方のプロセスの OpenMutex() が失敗するから、両方とも起動してしまう。

基本だと思うが...。

805 名前: :03/11/15 22:24
ああ、そおゆうことか。

806 名前:デフォルトの名無しさん :03/11/15 22:36
CreateMutexを使った2重起動の防止と
FindWindowでやった2重起動の防止、どっちが推奨なんでしょうか?

807 名前:デフォルトの名無しさん :03/11/15 22:47
>>789
WhoLockMe はロックしてるユーザIDが出てるが。。。

808 名前:デフォルトの名無しさん :03/11/15 22:52
>>806
CreateMutex だと思う。
FindWindows だと両方とも2重起動だと思って終了する可能性があるような気がする。

809 名前:デフォルトの名無しさん :03/11/15 22:58
>>808
逆じゃねぇのか?
FindWindowsで確認してからウィンドウ作るまで時間がかかる。


810 名前:デフォルトの名無しさん :03/11/15 23:02
>>809
逆かも知れん。(つーか、作り方次第。)
まあ、結局ウィンドの作成と FindWindow でチェックする間の隙間があるから、ダメってことだ。

811 名前:807 :03/11/15 23:12
他のPCからオープンされているとSystemプロセスのユーザIDが表示されるのね・・・


812 名前:797 :03/11/15 23:16
>798
僕の環境に"ctrdbg"はなかったです。
gdiで検索しても出ないし、resouceでも出ませんでした。
ヒントでも良いのでご存知ありませんか?


813 名前:デフォルトの名無しさん :03/11/15 23:23
>>808-810
レスありがとうございます。言われて自作の手持ちツールを
連打して起動したら見事に複数起動してくれました。

全部作り直します・・・。

814 名前:デフォルトの名無しさん :03/11/15 23:35
複数起動すると何かマズイことが起こるツールなんか?
複数起動しても問題無いツールなら、複数起動できる方が便利だが。


815 名前:801 :03/11/15 23:41
馬鹿なこと言ってたらすみません。
プロトタイプ宣言を手書きしてみたところ、当然のようにリンクエラーになりました。
Systemフォルダのshell32.dllの中には確かにSHGetFolderLocation
というシンボルがあります。しかしVC98/Libのshell32.libの中を検索すると
こっちにはシンボルがありません。

.libの方を更新しなければならないと思うのですが、どうすればいいのでしょう?
使っているVC++が大昔(3年近く前)に購入したパッケージなのですが、
サービスパックをインストールしてみても変化ないのです。

816 名前:デフォルトの名無しさん :03/11/15 23:45
>>815
・付属のツールでインポートライブラリを作る(VC++もってないからやり方はしらん、BCBはimplibでできる)
・最新のPlatformSDKからインポートライブラリを持ってくる(最新のヘッダも入ってるのでこっちをおすすめ)



817 名前:デフォルトの名無しさん :03/11/15 23:45
キーワードはPlatformSDK


…でいいんだったかなw

818 名前:801 :03/11/15 23:59
>>816,817
ありがとうございます。
現在ダウンロード中です。

ツールの方はドキュメント見ないとわかりませんが、
MinGWのimpdef.exeみたいなもんでしょうか。

819 名前:デフォルトの名無しさん :03/11/16 01:11
>>814
ゴミレスやめろ

820 名前:デフォルトの名無しさん :03/11/16 01:21
下記のように矩形を設定してから DrawText しても、文字列が半角英数がひたすら連続するものだと右端で折り返してくれずにそのままどこまでも逝ってしまいます(DT_NOCLIPつけて確認しました)

これを何とか、指定した幅に収まるようにできないでしょうか。高さはDT_CALCRECTして再設定してあげればいいんですが、幅は固定じゃなきゃいけない仕様なのでとても困り果てています。

// *** 下のソースだと折り返してくれません ***//
RECT r;
SetRect(&r, 0, 0, 50, 50);
TCHAR c[] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
DrawText(hdc, c, lstrlen(c), &r, DT_LEFT | DT_WORDBREAK);


821 名前:デフォルトの名無しさん :03/11/16 02:12
>>797
前にこのスレで同じ質問したけど、なかなか難しいっぽい。
9xで動く、それ用のツールがある模様。
結局タスクマネージャでGDIオブジェクト数とか観察して、「んー増えてるなー。
リークしてるなー?」って感じで検出してるけどね(;´Д`)

>>819
DT_EDITCONTROL?

822 名前:820 :03/11/16 02:30
>>821
ありがとう、それで無事できました。
見おとしてたー

823 名前:デフォルトの名無しさん :03/11/16 04:41
>>819
ゴミレスかな?

824 名前:デフォルトの名無しさん :03/11/16 07:55
>>823
ゴミレスだろ。

825 名前:デフォルトの名無しさん :03/11/16 11:25
>>824
いや、ゴミスレだろ。


826 名前:デフォルトの名無しさん :03/11/16 11:26
>>825
いや、ゴミ板だろ。

827 名前:デフォルトの名無しさん :03/11/16 11:31
ゴミサイト

828 名前:デフォルトの名無しさん :03/11/16 11:34
ゴミネット

829 名前:デフォルトの名無しさん :03/11/16 11:36
ここは、ファミレスではありませんよー。


830 名前:デフォルトの名無しさん :03/11/16 11:42
ファンレス

831 名前:デフォルトの名無しさん :03/11/16 11:46
ダイアログボックスだけのプログラム作ろうと思ってます。
ウィンドウクラス定義したダイアログボックスだけのプログラムです。
だけどリソースで定義した PUSHBUTTON(アイコンボタン) にアイコンをロードするときに
WM_CREATEで拾うと PUSHBUTTON が定義されていないせいか、アイコンをセットできません。

このボタンを押すと自身にアイコンセットのメッセージを送る用に作るとうまく行きました。
あと、通常のウィンドウで CreateWindow でボタンを作ってそのボタンにアイコンセットのメッセージを送ってもうまく行きました。

でも、作りたいのは
〔ダイアログボックスをリソースで定義〕〔ウィンドウクラスをプログラムで登録〕コレを利用してプログラムを起動したときにボタンにアイコンをセットするプログラムが作りたいのですが
どのようにすれば解決するでしょうか?ヨロシクお願いします

832 名前:デフォルトの名無しさん :03/11/16 12:09
WM_INIT_DIALOG(だっけ?)

833 名前:デフォルトの名無しさん :03/11/16 12:16
>>832
独自のウィンドウプロシージャ・ウィンドウクラスを使用しているせいか WM_INITDIALOG が送られてきません><;
(今メッセージボックスが出るか確認しました。
ちなみにウィンドウクラスは
winc.style = CS_HREDRAW | CS_VREDRAW; // サイズ変更されたら再描画
winc.lpfnWndProc = WndProc; // ウィンドウプロシージャアドレス
winc.cbClsExtra = 0;
winc.cbWndExtra = DLGWINDOWEXTRA; //ダイアログアプリケーション必須です
winc.hInstance = hInstance; // hInstance
winc.hIcon = LoadIcon(hInstance , AppName); // アイコン
winc.hCursor = LoadCursor(NULL , IDC_ARROW); // カーソル
winc.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1); // 背景
winc.lpszMenuName = NULL; // めミューなし
winc.lpszClassName = AppName; // クラス名
です

834 名前:デフォルトの名無しさん :03/11/16 12:21
お手上げでしょうか?つдT

835 名前:814 :03/11/16 12:29
>>819
そうか・・・
正直スマンカッタ

カチャ
  ;y=ー( ゚д゚)・∵. ターン
  \/| y |)


836 名前:デフォルトの名無しさん :03/11/16 12:30
解決法も見つからず・・・かといって知識があれば質問してないしどしよ

837 名前:デフォルトの名無しさん :03/11/16 12:30
下げるからダメなのか!?age

838 名前:デフォルトの名無しさん :03/11/16 12:56
寝てるのかなぁ?・・・
やすみ〜

839 名前:デフォルトの名無しさん :03/11/16 13:03
出来ました。
ウィンドウクラスを使わないでやったら動きました。そーす汚してすみませんでした

840 名前:デフォルトの名無しさん :03/11/16 17:15
DrawTextで DT_NOFULLWIDTHCHARBREAK を描画オプションで指定すると、
「'DT_NOFULLWIDTHCHARBREAK' : 定義されていない識別子です。」と言われてコンパイルできません。
↓にはちゃんと書いてあるんですが。
http://www.microsoft.com/japan/developer/library/jpgdipf/_win32_drawtext.htm

必要なヘッダとかあるんでしょうか?
Win2k + VC++6.0sp5 で開発してます。

841 名前:デフォルトの名無しさん :03/11/16 17:17
>>840
Windows98/200以上専用です。
適切なOSバージョン定数を定義してください。

842 名前:デフォルトの名無しさん :03/11/16 17:23
>>841
2kって言ってるよ

843 名前:デフォルトの名無しさん :03/11/16 17:24
>>842
「定数を定義してください」

844 名前:デフォルトの名無しさん :03/11/16 17:24
DT_WORDBREAKを入れろと書いてある

845 名前:デフォルトの名無しさん :03/11/16 17:25
定義しろなら必要なヘッダが読み込まれてない。

846 名前:840 :03/11/16 17:36
ありがとうございます。書き方が悪くてすみません。
環境は Windows 2000 で VisualC++ の SP5 です。

DT_WORDBREAK も一緒に指定してあげてますが、こちらは問題ないです。
必要なヘッダファイルが何なのか、ご存知なら教えていただけませんか?

847 名前:デフォルトの名無しさん :03/11/16 17:38
もしかして>>817と同じパターンか

848 名前:デフォルトの名無しさん :03/11/16 17:42
>>846
>ヘッダー:Winuser.h で宣言、Windows.h をインクルード
>インポートライブラリ:User32.lib を使用
この辺は大丈夫?

849 名前:デフォルトの名無しさん :03/11/16 17:47
そうだね、たぶん817と同じパターンだとおもうよ。
includeディレクトリをgrepしてみたけど、PlatformSDKの方に
しか定義されてなかった。

850 名前:840 == 846 :03/11/16 17:49
>>847, 847
ありがとうございます。
Winuser.h, Windows.h どっちも include してますが相変わらずです。
User32.lib もリンカに設定されています。

とりあえず
http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/dx8_vb/directx_vb/graphics_enum_d3dxvb_9dcy.asp
にあった定数「 DT_NOFULLWIDTHCHARBREAK = 524288 (&H80000) 」を無理やりはめてみました。
でも効果あるのかないのかよくわからない・・・

851 名前:デフォルトの名無しさん :03/11/16 17:57
>>850
いや、最新のPlatformSDKインストールしろよ

852 名前:797 :03/11/16 18:06
>821
情報Thx!
今一番危惧していることは、HDCがはじめから持ってるHBITMAPのリークです。
デバッグしたアプリを閉じてもリソースが起動前よりも減るばっかりでかなり恐ろしい感じです。
何か安心する方法が無いかもうちょっと探してみます。

853 名前:840 == 846 == 850 :03/11/16 18:28
>>849, 851
ありがとう、今やっとダウンロード終わってインストールしました。
無事できたよう!(´∀`)

854 名前:デフォルトの名無しさん :03/11/16 18:31
>>852
http://msdn.microsoft.com/msdnmag/issues/01/03/leaks/default.aspx


855 名前:デフォルトの名無しさん :03/11/16 22:07
ちょいと質問。
3つの数値をCOLORREF型にしてくれるマクロがRGB。
じゃあ、逆にCOLORREFの値を3つにわけてくれるマクロって無いの?

856 名前:デフォルトの名無しさん :03/11/16 22:10
RGBマクロの説明のとこに書いてるだろ。

857 名前:デフォルトの名無しさん :03/11/16 22:12
>>855
COLORREFの説明のとこに書いてるだろ。ボケ。

858 名前:デフォルトの名無しさん :03/11/16 22:19
>>831
WM_SHOWWINDOWは?

859 名前:デフォルトの名無しさん :03/11/16 22:22
>>858
プログラムが終了するんですよね。
ちなみに今は
winmain()
{
Dialogbox(hInst,"TestDialog",0,(DLGPROC)WndProc);
return 0;
}
にて動いています。

で動かなかった理由はリソース定義部のダイアログボックスで
CLASS "〜"
を入れていたからでした。(この時はもうウィンドウクラスを消してしまった頃です

860 名前:855 :03/11/16 22:24
失礼つかまつりました。

861 名前:デフォルトの名無しさん :03/11/16 22:26
>>860
わかってよかったね

862 名前:デフォルトの名無しさん :03/11/16 22:27
ところで、存在がわからないものについてはどう質問すればいいのかなぁ?

いつも質問の内容は普通にわかるだろ見たいなのがあるけどさぁ・・・
自分も解らないものばかりで、質問したらシカトとかいやだし。
存在するかどうかわからない関数についてはどういうふうに質問すればいいのでしょうか?

863 名前:デフォルトの名無しさん :03/11/16 22:48
欲しい機能を「人にわかるように」説明するしかあるまい。

864 名前:デフォルトの名無しさん :03/11/16 22:48
こんなことできないかな〜

865 名前:デフォルトの名無しさん :03/11/16 22:49
目的志向で聞く
当然ながら凄まじい煽りの嵐を呼ぶことになるが
そこでくじける人は有料のサポートを買いなさい

866 名前:デフォルトの名無しさん :03/11/16 22:50
>>863
ソレがもし atoi とかでも?そういう人なら嬉しいんだけど。人間違うから叩かれるよねぇ?・・・

867 名前:デフォルトの名無しさん :03/11/16 22:56
まずは「Win32PAIに含まれるような物かどうか」くらい考えることはして欲しいもんだが。

868 名前:デフォルトの名無しさん :03/11/16 23:06
>>867
たとえ悪くてすみませんでした。

ところで>>831見たいな質問は許されますか?

869 名前:デフォルトの名無しさん :03/11/16 23:19
>>855
COLORREF自体が単なるDWORDなので、

union{
 COLORREF colorref;
 R,G,B:BYTE;
}

こんな共用体を使えばわざわざ変換する必要もなくなる。


870 名前:デフォルトの名無しさん :03/11/17 00:21
>>867
狙ってないだろうが、激しくワラタ

871 名前:デフォルトの名無しさん :03/11/17 00:33
>>869
アラインをバイト単位にするオプション忘れんなよ。

872 名前:デフォルトの名無しさん :03/11/17 00:59
普通のGDI APIで GradientFill() 使わずに、長方形をグラデーションで
塗りつぶします。

少なくとも CreatePen() をたくさん呼び出す場合よりは ExtTextOut() の方が
速かったんだけど、それより速い方法ってあり?

873 名前:デフォルトの名無しさん :03/11/17 01:05
DDSURFACEDESCとかのDESCってなんて訳してます?
記述子?なんかしっくりこない。

874 名前:デフォルトの名無しさん :03/11/17 09:44
>>869
GetRValue、GetGValue、GetBValueを使おうぜ。

875 名前:デフォルトの名無しさん :03/11/17 09:47
それってダサくない?

876 名前:デフォルトの名無しさん :03/11/17 14:36
rebarとかに乗せずに普通にツールバーを作ると
メニューやキャプションの間に境界ができますよね?
確かあの境界を作らないようにする方法があったと思うのですが思い出せません
どなたかご存知ありませんか?

877 名前:876 :03/11/17 14:41
ageます

878 名前:デフォルトの名無しさん :03/11/17 18:39
>>875
なら自分でマクロつくれ
いちいち無駄なことに反応すな

879 名前:デフォルトの名無しさん :03/11/17 19:52
お、釣れた釣れた

880 名前:デフォルトの名無しさん :03/11/17 20:16
根拠の薄い煽り、放置不能、、釣りと称した言い訳


881 名前:デフォルトの名無しさん :03/11/17 20:18
質問する人は取とってほしいね

882 名前:デフォルトの名無しさん :03/11/17 21:04
モーダルダイアログでアイドル処理するにはどうすればいいですか?

883 名前:デフォルトの名無しさん :03/11/17 21:30
>>882
DialogBox()の中でメッセージループいじってるので不可能

884 名前:デフォルトの名無しさん :03/11/17 21:47
アイドル処理というのは、メッセージを受けなかったりスリープ状態ということでしょうか?・・・無知ですみません><;

885 名前:デフォルトの名無しさん :03/11/17 22:23
>>884
みなさ〜ん、ぼくを煽ってくださ〜い!

という、まさに今のおまいのような状態を言う

886 名前:デフォルトの名無しさん :03/11/17 22:27
タイトルの分かっているウインドウを最大化/もとのウインドウサイズに戻すプログラムを組んでいます。
まず、最大化させようと、次のようなプログラムを書き、動作しました。

HWND hwnd;
UINT msg;
WPARAM wparam;
LPARAM lparam;

/* ウィンドのタイトルを得る */
hwnd = FindWindow(NULL, "ウィンドウのタイトル");

/* 最大化メッセージを送る */
msg = WM_SYSCOMMAND;
wparam = SC_MAXIMIZE;
PostMessage(hwnd, msg, wparam, lparam);

もとのサイズに戻すには、wparam = SC_RESTOREとすればよいと考えています。

ここから、質問なのですが、ウインドウが現在、最大化されているかを調べる方法ってどうやるんでしょう?
識者の方、よろしくお願いします。



887 名前:デフォルトの名無しさん :03/11/17 22:28
IsZoomed

888 名前:886 :03/11/17 22:30
>887
すばやい反応ありがとうございます。なるほど、そのままの名前のAPIですね(^^;;

889 名前:デフォルトの名無しさん :03/11/17 23:19
MFCのダイアログでアイドルハンドラ無かったっけ。

890 名前:デフォルトの名無しさん :03/11/17 23:24
MFCのあれはモーダルではない。
MFC製とOS謹製のモーダルだと動作が違うらしいけど
詳しいことは知らない。

891 名前:デフォルトの名無しさん :03/11/18 00:04
>>889
MFC のは擬似モーダルだね。
まさに、アイドルメッセージを処理するために
擬似にしているような気がするが。
ソースを追って見たら?


892 名前:デフォルトの名無しさん :03/11/18 00:13
RunModalLoop()なるものを回してた。んでアイドルメッセージWM_KICKIDLEを送る機会を与えてた。

893 名前:860 :03/11/18 00:24
結局、こういうマクロにしときますた。

#define COLORREFTORGB(c,r,g,b) r=(BYTE)c;g=(BYTE)(c>>8);b=(BYTE)(b>>16);

でも共用体のほうが美しいと思った。
みなさんレスどもでした。

894 名前:デフォルトの名無しさん :03/11/18 00:34
>>893
if(なんたら)
COLORREFTORGB(c,r,g,b);

なんてことすると…(・∀・)

895 名前:デフォルトの名無しさん :03/11/18 00:40
>>893
#define COLORREFTORGB(c,r,g,b) (r=(BYTE)c,g=(BYTE)(c>>8),b=(BYTE)(b>>16))

ところで質問なんですが
MFCのフローティングツールバーとか、
フロート中はWS_POPUPスタイルを持っているんですが
親ウインドウのタイトルバーも青いまま=ウインドウがアクティブな状態
になってますよね、これってどうやってるんですか?

WM_NCACTIVATEで親ウインドウにフォーカスを移すようにしてみると
ポップアップに乗っけたコントロールが動かなくなるのですが。

896 名前:デフォルトの名無しさん :03/11/18 01:40
VCのSDKでダイアログベースのプログラムつくってるんすけど
GetOpenFileNameで拾ってきたファイルネームをダイアログの
EDITボックスに入れたいんです。
この場合どこをいぢればいいんでしょうか?

897 名前:デフォルトの名無しさん :03/11/18 01:43
>>896
はWin32APIの入門書のコントロールの章を読むべきだね

ちなみに
SetWindowText (HWND,LPSTR)だった希ガス

898 名前:896 :03/11/18 02:00
>897
すいません、事故解決しました
SetDlgItemText
であっさりうまくいきました
申し訳ないっす

899 名前:デフォルトの名無しさん :03/11/18 02:02
>>886
そうやって直接メッセージを送るのは好かんな。
ShowWindowあたりを使った方がスマートかと。

900 名前:デフォルトの名無しさん :03/11/18 02:03
>>898の中の人の>>898
SendMessageのが好きだけど、なんでPostMessage?

901 名前:デフォルトの名無しさん :03/11/18 02:03
>>900
間違い・・・・

>>886向けです><;

902 名前:886 :03/11/18 02:35
886です。
プログラム中のコメント、間違っていました。
「ウインドゥのタイトルを得る」→「タイトルからウインドウハンドルを得る」

>>899
確かにスマートですね。
ShowWindow(hwnd, SW_MAXIMIZE); で最大化できました。

>>900-901
メッセージを送る側のプログラムは、最大化メッセージを送った後、即終了します。
メッセージを送った後はプログラム間の同期は不要なので、PostMessage()にしました。

つたない質問&プログラムにレスつけてくださって、感謝です。

903 名前:デフォルトの名無しさん :03/11/18 03:26
長くてすいません。
class SETMP3{
public:
HWND hwnd;
static OPENFILENAME ofn = {0};
static TCHAR *strFile[MAX_PATH];
static TCHAR *strCustom[256] = TEXT("Before files\0*.*\0\0");
static TCHAR *strMove;MAX_PATH] = TEXT("C:/backup/test.dat");
public:
〜〜〜〜
}
んで、メンバ関数から参照とかしてるんですが
main.obj : error LNK2001: 外部シンボル ""public: static char * SETMP3::strFile" (?strFile@SETMP3@@2PADA)" は未解決です
とでてしまいます。
これっていったいどうやればいいのでしょうか?
いままでだましだましやってたんですけど、しっかりわかっときたいんです
おねがいします。

あと上のソースで
static OPENFILENAME ofn = {0};
の部分で初期化できないかんじで、引っかかるんですが、Winmain関数に直に書くと
なぜか通ります
classの中でこの手の構造体の初期化って出来ないんですか?
コンストラクタで
ofn={0};
でもダメでした。

904 名前:デフォルトの名無しさん :03/11/18 03:32
char *str[128]とかやめた方がよくない?

strはTCHARのポインタのポインタが128個て意味?
*strCustom[256] = TEXT("Before files\0*.*\0\0"); の代入ができるの?
strMove;MAX_PATH]
は開始が無いのに ] 閉じをしてる

905 名前:デフォルトの名無しさん :03/11/18 03:33
C++やったこと無いけど public: は二つもハイって平気なの?
連レススマソ

906 名前:903 :03/11/18 03:37
うげ、貼り付けたソースが手直し中のごちゃごちゃのでした
static OPENFILENAME ofn = {0};
static TCHAR strFile[MAX_PATH];
static TCHAR strCustom[256] = TEXT("Before files\0*.*\0\0");
static TCHAR strMove[MAX_PATH] = TEXT("C:/backup/test.dat");
こんな感じです。
このコードだと初期化が出来ないようなエラーがでて
初期化の部分試しに引っこ抜いてみたら、外部参照エラーでて
staticも取ってみたら変なメモリ読もうとして強制終了してしまいます

907 名前:デフォルトの名無しさん :03/11/18 03:48
クラス内で初期化は コンストラクタ でしか無理じゃないの?

908 名前:903 :03/11/18 03:50
コンストラクタで初期化しようとしても

ofn={0};
strCustom = TEXT("Before files\0*.*\0\0");
strMove = TEXT("C:/backup/test.dat");
とコンストラクタにかいたら

: error C2059: 構文エラー : '{'
: error C2143: 構文エラー : ';' が '{' の前に必要です。
: error C2143: 構文エラー : ';' が '}' の前に必要です。
: error C2440: '=' : 'char [19]' から 'char [256]' に変換することはできません。(新しい動作 ; ヘルプを参照)
この変換が可能なコンテキストはありません。
: error C2440: '=' : 'char [19]' から 'char [260]' に変換することはできません。(新しい動作 ; ヘルプを参照)
この変換が可能なコンテキストはありません。

てな感じでエラーがでてしまうんです。
class使わないで直に書けば動くのですが、なんとかclassを使いたいと
思ってまして……

909 名前:デフォルトの名無しさん :03/11/18 03:51
>>906
というかそれC++の質問。初期化と代入も混同してるようだからCからやり直しかな。

910 名前:デフォルトの名無しさん :03/11/18 03:52
>>908
それ初期化じゃなくて代入。

911 名前:903 :03/11/18 03:56
わかりました、出直してきます......_| ̄|○

912 名前:デフォルトの名無しさん :03/11/18 04:01
// SETMP3.h
class SETMP3{
public:
  SETMP3();
  static OPENFILENAME ofn;
  static TCHAR strFile[MAX_PATH];
  static TCHAR strCostom[256];
  static TCHAR strMove[MAX_PATH];
};

// SETMP3.cpp
OPENFILENAME SETMP3::ofn = {0};
TCHAR SETMP3::strFile[MAX_PATH];
TCHAR SETMP3::strCostom[256] = _T("Before files\0*.*\0\0");
TCHAR SETMP3::strMove[MAX_PATH] = _T("C:\\backup\\test.dat");

913 名前:デフォルトの名無しさん :03/11/18 04:06
変数の初期化以外では配列の代入はできません

wstrcpy (strCustom, TEXT("Before files\0*.*\0\0")) としてみましょう

914 名前:912 :03/11/18 04:07
コンストラクタの SETMP3(); は消して。

915 名前:デフォルトの名無しさん :03/11/18 04:13
横槍の質問。
よく見る
"Before files\0*.*\0\0"を
"Before files\0*.*\0"と書くのはダメ?

916 名前:デフォルトの名無しさん :03/11/18 04:17
903は答えを見ずに逝ったか・・・

917 名前:デフォルトの名無しさん :03/11/18 04:19
>>915
え〜とね・・・もともとは
"nnn\0*.*\0xxx\0*.*\0\0"見たいな感じで複数の文字列を格納しているんだと思うよ。
でその複文字列の終了が"\0\0"だと思う。

918 名前:903 :03/11/18 04:22
>912
やってみたのですが
error C2655: 'ofn' : 現在のスコープ内で識別子が再宣言あるいは再定義されています。
が4つ、それぞれの変数で、でてしまいます。
どこがダメなのか考え中です。

>913
ありがとうございます、かなり初歩的なところも解ってないみたいです……
あかんわ……

919 名前:デフォルトの名無しさん :03/11/18 04:24
>>918
>>912のように.hファイルと.cppファイルに分けて書いたか?

920 名前:デフォルトの名無しさん :03/11/18 04:29
"OPENFILENAME構造体"とか"OPENFILENAME"とかで検索汁

921 名前:903 :03/11/18 04:29
>919
はい、分けて書いています。

922 名前:デフォルトの名無しさん :03/11/18 04:31
>>921
書いてる場所は?グローバルで書いてる?

923 名前:デフォルトの名無しさん :03/11/18 04:34
SETMP3.cpp の4つの変数ってば、SETMP3.cppの
最上位で定義しないとイケマセンですねん。
関数の中に入れちゃダメよん。


924 名前:デフォルトの名無しさん :03/11/18 04:37
さっきから質問者じゃないageてる人、的外れなことばかり書いてます・・・

925 名前:903 :03/11/18 04:39
>922
すいません、グローバルで書いてませんでした(;´Д`)
とりあえずこの問題は解決したっぽいです
作ってる物自体は、微妙に動きませんが−−;

みなさま、こんな遅くなのにありがとうございました。

926 名前:デフォルトの名無しさん :03/11/18 05:28
>>917
\0\0と書かなくても最後は勝手に\0がつくんだから
\0だけでいいんじゃねーのってことじゃねーの?

927 名前:デフォルトの名無しさん :03/11/18 05:59
・・・よく考えたらそうだね>>926
今は使う機会ないから今度やってみるね。

928 名前:デフォルトの名無しさん :03/11/18 06:12
>>913
"Before files"までしかコピーされないと思う

929 名前:デフォルトの名無しさん :03/11/18 06:14
>>928
どうすればいいんだろ^^;

930 名前:デフォルトの名無しさん :03/11/18 08:57
memcpy(strCustom, "Before files\0*.*\0\0", sizeof("Before files\0*.*\0\0"));
ならいけそうな気がするけど。

931 名前:デフォルトの名無しさん :03/11/18 09:15
memcpy(strCustom, "Before files\0*.*\0\0", sizeof(TEXT ("Before files\0*.*\0\0")));
かなぁ?

932 名前:デフォルトの名無しさん :03/11/18 09:47
>>895の質問は誰も答えられないのね…。

漏れも、その問題は苦労した。
メッセージをフロート中のウィンドウと
親ウィンドウの間で複雑に操作する事によって解決した。
単純な解決方法はWM_NCPAINT等で自分でタイトルバーを再描画する。

どっちにしても、Windowsの各バージョンで試行錯誤しないといけないし
将来に渡って、挙動が同じになる可能性も低い。

ここ(2ch)で、この手の質問に答えられる人って少ないんじゃない?

933 名前:デフォルトの名無しさん :03/11/18 09:55
>>932
プロとか教授とかは忙しいんじゃないの?

934 名前:デフォルトの名無しさん :03/11/18 11:41
いつまでもスレ違いのC++講座を続けるバカがいるスレはここです。

935 名前:デフォルトの名無しさん :03/11/18 11:56
>>934
マトモに断言してる奴初めて見たよ(藁

>>934は責任を取って次スレを立てましょう

936 名前:デフォルトの名無しさん :03/11/18 11:58
WM_ENTERIDLEとかあったような>アイドル処理

937 名前:デフォルトの名無しさん :03/11/18 14:23
>>932
フローティングツールバーなら、
単に WS_EX_WOOLWINDOW だかなんだかなんじゃないの?


938 名前:デフォルトの名無しさん :03/11/18 14:29
ウールウィンドウ

939 名前:932じゃないけど :03/11/18 15:06
>>937

当然、それも指定するんだけど、Windowsの仕様上(なのかな?)
結局アクティブなウィンドウは1つに指定されるみたいで、それ以外は
非アクティブな状態になるからだめ。
で、最終的にはWM_NCACTIVATE(だっけ?)あたりで自前の処理を
追加しないといけなくなる。

漏れもこの問題で一晩ネットの海をさまよった記憶が・・・。
まぁ、どんな問題も、同じような問題に引っかかる人はいるもんだから
調べればいずれ出てくるんだよな。


940 名前:デフォルトの名無しさん :03/11/18 15:51
MFCがやってるなら、MFCのソースを見る手もあるけど。

941 名前:デフォルトの名無しさん :03/11/18 16:19
>>936
それってダイアログのアイドル処理に使える?
それ捕まえてみたけど、メニューを表示したときのMSGF_MENUしか飛んでこないような。

942 名前:デフォルトの名無しさん :03/11/18 16:27
>>939
MFCの
int CMiniDockFrameWnd::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message)
{
if (nHitTest >= HTSIZEFIRST && nHitTest <= HTSIZELAST) // resizing
return MA_NOACTIVATE;
return CMiniFrameWnd::OnMouseActivate(pDesktopWnd, nHitTest, message);
}

これは違うのか?


943 名前:WMP :03/11/18 17:08
MP3の入っているファイルからランダムで選んで再生させるほうほう教えてください。

944 名前:デフォルトの名無しさん :03/11/18 17:36
>>941
親を見てくれ。


945 名前:939 :03/11/18 17:43
>>942

悪い。MFCのことはぜんぜん知らん。
けどMFCにはフローティングウィンドウ用のクラスがあったんじゃ?
それのことかな?

とりあえず、上で言っているのはSDKのみでの実装方法なんだけど。


946 名前:デフォルトの名無しさん :03/11/18 17:48
>>945
MiniDockFrameWnd(フロートウインドウのフレーム)
で特別操作しているメッセージがWM_MOUSEACTIVATEだけだから
それでMA_NOACTIVATEを返せば目的が達成できるんじゃないか?

947 名前:932 :03/11/18 19:21
>>946
本当にそんなに簡単にできるのか?…ちょっと試してみた。↓

LRESULT CALLBACK ToolFrameWndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) {
 int nHitTest = LOWORD( lParam );
 switch( uMsg ) {
  case WM_MOUSEACTIVATE:
  if( nHitTest >= HTSIZEFIRST && nHitTest <= HTSIZELAST )
   return MA_NOACTIVATE;
  return DefWindowProc( hMainFrameWnd, uMsg, wParam, lParam );
 }
 return DefWindowProc( hWnd, uMsg, wParam, lParam );
}

全然、駄目だった。漏れもMFCは何も知らんが、内部で特別な事してるんじゃないの?
それとも、漏れの↑のソースが間違ってるのか?

948 名前:デフォルトの名無しさん :03/11/18 20:52
MFC話禁止

949 名前:デフォルトの名無しさん :03/11/18 20:55
はぁ?

950 名前:デフォルトの名無しさん :03/11/18 21:00
ひぃ!

■ VisualC++(MFC限定)相談室 MFC9.dll■
http://pc2.2ch.net/test/read.cgi/tech/1062098350/

951 名前:デフォルトの名無しさん :03/11/18 21:03
MSUで初日に習うこと:
「アクティブである」≠「フォーカスを持っている」
「例えば、MDIの親ウインドウ」

952 名前:デフォルトの名無しさん :03/11/18 21:30
>>951
MFCを主体とした話ではないからこっちでいいだろうが。

953 名前:デフォルトの名無しさん :03/11/18 21:39
Win32API話禁止

954 名前:932 :03/11/18 22:01
…ってか、話してるのはMFCだと簡単だけどAPIだと、どーやるんだ?
という話だから、おもいっきりコッチの話だと思うんだけど
>>947のソースも、MFC使ってないし…。

955 名前:デフォルトの名無しさん :03/11/19 03:26
>>895 俺もむかしハマった。
case WM_NCACTIVATE:
 return DefWindowProc(hWnd, WM_NCACTIVATE, TRUE, 0);

親ウインドウとフローティングウインドウでこのようにすれば、タイトルバーは見た目、
アクティブなままだよ。これはMFCのやりかた。
もっともこれだけだと、ほかのアプリに切り替わったときに破綻するから、上のTRUE/FALSEを上手に
タイミング良く制御する必要がある。

956 名前:903 :03/11/19 15:54
レジストリから値を読みたいのですが
グローバルで
char lin_inst[256];
として
reg(){
HKEY hKey;
DWORD dwPosition;
DWORD dwType = REG_SZ;
DWORD dwByte = 32;

RegCreateKeyEx(HKEY_LOCAL_MACHINE,
"Software\\XXXX\\YYYY",
0,
"",
REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,
NULL,
&hKey,
&dwPosition);

RegQueryValueEx(hKey,
"ExecutePath",
NULL,
&dwType,
(BYTE *)lin_inst,
&dwByte);
RegCloseKey(hKey);
}
でlin_instにHKEY_LOCAL_MACHINE\\Software\\XXXX\\YYYY"のExecutePath
の値を入れたいのですが、コレだと値が入ってくれないのです
どこが悪いのか教えていただけないでしょうか

957 名前:956 :03/11/19 16:01
すいません、自己解決しました
XXX\\YYYのところ、大文字と小文字勘違いしてた……
残りレス少ないのにすいません

958 名前:デフォルトの名無しさん :03/11/19 16:24
WritePrivateProfileStringってあるけど、これって文字列にするのがアレなんで
WritePrivateProfileIntとかって数値を書くAPIってありませんか?

959 名前:デフォルトの名無しさん :03/11/19 16:29
ありません。

960 名前:デフォルトの名無しさん :03/11/19 16:45
やっぱないですかないですかうんこですねありがとうございますうんこさんほんとどうもです

961 名前:デフォルトの名無しさん :03/11/19 16:49
>>960
くだらない質問した責任をとって次スレ立てなさい

962 名前:デフォルトの名無しさん :03/11/19 17:01
>>961
('д`)えーそんなぁ〜
つか、立てるのいいけど>>2いこうの点プレはおね〜

963 名前:デフォルトの名無しさん :03/11/19 17:03
あ、ごめん・・
このホストではしばらくスレ立てれないって何かでた(´・ω・`)

964 名前:デフォルトの名無しさん :03/11/19 17:31
MSDN LibraryがUnavailableになって利用できないんだけど、どう?
IE6SP1だとUnavailable
Firebirdだと日本語が文字化け
調べたいときはgoogleしかない?

965 名前:デフォルトの名無しさん :03/11/19 17:44
ん? 使えるみたいだけど、ここのことじゃなくて?
ttp://www.microsoft.com/japan/msdn/library/default.asp

966 名前:デフォルトの名無しさん :03/11/19 19:05
ダイアルアップ接続の接続時間を取得する方法を教えてください。

開発環境はbcc 5.5.1、WindowsNT4.0/98です。


967 名前:デフォルトの名無しさん :03/11/19 19:32
コンソールアプリのラッパーを作成してるのですが、
コンソール画面の出力文字列を取得する方法はありますでしょうか?
spyで覗けなくて手詰まりになってしまいました。

win2000、VC6で開発しています。


968 名前:デフォルトの名無しさん :03/11/19 19:35
>>965
マジですか?
左のツリーがUnavailableになって利用できないです。

969 名前:デフォルトの名無しさん :03/11/19 19:39
>>967
パイプで繋げ

970 名前:デフォルトの名無しさん :03/11/19 19:43
>>968
W2K、XPの二台で試したけど、大丈夫だよ。

971 名前:デフォルトの名無しさん :03/11/19 19:51
>>970
そうですか、ありがとうございました。
ttp://www.xxxx.nu/upload/upload/msdn.jpg
うちではこんな感じで表示されないんです
ページフィルタ・串は通してないんですけど。

なんでだろ

972 名前:デフォルトの名無しさん :03/11/19 19:58
>>971
セキュリティーレベルが高になってない?

973 名前:デフォルトの名無しさん :03/11/19 20:00
>>972
その辺は問題ないです。
普段はカスタムで、最低にしても試してみましたし。
ただ、他の人は正常に見えていると言うことで
もうこのスレからは逸脱しているので
ここから先はもういいです、ありがとうございました。

974 名前:966 :03/11/19 22:17
ちょっと調べたところ、

・自前で繋いで監視orファイルかレジストリに接続時間を記録して
 後でそれから逆算
・システムログを読んで直近のリモートアクセスの内容が接続
 だったらその記録時刻から逆算(当然NTのみ?)

という2つの方法があるっぽく、2番目のにしようと思ったのですが
もっとスマートな方法はあるでしょうか。

975 名前:デフォルトの名無しさん :03/11/19 22:31
Ras関係のAPIで取得できるんじゃないの?

976 名前:デフォルトの名無しさん :03/11/19 23:35
>>966
Windows 2000 以降なら、RasGetConnectionStatistics() で RAS_STATS 構造体の
dwConnectDuration フィールドにミリ秒単位で接続時間が得られる。


977 名前:デフォルトの名無しさん :03/11/19 23:43
現在の自分のアプリの通信速度を取得する方法ってある?


978 名前:デフォルトの名無しさん :03/11/20 00:05
受信バイト/時間ではかれば?

979 名前:デフォルトの名無しさん :03/11/20 01:03
time.hのtime_t time(time_t *)と同じ動きなAPIってありますか?

980 名前:デフォルトの名無しさん :03/11/20 01:12
全く同じ働きをするようなAPIは存在しません。
GetSystemTimeあたりが似たようなAPIでしょうか。

981 名前:デフォルトの名無しさん :03/11/20 01:42
>>980
やっぱりGetSystemTimeで得られたSYSTEMTIME構造体のメンバを
全部適当にかけたり足したりして総経過秒に直すんですか?

982 名前:デフォルトの名無しさん :03/11/20 01:47
VCのCRTはそうしてますよ。

983 名前:デフォルトの名無しさん :03/11/20 02:11
>>982
なるほど。ありがとうございました。

984 名前:デフォルトの名無しさん :03/11/20 02:48
>>973
MSDNインストールしてナイトだめなんじゃないの?

985 名前:デフォルトの名無しさん :03/11/20 21:06
TCHARやLPTSTRの「T」ってもしかしてTransportableのT?


986 名前:デフォルトの名無しさん :03/11/20 21:31
TEXTのT

987 名前:デフォルトの名無しさん :03/11/20 21:36
TarachanのT

988 名前:985 :03/11/20 22:34
>>986-987
そうだったんですか。初めて知りました。

989 名前:デフォルトの名無しさん :03/11/20 23:00
>>979
GetSystemTime()

SystemTimeToFileTime()

FileTime型からtime_t型へ変換


990 名前:デフォルトの名無しさん :03/11/20 23:15
>>979
2038年問題には気を付けろよ

991 名前:デフォルトの名無しさん :03/11/20 23:37
そろそろ次スレかな。

992 名前:デフォルトの名無しさん :03/11/20 23:38
74歳か。。。 たぶん俺の出る幕じゃなくなってるな

993 名前:デフォルトの名無しさん :03/11/20 23:48
順調に立つか分からないので、次スレ立ててくるな。


994 名前:デフォルトの名無しさん :03/11/21 00:10
Win32API質問箱 Build15
http://pc2.2ch.net/test/read.cgi/tech/1069339866/

995 名前:デフォルトの名無しさん :03/11/21 00:54
FILETIME -> time_t の変換は、両者の開始日時と
カウント単位が、全然違うことに気をつけましょう。

996 名前:デフォルトの名無しさん :03/11/21 05:48
>>992
いや、未だ定年していないし、年金は90歳からだ。。


997 名前:デフォルトの名無しさん :03/11/21 12:32
未来人キタ━━━━━━(゚∀゚)━━━━━━ !!

998 名前:デフォルトの名無しさん :03/11/21 13:14
は?

999 名前:デフォルトの名無しさん :03/11/21 13:16
↓1000オメ

1000 名前:デフォルトの名無しさん :03/11/21 13:16
↓1001オメ

1001 名前:1001 :Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。