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

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

Win32API質問箱 Build43

1 :デフォルトの名無しさん:2006/05/19(金) 11:25:09
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。

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

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

2 :デフォルトの名無しさん:2006/05/19(金) 11:25:43
-過去スレ
42 ttp://pc8.2ch.net/test/read.cgi/tech/1144962549/
41 ttp://pc8.2ch.net/test/read.cgi/tech/1141392216/
40 ttp://pc8.2ch.net/test/read.cgi/tech/1138893959/
39 ttp://pc8.2ch.net/test/read.cgi/tech/1136673250/
38 ttp://pc8.2ch.net/test/read.cgi/tech/1133798345/
37 ttp://pc8.2ch.net/test/read.cgi/tech/1131884991/
36 ttp://pc8.2ch.net/test/read.cgi/tech/1128951330/
35 ttp://pc8.2ch.net/test/read.cgi/tech/1125850096/
34 ttp://pc8.2ch.net/test/read.cgi/tech/1122723009/
33 ttp://pc8.2ch.net/test/read.cgi/tech/1120153520/

3 :デフォルトの名無しさん:2006/05/19(金) 11:28:00
32 ttp://pc8.2ch.net/test/read.cgi/tech/1117271829/
31 ttp://pc8.2ch.net/test/read.cgi/tech/1114762194/
30 ttp://pc8.2ch.net/test/read.cgi/tech/1112345886/
29 ttp://pc8.2ch.net/test/read.cgi/tech/1110281860/
28 ttp://pc5.2ch.net/test/read.cgi/tech/1108199304/
27 ttp://pc5.2ch.net/test/read.cgi/tech/1106103119/
26 ttp://pc5.2ch.net/test/read.cgi/tech/1104109858/
25 ttp://pc5.2ch.net/test/read.cgi/tech/1101393155/
24 ttp://pc5.2ch.net/test/read.cgi/tech/1098967135/
23 ttp://pc5.2ch.net/test/read.cgi/tech/1095534704/
22 ttp://pc5.2ch.net/test/read.cgi/tech/1092524669/
21 ttp://pc5.2ch.net/test/read.cgi/tech/1090422324/
20 ttp://pc5.2ch.net/test/read.cgi/tech/1088140233/
19 ttp://pc5.2ch.net/test/read.cgi/tech/1084697545/
18 ttp://pc5.2ch.net/test/read.cgi/tech/1081702990/
17 ttp://pc5.2ch.net/test/read.cgi/tech/1077470361/
16 ttp://pc2.2ch.net/test/read.cgi/tech/1073830065/★
15 ttp://pc2.2ch.net/test/read.cgi/tech/1069339866/★
14 ttp://pc5.2ch.net/tech/kako/1065/10653/1065328397.html
13 ttp://pc5.2ch.net/tech/kako/1059/10595/1059549320.html
12 ttp://pc5.2ch.net/tech/kako/1056/10560/1056033645.html
11 ttp://pc5.2ch.net/tech/kako/1052/10526/1052651750.html
10 ttp://pc5.2ch.net/tech/kako/1047/10478/1047819779.html
9 ttp://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
8 ttp://pc5.2ch.net/tech/kako/1040/10409/1040964626.html
7 ttp://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
6 ttp://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
5 ttp://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
4 ttp://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
3 ttp://pc.2ch.net/tech/kako/1017/10170/1017072275.html
2 ttp://pc.2ch.net/tech/kako/1006/10067/1006783012.html
1 ttp://pc.2ch.net/tech/kako/991/991576947.html

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

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

- Win32 API入門
http://wisdom.sakura.ne.jp/system/winapi/
- Win32 プログラミング入門
http://www7.plala.or.jp/keny01/

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

-おまけ
dat落ちしている過去スレが見れるかも。Build19が見たい人、余裕のある人は●でも買ってやってくれ。
http://makimo.to/cgi-bin/search/search.cgi?q=Win32API&andor=AND&sf=2&H=&view=table&shw=&D=tech


5 :デフォルトの名無しさん:2006/05/19(金) 11:32:19
【HSP】HSPで3Dゲーム【3D】
http://pc8.2ch.net/test/read.cgi/gamedev/1016699230/
HSPでRPG
http://pc8.2ch.net/test/read.cgi/gamedev/1082902759/
HSPで出来る範囲について
http://pc8.2ch.net/test/read.cgi/gamedev/1085733089/
HSP - Hot Soup Processor [11]
http://pc8.2ch.net/test/read.cgi/gamedev/1133488968/
HSPでの麻雀プログラムについて
http://pc8.2ch.net/test/read.cgi/gamedev/1047707655/
HSPは・・・
http://pc8.2ch.net/test/read.cgi/gamedev/1104208959/
おまいらHSPで適当なゲームでもつくりませんか
http://pc8.2ch.net/test/read.cgi/gamedev/1102214621/
★ゲーム製作期待の星! HSP Part 9 ★
http://pc8.2ch.net/test/read.cgi/gamedev/1005313791/
HSPで完全オリのSLGを作るスレ
http://pc8.2ch.net/test/read.cgi/gamedev/1047478458/
HSPでSLGが作れるようになるまで頑張るスレ
http://pc8.2ch.net/test/read.cgi/gamedev/1103618349/
HSPでモンスター育成SLGを作りましょう!
http://pc8.2ch.net/test/read.cgi/gamedev/1089467139/
ネットゲームforHSP『無人島』制作スレ
http://pc8.2ch.net/test/read.cgi/gamedev/1018534410/
PGの面接で、使える言語はHSPですって言ったら
http://pc8.2ch.net/test/read.cgi/gamedev/1046921466/
HSPでシミュレーションRPG
http://pc8.2ch.net/test/read.cgi/gamedev/1036923414/


6 :デフォルトの名無しさん:2006/05/19(金) 13:56:51
>>1


7 :デフォルトの名無しさん:2006/05/19(金) 15:14:31
乙女

8 :デフォルトの名無しさん:2006/05/19(金) 16:25:32
乙女座

9 :デフォルトの名無しさん:2006/05/19(金) 16:31:35
乙女座の聖闘士

10 :デフォルトの名無しさん:2006/05/19(金) 16:43:27
乙女座の聖闘士のシャツ

11 :デフォルトの名無しさん:2006/05/19(金) 17:03:23
乙女座の聖闘士のシャツを着てるピザ

12 :デフォルトの名無しさん:2006/05/19(金) 17:19:14
乙女座の聖闘士のシャツを着てるピザ食い乙女

13 :デフォルトの名無しさん:2006/05/19(金) 17:30:41
乙女座の聖闘士のシャツを着てるピザ食い乙女座の聖闘士

14 :デフォルトの名無しさん:2006/05/19(金) 17:36:30
>>13
ほんものならシャツいらんやんヾ(^^ヘ)

15 :デフォルトの名無しさん:2006/05/19(金) 17:57:48
そんなことより「ピザ食い乙女座」ってなに?

16 :デフォルトの名無しさん:2006/05/19(金) 18:02:05
なぜHSPだけ丁寧にリンク集が。

17 :デフォルトの名無しさん:2006/05/19(金) 19:20:32
つまり乙女座の聖闘士は、自画像シャツ着たキモオタデブ

18 :デフォルトの名無しさん:2006/05/19(金) 21:11:50
前すれ埋めようじゃないか

19 :sage:2006/05/20(土) 02:43:23
ディスプレイの電源ON/OFFをWindowsプログラミングで行いたいのですが
参考になるサイト(もしくは書籍?)などありませんでしょうか。

ACPIというものを使うようですが探してもプログラミングについて
サンプルとか情報みつまりませんでしたorz

#WinAPIでは無いきもします・・・スレ違いでしたらゴメンナサイ

20 :デフォルトの名無しさん:2006/05/20(土) 02:44:37
sage間違えゴメンナサイorz

21 :デフォルトの名無しさん:2006/05/20(土) 02:59:16
>>19
こんなのがあったけど。
Turn on/off monitor
http://www.codeproject.com/system/display_states.asp

22 :デフォルトの名無しさん:2006/05/20(土) 03:04:19
前スレで反応がなかったのでとりあえずこちらでも・・・

BUTTONウィンドウの背景色を
灰色じゃない色(例えば、赤)に変えるにはどうしたらいいのでしょうか?

23 :デフォルトの名無しさん:2006/05/20(土) 03:25:17
ウィンドウズのアップデートをした時に、裏で処理やってるから待ってなくていいよ的な
吹き出しみたいなメッセージが、タスクバーのアイコンから出るのがありますが
あれを出す関数は何か教えてください。お願いします。

24 :デフォルトの名無しさん:2006/05/20(土) 04:31:46
デスクトップが持つイメージを列挙しようと思ったのですが、イメージリストを取得しても
イメージ保持数が0になっていて上手く取得できていないようです。

HWND hSysWnd;
hSysWnd = ::FindWindowEx( NULL, 0, "Progman", "Program Manager" );
hSysWnd = ::FindWindowEx( hSysWnd, 0, "SHELLDLL_DefView", NULL );
hSysWnd = ::FindWindowEx( hSysWnd, 0, "SysListView32", NULL );

HIMAGELIST hImgList = ListView_GetImageList( hSysWnd, LVSIL_NORMAL );
int nImg = ImageList_GetImageCount( hImgList );

for( int i=0 ; i<nImg ; i++ )
{
ImageList_Draw( hImgList, i, hdc, 0, i*48, ILD_NORMAL );
}

hImgListにNULLは返ってきてないのでエラーではないみたいなのですが、何が原因なのでしょうか。


25 :デフォルトの名無しさん:2006/05/20(土) 05:58:50
既存のEXEファイルにリソースを追加するプログラムを作っています。

コードを書き始めて、単に新規のデータをどこかに挿入したり、最後尾にくっつけたりするだけでは全く実現できないことに気付きました。
複雑な参照関係にあるデータが、インデックス番号ではなくオフセットアドレスを使って参照し合っているからです。
どこかにデータを挿入した場合は、すべてのオフセットアドレスを再構成しなければなりません。

そこで、リソースデータを、追加部分を含めた形で、新たに一から書き出す、という事を考えたのですが、これがかなり大変そうです。
ファイルポインタを激しく動かさなければならないのです。
ツリー部から、ID文字列領域から、リソース本体領域へと激しくジャンプしなければなりません。
その際にまだ書き込んでいないデータのサイズを正確に予測してきちんとファイルポインタ位置を決定しなければなりません。これはかなり複雑な状況ではないか、と思いました。

そこでちょっと考えてみました。

オフセットデータだけが問題であるならば、

ツリー部分にストアされているすべてのオフセットデータ値に対し、

1. データ挿入がなされる位置より前であるなら変更しない
2. データ挿入がなされる位置より後ろなら変更する

という方法でごく簡単にリソースデータを再構築できるのではないか、と。

挿入すべきデータはツリーの構成員の構造体だけで、ID文字列やリソース本体は最後尾にくっつけるだけでよさそうです。

こういう方法でやった人は誰かいるでしょうか? そしてうまくいったでしょうか?


26 :デフォルトの名無しさん:2006/05/20(土) 08:58:27
>>25
>ファイルポインタを激しく動かさなければならないのです。
一旦メモリ上にファイルの最終イメージを完成させてからファイルに書くか、
CreateFileMapping()使えば?


27 :デフォルトの名無しさん:2006/05/20(土) 09:47:56
>>22 ばっくぐらうんど

28 :デフォルトの名無しさん:2006/05/20(土) 13:12:01
子ウィンドウの数を求める関数があったような気がするのですが思い出せません。
EnumChildWindowsで調べるものをつくってもいいのですが、
思い出せないものが本当にあったのかどうかわからないので教えてもらえないでしょうか?

29 :デフォルトの名無しさん:2006/05/20(土) 13:25:18
ないです

30 :19:2006/05/20(土) 13:33:35
>>21
ありがとうございます。
トップレベルウィンドウにメッセージを送るだけで消せるんですね。

31 :デフォルトの名無しさん:2006/05/20(土) 13:47:22
>>29
なかったですか。
つまり自分の勘違だったんですね。

32 :デフォルトの名無しさん:2006/05/20(土) 16:19:51
CreateWindowのウィンドウのサイズ指定は
枠やキャプションも含めたサイズですか??

33 :32:2006/05/20(土) 16:22:14

キャプションや枠のサイズはどうすれば取得できますか?

34 :デフォルトの名無しさん:2006/05/20(土) 16:48:18
GET SYSTEMMETRICS


35 :デフォルトの名無しさん:2006/05/20(土) 17:54:01
ここは「Win32API質問箱」なのですが、C/C++前提だったりしますか。
Dとかでも質問可だったりしますか。

36 :デフォルトの名無しさん:2006/05/20(土) 18:03:54
どうぞ

37 :デフォルトの名無しさん:2006/05/20(土) 18:26:25
BeginUpdateResource
UpdateResource
EndUpdateResource
あたりは?NT系だけだが

38 :デフォルトの名無しさん:2006/05/20(土) 18:27:03

>>25

39 :デフォルトの名無しさん:2006/05/20(土) 18:55:58
ダイアログボックスの右上にある「×」を使用不能にしたり、可能にしたり切り替えるにはどうしたらいいんですか?

40 :デフォルトの名無しさん:2006/05/20(土) 18:57:17
メッセージフック

41 :デフォルトの名無しさん:2006/05/20(土) 19:02:21
>>39 メニュー(システムメニュー)から外せばいいよ

42 :デフォルトの名無しさん:2006/05/20(土) 19:35:05
>>40,41
関数とか教えてもらえませんか?

43 :デフォルトの名無しさん:2006/05/20(土) 19:51:12
wsprintfがあるので普通にwsscanfもあると思ってソースを書いていました。
それでコンパイルしたとき「そんな関数ないです」とコンパイラに言われました。
wsscanfじゃなかったらなんになるのさ??

44 :デフォルトの名無しさん:2006/05/20(土) 20:08:01
>>43
Win32APIには無い。

45 :デフォルトの名無しさん:2006/05/20(土) 20:11:49
猫を見て思った・・・。
char szBuf[64];
wsprintf(szBuf, "差し手 = %s", szSashite);

これはいいのか?

46 :デフォルトの名無しさん:2006/05/20(土) 20:12:58
UNICODE考えてなかったら別にいいんじゃない?

47 :デフォルトの名無しさん:2006/05/20(土) 20:50:33
wsscanfじゃなかったら結局なんなの?

48 :デフォルトの名無しさん:2006/05/20(土) 20:53:02
>>47
無いつってんだろp”

49 :デフォルトの名無しさん:2006/05/20(土) 21:01:09
似たようなものもないってことですか?
勘違いしていました。

50 :デフォルトの名無しさん:2006/05/20(土) 21:19:24
子ウィンドウがアクティブ状態になったときメニューのところが親ウィンドウみたいに
青くなるようにするにはどうしたらいいのでしょうか?

51 :デフォルトの名無しさん:2006/05/20(土) 21:34:30
,、i`ヽ                        ,r‐'ァ 
 `ヽ::                      ::´
   ヽ ヽ        , -‐--、         / /
    ヽ \      I:::::::I_      _ / /
     ヽ  ヽ    i,(;;;ノI、;;;)l    ,,/  , '
      ヽ  ` ー 、.,,ゝ´ヮ`,ノュ_, - '   r'
フォ━━━━` 、_ /::: `山':::::    /━━━━!!! カス
         ヽ:::::::::::|::::::::"",r‐'
          〉::::::::|::::::::::¨/
         /;;;;;;;/;;;;;;;;;;/
        /;;;;;;;/:::::::::::《
        <;;;;;;;《:::::::::::::ヽ
      /   ヽI,r''"""^~ヽ
     /   ,/ ヽ    ヽ


52 :デフォルトの名無しさん:2006/05/20(土) 21:56:40
>>50
windows操作してりゃ分からねぇ?

53 :デフォルトの名無しさん:2006/05/20(土) 22:00:53
>>43
CRTの_tscanfで問題あるのか?

54 :デフォルトの名無しさん:2006/05/20(土) 22:04:24
なんか関係あるのかと思ってちょっと調べたけど
余計わからなくなっちゃったじゃないかァ!
http://kureyon.jp/blog/srhkmk/img/1128259481.jpg
http://ja.wikipedia.org/wiki/%E4%BD%8F%E8%B0%B7%E6%AD%A3%E6%A8%B9



55 :デフォルトの名無しさん:2006/05/20(土) 22:04:54
>>42
GetSystemMenu

56 :デフォルトの名無しさん:2006/05/21(日) 14:44:24
ウィンドウAの上にまったく同じサイズのウィンドウBが被さっていて、ウィンドウAが見えません。
その時、ウィンドウAを上にするにはどうしたらいいのでしょうか?
ShowWindow以外でなにかあれば教えてください。

ウィンドウAとウィンドウBの親ウィンドウは同じです。

57 :デフォルトの名無しさん:2006/05/21(日) 14:54:52
SetWindowPos

58 :デフォルトの名無しさん:2006/05/21(日) 14:54:59
SetWindowPos
ていうか何故以外?

59 :デフォルトの名無しさん:2006/05/21(日) 15:08:29
2つ重ねたウィンドウが必要になりそうだとおもったからです。
だけどそのウィンドウが途中からウィンドウの順序が逆になりそうな気がしたのです。
ありがとうございますです。

60 :デフォルトの名無しさん:2006/05/21(日) 16:23:16
>>45
それって何処が変なの?

61 :デフォルトの名無しさん:2006/05/21(日) 17:32:29
こういうことだろ?
UNICODEでコンパイルすると
TCHARがwchar_tになる。
つまり、
wsprintf(wchar_t *, const wchar_t *, ...);
ということになる。

wchar_t *のところに、char szBuf[64]をいれたら
コンパイルエラーが出る。
といいたいいんだろ?

62 :デフォルトの名無しさん:2006/05/21(日) 18:25:06
>>59
Windowの何の順がだ?
って言うか、試してみてダメだった時に考えろや。

63 :デフォルトの名無しさん:2006/05/21(日) 18:38:28
2002年のサンプルじゃないか

64 :デフォルトの名無しさん:2006/05/22(月) 01:14:14
ツールバーのIndexからボタンのチェック状態を調べるにはどうしたらいいのでしょう?
TB_GETSTATEはIDからしか無理みたいですし・・・
だからといってIndexからIDを調べる方法もわからないし・・・
TB_COMMANDTOINDEXは逆だし・・・
調べてみたのですがさっぱりわかりません。
教えてもらえないでしょうか?

65 :デフォルトの名無しさん:2006/05/22(月) 01:26:56
>>64
TB_GETBUTTONでindexからIDを調べる

66 :デフォルトの名無しさん:2006/05/22(月) 01:41:47
オォ!!
ちゃんと出てる!
ありがとうございます!
でもやっぱしID調べてからだったのですか・・・
処理回数増えるけど仕方ないか・・・

67 :デフォルトの名無しさん:2006/05/22(月) 05:05:34
エディットコントロール内にかなりの量の文字列を表示させる際
大きいバッファを用意し、その中に全ての文字列を格納して
SetDlgItemTextで一度に表示する方法しかないんでしょうか?
行単位で送り出せればいいんですが。

68 :デフォルトの名無しさん:2006/05/22(月) 05:09:58
EM_SETSELとEM_REPLACESELで追記

69 :デフォルトの名無しさん:2006/05/22(月) 05:17:43
>>68
なるほど。EM系のメッセージ調べれば良かったんですね。
どうもありがとうございました。

70 :デフォルトの名無しさん:2006/05/22(月) 05:46:42
行単位だとむちゃくちゃ遅くて使い物にならない

71 :デフォルトの名無しさん:2006/05/22(月) 09:06:23
エディットコントロール使っちゃだめ

72 :デフォルトの名無しさん:2006/05/22(月) 09:26:26
MFCのソースを見たら
win95はSetWindowTextだったのが
それ以降はエディットコントロールのメモリへ直接セットしてますね
おそらくそれが一番高速でしょう

73 :デフォルトの名無しさん:2006/05/22(月) 09:59:12
Error: 'C:\DXSDK\SDK\LIB\DDRAW.LIB' contains invalid OMF record, type 0x21 (possibly COFF)

このエラーメッセージは何ですか?
コンパイルは出来たのですが、リンク時にこのメッセージが出てエラーになります

74 :デフォルトの名無しさん:2006/05/22(月) 10:09:30
失礼、ぐぐったら簡単に見つかりました

75 :デフォルトの名無しさん:2006/05/22(月) 10:13:59
うわお、ほんとだ。スミマセン・・・

76 :デフォルトの名無しさん:2006/05/22(月) 16:14:08
質問させてください。
メニュー選択で
 case IDM_AAA:
  OnCreate(hWnd); //スレッドを作ってダイアログボックスを呼び出す関数
  TESTMAIN( );  //計算する関数(時間がかかる)

////////
void OnCreate(HWND hWnd)
{
DWORD ThreadID;
ZeroMemory(&myThread, sizeof(THREAD));
myThread.hThread = CreateThread(NULL, 0,
(LPTHREAD_START_ROUTINE)ThreadProc,
(LPVOID)hWnd, 0, &ThreadID);
if(myThread.hThread == NULL){
MessageBox(hWnd, "スレッドの作成に失敗しました",
"スレッド作成", MB_OK | MB_ICONERROR);
SetDlgItemText(hWnd, IDC_EDIT4, "失敗");
return;
}
myThread.bValid = TRUE;
}

DWORD WINAPI ThreadProc(HWND hWnd)
{
DialogBox(hInst, (LPCTSTR)IDD_joukyou, hWnd, (DLGPROC)joukyou);
return 0;
}
として、計算している最中にダイアログボックスを表示させたいのですが、
TESTMAIN( )が終わらないとダイアログボックスを表示してくれません。
スレッドを作っているのになぜでしょう?
長くてすいません。

77 :デフォルトの名無しさん:2006/05/22(月) 18:22:51
>>76
計算をしている最中にダイアログを出したいなら、
計算を別スレッドでやれよ。

78 :デフォルトの名無しさん:2006/05/22(月) 18:52:45
メインスレッドで計算してるから計算終わるまでメッセージ受け付けないわけだね

79 :76:2006/05/22(月) 19:07:38
>>77
計算をしている間はウインドウを触って欲しくないので別スレッドにやらせたくないんです。
>>78
スレッドってそんなもんなんですか?

80 :デフォルトの名無しさん:2006/05/22(月) 19:10:24
スレッドが終了したかどうかは、
WaitForSingleObject系などを使って判定。
なお、キャンセルを受け付けるならWaitForMultipleObjectsがいいかもね。


81 :デフォルトの名無しさん:2006/05/22(月) 19:28:10
>>79
おま、決定的な勘違いしてんぞ?なんだ「そんなもん」て?
別スレッドでやってんのはダイアログ作る関数呼び出してるだけで
メインスレッドでその作ったダイアログ表示するためのメッセージ処理してないんだろ?
そりゃ表示されるわけねーじゃんよん。もう全体的にダメぽ。
あと別スレッドで計算させたってウィンドウの操作無効にする方法はくらでもあんだろ?

82 :デフォルトの名無しさん:2006/05/22(月) 20:33:58
さわらせたくないなら、DisableWindowでもしとけばいいじゃん。
メッセージループが回らなきゃ、描画も移動も入力も、何にも回らんよ。

83 :デフォルトの名無しさん:2006/05/22(月) 20:57:10
スレッドと言うものを理解してないな・・ API以前の話。

Cの初心者スレできちんと勉強した方がいいよ。

84 :デフォルトの名無しさん:2006/05/22(月) 21:02:22
>>79
@.スレッドを操作するクラスを作る。
A.スレッド生存判定するメソを作る。WaitForSingleObject(m_hThread, 0)を使って判定。
B.@を扱いやすいとこで宣言。とりあえずグローバルで。
C.メニューの選択処理で、Aのメソでスレッドの生存判定。
D.Cでスレッドが生きてなかったら、スレッドを生成し処理を走らせる。

まずは、こんなかんぢで?
んで、好きなように工夫してみれあ?

85 :デフォルトの名無しさん:2006/05/22(月) 21:14:30
DialogBoxのparent指定を止める手もあるが。

86 :デフォルトの名無しさん:2006/05/22(月) 21:25:10
そういえばダイアログのみならメッセージループなくても動くね

87 :デフォルトの名無しさん:2006/05/22(月) 21:30:41
>>79
計算中にWindow触って欲しくなかったら、ダイアログ出す必要ないじゃん。


計算中にダイアログを出したいなら、メッセージループを回さなければならない。
メッセージループが回らないと、ダイアログを表示することすら出来ない。


君はWindowsの基本から勉強した方がいい。

88 :デフォルトの名無しさん:2006/05/22(月) 21:45:19
Windowsはモーダルダイアログを表示している間は、
メッセージループ(GetMessage)を独自に回し、
ダイアログ用ウィンドウプロシージャを呼び出しています。

89 :デフォルトの名無しさん:2006/05/22(月) 22:00:04
DLLの関数内で確保したメモリを
アプリケーション側で解放したりするのはマズイですよね?

今のところ動いてるんですが、例えばDLL側でリンクしているcrtと
アプリ側でリンクしているcrtが違ったりするとマズーな予感がするんですが

90 :デフォルトの名無しさん:2006/05/22(月) 22:09:10
>>89
newだのmallocを使うならマズイ。
Win32API使うならダイジョブ?

91 :デフォルトの名無しさん:2006/05/22(月) 22:33:06
ん、GlobalAlloc とか HeapAlloc とかならおk

92 :デフォルトの名無しさん:2006/05/22(月) 22:35:27
>>90
>>91
ありがとうございます
Win32APIを使用する事にします

93 :デフォルトの名無しさん:2006/05/22(月) 22:52:56
ところでboost::shared_ptrなら、DLLを跨いでも平気ということを知ったときには驚いた。

94 :デフォルトの名無しさん:2006/05/22(月) 23:27:37
>>81
>別スレッドでやってんのはダイアログ作る関数呼び出してるだけで
>メインスレッドでその作ったダイアログ表示するためのメッセージ処理してないんだろ

も前様もナニか勘違いしていると思われます。
ウィンドウメッセージは、ウィンドウを作ったスレッドのメッセージキューに
送られますよ。

79の問題は、「ウィンドウ触られたくないから」って言ってメインスレッドのメッセージ処理を止めてしまっている点。
ワーカスレッドはダイアログを表示してメインスレッドのウィンドウを非アクティブにするべく
WM_NCACTIVEメッセージをメインスレッドのウィンドウに送り、それの返事をずっと待っている。

95 :デフォルトの名無しさん:2006/05/23(火) 00:23:38
質問です。
IEのフレームに代表されるような「つまんで領域の大きさを左右や上下に調整する」区切り線は、
ウインドウスタイルの中で指定できないのでしょうか?
(正直、どういうメッセージが飛んでくるのかいまいち想像つきませんが)

用意されている可能性がある程度には、一般的かなと思うのですが…。

96 :デフォルトの名無しさん:2006/05/23(火) 00:26:28
>>95
スピリッタの事かな?

97 :デフォルトの名無しさん:2006/05/23(火) 00:27:41
スプリッタ

98 :デフォルトの名無しさん:2006/05/23(火) 00:34:38
あ、はい。Googleで検索かけたらその通りだったようです<スプリッタ
でもこれMFCなんですね。Win32APIオンリーだと自力実装になりそうですね。

99 :デフォルトの名無しさん:2006/05/23(火) 00:36:55
http://pc3.2ch.net/tech/kako/1028/10285/1028580373.html

951〜


100 :デフォルトの名無しさん:2006/05/23(火) 00:42:37
>>98
WTLにもあるよ。

101 :デフォルトの名無しさん:2006/05/23(火) 00:48:18
>>99-100
ご丁寧にありがとうございます。
以前から何回か質問させていただいてますが、いつも丁寧な返答が帰ってきて嬉しい限りです。
まだペーペーですが、質問に応えられる側になるようがんばります。

102 :デフォルトの名無しさん:2006/05/23(火) 09:41:47
>>98
VCLにもあるよ。

ローカルフックでWindowsキーの入力を検知、シェル側で反応しないようにしたいのですが無理でしょうか?
WH_KEYBOARDで入力は取れるもの0返そうがスタートメニューが反応してしまいますorz

グローバルフックでファンクションキーは殺せたんですが‥‥

103 :デフォルトの名無しさん:2006/05/23(火) 10:05:42
>>102
もうちょいくやしく

104 :デフォルトの名無しさん:2006/05/23(火) 10:20:24
ウイルス ブラクラのたぐいに認定

105 :デフォルトの名無しさん:2006/05/23(火) 11:54:57
質問させてください。

ユーザーのwindowsの設定を取得したい時ってよくあると思うんですけど、
基本的には、レジストリから読み込めばいいんですかね?

それとも、専用の関数がある場合はなるべく、レジストリ系の関数は使わない方がいいんですか?


106 :102:2006/05/23(火) 11:59:04
>>103
RegisterHotKeyで設定するホットキーの設定用に押したキーの組み合わせを取得したいのですがWindowsキーが問答無用でスタートメニュー開いてくれるので。
アクティブなコントロール上でWindowsキーが押された場合にスタートメニューを開かせないようにしたいのですが。

>>104
ローカルフックでどうやったらそんな物が作れるのか詳しく。

107 :デフォルトの名無しさん:2006/05/23(火) 12:07:18
>>105
設定による

108 :105:2006/05/23(火) 12:17:20
>>107
レスどうもです。質問の仕方がちょっと悪かったと思うので変えます

1.書き込みはせずに読み込みだけする場合でも、レジストリにアクセスする事は危険で、なるべく避けた方が良い行為ですか?

2.専用の関数がある場合はなるべく、レジストリ系の関数は使わないようにした方がいいですか?


109 :デフォルトの名無しさん:2006/05/23(火) 12:40:57
>>108
1.必要があるなら使う、そうでなければ使わない
2.うん
Windowsのバージョンによって、格納されているエントリが異なることもある
専用の関数はそれらの差異を吸収している場合が多い

110 :105:2006/05/23(火) 13:04:46
>>109
よくわかりました。ありがとうございました。

111 :デフォルトの名無しさん:2006/05/23(火) 14:54:00
>>102
WH_LLKEYBOARD のフックプロシージャで TRUE 返せばキーは無効になると思うよ。
これのフックプロシージャは(他プロセスに進入する他のグローバルフックとは異なり)、
SetWindowsHookEx を読んだプロセス(スレッド)のメッセージポンプ経由で呼ばれるので注意。
EXE に普通に書けてラクだけど。

112 :デフォルトの名無しさん:2006/05/23(火) 15:35:46
質問です。

あるウインドウの子として、
CreateWindowにて
WS_CLIPSIBLINGS | WS_CHILD | WS_VISIBLE | WS_SYSMENU | WS_THICKFRAME | WS_CAPTION | WS_MINIMIZEBOX
な子供ウインドウを作りました。

その子供同士の重なりなのですが、ウインドウの「タイトルバー」をクリックしない限り、前後が入れ替わりません。
クライアント領域であろうと(例えば)スクロールバーであろうと、どこかをクリックされたら、そいつが(子供ウインドウの中で)最前面にくるのかと思っていたのですが、これは仕様なのでしょうか?
それとも設定ミスでしょうか?

113 :デフォルトの名無しさん:2006/05/23(火) 16:03:31
WM_COMMANDについて質問させてください。
猫などのサイトを見ているとWM_COMMANDでのButtonクリックの処理は
ButtonのIDで処理していますよね。
それで本題なんですけど、
とあるサイトでWM_COMMANDのlParamのデータを見たのですが
その中にはhwndControl(コントロールからの場合、ウィンドウハンドル(HWND)が入る)と書いていました。

ですのでHWNDを変数に入れてある場合、IDよりHWNDで判定したほうが
安全な気がするのですが(IDが被る心配がいらないとか?)
実際のところはどうなんでしょうか?

114 :デフォルトの名無しさん:2006/05/23(火) 16:14:42
>>113
何を問題としているのかが理解できんな。
IDとHWNDを比べてみても意味はないし。

何かをしたいが「IDでやる方法がわからない」と言う事なのか?

115 :デフォルトの名無しさん:2006/05/23(火) 16:28:56
>>114
これは単なる疑問で「IDでやる方法がわからない」というわけではないのです。
説明が下手だったみたいです。

ID=定数。
定数ということはプログラムが大規模になると数字が被るような気がする。
被ったら変な動きがするかもしれない?
それだったらウィンドウハンドルはひとつのプログラム内だったら被ることはまずないような・・・
とか思ったのです。

116 :デフォルトの名無しさん:2006/05/23(火) 16:36:55
逆にかぶせられて便利という考え方もあるけどね

117 :デフォルトの名無しさん:2006/05/23(火) 16:42:46
まぁ確かにそうですけど・・・
自分で被るようにしたのはいいのですけど、
気づかないで被っていたらやばくないかなぁって思いません?

118 :デフォルトの名無しさん:2006/05/23(火) 16:48:06
>>115
被らない様に付けるからID(識別子)と言うのだ

119 :デフォルトの名無しさん:2006/05/23(火) 16:52:55
確かにIDのおかげでいろいろ応用が利く

120 :デフォルトの名無しさん:2006/05/23(火) 16:57:10
う〜ん、つまりこれは、
つまらない疑問だったのですね・・・
ようはうまく使い分けろってことですかね?

121 :デフォルトの名無しさん:2006/05/23(火) 16:59:25
ケースバイケースだな。
HWNDで判定したければすればいい。

122 :デフォルトの名無しさん:2006/05/23(火) 17:08:05
そもそも一意に振られたIDと親ウィンドウのハンドルがあれば、
コントロールのHWNDを取得できるわけだし、
コントロールのHWNDを管理する手間が減ってイイ!

と思うのだが・・・

123 :デフォルトの名無しさん:2006/05/23(火) 17:10:09
あぁ〜、
それに気づかなかったのか自分は・・・

124 :デフォルトの名無しさん:2006/05/23(火) 17:31:10
>>111
hHook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)KeyboardProc, GetModuleHandle(NULL), 0);
で行けました。ありがとうございました。




125 :デフォルトの名無しさん:2006/05/23(火) 17:49:54
>>115
被るのが心配ならenum使えば勝手に連番を割り振ってくれるよ。

126 :デフォルトの名無しさん:2006/05/23(火) 17:50:49
タイトルバーのあるウィンドウの位置を固定して、
移動できないようにするにはどうしたらいいのでしょうか?
最大化や閉じるなどは使えるままにしたいとおもっています。

127 :デフォルトの名無しさん:2006/05/23(火) 18:02:34
>>126
WM_MOVINGでlParamを固定したい位置に書き換えればいいよ。

128 :デフォルトの名無しさん:2006/05/23(火) 18:03:27
>>126
移動できないようにするのに最大化はしたいとは、また無体な要望をw
そうすればいいんじゃね?

129 :デフォルトの名無しさん:2006/05/23(火) 18:06:22
>>126
最大化や最小化も「移動」だ

130 :デフォルトの名無しさん:2006/05/23(火) 18:09:27
>>126
EnableMenuItem(GetSystemMenu(hWnd, FALSE), SC_MOVE, MF_BYCOMMAND | MF_GRAYED);

131 :デフォルトの名無しさん:2006/05/23(火) 18:20:56
ここのやり取りを見てるだけでも結構な勉強になりますね。

132 :デフォルトの名無しさん:2006/05/23(火) 18:31:09
>>126
EnableMenuItem()じゃ効かなかった
RemoveMenu(GetSystemMenu(hWnd, FALSE), SC_MOVE, MF_BYCOMMAND);

133 :デフォルトの名無しさん:2006/05/23(火) 18:38:40
>>132
何度しても無理だったのでやり方が間違っているか考えてました。
RemoveMenu(GetSystemMenu(hWnd, FALSE), SC_MOVE, MF_BYCOMMAND);は動きました!

・・・EnableMenuItemはなぜ出来ないのでしょうかね?

134 :デフォルトの名無しさん:2006/05/23(火) 18:41:54
予想通り最大化&Windowsキー使えなくする超DQN仕様

135 :デフォルトの名無しさん:2006/05/23(火) 18:45:17
業務用アプリなんだろ。

136 :デフォルトの名無しさん:2006/05/23(火) 19:21:25
>>113
わんわんわんわん わわわん わんわん 
(HWNDは各々のPCのWindows毎に値が異なりますが、IDはユニーク値が付けられます。)

わんわん わわん わんわん
(メッセージやアイコンとか、別のリソースDLLでもっておけば、)

わんわんわんわん わん わわん わわん
わんわんわん わわわん クーン わんわん
(他国間で動かせるアプリケーションを作成したとき、リソースの差し替えは動的に行えますからね。)


わん!

137 :デフォルトの名無しさん:2006/05/23(火) 19:56:19
>>136
わんわわん

138 :デフォルトの名無しさん:2006/05/23(火) 20:30:50
>>136
わんわんわんんわ

139 :デフォルトの名無しさん:2006/05/23(火) 20:38:51
黙れ犬共
朝鮮人呼ぶぞ

140 :デフォルトの名無しさん:2006/05/23(火) 21:28:11
うにゃー

141 :デフォルトの名無しさん:2006/05/23(火) 21:52:52
なーご

142 :デフォルトの名無しさん:2006/05/23(火) 22:03:47
猫でも本みながらテキストエディタ作ったのですが
UNICODEベースだと、かなり変わってくるのでしょうか
あいまいな質問ですいません。

143 :デフォルトの名無しさん:2006/05/23(火) 22:45:05
>>142
きちんとUNICODE対応を念頭において作られたのならば、ソースコードに変更は生じない。

猫でもはちっともUNICODE対応を考えていない。
(しかし猫を書いた本人は現在知らないわけではなさそうだ)

144 :デフォルトの名無しさん:2006/05/23(火) 22:46:26
>>142
ASCIIと互換を考えるなら、
アプリケーションの実行地域(ロケール)、
あとファイル操作を気をつけなければなりませんね。


145 :デフォルトの名無しさん:2006/05/23(火) 22:49:42
>>142
似たような御仁がおられる。edit control を使ったものは分かりませんが、
rich edit control を使ったものは分からないことだらけ。
自分は文字を色付けしたりして使っていますが、rich edit control では
UNICODE 対応はまじめにやってないんではと思うときがあります。

ファイルの扱いやダイアログなどでの文字の扱いは問題ないです。

146 :デフォルトの名無しさん:2006/05/23(火) 22:55:44
すいません。
どなたか>>112わかりませんでしょうか。
単純に「親ウインドウ作って、子ウインドウ2つ作って」というだけのアプリを作っても、ダメでした。

147 :デフォルトの名無しさん:2006/05/23(火) 23:18:44
とあるアプリケーションの、入力補助アプリを作ろうと模索中です。
対象アプリの入力欄のハンドルが欲しいのですが、同じクラス名が沢山あり捕まえられませんでした。
入力欄はテキストボックス?で、フォーカスが当たり入力カーソルが点滅している状態です。
これを利用して、ハンドルを取りたいのですがどうすればいいのでしょうか?



148 :デフォルトの名無しさん:2006/05/23(火) 23:23:08
GetGUIThreadInfo

149 :デフォルトの名無しさん:2006/05/24(水) 00:13:18
チャイルドをアクティブにせなアカン

150 :147:2006/05/24(水) 00:18:56
>>148
ありがとうございます。
明日やってみます。
コレをヒントに何とか解決できそうです。
正直ウィンドウ情報だけでやろうとして煮詰まっていました。
初心者ゆえ、しらない概念がある事がわかって勉強になったしだいです。


151 :デフォルトの名無しさん:2006/05/24(水) 01:31:45
質問です。

タブコントロールのタブの部分をマウスで右クリックしたらポップアップメニューが出てきて
削除を選ぶとそのタブ項目が削除されるようにしたいと思っています。
ですので、タブの右クリック取得方法(NM_RCLICK)や
タブの削除方法(TCM_DELETEITEM)は調べました。
しかし、右クリックしたタブが左から何番目かを調べる方法がわかりません。
どうやったらいいのでしょうか?
よろしくお願いします。



152 :デフォルトの名無しさん:2006/05/24(水) 02:07:05
>>151
TCM_HITTESTは調べた?

153 :デフォルトの名無しさん:2006/05/24(水) 02:56:22
さっそく試してみました。
case NM_RCLICK:
GetCursorPos(&(HitTest.pt));
ScreenToClient(hTabWnd,&(HitTest.pt));
SendMessage(hTabWnd, TCM_HITTEST, 0, (LPARAM)&HitTest);
wsprintf( str, TEXT("%d番目"), TCHT_NOWHERE);
MessageBox(NULL , str, TEXT("タブコントロール"),MB_OK);
break;
としたら"1番目"としか返ってきませんでした。。。
どっか間違えたみたいです。
どこだろ・・・
まぁ、明日もう一度英文見直すか〜

154 :153:2006/05/24(水) 02:59:05
wsprintf( str, TEXT("%d番目"), TCHT_NOWHERE);
    ↓
wsprintf( str, TEXT("%d番目"), HitTest.flags);
です。
戻し忘れてました。


155 :153:2006/05/24(水) 03:16:15
ちょっとTCM_HITTESTを見直したのですが、
このメッセージはタブ内にマウスポインタがあるだけしかわからないような・・・
返ってくる値はTCHT_ONITEMとTCHT_ONITEMLABELだけだし・・・
う〜ん、なにか別のとセットで使うものなのですか?

156 :デフォルトの名無しさん:2006/05/24(水) 03:32:25
ヒント:返値

157 :デフォルトの名無しさん:2006/05/24(水) 09:33:39
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/tab/messages/tcm_hittest.asp


158 :デフォルトの名無しさん:2006/05/24(水) 10:35:22
ここには賢人しかいないのか  わん

159 :デフォルトの名無しさん:2006/05/24(水) 10:41:23
タブブラウザのまねっこだったらソースみりゃいいじゃん

160 :153:2006/05/24(水) 13:05:58
アッ!
戻り値見忘れてた!

>>156
>ヒント:返値
それってもう答えじゃないですか(笑)

161 :デフォルトの名無しさん:2006/05/24(水) 13:11:39
>>112 DefMDIChildProcは、WM_CHILDACTIVATEを処理しています
>>133 大昔の仕様です。「なぜ」に答えるのはむつかしいです

162 :151,153:2006/05/24(水) 13:50:07
SendMessage(hTabWnd, TCM_HITTEST, 0, (LPARAM)&HitTest);
の返り値で何番地かわかるようになりました。
ですがそのあとでポップアップメニューを出しても何番地かの情報を送ってはくれません。
ですのでこういう場合は下のように、
TrackPopupMenu(hSubMenu, TPM_LEFTALIGN | TPM_NONOTIFY | TPM_RETURNCMD, point.x, point.y, 0, NULL, NULL);
として出てきたIDと組み合わせて処理をしたらいいのでしょうか?

163 :デフォルトの名無しさん:2006/05/24(水) 14:57:13
>>162
試してないけど、こんな感じでどう?

case NM_RCLICK:
  GetCursorPos(&(HitTest.pt));
  ScreenToClient(hTabWnd, &(HitTest.pt));
  PopupProc(hTabWnd, TabCtrl_HitTest(hTabWnd, &HitTest));
  break;

BOOL PopupProc(HWND hTabWnd, int iItem)
{
  int nID;

  if (iItem == -1) {
     return FALSE;
  }
  /* 中略 */
  nID = TrackPopupMenu(hSubMenu, TPM_LEFTALIGN | TPM_NONOTIFY | TPM_RETURNCMD, point.x, point.y, 0, NULL, NULL);
  switch (nID) {
     case IDM_DELETE: /* 削除を選択 */
       TabCtrl_DeleteItem(hTabWnd, iItem);
       break;
  }
  return TRUE;
}

164 :デフォルトの名無しさん:2006/05/24(水) 15:14:48
>>163
動きました〜

165 :デフォルトの名無しさん:2006/05/24(水) 15:15:35
Delphiにある、コンポーネントの作成ってCとかで出来る?   わん

166 :デフォルトの名無しさん:2006/05/24(水) 15:36:19
カスタムリソースについて調べています。
「猫でも・・・」や「WisdomSoft」にあるソースを見てもLoadResource
の後処理らしき処理がわかりません。検索もしてもいまいちわからずです。
LoadResouraceに対応した解放処理は不要なんでしょうか?

167 :デフォルトの名無しさん:2006/05/24(水) 15:56:20
>>166
For 32-bit Windows applications, it is not necessary to free the resources loaded using LoadResource function.

http://support.microsoft.com/?scid=kb;ja;193678

168 :166:2006/05/24(水) 16:07:14
>>167
ありがとございます。解放の必要はないようですね。
お手数おかけしました。

169 :デフォルトの名無しさん:2006/05/24(水) 17:11:08
メッセージをDispatchするループの後って絶対に通るよね。
まさかWM_QUITが来た時点でプロセスが終了するわけじゃないよね。

えーっとつまり、

{

while( GetMessage( &msg, NULL, 0, 0 ) > 0 )
{
  TranslateMessage( &msg );
  DispatchMessage( &msg );
}

MessageBox( NULL, "通るかな", NULL, MB_OK );

}

これでどんな時にも(エラー終了以外で)「通るかな」と表示されますか?

170 :デフォルトの名無しさん:2006/05/24(水) 17:13:51
>>169
シャットダウン要求があってしばらく終了しないでいると
プロセスが強制的に殺されることがある。

171 :デフォルトの名無しさん:2006/05/24(水) 17:16:07
>>169
例外が発生したら一気にブロックの外に飛ぶ気がする

172 :76:2006/05/24(水) 18:00:18
遅くなりましたけど、希望に沿うものができました。
ありがとうございます。


173 :デフォルトの名無しさん:2006/05/24(水) 18:05:30
>>169
新規作成→Win32アプリで 標準的な"Hello World!"アプリケーションを選択し、
適当にメニュー項目を作成。
んでWndProcでそのメニュー項目の処理にでNULLをスローしてみた。
>>171の言うとおりだった。


174 :デフォルトの名無しさん:2006/05/24(水) 18:07:56
サブクラスかについて質問があります。
サブクラス化をしたときは既にWM_CREATEが終わった後ですよね?
ですのでサブクラスのプロシージャでWM_CREATEをしてもなにも起きない!
そこまではわかります。

こっから本題。
サブクラスのプロシージャ内で初期化をしたいのですが、
WM_CREATEは使えません。
ですのでどこで初期化をしたらいいのでしょうか?
ご教授願います!

175 :デフォルトの名無しさん:2006/05/24(水) 18:11:32
>WM_CREATEをしても

自分でするもんじゃない


176 :デフォルトの名無しさん:2006/05/24(水) 18:29:05
何かメッセージ送ればいいじゃん

177 :174:2006/05/24(水) 18:31:27
>>175
言葉のあやです。
サブクラスのプロシージャでは、WM_CREATEはひろえない。

178 :デフォルトの名無しさん:2006/05/24(水) 18:42:11
>>177
サブクラス化したあとにメッセージでも送るか、何かのフラグを持つか。

179 :デフォルトの名無しさん:2006/05/24(水) 18:49:59
WM_INIT

180 :デフォルトの名無しさん:2006/05/24(水) 19:19:56
そういえば確かSetWindowLongで、
値を変えたときにくるメッセージがあったような・・・
それを使ったら出来るかもしれんけど名前忘れた

181 :デフォルトの名無しさん:2006/05/24(水) 19:22:50
そんなんあったか?
初耳だ。

182 :180:2006/05/24(水) 19:25:19
やっと見つけた!
WM_STYLECHANGED

183 :180:2006/05/24(水) 19:31:41
けど使い方わかんない

184 :180:2006/05/24(水) 19:34:37
あぁ〜
もしかしてこれって
GWL_STYLEとGWL_EXSTYLEしか判別してくれにゃいとか?

185 :デフォルトの名無しさん:2006/05/24(水) 19:57:05
MSDN見ろ

186 :180:2006/05/24(水) 20:06:01
いやぁ〜、英語版のMSDNでちらっと見ただけだったので勘違いしていました〜
どうもすみませんでした。


187 :デフォルトの名無しさん:2006/05/24(水) 20:16:00
スクロールバーのついたウィンドウにて、スクロールバーをのぞいたサイズの取得方法を教えてもらえないでしょうか?

GetClientRectをしても
スクロールバーを含めたサイズしか求められないので・・・


188 :デフォルトの名無しさん:2006/05/24(水) 20:19:15 ?#
GetClientRectの結果からスクロールバーの分を差し引けば良かろう。

189 :デフォルトの名無しさん:2006/05/24(水) 20:22:51
スクロールバーのサイズって一定なのかもわからないですし、
もしかしたらWS_VSCROLLだけとか、WS_HSCROLL | WS_VSCROLLのもあるかもしれないので
TabCtrl_AdjustRectと同じようなものがないかなぁって考えてたのですが・・・


190 :デフォルトの名無しさん:2006/05/24(水) 20:27:53 ?#
ヒント: GetSystemMetrics

191 :デフォルトの名無しさん:2006/05/24(水) 20:49:21
InvadeRectで指定した無効領域の「外に」、LineTo等で描画した場合、
OSが勝手にクリップして、描画処理を省いてくれるのでしょうか。

それとも自前でクリップするべきでしょうか。

192 :デフォルトの名無しさん:2006/05/24(水) 20:54:41
やってみれば〜

193 :デフォルトの名無しさん:2006/05/24(水) 20:55:28
>>191
それ俺も気になるな

194 :デフォルトの名無しさん:2006/05/24(水) 20:57:43
おまいら、円弧や曲線でも自力でクリップする気ですか?

195 :デフォルトの名無しさん:2006/05/24(水) 20:59:13
いや別にできるだろw

196 :デフォルトの名無しさん:2006/05/24(水) 20:59:42
侵略すんのかよ!

197 :デフォルトの名無しさん:2006/05/24(水) 22:21:26
無効領域って BeginPaint が設定する PAINTSTRUCT の rcPaint でしょ?
ウィンドウに直接描画するならクリップもクソも無いんでない?

198 :デフォルトの名無しさん:2006/05/24(水) 22:27:11
>>197

199 :デフォルトの名無しさん:2006/05/24(水) 22:36:54
一つのコマンドプロンプトに複数回コマンドを渡すにはどうしたらいいのでしょう?
以下勝手な予想。

ShellExecuteEx(コマンドプロンプト起動&1回目のコマンドを渡す)

何らかのAPI?(2回目のコマンドを渡す)

何らかのAPI?(3回目のコマンドを渡す)



GetExitCodeCodeProcessで終了

200 :デフォルトの名無しさん:2006/05/24(水) 22:48:44
猫でも〜の言うとおりにやっても画像表示できません
試しにサンプルをコンパイルしてみてもやっぱり真っ白でした
エラーは出てません
このスレにエスパーさんがいたら教えて下さい

201 :デフォルトの名無しさん:2006/05/24(水) 23:00:46
ここって「こういう関数を作ってみたんですけど、改善点はありますか?」的な事も答えてくれますか?

202 :デフォルトの名無しさん:2006/05/24(水) 23:11:42
>>187
標準スクロールバーは非クライアント領域の一部だから、
GetClientRectでその分を除いたサイズが返ってくるですよ。

203 :デフォルトの名無しさん:2006/05/24(水) 23:17:12
>>199
CreatePrcessでコマンド/DOSプロンプトを起動させて、
パイプを使ってリダイレクトしてでコマンドを流し込めばいいと思う。

或いは簡易的だけど一時的なバッチファイルを書き出して、それを実行させるという手もある。

204 :デフォルトの名無しさん:2006/05/24(水) 23:26:56
http://www.microsoft.com/japan/developer/library/Jpwinpf/_win32_getcommandline.htm

天下のMSDNが誤っている件

205 :デフォルトの名無しさん:2006/05/24(水) 23:31:10
誤訳の宝庫として天下に名を馳せてますが。

206 :片桐摩美:2006/05/24(水) 23:33:28
>>200
回答1
 http://www.kumei.ne.jp/c_lang/nogif.htm

回答2
 リソース・エジタでビットマップリソースを作る
 (エジタなのがミソ)

回答3
 WM_PAINTに処理を書いてないかな?

207 :デフォルトの名無しさん:2006/05/24(水) 23:37:52
>>200
あんただれよ?

208 :デフォルトの名無しさん:2006/05/25(木) 00:34:45
>>201
激しくスレ違い

209 :デフォルトの名無しさん:2006/05/25(木) 08:18:55
すいません質問させてください。
ウインドウクラスの

wc.lpszClassName = "window";

の部分に↑のように入力したら

e:\make_game\game1\main.cpp(44) : error C2440: '=' : 'const char [7]' から 'LPCWSTR' に変換できません。
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。

↑のようなエラーがでました。
char szClassName[]="window";
とやって再び
wc.lpszClassName = (LPCWSTR)szClassName;
と入力したらビルドは通りましたが
クラスネームの配列の中に"䥗䑎坏"っていうわけのわからん文字が入ってました。
いろいろネットやMSDNで調べましたが原因がわかりません。お願いします、原因が
わかる方教えてください。
あと環境はVisual Stadio 2005でC++です。


210 :デフォルトの名無しさん:2006/05/25(木) 08:28:49
char の代わりに TCHAR 使う
リテラル文字列は TEXT マクロ

211 :デフォルトの名無しさん:2006/05/25(木) 08:29:33
>>209
_T("window");

212 :デフォルトの名無しさん:2006/05/25(木) 09:56:34
最近、ワイド文字とマルチバイト文字系の問い合わせが多い気ががする。

213 :デフォルトの名無しさん:2006/05/25(木) 10:03:15
VS2005でプロジェクト作成すると、
UNICODEが使われるようになったからね

214 :デフォルトの名無しさん:2006/05/25(木) 10:15:08
それほど、マルチバイト文字とワイド文字の区別もついていない低脳が多かったわけだ。

215 :デフォルトの名無しさん:2006/05/25(木) 10:42:15
おまえ低脳?

216 :199:2006/05/25(木) 10:47:42
>>203
ありがとうございました。
早速取り入れてみます。

217 :デフォルトの名無しさん:2006/05/25(木) 11:47:02
アプリケーション独自のマウスカーソルを取得する方法
ttp://www.woodybells.com/delphi_tips/index.cgi?mode=view&no=5

↑このページの方法でカーソルハンドルを取得すると、コンソール(cmd.exe)ウィンドウに
のせたカーソルが砂時計になっています(見た目では矢印)。
見た目通りのカーソルハンドルを取得するにはどうすればよいのでしょうか?

218 :デフォルトの名無しさん:2006/05/25(木) 11:53:05
APIの関数の引数でLPTSTRについて・・・

winnt.hの中で、
 typedef WCHAR *LPWSTR, *PWSTR;
 typedef CHAR *LPSTR, *PSTR;
となっている。
んで、マルチバイト環境では、LPTSTRはLPSTR(TCHARはchar)と解釈され、
ワイド文字環境では、LPTSTRはLPWSTR(TCHARはwchar_t)と解釈される。

APIの関数も、GetCurrentDirectoryの場合、
リファレンスでは
 DWORD GetCurrentDirectory(DWORD nBufferLength, LPTSTR lpBuffer);
となっているが、実際winbase.hの中では、
 DWORD GetCurrentDirectoryA(DWORD nBufferLength, LPSTR lpBuffer);
 DWORD GetCurrentDirectoryW(DWORD nBufferLength, LPWSTR lpBuffer);
の2つの関数が宣言されており、
これを環境に応じて、GetCurrentDirectoryAとGetCurrentDirectoryWを切り替えている。
コード書く奴は、LPTSTRとWCHARを巧く利用せんとね。

あと、スレ違いだが、
#include <tchar.h>
#include <clocale>

#include <cstdio>

void _tmain(void){

_tsetlocale(LC_ALL, _T("jpn"));
_tprintf(_T("Hello World!\n"));
}

この説明をしているサイトが少ないかも。

219 :デフォルトの名無しさん:2006/05/25(木) 18:00:46
リストボックスの背景色を変えるにはどうしたらいいんですか?

220 :デフォルトの名無しさん:2006/05/25(木) 18:02:33
>>219
ググレ

221 :デフォルトの名無しさん:2006/05/25(木) 18:03:40
>>218
地域化を深く考えるわけでなければロケール文字列は""で十分だと思う。

あと、C++を使うのならstd::locale::globalだろ。

222 :デフォルトの名無しさん:2006/05/25(木) 18:33:40
Bluetoothの電波強度を取得するようなプログラムって書けますかね?
参考になるようなサイトがあったら教えていただければ幸いです

223 :デフォルトの名無しさん:2006/05/25(木) 18:42:03
222に付けたしです
OSはWindows XP SP2で動作して欲しいです

224 :デフォルトの名無しさん:2006/05/25(木) 19:06:50
>>221
WinNT系って、
setlocaleせんと日本語表示できないんだっけ?
コンソールに限るけど。


225 :デフォルトの名無しさん:2006/05/25(木) 19:28:16
>>222-223
WMIにありそうかも。

226 :デフォルトの名無しさん:2006/05/25(木) 19:55:40
WriteConsoleOutputWを直接たたくなら、setlocaleは関係ない

227 :224:2006/05/25(木) 20:09:23
>>226
WriteConsoleOutput!?
これは知らんだった!

ナイスです!

228 :デフォルトの名無しさん:2006/05/25(木) 20:20:48
PSDKのファイルを見るとZeroMemoryがmemsetのマクロになっていたのですが
明示的リンク以外でkernel32.dllのRtlZeroMemoryを呼び出す方法はありますか?
環境はVisual C++ 2005 Express Editionです。

229 :デフォルトの名無しさん:2006/05/25(木) 21:01:59
undefして自分でプロトタイプ宣言すれば?

230 :デフォルトの名無しさん:2006/05/25(木) 21:06:18
>>225
WMIで検索してみましたが良い情報は得られませんでしたorz

231 :デフォルトの名無しさん:2006/05/25(木) 21:11:07
>>228
でもなんでkernel32のRtlZeroMemoryを使いたいの?

232 :デフォルトの名無しさん:2006/05/25(木) 21:14:07
玄人っぽくみえるからです

233 :デフォルトの名無しさん:2006/05/25(木) 21:21:42
>>230
ハードウェア毎に違うんじゃないの?
ドライバ直接叩くとかしないと

234 :デフォルトの名無しさん:2006/05/25(木) 21:24:07
>>229
ありがとうございます。
一応思ってたことはできました。

>>231
CRTを使いたくないからです。

235 :LCD派:2006/05/25(木) 21:29:58
CRTを使うと素人っぽいからです。

236 :デフォルトの名無しさん:2006/05/25(木) 21:34:36
”ディレクトリを開く”ダイアログを作成するAPIってありますか?

”ファイルを開く”ダイアログがあったから、ディレクトリもあるかと
思ったんですが、見つからないのでよろしくお願いします。

237 :デフォルトの名無しさん:2006/05/25(木) 21:34:54
あります

238 :デフォルトの名無しさん:2006/05/25(木) 21:43:38
なんていうAPIですか?

239 :デフォルトの名無しさん:2006/05/25(木) 21:44:32
SHGetPathFromIDList

240 :デフォルトの名無しさん:2006/05/25(木) 21:45:02
SHBrowseForFolder

241 :デフォルトの名無しさん:2006/05/25(木) 21:54:46
memset で crt なんか使われるかな・・・?

242 :デフォルトの名無しさん:2006/05/25(木) 21:58:01
memset自体がcrtでしょうに。

243 :デフォルトの名無しさん:2006/05/25(木) 21:59:00
組み込み関数だからCRTいらないんじゃ
インライン展開されるはずだし

244 :デフォルトの名無しさん:2006/05/25(木) 21:59:43
gcc でも VC でも凝ったオプションつけなければビルトイン関数として
その場にインラインで展開されると思うけど。

245 :デフォルトの名無しさん:2006/05/25(木) 22:07:00
インライン展開されようがどうだろうが、crtはcrtだぞ。

246 :デフォルトの名無しさん:2006/05/25(木) 22:12:31
>>245
ZeroMemory って書いておけば、コードにも crt 由来の行はないし、
出てくるオブジェクトにも存在しなくなる。

それはともかくとして、memset とか memcpy は AMD のサイトに有る
プリフェッチ使って最適化した奴使うのが良いと漏れは思うな。
入れ替えるだけで僅かながら高速化されるからラク。

247 :デフォルトの名無しさん:2006/05/25(木) 22:13:16
>>239,240
ファイルと違って難ずくわからん。でもサンクス。

248 :デフォルトの名無しさん:2006/05/25(木) 23:47:15
>>233
ドライバ書くのはたぶん無理です…

249 :デフォルトの名無しさん:2006/05/25(木) 23:55:33
#pragma intrinsic (memcpy)

250 :デフォルトの名無しさん:2006/05/26(金) 00:16:44
>>248
出来るとすればここから情報を拾うこととか。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/bluetooth/bluetooth/bluetooth_start_page.asp

251 :デフォルトの名無しさん:2006/05/26(金) 01:23:31
>>250
んで、結局Sockにたどり着くんじゃなかった?

252 :デフォルトの名無しさん:2006/05/26(金) 02:04:38
わたしはTCHARやTEXTマクロをウィンドウズアプリケーションでしかつかったことはありませんでした。
ですので、windows.hがかってにtchar.hをインクルードしているものだとばかり思っていました。

それで先日久しぶりにコンソールのプログラムを作ろうと思いました。
そしたらTCHARやTEXTマクロはないといわれました。
_tcharや_Tマクロはありましたけど・・・

もしかしてTCHARやTEXTマクロはウィンドウズアプリケーション固有のものなのでしょうか?

253 :デフォルトの名無しさん:2006/05/26(金) 03:27:38
ところでCRTって何?

254 :デフォルトの名無しさん:2006/05/26(金) 03:39:10
>>253
マジレス: Cランタイムライブラリ
ネタレス: 栃木放送

好きなほうを選べ

255 :デフォルトの名無しさん:2006/05/26(金) 03:45:21
ttp://ruffnex.oc.to/kenji/text/dll_inj/

GetModuleHandle って、プログラムの仮想空間に配置されている
モジュールのベースアドレスを返すわけだよね?
これの例が毎回成功するってことはKernel32 って、
どのプログラムでも同じアドレスに配置されるの?

それとも根本的におれの考え方間違ってる?


256 :デフォルトの名無しさん:2006/05/26(金) 03:56:54
ネタレス: 陰極線管

257 :デフォルトの名無しさん:2006/05/26(金) 04:03:13
リストビューって一列目しか選択することは出来ないのでしょうか?
LVS_EDITLABELSのあるリストビューで二列目のデータを変えたりしたいのですが

258 :デフォルトの名無しさん:2006/05/26(金) 04:19:14
>>252
とりあえず
ttp://www.kab-studio.biz/Programing/Codian/MxA/09.html
で「LPTSTRとLPCTSTR」のところを読んだらいいと思う

259 :デフォルトの名無しさん:2006/05/26(金) 06:00:40
PlatformSDKってどこからダウンロードできるんでしょうか?
ググってみると
ttp://www.microsoft.com/msdownload/platformsdk/sdkupdate/
ってリンクが色んなところから張られているんですが、
今この先には、Server 2003 SP1 Platform SDKしかないようです。
Download Centerで「core platform sdk」と検索しても
ヒットしないですし、公開終了してしまったのでしょうか・・・。

getaddrinfoを使おうと思ってWinsock2のヘッダをインクルードしても
見つからないよって言われてしまい、仕方なくMSDNに載っていた
関数の宣言をそのままコピペして使ってみたのですが、
危険な呼び出しだとか言われてしまい途方に暮れています。

公開終了してしまっているなら、
winsock2.hかws2tcpip.hにあるgetaddrinfoの宣言を
どなたかコピペしていただけませんか・・・?

260 :デフォルトの名無しさん:2006/05/26(金) 06:05:37
> Server 2003 SP1 Platform SDK
これのどこがPlatform SDKじゃないんだよ。

261 :デフォルトの名無しさん:2006/05/26(金) 06:24:31
>>260
ありがとうございます。

え、Win98とかに対応していないみたいだから違うのかと思ったんですが、
これでよかったんですか。
Serverとか思いっきり書いてあるので、なんか入れたらアプリが
NT系専用になってしまいそうで、不安で・・・。

getaddrinfoの宣言にWINAPIつけたら問題なく動くようになってしまったので、
とりあえずこのまま行こうと思います。
自己解決すみません。

262 :デフォルトの名無しさん:2006/05/26(金) 06:38:27
Win98とかに対応していないみたいだから違う

263 :デフォルトの名無しさん:2006/05/26(金) 07:08:58
>>261
Platform SDKに書かれているWindowsのバージョンは対応している一番新しいものを表す。
古いWindowsのプログラムを書くのには使えないということは決してない。
流石にWin16は無理だけど。

264 :デフォルトの名無しさん:2006/05/26(金) 07:31:30
古いVCを使ってると、PSDKの古いのが必要だが

265 :デフォルトの名無しさん:2006/05/26(金) 08:00:30
そのためにMSDNにこのAPIは○○以降でしかサポートされていませんとか
断り書きがあるわけだしな

266 :デフォルトの名無しさん:2006/05/26(金) 08:01:01
>>264
新しいのだと、
WTLやATLでコンパイルエラーが出たりするんだよね。

267 :デフォルトの名無しさん:2006/05/26(金) 09:27:55
>>259
MicrosoftR Windows Server 2003 R2 Platform SDK - March 2006 Edition
も出てるよ


268 :257:2006/05/26(金) 13:14:10
リストビューで一列目以外は値を通常のやり方では変更できないということがわかりました。
ですので
リストビューのセルの上でクリックしたときにエディットコントロールを表示し
そこに入力した値をそのセルの値にしようと考えました。

それで下記のものが作りかけのソースです。

static HWND hList, hEdit;
LVHITTESTINFO HitTest;
case NM_CLICK:
GetCursorPos(&HitTest.pt);
ScreenToClient(hList, &HitTest.pt);
ListView_SubItemHitTest(hList, &HitTest);//押したセルを取得
lvColumn.mask = LVCF_WIDTH;
SendMessage(hList,LVM_GETCOLUMN,HitTest.iSubItem,(LPARAM)&lvColumn);//列の幅を得るため(高さはどうやって取得するの?)
lvItem.iSubItem = HitTest.iSubItem;
lvItem.iItem = HitTest.iItem;
lvItem.mask = LVIF_TEXT;
SendMessage(hList, LVM_GETITEM, 0, (LPARAM)&lvItem);//選択したセルの文字列取得
SetWindowText(hEdit, lvItem.pszText);//取得した文字列をhEditに格納←一列目はちゃんと文字列が表示されるのに二列目はなぜか文字化けする
MoveWindow(hEdit, わかんない, わかんない, lvColumn.cx, わかんない);//選択したセルの上にhEditを被せる
SetFocus(hEdit);//hEditにフォーカス移動←これをしたらなぜか文字列がかわらない
break;

見てもらったら最初に目に付くと思われるMoveWindowの「わかんない」ですが
これは選択したセルの左上の座標がわからないのと、セルの高さが取得の仕方がわからないということです。
だれかこのソースにこうしたらいいと思うと指摘してもらえないでしょうか?
根本的に間違っているところがあるならそれも指摘お願いします。

269 :デフォルトの名無しさん:2006/05/26(金) 13:20:02
>>255
exeのベースアドレスをkernel32.dllと同じにし、再配置情報を付けなかった場合、下記のエラーが発生する。
>app.exe - システム DLL の無効な再配置
>システム DLL kernel32.dll がメモリ内で再配置されました。アプリケーションは正常に動作しません。
>再配置が起きたのは、DLL app.exe が、Windows システム DLL のために予約されているアドレス範囲を
>使用していたためです。この DLL のベンダに連絡して、新しい DLL を入手してください。
しかし64bitプロセスと32bitプロセスでは、ベースアドレスや関数アドレスも違いそうだ

270 :デフォルトの名無しさん:2006/05/26(金) 13:23:12
>>268
LVM_GETSUBITEMRECT

271 :268:2006/05/26(金) 14:39:18
>>270
いけました!
ありがとうございます。

272 :デフォルトの名無しさん:2006/05/26(金) 15:08:16
BUTTONコントロールのフォントサイズだけ変えたいと思っています。
そういうことをするには、
SendDlgItemMessageのWM_GETFONTでフォントを取得。
フォントサイズを変える。
SendDlgItemMessageのWM_SETFONTで新しいフォントを入力。
ということをしないといけないのでしょうか?


273 :デフォルトの名無しさん:2006/05/26(金) 15:13:05
いけないのです。

274 :デフォルトの名無しさん:2006/05/26(金) 15:22:01
めんどくさいですね。
もっといい方法があったら楽なのに・・・

275 :デフォルトの名無しさん:2006/05/26(金) 15:57:33
リソースファイルでボタン記述してる場合はフォントサイズ指定出来た様な


276 :デフォルトの名無しさん:2006/05/26(金) 17:01:11
>>269
どうもありがとう。
レスの内容で検索したらいい記事が見つかった。
http://japan.internet.com/developer/20050830/26.html#appendixes

277 :268:2006/05/26(金) 18:09:14
もしかしてLVM_GETEDITCONTROLを使ったら、
自分でエディットコントロール用意する必要ない?

278 :277:2006/05/26(金) 18:54:42
http://www.codeguru.com/Cpp/controls/listview/editingitemsandsubitem/article.php/c1077/
これを見てそう思ったんだけどそんなことを言ってるのかな?
自分にはこのソースわかんないッス!!

279 :名前が欲しい名無しさん:2006/05/26(金) 21:11:53
こんばんわ。
winsock2のWSASocketにてWSA_FLAG_OVERLAPPEDを指定したいのですが、当方VB6につき自前で値を指定しなければなりません。
Googleで検索したのですが見つからず、とうとう根負けしてしまいました。
ご存知の方、もしくは調べるヒントなどお持ちの方がいらっしゃいましたら教えて頂けませんでしょうか?
何卒宜しくお願いします。

板違いでしたら申し訳有りません。

280 :デフォルトの名無しさん:2006/05/26(金) 21:20:20
#define WSA_FLAG_OVERLAPPED 0x01

調べ方としては、Platform SDKをインストールしてヘッダ見るのが確実かな。
あとは、Googleで"define WSA_FLAG_OVERLAPPED"みたいに
defineを付けて""で括って検索してみるとか。

281 :名前が欲しい名無しさん:2006/05/26(金) 21:25:53
早速の返信有難う御座います。
""で括る・・・でしたか;
""無しでは検索かけてみたのですが。。。
Platform SDKという物も早速見てみたいと思います。
有難う御座いました!

282 :デフォルトの名無しさん:2006/05/26(金) 22:25:04
VB6でオーバーラップソケットを扱うためにAPIを叩くというのはなかなか骨だろーなー

283 :デフォルトの名無しさん:2006/05/27(土) 07:06:02
ありがとうございました。これで何の迷いもなくNASMで書きまくれます。
後はTEBとPEBですね・・・Webには断片的な情報しかないみたいです。

284 :デフォルトの名無しさん:2006/05/27(土) 12:56:18
このウィンドウのサブクラス化ってさ
http://www.kumei.ne.jp/c_lang/sdk/sdk_36.htm
自作のウィンドウプロシージャを作って、元々のウィンドウプロシージャと入れ替えるって事? 
元々のウィンドウプロシージャに機能を追加する事はできないのですか?


285 :デフォルトの名無しさん:2006/05/27(土) 13:02:47
自作のほうで処理したくないことを元々のやつに押し付けることは可

286 :デフォルトの名無しさん:2006/05/27(土) 13:03:57
つーかそのページに書いてあるじゃないか

287 :デフォルトの名無しさん:2006/05/27(土) 13:11:18
いや、その元々のウィンドウプロシージャの定義はできないのかな?と思って。ダイアログボックスみたいに。

なんで、わざわざ別のウィンドウプロシージャを定義して入れ替えたりしてるんだろう、と思いまして、、

288 :デフォルトの名無しさん:2006/05/27(土) 13:20:52
>>287
元をどうにかすることができないから、サブクラス化で後付するんだ。

289 :デフォルトの名無しさん:2006/05/27(土) 13:28:36
DefaultWindowProc をただのおまじないだと思ってませんか?

290 :デフォルトの名無しさん:2006/05/27(土) 13:31:02
おぉ、、そういえば、、、そういう事だったのか、、、、すっきりしたよ

291 :デフォルトの名無しさん:2006/05/27(土) 19:36:36
リストビューにてLVM_GETITEMTEXTを使ってテキストを取得しようと思っています。

それで受け取るbufサイズを出来るだけで抑えたいのですが
調べた限りGetWindowTextLengthと同等の動きをするメッセージが見当たりません。
これはもしかして最大サイズのbufを用意するしかないのでしょうか?

292 :デフォルトの名無しさん:2006/05/27(土) 21:17:23
構造体にサイズがあったはず

293 :デフォルトの名無しさん:2006/05/27(土) 21:53:05
LVITEM.cchTextMax は渡すバッファのサイズだぞ?

294 :291:2006/05/27(土) 22:24:55
ちょっと確認させてください。
LVM_GETITEMTEXTのマクロ、ListView_GetItemTextは
void ListView_GetItemText(
HWND hwnd, //リストビューのウィンドウハンドル
int iItem, //行
int iSubItem, //列
LPTSTR pszText, //バッファのアドレス
int cchTextMax //バッファのサイズ
);
ですよね。
つまりpszTextに指定するバッファを
自分で用意しなくてはいけない。
cchTextMaxの文字数も自分で指定しなくてはいけない。
ということではないのでしょうか?
ですので前もってバッファを用意するためには文字数を取得しなくてはいけないですよね?

どっかまちがってるのかな・・・

295 :デフォルトの名無しさん:2006/05/27(土) 22:34:01
>>294
pszTextが指すバッファをオーバーして書き込まないように最大文字数を指定してね、ということ。
入りきらない場合は切り詰められる。

文字数を取得する方法は無い(と思う)ので、十分な大きさのバッファを用意するか
全部取得できるまでバッファを拡張しつつループするようにする。
MFCやWTLでは後者の方法を採っている。

296 :291:2006/05/27(土) 22:34:31
cchTextMaxに2を指定したら1文字+\0がpszTextに入りますよね?
ということは十分なバッファとサイズを指定しなくてはいけない!
そういうことだと思ったのですが・・・


297 :デフォルトの名無しさん:2006/05/27(土) 22:38:56
バッファが足りてなけりゃ切り捨て。ほとんどのWin32APIはそうなってるはず
その為のバッファ長なんだから。

298 :デフォルトの名無しさん:2006/05/27(土) 22:44:37
>全部取得できるまでバッファを拡張しつつループするようにする。
ということは下記のような同じ処理を何回もするということですよね?
1.GlobalAllocで領域確保

2.LVM_GETITEMTEXTで文字列取得

3.領域が足りなかったら領域を開放をして1に戻ってやり直し

4.取得した文字列をどっかに表示して領域の開放
という処理をするのですよね?

そういうことをしたら遅くなりませんかね?

つまりこういうことですか?
最初にこれぐらいあったら充分だろと思える領域を確保!
それから1をする・・・のかな?

299 :デフォルトの名無しさん:2006/05/27(土) 22:47:35
LVM_GETITEMTEXTの返り血が文字数返さなかったっけ?

300 :デフォルトの名無しさん:2006/05/27(土) 22:50:09
>>299
>it returns the number of characters in the pszText member of the LVITEM structure.
俺は英語苦手なんで合ってるか分からないが、あくまで取得できた文字数を返すと書かれてるように思える

301 :デフォルトの名無しさん:2006/05/27(土) 22:52:36
>>298
GlobalAllocを使う理由がわからんが、そういうこと。
文字列長によるが、バッファ長を2倍2倍していけばそんなに回数かからないと思う。


302 :デフォルトの名無しさん:2006/05/27(土) 22:53:12
OCX内の関数Aから、DLL内の関数Bを呼び出し、その関数BからDLL内の関数Cを呼び出すと、
OCXの登録ができなくなりますが、

それはなぜでしょうか?

OCX
void FuncA()
{
FuncB();
}

DLL
void FuncB()
{
FuncC();
}

DLL
void FuncC()
{

}

303 :デフォルトの名無しさん:2006/05/27(土) 23:06:19
>>301
WINAPIって領域を確保するのにmallocではなく、
GlobalAllocを使わないといけないのではないの?

それとC++ではないのでnewを使えないからというつもりだったのですが・・・
もしかしてまたなんか間違えたかなかな?

304 :デフォルトの名無しさん:2006/05/27(土) 23:19:26
>>303
今はGlobalAlloc/LocalAllocよりもHeapAllocのほうが推奨されている。
また、mallocやnewだって使いたければ好きに使ってよい。

305 :デフォルトの名無しさん:2006/05/27(土) 23:21:03
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/memory/base/globalalloc.asp
>The global functions are slower than other memory management functions and do not provide as many features.
>Therefore, new applications should use the heap functions.
>However, the global functions are still used with DDE, the clipboard functions, and OLE data objects.


306 :デフォルトの名無しさん:2006/05/27(土) 23:30:26
それくらい日本語で読ませてやってもいいだろうに。
http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_globalalloc.htm
> 注意 グローバル関数は他のメモリ管理関数より低速で、提供する機能も多くありません。
> そのため、新しいアプリケーションは「heap functions」(ヒープ関数)を使うべきです。
> しかし、DDE 関数とクリップボード関数では、依然としてグローバル関数が使われています。

307 :デフォルトの名無しさん:2006/05/27(土) 23:44:53
日本語版のMSDN Libraryは余計な文章付け加えてたり
逆に重要なのを消しちゃったりするから困る

まぁその部分については問題ないが

308 :デフォルトの名無しさん:2006/05/27(土) 23:45:56
英語が多少読めるならこれくらいどうってことないだろうし
読めなないならこれを機会に英語を勉強してもらおうと思った。
日本語版MSDNは不完全で訳がイマイチだし。

309 :デフォルトの名無しさん:2006/05/27(土) 23:53:48
あぁ、そういうことか〜
>>305の文章読んだことありました!
翻訳サイトでちょっと読んだだけだったので
「依然としてグローバル関数・・・」のところを見て
まぁいいかぐらいにしか思ってませんでした。
DDE 関数とクリップボード関数ではだったのですか・・・

310 :デフォルトの名無しさん :2006/05/28(日) 02:19:00
すいません、くずたれな質問ですが教えてください。
ダイアログを表示さし、入力終えてOK押すとダイアログは消え
別に用意しておいたウィンドウにスイッチしてそのウィンドウに
結果を表示させたいのですが
まず、最初にウィンドウクラスでバックグラウンドをNULLで塗って
その登録したやつを、クリエイトウィンドウでつくってその真上に
ダイアログを表示させて......
この最初の時点でつまづいてます。
ふつうにウィンドウのメニューからダイアログを表示させる事は
できるのですが.....
オーナーウィンドウがクリエイトをメッセージした時
リソースからダイアログのハンドルを作って
ShowWindowして、描画したいオーナーウィンドウを
ダイアログがデストロイした時にオーナーをShowWindow
すれば良いのか、もうわかんなくなってしまって。
くずたれで、質問内容も中途半端なのは承知してます。
ただ、何かヒントを頂けないでしょうか。お願いします。

311 :デフォルトの名無しさん:2006/05/28(日) 02:42:46
>ウィンドウにスイッチして
>クリエイトをメッセージした

意味不明

312 :デフォルトの名無しさん:2006/05/28(日) 04:01:32
わらた

313 :デフォルトの名無しさん:2006/05/28(日) 09:57:24
>>310
@.OK押したら消えるダイアログを作成しる。
A.ウィンドウの上に、@を表示し動作を確認する。
B.ウィンドウの上に、@をA回連続で表示するように改造してみる。
作成途中に気付くと思うが。


314 :sage:2006/05/28(日) 13:02:36
くずたれって何だ

315 :デフォルトの名無しさん:2006/05/28(日) 13:21:07
お前にお似合いのスレのこと

316 :デフォルトの名無しさん:2006/05/28(日) 15:39:54
ttp://www.geocities.jp/i96815/windows/win11.html
にてHeapAllocの説明を読んだのですが、
GlobalAllocはHeapAlloc 系だと書いていました。

>>305の文章とこの文章ではなにかがおかしく感じるのですが
とくに「グローバル関数よりヒープ関数を使ったほうがいい」ってとこでが・・・

317 :デフォルトの名無しさん :2006/05/28(日) 15:57:16
>>313
わかりました
とにかく一個ずつの処理を追って確認していきます。
一気に作ろうと思った、俺の頭がどうかしてました。

318 :デフォルトの名無しさん:2006/05/28(日) 16:36:36
>>316
Win32/64ではGlobalAllocは内部でHeapAllocを呼び出すという実装になっている。
だから直接HeapAlloc呼べばいいだろということ。

319 :デフォルトの名無しさん:2006/05/28(日) 17:12:11
そういう意味だったのですか〜。
つまり無駄な処理はなくそうってことですね!


320 :デフォルトの名無しさん:2006/05/28(日) 17:18:14
普通のapiならスタックでもいいわけだし

321 :デフォルトの名無しさん:2006/05/28(日) 19:13:14
GetProcAddressって2番目の引数が
LPCTSTRじゃなくてLPCSTRなんだが
GetProcAddress(hDLL,_T(

322 :デフォルトの名無しさん:2006/05/28(日) 19:14:28
すまん、切れた。

GetProcAddressって2番目の引数が
LPCTSTRじゃなくてLPCSTRなんだが
GetProcAddress(hDLL,_T("HogeHoge"));
じゃなくて
GetProcAddress(hDLL,"HogeHoge");
で呼べってこと?


323 :デフォルトの名無しさん:2006/05/28(日) 19:39:32
英数字のみでいいからそうなんだろう。

324 :デフォルトの名無しさん:2006/05/28(日) 19:58:13
なのにWindows CEではLPCWSTRという罠

325 :322:2006/05/28(日) 20:04:39
LPCWSTR版のGetProcAddressを呼ぶ方法はありませんか

326 :デフォルトの名無しさん:2006/05/28(日) 20:13:24
WinCEに乗り換える。

327 :デフォルトの名無しさん:2006/05/28(日) 20:20:49
>>325
W版自体が無いから、自分で文字コード変換する。

328 :322:2006/05/28(日) 20:24:13
おk。
がんばる。


329 :デフォルトの名無しさん:2006/05/28(日) 22:17:23
「関数の引数すべてLPCTSTRに統一してくれたらいいのになんでしないのかな?」
とか考えてる自分は間違っているのでしょうか?

330 :デフォルトの名無しさん:2006/05/28(日) 22:27:19
むしろME以前など切り捨ててUNICODEだけにすればいい

331 :デフォルトの名無しさん:2006/05/28(日) 22:43:59
実行時ならまだしもコンパイル時に切り替えて対応じゃなぁ

結局9x系とNT系でバイナリ2つ用意しないといけないのが面倒

332 :デフォルトの名無しさん:2006/05/28(日) 22:51:31
9xとかMeなんてまだ使ってる方がおかしい

333 :デフォルトの名無しさん:2006/05/28(日) 22:53:45
>>332
俺の知り合いにもいるな
未だにMe使ってる奴

まぁそれでも俺は9x系はばっさり切り捨てるが
対応する必要もメリットも無いしな

334 :デフォルトの名無しさん:2006/05/28(日) 23:04:10
>>325の質問はつまり
非Unicodeの文字列をUnicode版のapiで読めませんかということだろ
非Unicodeの文字列なんだから非Unicode版のapiを使うのは当たり前じゃないか?

335 :デフォルトの名無しさん:2006/05/28(日) 23:22:45
ん?

普通に善意的に解釈すれば
MultiByteToWideChar

336 :デフォルトの名無しさん:2006/05/28(日) 23:25:11
というよりTCHARバージョン作ってくれたらそれでいいのにと思う

337 :デフォルトの名無しさん:2006/05/28(日) 23:28:46
作っても馬鹿以外は使わないだろうから

338 :デフォルトの名無しさん:2006/05/28(日) 23:32:05
>>336
>>336
>>336
>>336
>>336

339 :デフォルトの名無しさん:2006/05/28(日) 23:42:49
>>330-333
つMicrosoft Layer for Unicode
全く動かないというのは勘弁してくれ。

俺は今でも9xを使うこともあるんだ。(流石にメインPCはXPだけど)

340 :デフォルトの名無しさん:2006/05/28(日) 23:48:12
>>339
参考までに何に使ってるか教えて頂けないでしょうか?


341 :デフォルトの名無しさん:2006/05/28(日) 23:52:39
そりゃお前WinXPで動かない古めのエロ(ry

342 :デフォルトの名無しさん:2006/05/29(月) 01:09:54
>>339
俺も敢えて9xマシンを残しておく理由を聞きたい
古いソフトでもなければ大抵はXPで動くんだし
動かなくてもVMwareとかでどうにかできるんだし

343 :デフォルトの名無しさん:2006/05/29(月) 01:15:08
9xマシンさっさと対象から外してほしいよ!
試験をする身になって考えてみろよ!
98、Me、2000、XPをサービスパックごとに試験しろって鬼じゃん?
98すぐ変な動きするし!

344 :デフォルトの名無しさん:2006/05/29(月) 01:17:49 ?#
1.PC-9821使いだから
2.FM-TOWNS使いだから

345 :デフォルトの名無しさん:2006/05/29(月) 01:36:13
早く棄てれ

346 :デフォルトの名無しさん:2006/05/29(月) 02:29:22
ttp://nienie.com/~masapico/api_InternetReadFile.html
のサンプルソースをborlandC++にてコンパイルしたら
Error: 外部シンボル 'InternetOpenA' が未解決(C:\DOCUMENTS AND SETTINGS\OWNER\デスクトップ\A.OBJ が参照)
Error: 外部シンボル 'InternetOpenUrlA' が未解決(C:\DOCUMENTS AND SETTINGS\OWNER\デスクトップ\A.OBJ が参照)
Error: 外部シンボル 'InternetReadFile' が未解決(C:\DOCUMENTS AND SETTINGS\OWNER\デスクトップ\A.OBJ が参照)
Error: 外部シンボル 'InternetCloseHandle' が未解決(C:\DOCUMENTS AND SETTINGS\OWNER\デスクトップ\A.OBJ が参照)
となりました。
これはなにをしたら動くのでしょうか?

wininet.hはインクルードしています。

347 :デフォルトの名無しさん:2006/05/29(月) 02:58:30
>>346
Wininet.libをリンクすれば動くんじゃないかな

348 :デフォルトの名無しさん:2006/05/29(月) 03:25:49
>>343
貧乏ですみません。
使い続けてすみません。
生(ry

349 :デフォルトの名無しさん:2006/05/29(月) 04:59:30
僕は2000、NTを切り捨てている。98、Me、XPのみ。

350 :デフォルトの名無しさん:2006/05/29(月) 06:02:57
>>344
1. PC-9821用Windows 2000もある(XPはないが)
2. TOWNS版Windows 98なんてあったっけ?

351 :デフォルトの名無しさん:2006/05/29(月) 06:52:11
>>340>>342
Windows 98
使っている理由はそのPCの性能が低すぎるから。
あと、結構最近までそれが家のメインPCだったこともあって、
俺は9xで動かないソフトを作るという気にならない。(9xで動作する保障があるかどうかは別問題)

そのPCへ試しにWindows 2000とVS .NET 2003を入れてみたが、
何か操作しようとする度にHDDはガリガリ言うし、
Boost.Lambdaを使ったプログラムをビルドすればいつまで経っても終わらない。
けど不要なサービスを止めたりすれば、メモリ64MBでもWin 2kが意外と使い物になったのは驚きだった。

352 :デフォルトの名無しさん:2006/05/29(月) 09:07:14
Win9x/MEを切り捨てたとしても、Unicodeを使うメリットってなんかあるのか?
_MAX_PATHを超えるパスが使えるぐらいしか、思いつかないんだが・・・・・


353 :デフォルトの名無しさん:2006/05/29(月) 09:35:59
>>352
NTカーネルのネイティブはすべてうにこーど。
ANSI版のAPIは、たんに文字コードを変換しているだけのラッパ。

354 :デフォルトの名無しさん:2006/05/29(月) 10:28:20 ?#
>>350
1.使ってるデバイスによってはWin2k用のドライバがないので9xを使わざるを得ない場合がある。
2.Windows95ならある。

355 :デフォルトの名無しさん:2006/05/29(月) 10:32:45
>>352
Shift JISに無いUnicodeの文字をファイル名に使われても読み書きできる。
まぁトラブるのは、ハートマークみたいな記号系ぐらいだと思うけどさ。


356 :デフォルトの名無しさん:2006/05/29(月) 14:16:13
質問があります。
ログイン画面やCTRL+ALT+DELで出る画面をキャプチャしたいのですが。

・アプリケーションをサービス化(SERVICE_WIN32_OWN_PROCESSとSERVICE_INTERACTIVE_PROCESS権限)
・OpenWindowStationとOpenDesktopにてWinlogonのデスクトップハンドルを取得
・EnumDesktopWindowsにてウインドウの列挙
・列挙したウインドウのからGetDCにてHDCの取得

までは出来たのですがGetPixelでピクセルの取得ができません。
GetDeviceCapsでGetPixelは使用可能のように見えるのですが・・・。

気になる事はSetThreadDesktopとSwitchDesktopを使用するとBUSYでエラーになります。

何か必要な処理が他にあるのでしょうか?

宜しくお願いします。

357 :デフォルトの名無しさん:2006/05/29(月) 14:40:12
>>356
まずは、BitBlt関数でやるべきだと思うが。

358 :デフォルトの名無しさん:2006/05/29(月) 15:34:37
2000とXPでFindFileの列挙する順番が違うことに気がついた…。
XPだと名前順にソートしやがるorz

勝手にソートさせないことってできますか?(要はそのフォルダへの
転送順や生成順に取ってきたいのです)

似たような問題にぶつかった人いませんでしょうか?
気のせいだろうか…

359 :デフォルトの名無しさん:2006/05/29(月) 15:40:03
元々ファイルシステムが返す順だろ?

360 :デフォルトの名無しさん:2006/05/29(月) 15:41:52
>>358
その要求そもそも無茶。

361 :デフォルトの名無しさん:2006/05/29(月) 15:50:07
>>359
XP(NTFS5.1?)だとファイルシステムレベルで名前順にソートされてる…?

変なことしてるのは承知なんだけどね。

362 :デフォルトの名無しさん:2006/05/29(月) 15:51:07
自分でソート

363 :デフォルトの名無しさん:2006/05/29(月) 15:58:15
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/findnextfile.asp
>The order in which this function returns the file names is dependent on the file system type.
>With the NTFS file system and CDFS file systems, the names are returned in alphabetical order.
>With FAT file systems, the names are returned in the order the files were written to the disk, which may or may not be in alphabetical order.

364 :356:2006/05/29(月) 16:04:16
>>357
もちろんBitbltも試しましたがダメでした。
通常のdefaultのデスクトップウインドウでは動きました。

365 :デフォルトの名無しさん:2006/05/29(月) 16:04:35
どうも勘違いしてたくさいです。
NTFSとFATの差のようだ…。
>>363
どうもでした。

366 :デフォルトの名無しさん:2006/05/29(月) 16:21:14
>>356 >>364
サービスのプロパティで
「デスクトップとの対話を許可」
のチェックとか

367 :デフォルトの名無しさん:2006/05/29(月) 16:25:40
ゲームを作ろうと思って、fpsを制御しようと思ったら、タイマは95とNT系では精度に差があるとききました。
何か巧い方法はないですか。

あと、検索してて思ったんですが、esy link libraryってどうですか?
VS2005でうまく動きますか?

368 :デフォルトの名無しさん:2006/05/29(月) 16:51:30
>>367

このサイトまだあった。よかった。

ttp://www.emit.jp/prog/prog_t1.html


369 :デフォルトの名無しさん:2006/05/29(月) 16:51:46
> あと、検索してて思ったんですが、esy link libraryってどうですか?
それを検索できません

370 :デフォルトの名無しさん:2006/05/29(月) 16:54:59
easy link library ではないかと脳内補間


371 :356:2006/05/29(月) 16:55:33
>>366
「デスクトップとの対話を許可」=「SERVICE_INTERACTIVE_PROCESS」
だと思われます。

あと上でGetDCが成功してると書きましたがひょっとすると無効な値かもしれません。
GetLastErrorでは特に何も返ってきてないのですが。。。
ウインドウハンドルはGetWindowTextで「SAS window」などを取得できてますので大丈夫だと思われます



372 :デフォルトの名無しさん:2006/05/29(月) 17:01:19
ソスどっかにうpしてくれんかのう

373 :367:2006/05/29(月) 17:09:21
をー、easy link libraryです。すみません。

374 :356:2006/05/29(月) 17:57:14
>>372
ttp://chise.s25.xrea.com/cgi-bin/up/source3/No_1883.txt

簡易的なソースをアップしました。

375 :デフォルトの名無しさん:2006/05/29(月) 18:04:38
http://www.sun-inet.or.jp/~yaneurao/rsp/rsp48to4F.html
第49回 Windowsで、精度の良いタイマを得る方法について(elユーザー必見!?)

僕も最近見つけた情報なんだけど、超大昔とはいえ氏がelユーザーだったというのも驚き。
ドットネットってdirectx8のSDK使える?それならelも使えると思うんだけど。

376 :デフォルトの名無しさん:2006/05/29(月) 18:13:34
>>375
timeGetTime使った方法ってCPU馬鹿食いせんの?
あと、タイマーの精度上げるイヤーな関数使わないと
精度上がらなかったんじゃあ…。

377 :デフォルトの名無しさん:2006/05/29(月) 18:52:09
タイマと言えばここも忘れずに。
http://www.emit.jp/prog/prog_t1.html

378 :デフォルトの名無しさん :2006/05/29(月) 19:19:49
猫でもや、wisdom以外のサイトで、ソースを参考できる
サイトってありませんか?
APIに関する事柄を参考にしたいのではなく、どういう風に
他の人は作っていってるのかを参考にしたいです。
一つの処理に対して一つの関数を作るにしても、その関数の
名前付けとか戻り値をどうしてるとか、ある変数を
グローバル変数(関数それぞれで使いたいからそうするのは
わかりますが)にしとくか、staticにしとくか、うまくグローバルや
staticを使わず処理してるとか、人それぞれだと思うのです。
そういう意味で、勉強のために人のソースを見てみたいんです。
海外、国内とわずそういう、ソースを公開してるページを
知ってる方教えてください。
猫でもの本を買って一通り例題等を打ちながらASCIIからでてる
リファレンス本見て、APIに関する内容を理解しつつ勉強してた
のですが、いざ自分で作ろうとすると、どうしても参考にしてきた
ソースが猫でもの本なので、そのクセみたいなのがついていて
他の人はどんな風にソースを書いているのかが気になってしまう
ようになってしまいました。
そういう風な意味で色々なサイトを教えてほしいです。

379 :デフォルトの名無しさん:2006/05/29(月) 19:22:47
MFCのソースが一番参考になる。

380 :デフォルトの名無しさん:2006/05/29(月) 19:23:42
MSDNのサンプル

381 :デフォルトの名無しさん:2006/05/29(月) 19:25:02
MFCのソースが一番参考になる。うっきー

382 :デフォルトの名無しさん:2006/05/29(月) 19:27:39
そろそろタイマーの話は止めたいマー。

383 :デフォルトの名無しさん:2006/05/29(月) 19:35:22
http://www.microsoft.com/japan/windows/embedded/ce/tools/source/default.asp
これまだ落とせるか?

384 :デフォルトの名無しさん:2006/05/29(月) 20:11:54
>>374
豚楠

385 :367:2006/05/29(月) 20:16:45
SetTimerで、既に使用中のタイマ識別しを指定するとどうなるの?


あと、フレームを処理させるのに
1.識別子を自前で用意して、呼び出し元の関数を識別子に記録、タイマセット
2.待ち時間が過ぎて、WM_TIMERを捕まえる
3.識別子から呼び出し元の関数にgotoジャンプ、(1へ飛ぶ)

っていう、我ながらベタな方法を使ってるのですが、普通フレーム処理させるのにどうしますか?

386 :デフォルトの名無しさん:2006/05/29(月) 20:18:07
>>378
猫は悪い見本だから反面教師にするといいよ


387 :デフォルトの名無しさん:2006/05/29(月) 20:19:49
>>385
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/timers/timerreference/timerfunctions/settimer.asp

388 :367:2006/05/29(月) 20:33:06
SetTimerのlpfnTimerに自分自身の関数を指定すれば馬と思ったんですが、
これって戻り値を返さない無限再帰とかにならないんですか?

389 :デフォルトの名無しさん:2006/05/29(月) 20:34:20
今日はもう店仕舞いだから、バカは帰っとくれ!

390 :デフォルトの名無しさん:2006/05/29(月) 20:40:04
>>388
385 のリンク先にある MS のドキュメントを見るとまるでワンショットタイマとして動作するように
思えるかもしれないけれども、Windows の SetTimer で設定されるタイマはインターバルタイマなので、
毎回 SetTimer する必要はありません。

それから、フレームを処理させるのに SetTimer のタイマを使うのは全くお勧めできません。
(が、試してみるのも悪くはないでしょう)

391 :デフォルトの名無しさん:2006/05/29(月) 20:41:21
いいえ

392 :デフォルトの名無しさん:2006/05/29(月) 20:54:59
こんばんは
質問いたします。
ビットマップをウィドウに表示させるのは、できるのですが、
そのファイルの情報を,取得して,自分で、ウィンドウに書いていくことは、
できるのでしょうか。
よろしくお願いいたします。


393 :デフォルトの名無しさん:2006/05/29(月) 21:04:25
>>392
情報というのが何なのかわかりませんが、
恐らくできます。

394 :デフォルトの名無しさん:2006/05/29(月) 21:04:49
できる

395 :デフォルトの名無しさん:2006/05/29(月) 21:07:30
デジカメでパシャリと

396 :346:2006/05/29(月) 22:29:25
>347
ありがとうございます!
本当にそれだけでした!

397 :デフォルトの名無しさん:2006/05/29(月) 23:19:49
>>392です
>>393-395さんありがとうございます。
できるのですね、探してみます。

398 :デフォルトの名無しさん:2006/05/30(火) 00:21:01
できるとしかいいようがないな。
>探してみます。
無理だと思うなあ。

399 :デフォルトの名無しさん:2006/05/30(火) 06:15:53
InputBoxを表示するAPIって無いのですか?

400 :デフォルトの名無しさん:2006/05/30(火) 06:45:05
それっぽいダイアログを作って表示させるしかない

401 :デフォルトの名無しさん:2006/05/30(火) 07:51:54
>>400
ありがとうございます。
仕方ないので頑張ってCreateWindow使ってゴリゴリやります。

402 :デフォルトの名無しさん :2006/05/30(火) 10:21:54
すいません教えてください。
ダイアログのコントロールから受けたデータをウィンドウの方に反映さしたいんですが
グローバル変数を使わずにやりとり出来ないのでしょうか
もしかしてウィンドウプロシージャの中にダイアログプロシージャ放り込んだりするんで
しょうか。
関数の中での数値を静的にして処理するのは仕方がないと思うのですが
成るだけグローバル変数は使いたくないです。
良い方法があれば教えてください。

403 :デフォルトの名無しさん:2006/05/30(火) 10:27:51
>>402
とりあえず、どういう状況なのか読み取れないけど、
メッセージ投げたらイインジャネ?

404 :デフォルトの名無しさん:2006/05/30(火) 11:14:59
釣りのようにも見えるな。

405 :デフォルトの名無しさん:2006/05/30(火) 11:23:13
>>402
GWL_USERDATAに、構造体でも仕込んでおいて、そこを更新するという手もある。
けど>>403のいうように、自分で新しいメッセージを定義してwParamとかlParamとかで受け渡した方がいい。

406 :デフォルトの名無しさん:2006/05/30(火) 11:57:25
ダイアログに複数のコントロールを配置して、
OKを押したら各コントロールの状態を取得する。
これが猫だと全部グローバルでやってるから。

407 :デフォルトの名無しさん:2006/05/30(火) 12:04:45
Cならそんなもの

408 :デフォルトの名無しさん:2006/05/30(火) 15:19:28
>>367
DXライブラリはどうよ?

409 :デフォルトの名無しさん:2006/05/30(火) 16:19:54
スレッドごとにコンソールを割り当てることは可能ですか?

410 :デフォルトの名無しさん:2006/05/30(火) 16:33:55
>>409
無理。
1プロセスで1つまでしか使えない。

411 :デフォルトの名無しさん:2006/05/30(火) 16:39:12
何とかして割り当てられないか調べていたのですが、やはり無理でしたか。
ありがとうございました。

412 :デフォルトの名無しさん:2006/05/30(火) 17:43:26
激しくすれ違いですみません。
VC#で、WordObjectLibraryを参照設定せずとも、
wordをハンドリングするために、
CreatObjectを使用したいと考えているのですが、
VC#とCreatObjectの組み合わせは、取り扱いが厄介らしいです。
どうしたらいいのでしょうか。

さっきからぐぐってるのに、全然わかりません。

413 :デフォルトの名無しさん:2006/05/30(火) 17:51:01
スレ違いと自覚してるなら妥当なスレに行け

414 :412:2006/05/30(火) 17:53:33
>413
どこに?
C#の掲示板がVBAわかるわけないし、
VBAの掲示板がC#わかるわけないし、
VBAとC#両方扱っているすれないし、
結局、ここしかないのです。

415 :412:2006/05/30(火) 17:56:02
http://www2.moug.net/bbs/wordvba/20060526000002.htm

「COMExceptionはハンドルされませんでした。」
というエラーがどうしても解決できないのです。

416 :デフォルトの名無しさん:2006/05/30(火) 17:58:05
>>414-415
死んだ方がいいよ

417 :412:2006/05/30(火) 18:06:11
>416
おまえもな

418 :デフォルトの名無しさん:2006/05/30(火) 18:08:06
>>415
ここで詳しく説明されてるじゃん。
http://dobon.net/vb/dotnet/vb2cs/createobject.html

あと C# スレがどっかにあるから、そっちに粋なヨ。
今のところ API とは何の関係もないから。
CreateObject なんて API も無いしね。

419 :412:2006/05/30(火) 18:08:11
417は偽者です。やめてください。

420 :デフォルトの名無しさん:2006/05/30(火) 18:15:19
>>419
むしろ、このスレ的にはCoCreateInstance関数であって、
CreateObjectはスレ違い。

C#系板で、GetTypeFromProgIDがうまくいかねーって聞いたほうがいいかも。

421 :デフォルトの名無しさん:2006/05/30(火) 18:19:23
うまくいかんのじゃなくて面倒だそうだからいいのない?って質問だな

422 :412:2006/05/30(火) 18:20:02
>418
そこはもう知ってました。
invokeって、強烈にめんどくさい。

COMExceptionエラーがむかつく。
http://support.microsoft.com/default.aspx?scid=kb;ja;316384

423 :デフォルトの名無しさん:2006/05/30(火) 18:20:28
C#系板か。
C#はそんなに偉大な存在だったのか。

424 :412:2006/05/30(火) 18:21:40
>421
そうです。
そもそも
どうしてWord.Find find=myDoc.Selection.Find
作って、find.Executeをすると、
COMExceptionなんて出てくるのだ!!
ワードのバージョンを2000から2003に
うpしただけじゃないか!!九層

425 :デフォルトの名無しさん:2006/05/30(火) 18:30:23
リア厨はさっさと所定のスレへ消えてください。

426 :412:2006/05/30(火) 18:37:03
>425
所定のすれがどこなのか、探してみつかってたなら
いまここにいないっつーの

427 :デフォルトの名無しさん:2006/05/30(火) 18:50:11 ?#
>>426
見つかるまで探せ。

428 :デフォルトの名無しさん:2006/05/30(火) 18:51:30
>412
UZEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE

429 :デフォルトの名無しさん:2006/05/30(火) 18:54:48
>>426
だからココも違うんだって場。
あと、ここでそんな態度とっちゃうとC#スレに言っても誰も教えてくれないから、
どっか他所で聞いたほうが良いと思います。
C#スレもAPIスレも、答える側の人はだいたい同じですから。

ここのフォーラムとかどうでしょう?
http://www.gotdotnet.com/japan/

430 :402:2006/05/31(水) 11:50:22
すいません、根本的な質問さしてください
みなさんはC言語で書いてるんですか?それともC++で書いてるんでしょうか
C++で書いていった方が先々の事を考えると良いならそうしたいです。

あと>>403さんメッセージを投げるや、>>403さんのGWL_USERDATA
に構造体を仕込むというのも、自分のレベルだとまだ、規定の関数が
投げるメッセージを受け取る程度で、さらにGWL_USERDATAに構造体を
仕込むというのが、Set/GetWindowLongの第二引数のこの値
(GWL_USERDATA)に構造体を仕込むという方法がよくわからないんです。
ですんでGetDlgItemでハンドルを取得して、処理しようと思います。


431 :デフォルトの名無しさん:2006/05/31(水) 12:06:58
CかC++かは個人の好みじゃないかな
C++使えれば、MFCやWTLで面倒くさいGUIは楽出来るけどね

> Set/GetWindowLongの第二引数のこの値(GWL_USERDATA)に構造体を仕込むという方法がよくわからないんです。
単にポインタを渡すだけ


432 :デフォルトの名無しさん:2006/05/31(水) 12:07:18
>>430
>(GWL_USERDATA)に構造体を仕込むという方法がよくわからないんです
ヒント:ポインタ


433 :デフォルトの名無しさん:2006/05/31(水) 12:10:56
>>430
今、わかるものでやっていくのがベストだと思います。

今のご自身のスキルで直感的にWin32APIも勉強しながら
C++も勉強してもやっていけそう。と思えるならやるべきです。
将来的な観点からみればC++で書けるほうがよいと思います。

ちなみに私はC++派です。

434 :430:2006/05/31(水) 12:38:44
>>431さん>>432さん>>433さん
レスありがとうございます。
今の自分のレベルで出来る事をしながら、新たなやり方を模索しつつ
C++でもやっていけそうなら、少しずつやっていこうと思います。

しっかし、この板の人たちは親切だ。
けっこうここで質問してて、そのたびに、適切なアドバイスをくれる。
俺も知識身につけて質問に答えられるようなレベルになろう。
そして、どこかの誰かの質問にこの板で答えていくのが
直接的では無いが、質問に答えてくださってくれる方々への
恩返しだと思うから。



435 :デフォルトの名無しさん:2006/05/31(水) 15:09:59
質問です

HANDLE hFile = CreateFile(lpcszPath, GENERIC_WRITE, NULL, NULL, OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,NULL);
SetFilePointer(hFile, 1024 * 1024 * 300, NULL, FILE_BEGIN);
SetEndOfFile(hFile);

とすれば、300MBのファイルが高速に作成できますが、これは安全でしょうか?




436 :435:2006/05/31(水) 15:19:55
申し訳ありません、自己解決しますた。
CAtlFile::SetSize()も同じような処理をしていたみたいです。

437 :デフォルトの名無しさん:2006/05/31(水) 15:30:58
32APIがあるってことは、次期APIは64bitなの?
それは32と互換性があるとしたら、どれくらい?

438 :デフォルトの名無しさん:2006/05/31(水) 16:15:57
>>437
ほぼ100% 互換ですよ。
「プログラミングモデルの同一性」の項を参照。
http://www.microsoft.com/japan/technet/prodtechnol/winxppro/evaluate/xp64ovw.mspx

439 :デフォルトの名無しさん:2006/05/31(水) 16:28:53
>>435
俺が過去に作ったロガーは、それで2Gのファイルを先に作成したよ。
ただ、ハードディスクの断片化には注意。

440 :デフォルトの名無しさん:2006/05/31(水) 16:29:15
MSさえ生きていれば今まで学んだ事が無に帰ることはないのか。よかった。

441 :デフォルトの名無しさん:2006/05/31(水) 17:33:36
まあ、それも幻想に過ぎないわけだけどな

442 :デフォルトの名無しさん:2006/05/31(水) 22:41:19
質問です。
MDIで子ウインドウ生成の仕方を教えてください。

443 :デフォルトの名無しさん:2006/05/31(水) 22:42:30
親ウインドウに中出し

444 :デフォルトの名無しさん:2006/05/31(水) 23:01:41
>>442
ttp://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/windowing/multipledocumentinterface/usingthemultipledocumentinterface.asp

445 :デフォルトの名無しさん:2006/06/01(木) 01:54:41
>>435
XPでは高速だが2000ではそうでもない。

446 :デフォルトの名無しさん:2006/06/01(木) 06:04:45
常駐させてコンピュータのロック中だけ処理を行わせたいのですが、
コンピュータがロックされたことを知ることはできないでしょうか。

447 :デフォルトの名無しさん:2006/06/01(木) 07:02:13
できますよ

448 :デフォルトの名無しさん:2006/06/01(木) 07:15:08
できるかどうか知らんが、思いつくのは
SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, ?, ?, SPIF_SENDCHANGE);


449 :446:2006/06/01(木) 12:47:11
SystemParametersInfoの説明みてみました。。
ウィンドウのフラグまわりが怪しそうでしたが、それっぽいのはなさそうですね。

とおもってググり続けてたら、もうしわけない、過去に質問ありました(´∀`)

「Win32API 質問箱 Build4」
> 276 名前: デフォルトの名無しさん 投稿日: 02/06/21 18:19
> >>270
> OpenInputDesktop→GetUserObjectInformationでOK、
> と思って試してみたら、ロックされているときはエラーになるなあ。
> はっ、そうか、エラーが帰ってきたらロックされていると思えばいいんだ。(いいのか?)

結果は書いてなかったので試してみます。


450 :デフォルトの名無しさん:2006/06/01(木) 21:59:42
>>442
ttp://wisdom.sakura.ne.jp/system/winapi/win32/win139.html

451 :デフォルトの名無しさん:2006/06/01(木) 22:47:43
メニュー項目の横に表示できるチェックマークって
プログラム内からチェック、非チェック状態を切り替えるにはどうすればいいですか?

452 :デフォルトの名無しさん:2006/06/01(木) 22:53:05
>>451
SetMenuItemInfo

453 :デフォルトの名無しさん:2006/06/01(木) 22:57:39
さんくす

454 :デフォルトの名無しさん:2006/06/02(金) 19:08:13
プロパティシートで最初のページのタブにフォーカスが移るようにしたいのですが上手くいきません
コントロールはリソースで作ってるので最初のコントロールに全てフォーカスがあります

最初のページのプロシージャ内のWM_INITDIALOGメッセージ内で
SetFocus(hDlg)、SetFocus(GetParent(hDlg))(一応)、どちらも駄目でした
言うまでも無いですがWM_INITDIALOGは0で返してます

どちらも駄目だったので根本的に違うのかと思ったので
SetFocus(GetDlgItem(hDlg, IDC_HOGE))、SetFocus(GetDlgItem(GetParent(hDlg), IDC_HOGE))
どちらともやってみましたが、こちらもフォーカスが移らず、最初のコントロールに当たってるままでした

プロパティシートのタブのハンドルはプロシージャ内のウィンドウハンドルと違うのでしょうか…
何方かお知恵を貸して頂きたいです・・

455 :デフォルトの名無しさん:2006/06/02(金) 19:38:38
>>454
PSM_GETTABCONTROL ?

456 :454:2006/06/02(金) 20:19:14
>>455
PSM_GETTABCONTROLで、出来ましたありがとうございます

タブのフォーカス設定はページのプロシージャで指定するのでは無く
プロパティシートのコールバックで行うようです…
最初のページのプロシージャ内でPSM_GETTABCONTROLを使ってみましたが効果が無かったです
コールバックでPSM_GETTABCONTROLでハンドルを取得してSetFocusで難なく出来ました

あとPSM_GETTABCONTROLはPropSheet_GetTabControlというマクロが用意されてますね
ありがとうございました

457 :デフォルトの名無しさん:2006/06/03(土) 06:51:51
処理のタイムアウトを実現しようとして、専用のスレッドで経過時間をチェックしてるのですが、SetTimer()でタイマーを使うと、1msごとに設定しても1msより全然長い間隔で入るみたいです。
しかし、250msごとに設定すると250msに近い間隔で入ってくるみたいです。

これはタイマの分解能によるものだと思うのですが、実際に必要なチェックは1秒ごとで十分だと思うので、1秒ごとに設定しようかと思うのですが、1秒ごとならだいたい正しい時間が得られるでしょうか?

チック割り込みだと結局だんだんズレていくはずだと思うのですが、何かMSDNライブラリを見るとちゃんとCMOS時計を参照してズレを修正するとか何とか書いてあるのですが、これは本当なのでしょうか?

タイマーはやめてGetLocalTime()でチェックした方がいいのでしょうか?

後、このような事をする場合の注意点は、スレッドの優先順位を下げる、という他にあるでしょうか?

458 :デフォルトの名無しさん:2006/06/03(土) 08:05:10
SetTimer 精度でぐぐれ

459 :デフォルトの名無しさん:2006/06/03(土) 09:36:00
タイムアウトにも精度が必要なんだ

460 :デフォルトの名無しさん:2006/06/03(土) 09:45:55
>>457
何の処理のタイムアウトなのかにもよるが、よく使うのは
同期オブジェクト+WaitForSingleObject()


461 :デフォルトの名無しさん:2006/06/03(土) 10:38:09
10ms以下はミリ

462 :デフォルトの名無しさん:2006/06/03(土) 12:59:37
タイムアウトで精度の高い関数使ってるなら、俺のスペックの低いPCは鬱。

463 :デフォルトの名無しさん:2006/06/03(土) 13:09:12
ドラッグしているどうかの判定はどうすればできるのでしょうか?
「紙」のようにドラッグ中にウィンドウを表示させて、ドラッグが終われば非表示にさせたいのですが。

464 :デフォルトの名無しさん:2006/06/03(土) 13:33:35
マクロ言語(UWSC)から、WIN32APIを呼び出して、
バックグラウンドのウインドウに対し左矢印キーを1秒間押し続ける
ことをしたいのですが、上手くいきません。
WIN32APIの知識が全くないので、色々調べてはいるのですが、
非常に難しく分からないことだらけなので、以下の質問に
お答えいただけるとありがたいです。(ちんぷんかんな質問であれば申し訳ありません)
<質問>
PostMessageAを使用して左矢印キーをポストしようと思い、以下のように記述しましたが、
動かないのです。各々のパラメータの設定は正しいのでしょうか?
WIN32APIの部分が悪いのか、UWSCの書き方がまずいのか切分けたいのです。

Hwnd:バックグラウンドのウィンドウのID
WM_KWYDOWN = $0100
WM_KEYUP = $0101
PostMessageA(Hwnd, WM_KEYDOWN, VK_LEFT, NULL)
PostMessageA(Hwnd, WM_UP, VK_LEFT, NULL)
*1秒間押し続ける場合というのは実装してません

あと、1秒間押し続ける場合は恐らくiparamのところに記述するようにすればいいと思ってますが、
間違っているでしょうか?

以上よろしくお願いします

465 :デフォルトの名無しさん:2006/06/03(土) 14:08:35
>>464
キーボードはメッセージを送るよりも、keybd_eventかなにかを使ったほうがいいと思う。

466 :デフォルトの名無しさん:2006/06/03(土) 14:21:59
質問です。
インターネット上のショートカットを右クリックしたときのポップアップメニューに
自分用の項目を一つ追加したいと思っています。
その項目の内容は詳しくは書きませんが、
クリックしたショートカットのアドレスを表示するようなものです。
ですが方法がまったくもって分かりません。教えてもらえないでしょうか?

メニュー自体の作り方や表示方法はわかっています。

467 :464:2006/06/03(土) 14:47:05
>>465
レスありがとうございます。
keybd_eventやってみましたが、アクティブウインドウへの実行になってしまいました。
バックグランドのウインドウに対してもこのAPIを使用できる方法があるのでしょうか?


468 :デフォルトの名無しさん:2006/06/03(土) 15:03:21
>>466
インターネット上のショートカットというのが、拡張子urlのファイルのことなら関連付けを追加すればよい。

Internet Explorerで表示しているHTML上のハイパーリンクのことなら、
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt以下にキーを追加すればよい。
詳しくはググれ。

469 :466:2006/06/03(土) 16:19:37
>>468
質問する場所が間違っていたみたいですね。
それなのにそこまで教えてくれるとは・・・
親切にありがとうございますm(__)m

470 :デフォルトの名無しさん:2006/06/03(土) 18:08:21
>463
static int sw = 0;

case WM_LBTNDWN:
sw = 1;
break;
case WM_LBTNUP:
sw = 0;
break;
case WM_MOUSEMOVE:
if(sw){
honyarara;
}else{
honyarara;
}
break;

471 :463:2006/06/03(土) 20:34:23
ありがとうございます。
あとは、ドラッグしているものがファイルかテキストか判断できればいいのですが。。。
ご存知の方、よろしくお願いします。

472 :470:2006/06/03(土) 20:57:26
ごめん、寝ながら適当に書いたソースで感謝されるとは思わなかった。
お詫びとして「マウスキャプチャー」という単語を渡しておくから後は好きにしてくれ。

473 :デフォルトの名無しさん:2006/06/03(土) 23:11:48
スレ違いだったらごめんなさい。どこに聞いたら良いか微妙だったんで。

WinAPIを呼び出すメカニズムについての質問です。

普通、システムコールをする場合eaxレジスタなどに番号を指定して、
ソフトウェア割り込みをしたすると、OSの割り込みハンドラは戻りアドレスを
スタックに載せたり、割り込みベクタから適切な処理を選択したりして、、、、
というなのを習った記憶があります。

「OSの割り込み〜」以降の処理はOS内部の処理なのに、どうして各プロセスは
Kernel32.dllを個別にメモリにマップする必要があるんでしょうか。

長文スマソ。

474 :デフォルトの名無しさん:2006/06/03(土) 23:16:36
個別なんだ
知らなかった

475 :デフォルトの名無しさん:2006/06/03(土) 23:36:20
>>473
まずはAPIと言う単語の意味から調べろ。

476 :デフォルトの名無しさん:2006/06/03(土) 23:40:25
>>473
こいつ何なんだよー、頭良いのか悪いのかよく分からんなー。
そんな難しい事考えてる暇があったら、少しは既存の文書ぐらい目を通せよなー。

と、思ったが、ただのホームレス予備軍、現暇人か。
ちゃんと働けよ。日本の為に、地球の為に。
この世の中はお前1人が住んでるだけじゃぁねぇんだからな。
そこんとこよ〜く考えて今日は眠れ。じゃなっ!

477 :デフォルトの名無しさん:2006/06/03(土) 23:46:41
>>473
ttp://itpro.nikkeibp.co.jp/article/Windows/20051111/224393/?ST=win-client

478 :デフォルトの名無しさん:2006/06/04(日) 00:08:53
>>476
お前どこの酔っ払ったオッサンだよ。

479 :473:2006/06/04(日) 00:43:54
>>477
分かりやすい解説ありがとうございました。
いろいろ検索してみたのですが、一番良かったです。

480 :デフォルトの名無しさん:2006/06/04(日) 04:18:43
MessageBox関数で表示されるウィンドウのような
タイトルバーとキャプションはあって、アイコンが無いウィンドウって、
CreateWindowでどうやたら作れますか?

481 :デフォルトの名無しさん:2006/06/04(日) 04:28:24
ウィンドウプロシージャ書いて、
RegisterClass でウィンドウクラス登録して、
CreateWindow する。

482 :デフォルトの名無しさん:2006/06/04(日) 05:05:34
>>481
ありがとうございます、できました!!

483 :デフォルトの名無しさん:2006/06/04(日) 08:17:03
ツリービューのルートアイテムをソートする方法はありますか?

484 :デフォルトの名無しさん:2006/06/04(日) 15:57:45
はい

485 :デフォルトの名無しさん:2006/06/05(月) 19:56:43
仮想リストビュー使っているのですが、
CtrlやShiftを押してない状態でAとかBとかのキーを押すと
一番初めの項目へフォーカスが移動してしまいます
このフォーカス移動を殺すにはどうすれば良いんですか?

486 :デフォルトの名無しさん:2006/06/05(月) 21:01:36
気がつかなかった
俺も直さないとだめだけど
気にしないでおこう

487 :デフォルトの名無しさん:2006/06/05(月) 21:54:43
ウィンドウの最大化の挙動を制御したいのですがここで質問

最大化ボタンを押した時の動作はWM_SYSCOMMANDのSC_MAXIMIZEを拾う事で変えられたたですが、
タイトルバーをダブルクリックした時は相変わらすデフォルトの最大化動作になってしまいます。
タイトルバーをダブルクリックした時のメッセージは何を拾うのでしょう?(´・ω・` )

488 :デフォルトの名無しさん:2006/06/05(月) 21:57:00
WM_NCLBUTTONDOWNだったかな?良く覚えてない、間違えてたらすまん

489 :デフォルトの名無しさん:2006/06/05(月) 22:21:38
最大化しようとしているよ、っていうWM_WINDOWPOSCHANGINGを拾えばいいんでないの?

490 :デフォルトの名無しさん:2006/06/05(月) 22:50:15
>>489
ヘルプでWM_WINDOWPOSCHANGINGを調べましたがイマイチよく解りませぬ
lParamで渡されるWINDOWPOSのx,y,cx,cyがワークエリア目一杯だったら最大化
しようとしてると判断するんですかね?

>>488
int Ypos,upper_,lower_;
RECT rcWindow;

case WM_NCLBUTTONDBLCLK:
GetWindowRect(hWnd,&rcWindow);
Ypos= HIWORD(lParam);
upper_= rcWindow.top + GetSystemMetrics(SM_CYBORDER);
lower_= upper_ + GetSystemMetrics(SM_CYCAPTION);
if(upper_ < Ypos && Ypos < lower_) OutputDebugString("(´・ω・` ) \n");
break;

こんなコード書いちゃったよヽ(`Д´)ノ
明らかに変だ

491 :デフォルトの名無しさん:2006/06/05(月) 23:07:23
>>490
SendMessage(WM_NCHITTEST, ...) して HT_CAPTIONだったら、
てな感じにするのが良いのではないだろうか。

492 :デフォルトの名無しさん:2006/06/05(月) 23:41:07
>>487
挙動制御っていうのは無効化じゃないの?

最大化を無効にしたいのであれば
DeleteMenu(GetSystemMenu(hWnd, FALSE), SC_MAXIMIZE, MF_BYCOMMAND);
ちゃんとボタンも無効化させるのなら
SetWindowLong(hWnd, GWL_STYLE, GetWindowLong(hWnd, GWL_STYLE) & ~WS_MAXIMIZEBOX);
も追加。

493 :487:2006/06/05(月) 23:50:29
>>491
>SendMessage(WM_NCHITTEST, ...) して HT_CAPTIONだったら、

正直具体例が無いと解り難い… orz
ヒットテストでぐぐるとWM_NCHITTESTが来たときに特定のヒットコードを返す例ばっかだった… orz
あとWM_NCHITTESTはDefWindowProc()の戻り値、つまりDefWindowProc()に渡さないと判別できず、
渡してしまうと後の祭りで制御が出来ない気が…

>>492
無効化じゃないのです。無効化だけならその例の通りで実現済みなのですが…
タイトルバーをダブルクリックした時に、最大化ではなくてウィンドウサイズを任意のサイズに変更したいのです。
MAME32というエミュでゲームをウィンドウモードで起動した時にこれができてるのよね(´・ω・`;)

494 :492:2006/06/06(火) 00:00:54
>>493
任意のサイズにしたいのなら、WM_GETMINMAXINFOを捕まえて
lParam(LPMINMAXINFO)のptMaxSizeを弄ればいいよ。

495 :487:2006/06/06(火) 00:25:03
>>494
やりたいことがこれで実現できますた、マリガトウございます。
MAME32とは挙動が違うけどもうどーでもいいや。

つか今までWM_SIZINGでトラックサイズやらウィンドウサイズ上限/下限やら一々全部計算してやってたのに、
同じ事がこんなに簡単にできたのね。 ○<\_

496 :デフォルトの名無しさん:2006/06/06(火) 14:45:47
>>493
WM_NCHITTESTは、渡した座標が非クライアントエリアのドコにあるかを調べるメッセージ。
これ呼んだだけで最大化されたりはしません。

497 :デフォルトの名無しさん:2006/06/06(火) 18:48:16
プロパティシート上のリストボックスで上下キー(VK_UP、VK_DOWN)を押すと、2項目ずつ移動するのは仕様ですか?
(プロパティシートでない)普通のダイアログ上のリストボックスならちゃんと1項目ずつ移動してくれるのですが…

498 :デフォルトの名無しさん:2006/06/06(火) 19:12:07
MCIは音声を同時再生できるのかしら?

499 :497:2006/06/06(火) 19:17:36
自己解決しました;

500 :485:2006/06/06(火) 20:08:53
とりあえず自己解決しました
一応解決させた方法書いときますと、ListViewをサブクラス化して
WM_CHARを捕まえ、CtrlとかShiftが押されてない時には
wParamに0をぶち込むことによってフォーカス移動を殺せました

501 :デフォルトの名無しさん:2006/06/06(火) 21:11:44
ファイル(NTFS)の副ストリームを列挙するAPIっていうのは無いんでしょうか

502 :デフォルトの名無しさん:2006/06/06(火) 21:20:09
BackupRead って調べたらすぐ出てくると思うんだけど。

503 :501:2006/06/06(火) 21:37:38
>>502
いやそのAPIは知ってるんですけど
一つ一つ読むの面倒だし
列挙が終わってもTRUE返さなかったりするので
一気に取得できるいいAPIないかなと思ったわけです


・・調べたところどうも無いみたいなので
ラッパクラスでも書いてお茶を濁す事にします

504 :デフォルトの名無しさん:2006/06/06(火) 21:48:38
GetPrivateProfileSectionは、ファイルの最初からキーを列挙して
その順番のままバッファに書き込んでくれるのでしょうか?ソートなどはされませんか?

505 :デフォルトの名無しさん:2006/06/06(火) 21:50:15
何もしてくんないよ

506 :デフォルトの名無しさん:2006/06/06(火) 22:14:43
エクスプローラライクなファイラをC#2005で作成中です。
マイコンピュータやデスクトップの項目、それらのコンテキストメニュー、
ファイルなどのプロパティの表示といったシェル拡張らしき要素はどうすれば扱えるでしょうか。
shell32.dllを利用するのかな、と見当をつけた辺りで先に進めずにいます。

507 :デフォルトの名無しさん:2006/06/06(火) 22:21:35
>>506
msdnでIShellFolder調べてその近くにあるリファレンス等から
めぼしいのを拾ったらある程度は前進できるんじゃね?
よく知らんけど。

508 :デフォルトの名無しさん:2006/06/06(火) 22:22:12
>>506
シェル名前空間、Shell's Namespace、IShellFolderあたりでググれ。

509 :デフォルトの名無しさん:2006/06/06(火) 22:24:12
SHGetDesktopFolder でデスクトップの IShellFolder を得て、あとはアレコレと。
COM インタフェイス経由でいろんなオブジェクト(インタフェイス)を使うことになります。
あと「パス」に相当する ITEMIDLIST とか。

それなりにメンドクサイので頑張ってください。サンプルはググレばあるでしょう。

510 :506:2006/06/06(火) 23:12:39
>>507-509
よさそうなヒントをいくつもありがとうございます。
調べてみます。

511 :デフォルトの名無しさん:2006/06/07(水) 12:11:17
メンバー変数の先頭に付ける「m_」ってどういう意味?
命名規則知りたい。
スレ違いでわるいけど。

512 :デフォルトの名無しさん:2006/06/07(水) 12:14:16
>>511
メンバー変数の先頭に付ける…。
ちなみにスタティック変数には「s_」
グローバル変数には「g_」だ。

513 :デフォルトの名無しさん:2006/06/07(水) 12:14:37
>>511
メンバ変数

514 :デフォルトの名無しさん:2006/06/07(水) 12:26:02
>>511
名付けたヤシに聞け!

515 :デフォルトの名無しさん:2006/06/07(水) 13:38:19
この命名規則ってなんだっけ。
確かある人が「プログラミング言語は抽象化を目的としているので、変数名にハードの情報を散りばめてはいけない」って言ってたな。

516 :デフォルトの名無しさん:2006/06/07(水) 13:54:19
簡単な時計を作りました。背景を描画してその上に Rectangle を描いてその上に
時刻を表示させます。特に問題無く動いていたと思ったら、よく見ているとたまに
チラつきます。これを抑える方法はないでしょうか。
(無知なりにググってみたら、ダブル(マルチ?)バッファリングという方法は
見つかったのですが、もしもっと簡単に解決する方法があればと思い。。)

517 :デフォルトの名無しさん:2006/06/07(水) 13:55:58
ハンガリアン以外ってどんなのあるぅ?

518 :デフォルトの名無しさん:2006/06/07(水) 14:13:52
>>516
では、「ない」と答えればダブルバッファを使うのか?

519 :デフォルトの名無しさん:2006/06/07(水) 14:18:40
ちらつきに合わせてまばたきする手もある

520 :デフォルトの名無しさん:2006/06/07(水) 14:23:42
>>516
ttp://www.atmarkit.co.jp/fdotnet/dotnettips/194nopaintbg/nopaintbg.html
ttp://www7a.biglobe.ne.jp/~ni_sky/cgi-bin/YukiWiki/wiki.cgi?mycmd=search&mymsg=WindowsSDK%a4%c7%a5%c0%a5%d6%a5%eb%a5%d0%a5%c3%a5%d5%a5%a1%a5%ea%a5%f3%a5%b0

お好みでドゾ

521 :デフォルトの名無しさん:2006/06/07(水) 14:27:27
>>516
WM_ERASEBKGNDを処理しないことで、多少は改善するかも

522 :デフォルトの名無しさん:2006/06/07(水) 15:51:29
MSDNにwindowを開くための雛形と、
それに関する詳細な解説みたいなのはないんでしょうか?

GUI周りの知識はネットで検索して雛形を見て組み込む感じでやっているのですが
この方法だとネットに依存しすぎていて、
オフラインでのプログラミング時などに困ってしまいます。

MSDNで調べながらできれば嬉しいんですが
先ほどから探しても見てもそういった形ではまとめられていないようなんですが…

523 :デフォルトの名無しさん:2006/06/07(水) 15:52:59
MSDNにサンプルがくっついてる

524 :デフォルトの名無しさん:2006/06/07(水) 15:58:56
見つけられないやつはどこを探してるんだろうか?

525 :デフォルトの名無しさん:2006/06/07(水) 16:00:17
MFCやATLのサンプルはあったんですが…

526 :デフォルトの名無しさん:2006/06/07(水) 16:14:57
windowを開くための雛形だったら1つあればじゅうぶんだろ
毎回ネットでさがさなきゃならんものか?

527 :デフォルトの名無しさん:2006/06/07(水) 16:25:55
いやwindowを開く処理は例に出しただけで
その他のGUI部分を弄りたくなった場合の話です。

528 :デフォルトの名無しさん:2006/06/07(水) 16:27:20
>MSDNにwindowを開くための雛形と、
>それに関する詳細な解説みたいなのはないんでしょうか?

529 :デフォルトの名無しさん:2006/06/07(水) 16:29:11
CreateWindowExの引数とか、Toolbar コントロールを作ったときの
定番の初期化の仕方とかそういうの?

PSDK のサンプルとかWTLやMFCのソース 読んだりするのを推奨。

530 :デフォルトの名無しさん:2006/06/07(水) 16:51:43
>>519
おまえ天才

531 :デフォルトの名無しさん:2006/06/07(水) 16:59:34
Windows2000prosp4なんですが、
デスクトップなどで右クリックしたときに表示される
コンテキストメニューに自分で指定したアプリを
起動するような項目を追加したいのですが
どうすればよいでしょうか?

532 :デフォルトの名無しさん:2006/06/07(水) 17:28:29
窓の手

533 :デフォルトの名無しさん:2006/06/07(水) 20:37:48
入力補間機能を実装したいのですが、足がかりがなくて困ってます。

VC++のような入力補間機能はAPIで手軽に作れたりしますか?

534 :デフォルトの名無しさん:2006/06/07(水) 20:47:23
あきらめなさい。

535 :デフォルトの名無しさん:2006/06/07(水) 20:47:37
>>533
むり
ファイル解析して一覧表みたいなの作って自力表示

536 :デフォルトの名無しさん:2006/06/07(水) 20:58:53
>>522
ttp://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/windowing/windows/aboutwindows.asp

537 :デフォルトの名無しさん:2006/06/07(水) 20:59:26
>>531
IContextMenuだったかも?

538 :デフォルトの名無しさん:2006/06/07(水) 21:15:43
DLLから関数を呼ぶとき_declspecを使う方法とDEFファイル使う場合があると思うが、
おまえらはどっち使ってる?
もしくは、どう使い分けてる?

539 :デフォルトの名無しさん:2006/06/07(水) 21:18:08
何となくDEF使ってる

540 :デフォルトの名無しさん:2006/06/07(水) 21:18:33
DEF ファイル使うのはシンボルのエキスポート名や番号を
陽に指定したいときだけかな。

541 :デフォルトの名無しさん:2006/06/07(水) 21:52:12
どっちも使ってないけどダメなん?

542 :デフォルトの名無しさん:2006/06/07(水) 21:57:54
>>541
どうやってるの?GetProcAddress?

543 :デフォルトの名無しさん:2006/06/07(水) 22:15:27
それ

544 :デフォルトの名無しさん:2006/06/08(木) 01:22:57
GetOpenFileNameでフォルダを選択することは可能ですか?
もしくは、ファイルとフォルダを同一のダイアログで選択→開くできる方法は
ありますか?
ご存知の方がおられましたらお教え下さい。(_ _)

545 :デフォルトの名無しさん:2006/06/08(木) 02:37:21
>Get(ry
無理。

>もし(ry
そのようなダイアログを自分で作る。

546 :デフォルトの名無しさん:2006/06/08(木) 02:48:57
> ファイルとフォルダを同一のダイアログで選択→開く
フォルダの中のファイルを開きたい場合どう操作するんだろう

547 :デフォルトの名無しさん:2006/06/08(木) 02:50:58
「開く」操作とフォルダ階層を降りていく操作を別にするとか?

548 :デフォルトの名無しさん:2006/06/08(木) 10:10:40
>>498
Windowsのバージョンに依存だったはず。
とりあえずWindows98/2000以降はサウンドカードの種類に依存せず複数再生可能(DirectSoundでミキシング)。
95は無印だとサウンドカードの再生可能チャンネル数依存だったはず。

549 :デフォルトの名無しさん:2006/06/08(木) 12:35:46
ダイアログ中のフォルダを右クリックして「開く」じゃダメ?

550 :デフォルトの名無しさん:2006/06/08(木) 13:36:42
>>544
SHBrowseForFolderで、BIF_BROWSEINCLUDEFILESを指定すればよい。
ただしIE4以上が必要。

551 :デフォルトの名無しさん:2006/06/08(木) 18:09:27
WinMain関数の戻り値の型について
WINAPIとAPIENTRYがありますが、
どう違うのでしょうか?

552 :デフォルトの名無しさん:2006/06/08(木) 18:13:02
それは戻り値の型ではありません。

553 :デフォルトの名無しさん:2006/06/08(木) 18:27:29
>>551
552の言うとおりで、それは呼び出し規約の指定。
どちらも最終的には__stdcallになる。

http://www.google.co.jp/search?q=__stdcall+__cdecl&lr=lang_ja



554 :551:2006/06/08(木) 19:29:48
おれあほす
どうも失礼しました
ありがとうでした

555 :デフォルトの名無しさん:2006/06/08(木) 20:27:38
最小化したメモ帳に直接文字を打ち込む(エンターなど含む)
プログラムを作りたいのですが、APIを使って実現可能でしょうか?

556 :デフォルトの名無しさん:2006/06/08(木) 20:41:31
>>555
WM_SETTEXTメッセージ送ればいい。

557 :デフォルトの名無しさん:2006/06/08(木) 22:06:34
信じちゃ駄目だよ。

558 :デフォルトの名無しさん:2006/06/08(木) 22:07:56
SendMessageがあれば何でもできるよ!
キー入力送ったりとか

559 :デフォルトの名無しさん:2006/06/08(木) 22:34:48
そりゃま、JNIとP/Invokeを使えばたいていのことは出来るだろう。

560 :デフォルトの名無しさん:2006/06/08(木) 22:35:27
>>559
誤爆です。失礼

561 :デフォルトの名無しさん:2006/06/09(金) 11:51:56
標準のスタティックコントロールとかエディットコントロールが内部でどんな動作してるか調べたいんですが、
ソースとか無いのでしょうか?

562 :デフォルトの名無しさん:2006/06/09(金) 11:55:54
>>561
あるよ。

563 :デフォルトの名無しさん:2006/06/09(金) 12:00:59
あるある厨氏ね

564 :デフォルトの名無しさん:2006/06/09(金) 12:04:06
Microsoft は Windows のソースコードを一般開発者には公開していません
 ↑
有るか無いか聞かれてるのに、こんな返事がいいのか?

565 :デフォルトの名無しさん:2006/06/09(金) 12:22:12
例のソースにボタンコントロールのソースは入ってた
他はおぼえてない

566 :デフォルトの名無しさん:2006/06/09(金) 13:12:07
おぼえてない厨氏ね

567 :デフォルトの名無しさん:2006/06/09(金) 13:14:30
厨氏ね厨氏ね

568 :デフォルトの名無しさん:2006/06/09(金) 13:51:18
厨氏ね厨氏ね厨氏ね

569 :デフォルトの名無しさん:2006/06/09(金) 13:56:35
標準コントロールのソースぐらい普通に配布してくれてもいいと思うんだけどなぁ

570 :デフォルトの名無しさん:2006/06/09(金) 14:22:52
勝手な仕様変更が出来なくなるから、却下です。

571 :デフォルトの名無しさん:2006/06/09(金) 14:57:06
wineってどうしてんの

572 :デフォルトの名無しさん:2006/06/09(金) 21:56:25
Exite翻訳で英語版MSDNを翻訳してもらおうとしましたが変な動きをします。
いい翻訳サイトはありませんか?

573 :デフォルトの名無しさん:2006/06/09(金) 22:17:05
擦れ違い

574 :デフォルトの名無しさん:2006/06/09(金) 22:31:02
↓芸無し、40代独身デブニート(素人)童貞、近藤妥の特徴
 
http://booklog.kinokuniya.co.jp/hayase/archives/2006/05/post_50.html
●自分に甘く、他人に厳しい 
●努力せずに成果が欲しい 
●すぐにいらつき、キレる 
●無気力、鬱になりやすい 
●「悪い」と思っても謝らない

575 :デフォルトの名無しさん:2006/06/09(金) 22:40:28
そいつの名前久しぶりに見たけど
どこかのスレに来てるの?

576 :デフォルトの名無しさん:2006/06/10(土) 00:25:29
>>572
結局最後は自分だけが頼り。
いい翻訳サイト探すよりも、いい辞書サイト探すほうがいいと思うよ。

577 :487:2006/06/10(土) 16:52:44
以前タイトルバーのダブルクリックの件で質問した者ですが、色々と仕様を見直した所、
やっぱWM_GETMINMAXINFO拾ってLPARAMで渡されるMINMAXINFOを弄るのではなく、完全に
独自処理をしたくなってしまいますた。

タイトルバーをダブルクリックした時の処理を完全に乗っ取る方法があれば教えて下さい。
orz コノトオリ

578 :デフォルトの名無しさん:2006/06/10(土) 17:01:53
自前のタイトルバー作れ

579 :492:2006/06/10(土) 17:46:30
>>577
SetWindowsHookEx(WH_GETMESSAGE, ...)でローカルフックを仕掛けて、
WM_NCLBUTTONDBLCLKかつHTCAPTIONな場合に
メッセージをWM_NULLへ変更すれば処理を無効化できる。

これを応用してお好きなように。

580 :487:2006/06/10(土) 18:09:56
>>492
フックは初めてなんで研究してみます
何度もスンマソン orz

581 :デフォルトの名無しさん:2006/06/10(土) 18:40:10
>>572
断片的な日本語資料でがんばってwinプログラミングに慣れてくれば、
そのうち英語msdnも読めるようになる。

582 :デフォルトの名無しさん:2006/06/10(土) 19:48:33
童貞が捨てられるAPIがMSDNに載ってないよ

583 :デフォルトの名無しさん:2006/06/10(土) 20:17:27
>>582
socket
gethostbyname
connect
send
recv
shutdown
closesocket

584 :デフォルトの名無しさん:2006/06/10(土) 20:21:17
ウィンドウのクライアントエリアのサイズを指定したサイズの通りにする方法はどうしたらいいのでしょう?
CreateWindow()で(0, 0, 100, 100)とかして正方形にしようとしたんですけど、キャプション部があるので正方形になりません。

585 :デフォルトの名無しさん:2006/06/10(土) 20:27:34
>>584
GetSystemMetricsでタイトルバーや枠のサイズを取得してそれをサイズから引く

586 :デフォルトの名無しさん:2006/06/10(土) 20:28:59
ポップアップウィンドウを作るとか、AdjustWindowRect()を使うとか。
自分も少し前まで必死に悩んでたよ。

587 :デフォルトの名無しさん:2006/06/10(土) 20:46:13
>>572
日本語に翻訳せずにそのまま英語で理解してしまえばおk
いや、マジで。

そんなに難しい文法は使われてないから中学レベルの英語力あれば辞書引きながら読めば読めるはず。

588 :487:2006/06/10(土) 20:53:53
>>584
簡単なのを一つ

1、GetWindowRect()でウィンドウのサイズを求める
2、GetClientRect()でクライアント領域のサイズを求める
3、手順1から手順2の値を引くことで縦横それぞれのクライアント領域「以外」のサイズが求められる
4、自分で調整したいサイズに手順3の結果を加えてMoveWindow();

この方法だとメニューやステータスバーの有無を一々考慮しなくても良いのでオススメ

589 :デフォルトの名無しさん:2006/06/10(土) 21:12:19
MoveWindow()よりもSetWindowPos()のほうがよくない貝?

590 :デフォルトの名無しさん:2006/06/10(土) 23:58:25
>>588
それらをやってくれるのが>>586な訳だが…

591 :487:2006/06/11(日) 00:03:23
ヒント:使い勝手

592 :デフォルトの名無しさん:2006/06/11(日) 00:13:49
AdjustWindowRect
クライアント領域の位置とサイズの指定から、その条件を満たすために必要な、
ウィンドウの位置とサイズを計算します。得られたウィンドウの座標は、通常、
CreateWindow 関数でウィンドウを作成するときに使われます。


意味がわからん・・・

593 :590:2006/06/11(日) 00:19:30
なるほど、頭が悪いだけか

594 :デフォルトの名無しさん:2006/06/11(日) 00:24:23
AdjustWindowRectはメニューが折り返された場合を考慮してくれないけど
>>588では大丈夫なのかな?

595 :デフォルトの名無しさん:2006/06/11(日) 00:28:55
588でも駄目。588方式にAdjustWindowRect()に対する優位性はない。
同じ処理を毎回毎回書かなきゃいけない588方式は糞。
単にAdjustWindowRect()を知らなかっただけでしょ。
今度からはAPI使うようにしような。

596 :デフォルトの名無しさん:2006/06/11(日) 00:29:12
>>594
サイズ変更後に折り返しされる事は十分考えられる。
更に>>588ではCreate後にしか計算出来ないから、使い勝手も問題ありだと思うよ。

597 :デフォルトの名無しさん:2006/06/11(日) 00:41:06
>>595
いくら>>588でも、関数化くらいはするんジャマイカ?(w

598 :デフォルトの名無しさん:2006/06/11(日) 00:47:53
>>596のはAdjustWindowRectは折り返しも考慮してくれる、って意味でいいんだよな?

可能性としてメニュー折り返されることは十分考えられる、と言ってるともとれるんだが。

599 :596:2006/06/11(日) 00:52:33
>>598
言いたい事は>>595と同じつもりだった…。
メニューの折り返しは、どちらもプログラマが考慮する必要がある。

600 :デフォルトの名無しさん:2006/06/11(日) 00:53:43
AdjustWindowRect()も588もメニューの折り返しは考慮されないよ。
588の方法でできない事はAWR()にもできないけど、
588の方法でできる事はAWR()にもできる。
AWR()でできない事は588でもできないけど、
AWR()でできる事は588でもできる。
AWR()の588に対する優位な点は標準APIとして提供されている事。

601 :487:2006/06/11(日) 00:56:06
>>595
>単にAdjustWindowRect()を知らなかっただけでしょ。

知ってて使い勝手悪いから588を書いたワケで、

>同じ処理を毎回毎回書かなきゃいけない588方式は糞。

数行のコードを一つの関数に纏めときゃ済む話なのに?
AdjustWindowRect()使う為引数考えたら588の例の方がマシ
そんなことも理解できない595が糞

>>596
>Create後にしか計算出来ないから、使い勝手も問題ありだと思うよ。

それのどこに問題があるのかわからんが…
CreateWindow前に決め打ちする必然性ってナニ?

hWnd = CreateWindow(); //位置・サイズはCW_USEDEFAULT
588の関数(hWnd);
ShowWindow(hWnd,SW_SHOW);

自分はWindowハンドルだけありゃいつでも使えるので多用してるけどな。
なお折り返しについてはAdjustWindowRect()も事情は一緒。

602 :デフォルトの名無しさん:2006/06/11(日) 01:02:56
>>601
いい加減、ハジの上塗りはやめた方がいいよ?

603 :デフォルトの名無しさん:2006/06/11(日) 01:03:49
おぉ怒っている・・・

つうか使い勝手を言うなら
AdjustWindowRect使う奴も
関数でラップすればいいだけの話なわけだが

604 :デフォルトの名無しさん:2006/06/11(日) 01:06:05
>>603
ラップせずに使えるモノを、何故わざわざラップするのかと(ry

605 :デフォルトの名無しさん:2006/06/11(日) 01:08:27
>>604
>つうか使い勝手を言うなら

606 :デフォルトの名無しさん:2006/06/11(日) 01:08:31
http://kumei.ne.jp/c_lang/sdk/sdk_73.htm
ここに書いてある事は間違い?

>AdjustWindowRect関数はこれからウィンドウを作るときにはつかえても
>すでにできてしまったウィンドウの調整には使えません。

607 :デフォルトの名無しさん:2006/06/11(日) 01:09:24
>>604
書かずに実現できる処理を、何故わざわざ自前で書くのかと(ry

608 :606:2006/06/11(日) 01:10:16
ああ、意味判った
606は忘れてちょ

609 :デフォルトの名無しさん:2006/06/11(日) 01:13:58
588だと、WM_CREATEのタイミングでボタンを中央に生成ってなことが出来ないからな…。
AdjustWindowRectを紹介した上で利点と共に588を紹介ってのなら、まぁ、許せるけど。

1つ気になったんだけど、588を2回やると、1度目で幅がOKで長さがメニュー折り返しで不完全な
状態になって、2回目でメニューの折り返しもOKな状態になりそうに思えるんだけど、気のせい?

610 :デフォルトの名無しさん:2006/06/11(日) 01:14:21
>>606
普通に出来るけどな

611 :デフォルトの名無しさん:2006/06/11(日) 01:21:05
一応補足。
>AdjustWindowRectを紹介した上で利点と共に588を紹介ってのなら、まぁ、許せるけど。
601だけを読んでも588に利点があるとは全く思えないんで、利点と信じてる点を紹介ってことで。

612 :デフォルトの名無しさん:2006/06/11(日) 01:21:44
>1つ気になったんだけど、588を2回やると、1度目で幅がOKで長さがメニュー折り返しで不完全な
>状態になって、2回目でメニューの折り返しもOKな状態になりそうに思えるんだけど、気のせい?

気のせいではないと思われ
ところでメニューの折り返しの処理のやり方知らない…
メニューバーの文字列の横の長さをどうにかして拾ってなんとかすんの?

613 :デフォルトの名無しさん:2006/06/11(日) 01:22:16
AWR()を知ってて588を使うって
どんな気持ち?
        ∩___∩                     ∩___∩
    ♪   | ノ ⌒  ⌒ヽハッ    __ _,, -ー ,,    ハッ   / ⌒  ⌒ 丶|
        /  (●)  (●)  ハッ   (/   "つ`..,:  ハッ (●)  (●) 丶   今、どんな気持ち?
       |     ( _●_) ミ    :/   588  :::::i:.   ミ (_●_ )    |      ねぇ、無知晒されるのって
 ___ 彡     |∪| ミ    :i        ─::!,,    ミ、 |∪|    、彡____どんな気持ち?
 ヽ___       ヽノ、`\     ヽ.....:::::::::  ::::ij(_::●   / ヽノ     ___/ 
       /       /ヽ <   r "     .r ミノ~.    〉 /\    丶
      /      /    ̄   :|::|    ::::| :::i ゚。     ̄♪   \    丶
     /     /    ♪    :|::|    ::::| :::|:            \   丶
     (_ ⌒丶...        :` |    ::::| :::|_:           /⌒_)
      | /ヽ }.          :.,'    ::(  :::}            } ヘ /
        し  )).         ::i      `.-‐"             J´((
          ソ  トントン                             ソ  トントン


614 :デフォルトの名無しさん:2006/06/11(日) 01:37:22
イジメイクナイ

615 :デフォルトの名無しさん:2006/06/11(日) 01:46:07
気になったのでメニューの折り返しについてぐぐったけど、参考になりそうなところが見つからない

616 :デフォルトの名無しさん:2006/06/11(日) 01:48:38
でだ、584よ
結論としては、AdjustWindowRect()を使うようにしろ。
ただ、CreateWindowEx()使う場合にはAdjustWindowRectEx()を
使わなにゃならんから、そこんとこ注意な。

キャプション部が要らない場合はポップアップウィンドウを作るの
がいいと思うぞ。

617 :デフォルトの名無しさん:2006/06/11(日) 01:51:34
>>615
自分も数年前に探したけどなかったよ。。。
その時はメニューの折り返しを考慮した関数を自作したけど、XPのビジュアルスタイルで
破綻して、もう更新してないアプリだったんでそれっきり…。

618 :デフォルトの名無しさん:2006/06/11(日) 01:55:40
メニューの折り返しについては、

1.ウィンドウを作成してからクライアント領域の大きさを取得する。
2.目的のウィンドウの大きさとの差を計算する。
3.差の分だけウィンドウの大きさを変更する。
goto 1.

こんな感じだね。2回ほど繰り返さないといけない。


619 :デフォルトの名無しさん:2006/06/11(日) 02:04:29
>618
588法x2回だな…

620 :デフォルトの名無しさん:2006/06/11(日) 03:34:07
>>577
WM_NCLBUTTONDBLCLK は、DefWindowProc()に渡さなけりゃ無効化できる。
こんなかんじでできるんじゃね

case WM_NCLBUTTONDBLCLK:
if (HTCAPTION == wParam)
{
// ここでタイトルバーをダブルクリックしたときの独自処理
return 0;
}
DefWindowProc();


621 :デフォルトの名無しさん:2006/06/11(日) 03:35:51
最後間違えた
return DefWindowProc();

622 :デフォルトの名無しさん:2006/06/11(日) 05:12:13
>>613 はバカ

>>588 はメリットあるだろ?


623 :デフォルトの名無しさん:2006/06/11(日) 06:11:01
AdjustWindowRect()して
その後心配ならGetClientRectで確認

624 :588:2006/06/11(日) 08:56:46
起きてみたらこれかい i||i(´・ω・` )

>>609
自分は単純に2回繰り返して折り返してまつ。
なおWM_SIZINGでlParam使って同じ事やる場合には2回目のMoveWindowは不要で
1回MoveWindow()したあとDefWindowProc()に渡してやると勝手に直してくれるみたい。
これをやるとWindow枠ドラッグ中にメニューが動的に折り返るようになる。(MoveWindowの第5引数はTRUEで)
#副作用として枠ドラッグ中もWindow内が更新されるけどキニシナイ
自分はこれで十分かと思ってるけどイマイチ自信が無い。他の人のメニュー折り返し部分のコード見たいが。

>>620
579で教えて貰った後でフック無しでもいけるとわかってそれでやってますた。
わざわざマリガトウ。

んじゃ名無しに戻るわ('A`)

625 :デフォルトの名無しさん:2006/06/11(日) 09:07:17
>>622
ないよ。

>>624
1. Adjust〜でサイズ計算
2. 1で計算したサイズでCreate
3. クライアント領域サイズを取得
4. 1の元となるクライアントサイズと3との差を算出
5. SetWindowPosでサイズ変更

626 :デフォルトの名無しさん:2006/06/11(日) 09:13:06
ここまでくるとAdjust〜のメリット無いな

627 :デフォルトの名無しさん:2006/06/11(日) 09:24:29
通常は >625の 1 2 だけ
メニューあり&横幅が狭くて2行になりそうな場合に 3 4 その結果によっては5

628 :デフォルトの名無しさん:2006/06/11(日) 09:30:28
Createしか考慮してないと軽くジャブ

629 :デフォルトの名無しさん:2006/06/11(日) 09:46:06
>628
>616

630 :デフォルトの名無しさん:2006/06/11(日) 09:49:52
マジ突っ込みの上に曲解された orz
ムキにならんでもいいのに

631 :デフォルトの名無しさん:2006/06/11(日) 11:17:35
曲解してるのはどちらかと(ry

632 :デフォルトの名無しさん:2006/06/11(日) 14:01:34
曲解っぷりならば
オレの右に出る者は居ない。

633 :デフォルトの名無しさん:2006/06/11(日) 14:12:56
すげー右曲がり

634 :デフォルトの名無しさん:2006/06/11(日) 14:20:28
スレ違いだからこっちでやれ。
ttp://pc8.2ch.net/test/read.cgi/tech/1148297648/

635 :デフォルトの名無しさん:2006/06/11(日) 21:55:23
http://up2.viploader.net/pic2d/src/viploader2d62026.jpg
こんな感じのタブはどうやって作るんですか?

636 :デフォルトの名無しさん:2006/06/11(日) 23:06:12
>>635
ツールバーがタブに変装している

637 :デフォルトの名無しさん:2006/06/11(日) 23:25:22
質問です。
ttp://www.aaaa.co.jp/FOLDER/
というURLがあったとします。
そのFOLDERフォルダ直下のファイル一覧の取得する方法ってありますか?

638 :デフォルトの名無しさん:2006/06/11(日) 23:29:30
むこうのサーバが一覧かえしてくれるなら

639 :デフォルトの名無しさん:2006/06/11(日) 23:29:37
ない。

640 :デフォルトの名無しさん:2006/06/11(日) 23:31:39
使えねぇなw

641 :デフォルトの名無しさん:2006/06/11(日) 23:37:26
TTPプロトコルなんて聞いたこともないな。

642 :デフォルトの名無しさん:2006/06/11(日) 23:38:26
素直にダウンローダが作りたいと言え

643 :デフォルトの名無しさん:2006/06/12(月) 00:24:18
>>637
Win32APIの話じゃない。
まず、ネットワークについて勉強汁。
その後は、プロトコルについて勉強汁。

644 :デフォルトの名無しさん:2006/06/12(月) 00:58:01
>>643
どのぐらい勉強したら出来ますかね?

645 :デフォルトの名無しさん:2006/06/12(月) 01:34:23
>>644
3日〜3年位

646 :デフォルトの名無しさん:2006/06/12(月) 02:49:17
>>645
すんごい幅広いですね
つまり出来ないやつは3年経っても出来ないってことか・・・

647 :デフォルトの名無しさん:2006/06/12(月) 03:01:17
>>644
数十年勉強してHTTPの仕様に関われるぐらい偉くなれば、あるいは……。

648 :デフォルトの名無しさん:2006/06/12(月) 08:57:36
>>644
まずはRFC2616を理解してから出直してくるがいいお(;^ω^)

649 :デフォルトの名無しさん:2006/06/12(月) 09:50:16
ttpスキームはHTTPなのか?

650 :デフォルトの名無しさん:2006/06/12(月) 12:45:56
アプリの実行中に終了して、再度実行すると前回の状態がそのまま復旧されるようなAPIってないですか?
プロセスのメモリイメージやリソースをそのまま退避・復旧してくれるような物です。

651 :デフォルトの名無しさん:2006/06/12(月) 12:47:03
>>650
ない

652 :デフォルトの名無しさん:2006/06/12(月) 12:47:06
結論だけは教えてやる。
「出来ない」
ああ、俺って親切。

653 :デフォルトの名無しさん:2006/06/12(月) 13:00:03
OSのスリープやレジュームを叩くAPIのことじゃないの?


654 :デフォルトの名無しさん:2006/06/12(月) 18:02:58
サブクラス化された時に、サブクラス化されたウィンドウに送られるメッセージってありますか?

655 :デフォルトの名無しさん:2006/06/12(月) 18:12:51
>>654
ない

656 :デフォルトの名無しさん:2006/06/12(月) 20:47:33
WM_CREATEの時に
ShowWindow(hWnd, SW_MAXIMIZE);を実行してもうまく最大化されません。
ウィンドウは画面いっぱいには表示されているが、最大化にはなっていない。という感じです。
なぜでしょうか?また、これを解決する方法はありますか?

657 :デフォルトの名無しさん:2006/06/12(月) 20:53:09
最大化ボタンを押す

658 :デフォルトの名無しさん:2006/06/12(月) 20:59:14
>>656
CreateWindowする時に最大化状態で作成汁

659 :デフォルトの名無しさん:2006/06/12(月) 21:02:19
出来ればメッセージループ内のWM_CREATEの時に最大化状態にしたいのですが、無理ですか?

660 :デフォルトの名無しさん:2006/06/12(月) 21:04:36
>>659
無理

661 :デフォルトの名無しさん:2006/06/12(月) 21:08:06
>>659
そもそもWM_CREATEはメッセージループ内ではない。

662 :デフォルトの名無しさん:2006/06/12(月) 21:08:54
WM_CREATEの中でShowWindow呼ぶのってキモイ

663 :デフォルトの名無しさん:2006/06/12(月) 21:12:14
了解しました。。。

664 :デフォルトの名無しさん:2006/06/12(月) 22:21:27
>>656
WM_CREATEの中で何か適当なメッセージを投げて(Postして)おいて、
そのメッセージを受け取ったときに最大化したらどうか?

665 :デフォルトの名無しさん:2006/06/12(月) 22:30:14
最大化ボタンを押す

666 :デフォルトの名無しさん:2006/06/12(月) 22:41:30
何の役にも立たない答えを一行で書いてるバカは
面白いと思ってやってるのかね

667 :デフォルトの名無しさん:2006/06/12(月) 23:00:02
役にも立たないと思うのは馬鹿だから

668 :デフォルトの名無しさん:2006/06/13(火) 00:10:26
>>666
質問側も、内容を一考して書き込め。

669 :デフォルトの名無しさん:2006/06/13(火) 11:50:12
WindowのZオーダーを調べる方法を教えてください。

670 :デフォルトの名無しさん:2006/06/13(火) 12:45:15
>>669
GetTopWindow, GetNextWindow

671 :デフォルトの名無しさん:2006/06/13(火) 13:19:13
::LoadLibrary("RICHED32.DLL");
の時はリッチエディットが使えて
::LoadLibrary("RICHED20.DLL"); //大文字、小文字色々試したけど無理でした
の時に使えないってことは2.0以降が使えないってことですか?

どうすれば使えるようになりますかorz

672 :デフォルトの名無しさん:2006/06/13(火) 13:43:10
>>671
リッチエディットコントロールは、そのバージョンによってウィンドウクラス名が違うぞ。
1.0 (Riched32)は"RichEdit"だが、2.0以上ではRICHEDIT_CLASSだ。

673 :デフォルトの名無しさん:2006/06/13(火) 14:01:18
ってことはもしかしてVC++6のリソースエディタじゃ中身を弄らないと作れなかったりします?

と思って中の"RICHEDIT"の部分を"RICHEDIT_CLASS"に変えてもダメでしたorz

674 :デフォルトの名無しさん:2006/06/13(火) 14:10:37
× "RICHEDIT_CLASS"
○ RICHEDIT_CLASS

675 :デフォルトの名無しさん:2006/06/13(火) 14:14:33
>>674
文字列じゃなくて定数にしなきゃいけなかったのかorz

直した後、RICHEDIT_CLASSがない言われたので、リソースファイルにも#include "Richedit.h"
したら成功しました。

>>672,>>674d

676 :デフォルトの名無しさん:2006/06/13(火) 15:20:46
リッチエディットダブルクリックすると
プログラムは終了しないけど、デバッグウィンドウにアクセスバイオレーションがでてて
怖すぎorz


677 :デフォルトの名無しさん:2006/06/13(火) 17:49:40
>>487
もの凄ーく亀レスだけど
WM_SYSCOMMANDのwParamは0xFFF0でAND取らなきゃダメだよ

ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/keyboardaccelerators/keyboardacceleratorreference/keyboardacceleratormessages/wm_syscommand.asp

678 :デフォルトの名無しさん:2006/06/13(火) 18:07:58
try,catch,throw と Template がわかるページとかあったら教えてください。
書籍にあんまり載ってない・・

679 :デフォルトの名無しさん:2006/06/13(火) 18:15:43
API関係なくね?

680 :デフォルトの名無しさん:2006/06/13(火) 18:53:49
初心者はAPIと言語の区別がついてないから困る

681 :デフォルトの名無しさん:2006/06/13(火) 19:50:15
>>678
藻前には理解できないから、今の内に辞めた方がいいよ。

682 :デフォルトの名無しさん:2006/06/13(火) 20:09:02
マウスのホイールが回った時に飛んでくるメッセージってありますか?

683 :デフォルトの名無しさん:2006/06/13(火) 20:11:53
WM_MOUSEWHELL

684 :デフォルトの名無しさん:2006/06/13(火) 21:38:52
GetDiskFreeSpaceEx()APIについての質問です。
このAPIをGUI付きのMFCアプリケーションから呼び出すと
Aドライブ(フロッピー)の容量取得でディスクが入っていなくても
単純にエラーになるだけですが、
GUI無しのWin32アプリケーションから呼び出すと、ディスクの無い
Aドライブをチェックした瞬間に
「ドライブにディスクがありません。ディスクをドライブA:に挿入してください。」
というメッセージボックスが勝手に出てきてしまいます。

これを出さない方法はありますでしょうか?

685 :デフォルトの名無しさん:2006/06/13(火) 21:48:23
>>684
SetErrorMode()

686 :デフォルトの名無しさん:2006/06/13(火) 22:02:05
アプリの先頭で
SetErrorMode(SEM_FAILCRITICALERRORS);
で出来ました。ありがとうございます。
MFCはデフォルトでこの状態なんですかね。なんか恐ろしい。

687 :デフォルトの名無しさん:2006/06/13(火) 22:26:51
は?

688 :デフォルトの名無しさん:2006/06/13(火) 23:57:25
は?

689 :デフォルトの名無しさん:2006/06/14(水) 00:07:45
は?

690 :デフォルトの名無しさん:2006/06/14(水) 00:23:06
は?

691 :デフォルトの名無しさん:2006/06/14(水) 00:47:26
は?

692 :デフォルトの名無しさん:2006/06/14(水) 01:53:38
ウィンドウの小ウィンドウの小ウィンドウに
CreateWindowExでEDITコントロールを貼り付けたんですが、表示されなくて困っています
どうすればよいでしょうか?

693 :デフォルトの名無しさん:2006/06/14(水) 02:49:10
は?

694 :デフォルトの名無しさん:2006/06/14(水) 07:24:11
692 つまりは、孫ウィンドウって事だな。

695 :デフォルトの名無しさん:2006/06/14(水) 08:11:24
>>678
try, catch throw

例外処理
http://pc8.2ch.net/test/read.cgi/tech/1142667446/

template
【初心者歓迎】C/C++室 Ver.28【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1149815331/

696 :デフォルトの名無しさん:2006/06/14(水) 14:01:36
692 つまりは、孫がシャイで困っているという事だな。

697 :デフォルトの名無しさん:2006/06/14(水) 14:02:37
ニートかもしれん

698 :デフォルトの名無しさん:2006/06/14(水) 14:18:12
>>692
それだけの内容だと「ソースがおかしいんじゃね?」としか言えない。
って言うか、ちゃんと表示する様に指示しているか?

699 :デフォルトの名無しさん:2006/06/14(水) 18:25:57
リストボックスがクリックされたときに、フォームのCALLBACK関数で
処理したいのですが、どうすればいいですか?

ListBoxに LBS_NOTIFY を指定しても、 WM_NOTIFY メッセージが
送られてきていないようなのでちょっと困っています。
# ListViewなら普通に処理できそうなんですけどねぇ。。。

環境はMSVC++2005 ExpressEditionにPlatformSDKいれてやっています。

700 :699:2006/06/14(水) 18:50:57
自己解決しました。
WM_COMMAND で捕まえられるんですね。

701 :デフォルトの名無しさん:2006/06/14(水) 21:23:05
便乗、ってことになるのかな?

listboxでLBS_NOTIFY指定して、
WM_COMMANDでENTER捕まえることは可能ですか?
上手くいかない・・・

702 :デフォルトの名無しさん:2006/06/14(水) 23:01:50
質問です。
現在キーボードエミュレートをするツールを開発しているのですが、キー(ファンクション)
の長押しを実装方法が分からないので質問にきました。

PostMessage(hwnd, WM_KEYDOWN, VK_F1,0)
PostMessage(hwnd, WM_KEYUP, VK_F1,0)

現在はこのようにPostMessage()を並べているのですが、これをどのように書き換えれば
F1キーを長押し(リピート)しているように見せかけられるのでしょうか?

UWSCのスクリプト内では私が求めているような挙動は以下のようにして得られています。
KBD(VK_F1,DOWN,30)
KBD(VK_F1,DOWN,30)
KBD(VK_F1,CLICK,40)

どうぞよろしくお願い致します。
-------------------
使用OS: windowsXP
開発環境:Bccコンパイラ
使用言語:C++
-------------------

703 :デフォルトの名無しさん:2006/06/14(水) 23:34:38
昨日思いついたんだけど、windowsヘッダをインクルードするとき

namespace Win{
#include <windows.h>
}

ってやったら便利かな?
インテリセンスでローカル識別子と一緒にAPI関数がズラズラ入っちゃうのを防げる。

704 :デフォルトの名無しさん:2006/06/14(水) 23:50:26
>>702
それでうまく動いてるんだったら、
PostMessage(hwnd, WM_KEYDOWN, VK_F1,0)
PostMessage(hwnd, WM_KEYDOWN, VK_F1,1)
PostMessage(hwnd, WM_KEYDOWN, VK_F1,2)
PostMessage(hwnd, WM_KEYDOWN, VK_F1,3)
PostMessage(hwnd, WM_KEYDOWN, VK_F1,4)
PostMessage(hwnd, WM_KEYUP, VK_F1,0)
で4回リピート。

705 :デフォルトの名無しさん:2006/06/15(木) 00:04:49
>>703
Win::CreateWindowの名前をリンカが解決できると思う?

706 :702:2006/06/15(木) 00:12:00
>>704さんアドバイスありがとうございます。
さっそく試してみましたが長押しだと認識しませんでした。

考えられることは
(1)Postmessage()では長押しは実現できない?
(2)Postmessage()以外にキーボードイベントを模索するべき?
(3)その他

このくらいしか思い浮かばないのですがどなたかアドバイスお
願いできないでしょうか?

707 :デフォルトの名無しさん:2006/06/15(木) 00:21:02
LPARAM の0-15ビットがリピート情報じゃなかったっけ

708 :702:2006/06/15(木) 00:24:29
>>707
はい。その通りです。以下のサイトにそのように書いてあります。
ttp://wisdom.sakura.ne.jp/system/winapi/win32/win30.html

しかし、実際にはどのように引数としてLPARAMの内容を決定すれば
よろしいのでしょうか?


709 :デフォルトの名無しさん:2006/06/15(木) 00:32:25
>>705
解決してるみたいだけど

710 :デフォルトの名無しさん:2006/06/15(木) 00:33:43
keybd_event使うんじゃないの?



711 :デフォルトの名無しさん:2006/06/15(木) 00:33:46
>>708

そのサイトに書いてあるじゃん

>30ビット目は直前のキーの状態を意味します
>直前に発生したキーイベントが離されたものであれば0
>押された状態のものならば1であり、キーを離した時の状態はつねに1になります
>直前のキーストロークが押しつづけて発生したオートリピートの監視に使えます
>最後の31ビット目は、キーが押されたものであれば0、離されたものであれば1になります
>これは、WM_KEYDOWNでは0、WM_KEYUPなら1になっています

LPARAMの 0-15ビット目をなんか適当な数 30ビット目を1 31ビット目を0
にすりゃいいんでないの?試してないけど

712 :デフォルトの名無しさん:2006/06/15(木) 10:46:02
CreateWindowで作るウインドウを、モーダルダイアログのようにしたいんですけど
(親のウインドウにフォーカスいかなくなるような)
どのように実装したらいんでしょうか?
参考になりそうなソースなどご存じでしたら紹介してください。


713 :デフォルトの名無しさん:2006/06/15(木) 10:52:14
モーダルダイアログに貼り付ける

714 :デフォルトの名無しさん:2006/06/15(木) 11:38:21
>712
CreateDialogは駄目なの?

CreateDialogでダイアログ生成(仮:DialogA)
親WindowをEnableWindowで無効

処理が終わったらDialogAをDestroyWindow()で消去前に
EnableWindow()で親Windowを有効に戻す

俺はこうやってるけど参考にならなかったらシカトしてくれ

715 :702:2006/06/15(木) 11:39:31
>>710さん,>>711さんレスありがとうございます。

>>710さん
keybd_event()はwindowsXPではSendInput()推奨になっているようですね。
ただSendInput()のサンプルになりそうなプログラムってネットに転がってな
いようですね。。。ちなみにkeybd_event()でも試してみましたが、動作しませ
んでした。

>711さん
PostMessage(hwnd, WM_KEYDOWN, VK_F1, 0x3B0001);
for(int count=0;count<30;count++){
PostMessage(hwnd, WM_KEYDOWN, VK_F1, 0x203B0001);
}
PostMessage(hwnd, WM_KEYUP, VK_F1, 0);

こんな感じでビットの内容を指定したのですが動作しませんでした。
ちなみに走査コードは実際にF1キーを入力したときに確認した値を
代入しています。

まだ考えられる方法はあるでしょうか?


716 :デフォルトの名無しさん:2006/06/15(木) 12:10:34
>>702
その入力先がゲームとかじゃないだろうな。
DirectInputでキー拾ってるアプリだとキーメッセージ投げても反応しないぞ。

717 :712:2006/06/15(木) 12:20:33
レスありがとうございます。
>713、714
表示したいダイアログが、Layerウインドウでアルファーチャンネルを持ったウインドウなんですが、
可能でしょうか?、childで指定でダイアログに貼り付けて、親のダイアログのVisibleをオフにするとか?
何か情報ありましたらお願いします。


718 :デフォルトの名無しさん:2006/06/15(木) 12:27:28
>>709
ATLやMFC(MFCは使ったことが無いけどたぶん)
では、Win32 APIがグローバルな名前空間にあるという前提の元コードが書かれているので、
問題になる。

719 :デフォルトの名無しさん:2006/06/15(木) 14:07:49
ダイアログが生きているか削除されたか調べる方法ない?

720 :デフォルトの名無しさん:2006/06/15(木) 14:10:34
>>719
ウインドウハンドルに対してIsWindowをかけるとか

721 :719:2006/06/15(木) 14:27:05
>>720
できた!
ありがとう!

722 :デフォルトの名無しさん:2006/06/15(木) 15:45:40
>>705
extern "C"が指定されているから、問題ない。

723 :デフォルトの名無しさん:2006/06/15(木) 18:36:08
>>722
そうなんだ。extern "C"するとnamespaceって完全無視なの?

724 :デフォルトの名無しさん:2006/06/15(木) 18:52:48
アンインストール情報。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
の中をのぞくとDisplayName,UninstallStringの2つしかないアプリがありますが
「プログラムの追加と削除」プログラムは該当アプリのアイコンを何の情報を元に取得しているのでしょうか?

725 :デフォルトの名無しさん:2006/06/15(木) 19:07:39
>>723
そういうこと。
だから関数名は問題ない。

でもWinMainとか些細な問題はまだいくつかあるはず。
実際に703のようなことをやってみたことはないから、
俺はほかにどんな問題があるかも知らない。

726 :デフォルトの名無しさん:2006/06/15(木) 19:15:46
でも意図不明なコードとしてそのコードを見た誰かに叩かれることもありうるので、
やらない方がいいと思うんだが。
つーか、俺なら叩くなw

727 :デフォルトの名無しさん:2006/06/15(木) 23:54:25
普通はGetAsyncKeyStateを使って押されているかどうかを調べると思う。
これだとエミュレートは出来ないと思います。

>>716
>>702を見ると、スクリプトではうまくいくそうだから、
何らかの方法があるはず。

ところで、ファンクションキー以外のキー(例えば A )は上手く行くの?

728 :デフォルトの名無しさん:2006/06/16(金) 09:57:18
>>702
キーボード入力のフェイクは、SendInputでやること。
DirectInputにも対応したかったら、SendInput必須
スキャンコード指定すればDirectInputでもおk。

//keybd_event()でもできないことはないが、ドキュメント化されていないのでお勧めしない

Vistaだと、自分より権限が高いウインドウには、送れないようになるらしいけど。

729 :デフォルトの名無しさん:2006/06/16(金) 10:00:54
>>728
> Vistaだと、自分より権限が高いウインドウには、送れないようになるらしいけど。
HIDフィルタドライバー経由でいけそうな気もしないではないけど…
そこまでやったことないな。

730 :デフォルトの名無しさん:2006/06/16(金) 13:37:59
98って何年前のwindows

731 :デフォルトの名無しさん:2006/06/16(金) 15:16:05
98年前だ

732 :デフォルトの名無しさん:2006/06/16(金) 17:11:59
>>731
そうか!だから「98」だったのか

733 :デフォルトの名無しさん:2006/06/16(金) 17:20:34
来年にはWindows99になるのか

734 :デフォルトの名無しさん:2006/06/16(金) 17:23:53
来年Windows-1が発売します

735 :デフォルトの名無しさん:2006/06/16(金) 17:33:59
>>729
ドライバ辺りはまったくの素人だからわからないのだけれど、
それをするには管理者権限が必要になるんじゃないのかな?

Vistaは、管理者が実行しても、デフォルトでは一般ユーザ権限で実行されるのだけれど。

権限をしっかり考えていなかったコードが、
必要以上の権限を要求したりしていることがよくあるから、
その辺の互換性は大丈夫なのか心配になるけど。

736 :702:2006/06/16(金) 18:09:24
レス遅れました。
>>716さん,>>727さん,>>728さん,>>729さんレスありがとうございます。

>>716さん
入力先はゲーム(DirectX使用)です。DirectInput関数でキーを拾うと反応
しないなんて知りませんでした。他のレスではSendInput()だと拾えるような
ことが書いてありますね。どっちが正しいのか試してみます。

>>727さん
GetAsyncKeyState()ですか。ということは今のところDirectInputとGetAsyncKeyState()
の2種類は物理的に信号を発生させないと無理かもしれないということですね。
ちなみにWM_CHARに関しては入力を正しく受け付けています。

>>728さん
716さん、727さんのおっしゃっている関数でSendInputを拾えるかどうかを確認
してみます。むしろDirectInput()については結論がでているようですが、これも
勉強のうちなので。

>>729
Vistaですか。ますますエミュレートするのが困難になるわけですね。。。

737 :デフォルトの名無しさん:2006/06/16(金) 20:07:25
>>735
ドライバとスクリプト駆動アプリ間の インターフェース DLL を ちゃんと真面目に作れば
スクリプト駆動アプリ はユーザー権限のままでいける

問題は インターフェース DLL をちゃんと作るのが大変っぽいのよね…

738 :デフォルトの名無しさん:2006/06/16(金) 22:39:51
なんだボットか

739 :デフォルトの名無しさん:2006/06/17(土) 02:29:54
D言語ってどこらへんがいいんだ?<時代のさきっちょに乗ったつもり

740 :デフォルトの名無しさん:2006/06/17(土) 02:31:41
>>739
D言語スレがありますので、そちらでどうぞ。

741 :デフォルトの名無しさん:2006/06/17(土) 11:22:01
Win32APIなのかわかんないのですが、他に答えが得られそうなスレが無かったのでここで質問させてください
サーバーソケット(?)へクライアントが接続したかどうかを知る方法はありますでしょうか?
やりたい事は「***がサーバーに接続しました」と表示することです

よろしくお願いします。

742 :デフォルトの名無しさん:2006/06/17(土) 11:39:39
WinSock?

743 :デフォルトの名無しさん:2006/06/17(土) 11:41:56
>>741は他プロセスのコネクションを覗き見たいのだろう。
ドライバでも書いとけ。

744 :デフォルトの名無しさん:2006/06/17(土) 11:45:37
エスパー登場w

745 :デフォルトの名無しさん:2006/06/17(土) 12:01:55
MessageBox(NULL, "***がサーバーに接続しました", "741", MB_OK);

これでいいんじゃない?

746 :デフォルトの名無しさん:2006/06/17(土) 12:22:31
>>742
そうです

>>743
いや、自プロセスの報です

>>745
>>285

747 :デフォルトの名無しさん:2006/06/17(土) 12:32:26
>>741
それが出来ずにいったいどうやってクライアントの接続を処理してるのか気になる

748 :デフォルトの名無しさん:2006/06/17(土) 12:45:33
accept
puts("***がサーバーに接続しました");

749 :デフォルトの名無しさん:2006/06/17(土) 13:02:46
>>747-478
あれ、もしかしてacceptが接続されるまでループしてくれるのかな
おかげ様で解決できそうです、ありがとうございました!

750 :デフォルトの名無しさん:2006/06/17(土) 13:13:56
つまり、やってみもしないで、グダグダと聞き回っているわけだな?

751 :デフォルトの名無しさん:2006/06/17(土) 14:05:13
>>750
accept
recv
まで書いて実行してみたところ、固まって
んで、接続もされてないのにrecvループしてるのが原因なのかと勘違いして
とりあえず答え求めてgoogle検索して出てきたソースで試してみたところ、やっぱし固まって・・・
(シングルスレッドでやってるソースしか出てきてなかったわけじゃないと思いますが、コードの一部だけをコピペして試してたので)

僕の知識では全然acceptに気づかなくて、どうしようもなく行き詰ってたんです
僕の間抜けさ故に不快にさせてしまって申し訳ないです

#追伸
こうして行き詰った理由を文章に書いたことで僕の間違いを再確認できました、
おかげで少しだけ成長できた気がします。ありがとうございました

752 :デフォルトの名無しさん:2006/06/17(土) 17:09:29
こっちはいい迷惑でした。
今後は

マルチスレッドプログラミング相談室 その4
http://pc8.2ch.net/test/read.cgi/tech/1130984585/
ネットワークプログラミング相談室 Port17
http://pc8.2ch.net/test/read.cgi/tech/1148944560/

こちらで質問してください。
2度とこないでください。

753 :デフォルトの名無しさん:2006/06/17(土) 17:15:14
ごめんなさい。でも、APIの質問ができたら来てもいいですか?

754 :デフォルトの名無しさん:2006/06/17(土) 17:16:35
どうぞいらっしゃい。

755 :デフォルトの名無しさん:2006/06/17(土) 19:34:56
パレットのプログラミング、というものを学習中です。
同時発色可能な色数が発色可能な色数より少ない場合に必要なのだ、という事はわかりました。
256色モードだけで必要、と書いてはありますが、しかし、余りに面倒な気がします・・・
こんなプログラミングをどのアプリもやっているのだろうか?
適当に色合わせをしてくれるライブラリとかはないのでしょうか?

756 :デフォルトの名無しさん:2006/06/17(土) 19:38:32
なんでいまさらパレット?
WinXPは互換モード以外256色なんて使えねーよ?

757 :デフォルトの名無しさん:2006/06/17(土) 19:39:43
>>755
特に今必要じゃなかったらあとで必要になった時にまたやればいい。

758 :デフォルトの名無しさん:2006/06/17(土) 19:52:51
gif png アイコンなんかを直接いじりたい場合とかか

759 :デフォルトの名無しさん:2006/06/17(土) 20:03:15
VC6でDLLを作って、VB6で使用しています
で、クラスを登録したいんですが、DEFファイルはどう書いたら良いんでしょうか?
関数と同じではダメなようなのですが・・・VBで使うので、

class __declspec( dllimport ) ClassName

は使えないみたいです。ご教示よろしくお願いします。

760 :デフォルトの名無しさん:2006/06/17(土) 20:05:34
>>755
パレットを使うと、(文字通り)色を調整するのが楽だという理由でパレットカラーの画像フォーマットを採用する場合もある。
#得に典型的な画像フォーマットはxpm。こいつはテキストでもありCソースの一部としても使える。
いずれにしても、このスレ的には忘れていい。
#逆に言えば、これ以上の話はスレ違い。

761 :デフォルトの名無しさん:2006/06/17(土) 20:06:35
DEFファイルなんか必要なのか?
俺なんか一度も使ったこと無いけど。

762 :デフォルトの名無しさん:2006/06/17(土) 20:28:17
>>755
Delphi Graphic Secretsでも読めよ。もう廃刊になってるかもしれんけど
いい本だよ。

763 :デフォルトの名無しさん:2006/06/17(土) 20:29:20
Del厨はDelスレから出てくんな

764 :デフォルトの名無しさん:2006/06/17(土) 20:29:39
エディットコントロールの外枠から最初の文字が表示される
隙間の幅を指定できますか?

765 :デフォルトの名無しさん:2006/06/17(土) 20:31:39
>>764
EM_SETMARGIN

766 :デフォルトの名無しさん:2006/06/17(土) 20:43:36
>>759
VBからクラスの形で使いたければActiveXでないといけない。

767 :デフォルトの名無しさん:2006/06/17(土) 20:54:07
>>764
できました!ありがとうございます

768 :764:2006/06/17(土) 20:57:11
間違いましたorz
>>765
ありがとうございます

769 :デフォルトの名無しさん:2006/06/17(土) 21:00:15
>>766
そうなんですか、関数でラッピングする方向で考えてみます
ありがとうございました

770 :デフォルトの名無しさん:2006/06/17(土) 21:29:57
半透明のポップアップメニューを作りたいのですが、どうやれば作れるのでしょうか?

771 :デフォルトの名無しさん:2006/06/17(土) 22:38:17
ポップアップメニューを半透明にすればいいよ

SetWindowAttributeLayeredなんちゃら



772 :デフォルトの名無しさん:2006/06/17(土) 22:40:56
http://www.microsoft.com/japan/msdn/windows/windows2000/layerwin.asp

773 :デフォルトの名無しさん:2006/06/17(土) 23:34:06
スレッドの終了待ちってどこですればいいですか?
// STOPボタンが押された時
HANDLE handle = Thread->GetHandle();
Thread->Stop();
WaitThread( handle, INFINITE );//WaitForSingleObjectのラップ
CloseHandle( handle );
なんてコードをGUIスレッド側で書いてるのですが、
たまにスレッドの終了に時間がかかってGUIが固まってしまうときがあります。当たり前ですが。
なので、どのようにスレッドの終了を待って、クローズすればいいのか
教えてください。

というか、一々WaitForSingleObjectで待ってなくて、CloseHandleで閉じても
いいのでしょうか?

774 :デフォルトの名無しさん:2006/06/17(土) 23:46:35
>>773
スレッドの終了処理を必要としないならばTerminateThreadとかで強制終了しても構わない。

メモリ解放とか終了処理があるのならば、普通はスレッドのクラスに「割り込みフラグ」を持たせておいて、
スレッドの処理内部で常にその「割り込みフラグ」がtrueに設定されたか監視するようコードを書き、
スレッドを生成した側で「割り込みフラグ」にtrueを設定して終了を通知する。

まあJavaのThreadの仕組みなんだけど参考にするといいと思う。


775 :デフォルトの名無しさん:2006/06/17(土) 23:47:45
スレッドハンドルを使う必要が無ければ、作成直後に閉じてもいいし、スレッド側で閉じてもいい。
後者はMFCでも行われている。

776 :デフォルトの名無しさん:2006/06/17(土) 23:57:33
>>774
スレッドの終了処理を必要としないならばTerminateThreadとかで強制終了しても構わない。

Cのランタイムライブラリを一切使わないおつもりでしょうか?

777 :デフォルトの名無しさん:2006/06/18(日) 00:06:53
>>773
待つなら、MsgWaitFor〜の待機関数かタイマ。
タイマは使えない場合も有り

778 :デフォルトの名無しさん:2006/06/18(日) 00:12:47
ひとつ聞いておきたいんだ。
>>775でも言っているけど、
あるスレッドハンドルに対してCloseHandleすると、
そのスレッドまで終了すると信じていたのは自分だけじゃないよな?

いや、Advanced Windowsにも書かれていたから、結構な人がそう信じているんだろうけど。


779 :774:2006/06/18(日) 00:18:39
>>776
あらっ、なんかやっぱりスレッドの強制終了ってヤバカッたの?
そこら辺までは詳しく知らなかったです。

スレッド処理で、終了時に外部ファイルなどに状態を保存しておかないと、
次の起動時に不都合がでるようなアプリ以外では、
普通にスレッドの強制終了してもよいかとオモテました。

780 :デフォルトの名無しさん:2006/06/18(日) 00:46:44
>>779
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/terminatethread.asp
>If the target thread owns a critical section, the critical section will not be released.
>If the target thread is allocating memory from the heap, the heap lock will not be released.
>If the target thread is executing certain kernel32 calls when it is terminated, the kernel32 state for the thread's process could be inconsistent.
>If the target thread is manipulating the global state of a shared DLL, the state of the DLL could be destroyed, affecting other users of the DLL.

相当危険だな。

781 :デフォルトの名無しさん:2006/06/18(日) 01:25:03
返信ありがおうございます
スレッドが実行中でも、ハンドルを使わなければ閉じて構わないんですね。
この方法使います。

782 :デフォルトの名無しさん:2006/06/18(日) 01:28:20
TerminateThreadは原則禁止と思っておいた方がいい
質問の答えとしては>>777かな

783 :デフォルトの名無しさん:2006/06/18(日) 03:31:20
Win32APIで作られてるソフトでオープンソースなものしってる限り教えて頂けないでしょうか
参考にしたいです

784 :デフォルトの名無しさん:2006/06/18(日) 03:47:45
>>783
【参考】ソースを公開しているWindowsプログラム
http://pc8.2ch.net/test/read.cgi/tech/1115206132/

785 :デフォルトの名無しさん:2006/06/18(日) 10:54:41
>>783
Windowsアプリのプログラム経験ないならSDKのgeneric.c

786 :デフォルトの名無しさん:2006/06/18(日) 23:21:23
自分で作ったビットマップをTBSTYLE_TRANSPARENTとTBSTYLE_FLATスタイルを持たせた
ツールバーのボタンに設定するとき、どのようにしてビットマップの背景を透過させるとよいでしょうか。

787 :デフォルトの名無しさん:2006/06/19(月) 15:18:35
>>786
適当な透過色を設定したImageListを用いて、TB_SETIMAGELISTで
ボタンイメージを設定する。

788 :デフォルトの名無しさん:2006/06/19(月) 16:59:58
うまくいきました。ありがとうございました!

789 :デフォルトの名無しさん:2006/06/19(月) 17:17:31
 ダイアログ上に設置したリストビューコントロールについてどうしても解決できないのですが
 VC++2003.netにてWin32プロジェクトを作成し、ダイアログボックスを設置、そのダイアログボックス上にリストビューコントロールの
Viewをレポート、Edit labelsをtrueにして配置しウィンドウを作成、リストビューにアイテムを適当に挿入してアイテムの内容を編集
しようとして文字を追加入力、又は消去した瞬間にダイアログボックスが落ちてしまいます。ちなみにアプリは無事で、エラーは出ません
たまにアサートが出ますがどうやらメッセージ処理関数内で何かが起こっている模様です
 上記の行為を通常のウィンドウ上に作成したリストビューコントロールで行っても特に問題はありません
 また、WTLを使用して行った場合も同じ状況になります
 ただし、MFCを使用した場合だとウィンドウ、ダイアログ上ともに問題なくラベル編集できます

 現状でMFCを使用しない状態でダイアログボックス上のリストビューコントロールのアイテムのラベル編集は出来ないのでしょうか?

790 :789:2006/06/19(月) 17:28:15
 すいません、たまに出るのはアサートではなくて例外エラーでした

791 :デフォルトの名無しさん:2006/06/19(月) 18:40:39
できないわけがない

792 :デフォルトの名無しさん:2006/06/19(月) 23:17:39
ヌルポじゃないの

793 :デフォルトの名無しさん:2006/06/19(月) 23:20:19
 ↓

794 :デフォルトの名無しさん:2006/06/19(月) 23:32:36
 │↑
 └┘

795 :デフォルトの名無しさん:2006/06/19(月) 23:34:58
>どうやらメッセージ処理関数内で何かが起こっている模様です
そこまで分かってるならステップ実行でもして何処でなにが起こってるのか調べれ

796 :デフォルトの名無しさん:2006/06/20(火) 00:09:12
初心者はデバッグしないから困る

797 :デフォルトの名無しさん:2006/06/20(火) 00:10:28
知識もなしにはじめるから、デバックのやり方とか、それ自体知らない人もいそうな悪寒。
そのうち分かってくるからいいんだけどね

798 :デフォルトの名無しさん:2006/06/20(火) 00:27:43
逆にコードをちょっと見直せばわかるバグを
一生懸命ステップ実行してハマる奴もいるからなぁ

799 :789:2006/06/20(火) 02:23:32
>795
 ステップ実行というか、エラーが出ているのが自作関数とかではなくモジュール内なので、アセンブラになってしまうんですよ
 ダイアログプロシージャーを抜けた先だかで例外で落ちてるらしく
 NULLでのメモリアクセスエラーにしても、何がNULLなのやら……

 やってることと言えば、もう、ただ新規でプロジェクト作成してダイアログ作成前にInitCommonControlsやってWM_INITDIALOG内でカラムとアイテムを挿入してるだけなんですけどね……
 あ〜、ちゃんとcommutil.hインクルードしてcomctl32.libリンクしてます
 もう、ほんと、何で駄目なんだろう……

800 :デフォルトの名無しさん:2006/06/20(火) 02:37:27
>>798
まあ、それは知ってるのにできないから、訓練不足でしょ。
おれが言いたいのは、知らないとどうしようもないってこと。

801 :仕様書無しさん:2006/06/20(火) 04:10:47
プログラムを実行したユーザーにアクセス権が設定されていないファイル
に対して、プログラム中でファイルの所有権を一時的に取得して、ファイル
アクセスした後、所有権を解除(元に戻す)したいんですが、とっかかりが
なくて困ってます。SECURITY_ATTRIBUTE構造体あたりが関与してそうな気も
しますが、どのAPIを使ったらいいんでしょうか?ググってもいまひとつ、
ヒットしなくて。

プログラムを実行したユーザーは、Administrator等、所有権を変更する
権限がある状態と仮定します。プログラムを実行したユーザーに、ファイル
の所有権を変更する権限があるかどうか調べるAPIってのはあります?

802 :デフォルトの名無しさん:2006/06/20(火) 06:59:10
AdjustTokenPrivilegesでいいんでね?

803 :デフォルトの名無しさん:2006/06/20(火) 12:31:39
>>799
エラーが出てるという関数の引数はチェックしたよね?

804 :798:2006/06/20(火) 13:37:17
>803

 エラーが出てるという関数自体はDialogBoxなんですよ、設定しているDialogProc関数の処理はWM_INITDIALOG以外のメッセージは全部FALSE返すようにしていて、初期化処理の中身はリストビューコントロールへのアイテムとカラム追加処理のみです……
 それ以外はプロジェクト作成時からいじっていないんです……あ、InitCommonControlsは入れましたが

 ちなみにカラムの追加は
HWND hWndList = ::GetDlgItem(hDlg, IDC_LIST);
LVCOLUMNLvCol;
::memset(&LvCol, 0, sizeof(LVCOLUMN));
LvCol.mask = LVCF_TEXT | LVCF_FMT;
LvCol.pszText = _T("名前");
LvCol.fmt = LVCFMT_LEFT;
::SendMessage(hWndList, LVM_INSERTCOLUMN, 0, reinterpret_cast<LPARAM>(&LvCol));
 という処理で、アイテムの追加は
LVITEM LvItem;
::memset(&LvItem, 0, sizeof(LVITEM));
LvItem.mask = LVIF_TEXT;
LvItem.iItem = 0;
LvItem.iSubItem = 0;
LvItem.pszText = _T("てすと");
LvItem.state = 0;
LvItem.stateMask = 0;
LvItem.iImage = 0;
LvItem.lParam = 0;
::SendMessage(hWndList, LVM_INSERTITEM, 0L, reinterpret_cast<LPARAM>(&LvItem));
 という処理で行ってます……何がいけないんだ

 ちなみにWTL使用してる方ではリストビューコントロールをサブクラス化してリストビューのメッセージ処理にREFLECT_NOTIFICATIONSを加えたら動きましたorz

805 :801:2006/06/20(火) 14:27:40
>802
即レスどうもです。どうやら、そのようですね。ありがとうございました。

806 :デフォルトの名無しさん:2006/06/20(火) 15:16:52
>>804
拾ったwin32のサンプルでラベル編集してみたけど特に問題なく動いたよ

807 :798:2006/06/20(火) 16:33:54
>806

 わざわざありがとうございます
 あうぅ、何がいけないんだろう
 ……あ、何処で拾ったか教えていただけますか? ソース見てみたいです

808 :デフォルトの名無しさん:2006/06/20(火) 21:07:37
netshコマンドがやっているようにWMIやnetshを間接的に使用せずに
DHCPをEnableに設定するWin32APIをご存知ありませんでしょうか?
PlatformSDKのIPHelperAPIを探しても
renew/releaseなどしか見つかりませんでした。



809 :デフォルトの名無しさん:2006/06/21(水) 01:46:18
WindowsPCが、今インターネットに繋がっているかどうかを、
Win32APIなど使って、確認するには、どういう手段を使えば良いでしょうか?

・NICが装着されてる
・IPアドレスが割り当てられてる
の確認くらいは思いつくけど、その先が...

強引にパケット出して、自動ダイアルアップ環境にあるPCで、
ダイアルアップをさせることは避けたい。
というのがあるので、何か良い方法ないですかね。

できれば、ダイアルアップ・ルータの自動接続もさせたくないです。

で、インターネットに繋がっているときだけ、ちょちょっとデータ転送したい。





810 :デフォルトの名無しさん:2006/06/21(水) 02:21:41
転送先につなげてみりゃいいじゃん。
あるいはping打ってみるとか。

811 :デフォルトの名無しさん:2006/06/21(水) 02:34:56
>>809
・グローバルIPが振られていたらインターネットに
 つながっっていると見なす
・ルータとお話するには
 ・UPnP
 ・機種限定で汚い方法でいいなら設定画面解析など
 ・ルーティングプロトコルで話をする
ごめん、よくわからねえ。

812 :デフォルトの名無しさん:2006/06/21(水) 02:43:05
>>810

ping 打ったらダイアルされてしまいますが?


813 :デフォルトの名無しさん:2006/06/21(水) 02:51:03
「ルータに接続されているが、インターネットには接続されていない」
という状況はPCからは確認のしようがない。
ルータの管轄だからな。
つまり>>810が一番確実な手段。

814 :デフォルトの名無しさん:2006/06/21(水) 03:05:16

>強引にパケット出して、自動ダイアルアップ環境にあるPCで、
>ダイアルアップをさせることは避けたい。
>というのがあるので、何か良い方法ないですかね。

>できれば、ダイアルアップ・ルータの自動接続もさせたくないです。

こんな制限付けたら調べようがないと思うけどなんで?
電話代の問題?


>で、インターネットに繋がっているときだけ、ちょちょっとデータ転送したい。

スパイウェアでも作るつもりですか?



815 :809:2006/06/21(水) 05:27:55
アップデートのお知らせをソフトを起動してるときに自動的に
できるようにしようかと思って。

でも、そのためにダイアルアップ環境で使ってるような場合に、
インターネットに繋いでしまうようなことまではやりたくない。

という事なんだけど、考え出すと、なかなか妙案が浮かばなくて。

例えば、IEなと他のソフトが、今インターネットアクセスしてるかどうか
調べるような方法があるかとか。

確実に常時接続環境だということが判別できる方法はないかとか。


816 :デフォルトの名無しさん:2006/06/21(水) 05:38:06
InternetGetConnectedStateは?

817 :デフォルトの名無しさん:2006/06/21(水) 06:04:16
常識的なソフトなら
自動チェックする、しないをユーザーが選択できる。

818 :デフォルトの名無しさん:2006/06/21(水) 08:43:49
>>817でFAな希ガス
ユーザが自動チェックすることを選んだなら、
ダイアルアップ使っても問題なさそうだし

819 :デフォルトの名無しさん:2006/06/21(水) 11:49:23
質問があります。
モードレスダイアログを作ってそこで別スレッドで長い処理をやらせて内容を表示させています。
処理が終わる前に先に進まれると困るので本体でWaitForSingleObjectで
スレッドが無くなるまで待つようにするとフリーズしてしまいます。
どうやら原因はWaitForSingleObjectで止めるとモードレスまで止まってしまうのでスレッドの内容が
モードレスに反映されないみたいなんだけど、モードレスだけ動かすことはできませんか?

820 :デフォルトの名無しさん:2006/06/21(水) 12:07:20
処理終わるまでWaitForSingleObjectで待つって、スレッド作った意味無いじゃん。

821 :デフォルトの名無しさん:2006/06/21(水) 12:11:16
処理が終わってないなら進ませなければ良いだけの話だろ!

822 :デフォルトの名無しさん:2006/06/21(水) 12:15:50
処理が終わる前に先に進まれると困る方を別スレッドにすべきだったな

823 :デフォルトの名無しさん:2006/06/21(水) 12:29:00
>>819
スレッドの処理が終わったら、スレッドからメッセージを投げればいい。

824 :798:2006/06/21(水) 12:47:04
http://www.dotup.org/uploda/www.dotup.org2539.zip.html

 上記ソースに間違いが無いと思うんですけど……
 何故落ちるのか意味が本当に分かりません。あぅぅ


825 :デフォルトの名無しさん:2006/06/21(水) 12:50:48
>>824
まず何所で落ちるのか調べろ。話はそれからだ。

826 :デフォルトの名無しさん:2006/06/21(水) 12:51:45
>>824=>>804=>>789?
> LvItem.pszText = _T("てすと");

これ、リテラル止めてみたら?

827 :デフォルトの名無しさん:2006/06/21(水) 12:55:53
>>824
試しにコンパイルしてみたが別に落ちないぞ?

828 :デフォルトの名無しさん:2006/06/21(水) 18:38:26
ウィンドウのCaptionを調べる事はできるのでしょうか?
FindWindowに渡すための第二引数を取得したいのですがいい方法が見付かりません。
よろしくお願いします。


829 :デフォルトの名無しさん:2006/06/21(水) 18:43:06
GetWindowText
これくらい自分で調べろバカ

830 :デフォルトの名無しさん:2006/06/21(水) 18:44:20
>>828
FindWindowsはウィンドウクラス名分かってる場合はウィンドウキャプション省略できるぞ。一応。

831 :828:2006/06/21(水) 18:47:17
>>829
バカで申し訳ない。でもおかげ様で思った通りにできそうです。ありがとうございました。
>>830
クラス名はわかっているのですがありがちな名前すぎて話にならないのです。

832 :デフォルトの名無しさん:2006/06/21(水) 18:47:59
>>829
FindWindow に渡すための ウインドウ Caption を調べるために GetWindowText を利用する
なんか矛盾しているようないないような
# GetWindowText できてるなら FindWindow する必要がないようにも見えるが・・・

>>828
FindWindow( class_name_string, NULL) じゃだめなのか?

833 :828:2006/06/21(水) 18:53:06
なんてこった。GetWindowTextってWindowHandleいるんですねorz

834 :デフォルトの名無しさん:2006/06/21(水) 18:53:47
>>789のやつだがWM_COMMANDの所にブレイクポイント設定してデバッグしてみると
ラベル編集のときにwParam=0x01000000がくるときがあるが、
wParamのLOWORDが0になるときってどんなときか知ってる?

835 :デフォルトの名無しさん:2006/06/21(水) 18:54:31
>>833
どうやってウィンドウを特定するつもりだったんだw

836 :デフォルトの名無しさん:2006/06/21(水) 18:54:48
>>831
そこまで探しにくいのならEnumWindowsで調べた方が早いと思う。
実行ファイル名が分かってるならProcess32First/Next回してプロセスID取得>EnumWindowsで帰ってくるハンドルをGetWindowThreadProcessIdに突っ込んでターゲットのプロセスIDと比較とか。



837 :828:2006/06/21(水) 18:57:54
>>835
そうですよね。対象がないですよね('A`)
>>836
なんかよくわからない横文字がたくさん並んでいるみたいですが調べてみます。
ありがとうございました。


838 :デフォルトの名無しさん:2006/06/21(水) 21:57:30
>>789のやつ、ラベル編集するときにListViewが作るエディットコントロールのIDが0で
それがNotifyコード送ってきてた。
さらにラベル編集時にListViewが作ったであろうIDが1のコントロールから
Notifyが送られてくるから、IDOKの処理が行われてしまう。
だからボタンのIDにIDOKを使わなければダイアログは終了しない。

839 :デフォルトの名無しさん:2006/06/22(木) 10:42:47
Microsoft Word上でコピーを行い、そのときのクリップボードの内容をメモリとかファイルに保存して、後でその内容をクリップボードに復元したいんですが、どうしたらいいですか?
テキスト以外にもオブジェクトとかも含まれてるんで困ってます。

840 :デフォルトの名無しさん:2006/06/22(木) 11:04:16
フォーマットを識別して個別対応するしかないんじゃないかな。

841 :789:2006/06/22(木) 11:10:52
>834
>838
 うわっ、うわっ、うわっ、動きましたっ
 ありがとうございます

 うう、Windowsアプリのデバッグ(メッセージ関係)はブレークポイントの掛け処が難しいです……
 もっと精進しまする〜

842 :デフォルトの名無しさん:2006/06/22(木) 11:45:11
>>840
ありがとうございます。
これから各フォーマットについて調べてみます。

843 :デフォルトの名無しさん:2006/06/22(木) 21:27:48
>>839
WordなんかはOLE使っているからOleGetClipboard()で
IDataObjectへのポインタを得ればどんな形式でも平気だと思う。

ところでシェルスクラップオブジェクト(拡張子shs)は、IDataObjectをファイル化したものだと俺は思っているんだ。
つまり何らかの方法でIDataObjectをシェルスクラップとして書き出す方法があるに違いないと思っている。

そうしたら(OLE対応のデータなら)どんな形式でも書き出せるようにできるはずだと思う。

844 :デフォルトの名無しさん:2006/06/23(金) 10:15:23
今までのスレの質問と質問者が納得した答えをブログに
まとめたいのですが構わないでしょうか?




845 :デフォルトの名無しさん:2006/06/23(金) 10:45:20
>>844
是非お願いします

846 :デフォルトの名無しさん:2006/06/23(金) 12:18:44
>>844
わんわわわん わん!
(もちろん、アリフェイトで小銭をかせいじゃだめだよ)

847 :デフォルトの名無しさん:2006/06/23(金) 12:20:02
>>846わん。わわん。
>>846は間違い。アフィリエイトね)

848 :デフォルトの名無しさん:2006/06/23(金) 12:32:29
独自プロトコル(UDP/IPおよびTCP/IP)でデータ通信するWinsock2を使ったアプリケーションを書いていますが、
WinXP SP2でbind()したときにセキュリティの警告ダイアログが表示されます。
このダイアログを、最初から出ないようにする方法はありませんか?
ご存知の方がいらっしゃいましたらご教示ください。

849 :デフォルトの名無しさん:2006/06/23(金) 12:37:32
>>848
ウィルスが勝手にポート開こうとしたときに警告でなかったら意味ないと思わないかね
少なくとも正攻法ではナイ

850 :デフォルトの名無しさん:2006/06/23(金) 12:39:07
だとはおもいましたが、アプリケーションがどっかで証明とか受ければ大丈夫とかないんでしょうかね。

851 :デフォルトの名無しさん:2006/06/23(金) 12:45:41
>>850
ない

852 :デフォルトの名無しさん:2006/06/23(金) 12:59:25
>>846
賢い奴はクリックしないのでは?



853 :848:2006/06/23(金) 13:12:16
そうですか、ありがとうございました。

854 :852:2006/06/23(金) 13:17:47
いや俺としてはそれを原動力にしてほしいがw


855 :デフォルトの名無しさん:2006/06/23(金) 13:37:17
プログラムでXPのFWの設定もやっちまえばいいだけ

856 :844:2006/06/23(金) 13:52:49
再度、すみません
とりあえず作ってみたのですが
http://winapi.seesaa.net/

こんな感じでもかまいませんか?


857 :デフォルトの名無しさん:2006/06/23(金) 14:11:16
こいつぁクールだぜ

858 :デフォルトの名無しさん:2006/06/23(金) 14:24:37
( ゚д゚ )

859 :デフォルトの名無しさん:2006/06/23(金) 14:40:14
こっち見るな

860 :デフォルトの名無しさん:2006/06/23(金) 14:42:03
>>856
スレへのリンクもつけた方がいいんじゃない?

http://pc8.2ch.net/test/read.cgi/tech/1148005509/856
こんな感じでレス番までつけて。

http://pc8.2ch.net/test/read.cgi/tech/1148005509/856-860
質問から回答に至るまでに意義ある論議があったりすれば、この方がいいかも。


861 :844:2006/06/23(金) 14:46:16
>>860
そうしてみます


862 :848:2006/06/23(金) 14:46:22
>>855

なるほど、それはどの辺りの資料を探せばわかりますでしょうか?
ヒントをいただけるとうれしいです。


863 :デフォルトの名無しさん:2006/06/23(金) 15:18:27
>>860
HTML化されている時はどうするの?
http://pc.2ch.net/tech/kako/991/991576947.html#130-150

http://pc.2ch.net/test/read.cgi/tech/991576947/130-150
こんな感じでやるの?




864 :デフォルトの名無しさん:2006/06/23(金) 15:30:02
WriteFileで改行含んだ文字出力したら、改行が「↑」って文字になっちゃうんだけど
改行ってどうするんですか?

865 :デフォルトの名無しさん:2006/06/23(金) 15:32:01
http://pc.2ch.net/tech/kako/991/991576947.dat.gz
があるから >>844 にはそれをすべてHTML化してそれにリンクを
貼ればいいのでわ?

全部できたらアフィも(ry w



866 :デフォルトの名無しさん:2006/06/23(金) 15:39:20
>>864
WriteFileに改行なんて概念は無いよ。
何で表示してるか知らんが、その表示するアプリで改行されるようなデータ書き出せばいいよ。

867 :デフォルトの名無しさん:2006/06/23(金) 15:53:34
\r\n

868 :デフォルトの名無しさん:2006/06/23(金) 15:55:41
>>866
ありがとうございます!

869 :868:2006/06/23(金) 15:58:27
>>867
それですね。普通のテキストエディタで表示できました。

870 :デフォルトの名無しさん:2006/06/23(金) 17:15:12
>>856
乙かれさん。

871 :デフォルトの名無しさん:2006/06/23(金) 21:12:17
エディットコントロールでなにも入力してない状態でスクロールバー
を表示するにはどうしたら良いんでしょうか

872 :デフォルトの名無しさん:2006/06/23(金) 21:41:07
WS_HSCROLL
WS_VSCROLL
ES_AUTOHSCROLL
ES_AUTOVSCROLL

873 :デフォルトの名無しさん:2006/06/23(金) 23:11:11
>>862
ttp://www.microsoft.com/japan/technet/prodtechnol/winxppro/maintain/sp2netwk.mspx#ENHAE
> 1 つまたは複数のポートでリッスンするアプリケーションが管理者によってインストールされる際、
> ユーザーは、アプリケーションがファイアウォール内でポートを開くことを許可するかどうかを示す
> 必要があります。
この辺かな。

874 :デフォルトの名無しさん:2006/06/24(土) 00:29:13
CreateWindowでウィンドウを作った後に、CUIのコンソールスクリーンに
文字を表示させたいのですが、そういうことは可能なのでしょうか。

WORD wAttributes;
CONSOLE_SCREEN_BUFFER_INFO csbi;

hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hStdout, &csbi);
wAttributes = FOREGROUND_GREEN;
SetConsoleTextAttribute(hStdout, wAttributes);
printf("wAttributes = %d\n", wAttributes);

↑こんな感じのコードを入れましたが、うまく動きませんでした。

875 :デフォルトの名無しさん:2006/06/24(土) 01:05:28
>>874
mainなどから始まるプログラムでなければ、
AllocConsoleを呼べばコンソールが現れる。
ただし、printfは無理だと思う。

逆にmainから始まるようにすればprintfも問題なく使える。

876 :デフォルトの名無しさん:2006/06/24(土) 01:13:12
>>874
editbin /SUBSYSTEM:CONSOLE xxxx.exe でいけた記憶があるな。

877 :848:2006/06/24(土) 01:56:42
>> 873

どうもありがとうございます。
まだ詳しく参照していないのですが、管理者権限を持つユーザーが実行している条件下で
INetFwAuthorizedApplicationsを使用することにより、セキュリティの警告なしにポート
を空けて独自プロトコルを動作させることはできそうですね。
しかし、
「アプリケーションは、自分自身を INetFwAuthorizedApplications コレクションに追加
 する前に、ユーザーの同意を得る必要があります。」
とありますので、同意を得ずにポートをあけるのは問題があるでしょうね。

やりたいことは、アプリケーションが同一のセグメント上で複数動作するの
を抑えたいだけなので、できれば警告などは無いのが望ましいのです。
他の方法が無いか探って見ます。

しかし、トロイの木馬がこのインターフェースを使用してポートを空けることができてし
まうということなるのか、よく考えたらおそろしい・・・



878 :デフォルトの名無しさん:2006/06/24(土) 02:08:01
同意画面が出たら無理矢理OKボタン押すようにプログラムすればいい

879 :デフォルトの名無しさん:2006/06/24(土) 07:59:06
>>874
cのライブラリにもstdout設定する必要があると思うけどやった?

最近javaとかc#ばっかで何て関数かわすれた。

880 :デフォルトの名無しさん:2006/06/24(土) 11:09:42
SetWindowRgnでへんてこなwindowを作って遊んでます。

WS_POPUPなwindowを
case WM_NCHITTEST:return HTCAPTION;
見たいな感じで動かせるようになったのですが
上方向の画面外に移動させようとすると画面内に戻されてしまいます。

どうすればいいか教えてください。

881 :デフォルトの名無しさん:2006/06/24(土) 15:52:19
自分でRegister&Createしたウィンドウ内にActiveXコントロールを入れ込む方法はどうやるのでしょうか?

1. RegisterClass() / g_hWndMain = CreateWindow("MyClass")
2. CoCreateInstance(CLSID_..., IID_IOleObject, &pOleObject)
3. pOleObject->SetClientSite(...) : コントロールに親ウィンドウのハンドルg_hWndMainを取得する手段を提供。
4. pOleObject->QueryInterface(IID_IOleInPlaceObject, &pOleinPlaceObject)
5. pOleinPlaceObject->SetObjectRects(...) : コントロールに親ウインドウの矩形と自分(コントロール)に割り当てられた矩形を教える。

ここまででコントロールに窓を表示する為の情報は教えたと思うのですが、表示できません・・・OrZ

ちなみにWebBrowserコントロールだとここまでで窓(非表示)が生成されるので、この後に無理矢理

pOleObject->QueryInterface(IID_IOleWindow, &pOleWindow);
pOleWindow->GetWindow(&g_hWndWBC)
ShowWindow(g_hWndWBC, SW_SHOW);

すればコントロールらしき白い空白が表示されます。(MyClassの背景は暗くしておく)
でもこれだけではこのコントロールはまともに使えないみたい・・・

それに他のActiveXコントロール(VB5CCEで自作)ではなぜかpOleObject->EnumVerbs()しないと窓が生成されないし(でもサイズは0)、g_hWndMainの子ウィンドウにならない・・・

OLEスレはあるんですが、余りに効率が悪いのでSDKレベルでOLEをやっている人はあまり居ないみたいです。

882 :デフォルトの名無しさん:2006/06/24(土) 15:56:40
マルチスレッドで標準CライブラリーとSTLは使えますか?

883 :デフォルトの名無しさん:2006/06/24(土) 15:59:29
>>882
マニュアル調べてMTセーフかどうかいちいち確認しろ。

884 :デフォルトの名無しさん:2006/06/24(土) 17:09:02
>>881
Visual C++ならATL::CAxWindow使えばいいと思うよ。
そうでなければ、これが参考になると思うよ。(ただしこれも結局ATL使っている)
http://www.nitoyon.com/vc/tips/ie_component.htm

885 :デフォルトの名無しさん:2006/06/24(土) 18:28:57
>>875-876 どうもありがとうございます
もう少し色々やってみます
>>879 すみません。よくわからないです

886 :おか:2006/06/25(日) 00:19:00
OS:WindowsXP
OnQueryEndSessionでログオフ/電源を切る/再起動を判別する方法知ってる?、
Win2000ではレジストリで取得できたのに。

887 :デフォルトの名無しさん:2006/06/25(日) 08:17:35


回転させたいときはPlgBlt関数でOK?





888 :デフォルトの名無しさん:2006/06/25(日) 12:48:53
>>885
freopen("CONOUT$", "w", stdout);

889 :デフォルトの名無しさん :2006/06/25(日) 13:52:28
CreateProcessでコマンドプロンプトを起動させ、他のソフトのコマンドラインオプションを
入力する。方法は無いでしょうか?
CreateProcessである必要は無いのですが、EXEの起動はWinExecとこれくらいしか
知らないので、他にもあるならお願いします。

890 :デフォルトの名無しさん:2006/06/25(日) 13:58:29
ShellExec()

891 :デフォルトの名無しさん:2006/06/25(日) 15:21:44
>>889
cmd /c tar -cf hoge.tar hoge0.txt hoge1.txt


892 :874:2006/06/25(日) 15:27:22
>>888
ありがとうございます。
無事printf関数で出力できるようになりました

893 :889:2006/06/25(日) 15:43:51
>>890
>>891
ありがとうございました。いろいろやってみます。


894 :889:2006/06/25(日) 16:06:12
再度すいません。
>>890
>>891
のおかげで出来るようにはなりました。
あつかましいですが、コマンドプロンプトにコマンドラインオプションを入力した
結果を表示って出来るのでしょうか?
例えば(ソフトによって違いますが)「○○処理は完了しました。」などを
CreateWindow("Edit"〜〜とかに反映させるとか、可能ですか?
出来るのであればお願いします。

895 :デフォルトの名無しさん:2006/06/25(日) 16:08:47
コンソールアプリが作りたいの?

896 :デフォルトの名無しさん:2006/06/25(日) 16:08:59
できます

897 :デフォルトの名無しさん:2006/06/25(日) 16:18:18
http://www.geocities.jp/monalipse/c/api/Console.html

898 :889:2006/06/25(日) 17:05:03
色々考えてる内にもうこんなにレスが・・ありがとうございます。
コンソールアプリという訳ではないのですが、結果的にはそれに近いかも知れません。
一応質問の前にConsole関係も調べたのですが、どうやら理解をしていなかった
ようです。リンク先大変参考になります。
>>895
>>896
>>897
どうもありがとうございました。これでなんとかなりそうです。

899 :デフォルトの名無しさん:2006/06/25(日) 23:07:54
1秒間に30コマ
画面をキャプチャできる方法はありますか

900 :デフォルトの名無しさん:2006/06/25(日) 23:13:14
ultravncを使う

901 :デフォルトの名無しさん:2006/06/25(日) 23:33:28
nView Desktop Managerのズームウィンドウはなぜ30fpsで表示できるんですか??

902 :デフォルトの名無しさん:2006/06/26(月) 00:11:46
ソフトウェアでの処理じゃなくてハードでの処理だから。

903 :899,901:2006/06/26(月) 00:12:11
VC2005EEで作りたいです。どうやって30fpsも表示しているのだろう・・

904 :899,901:2006/06/26(月) 00:12:54
>>902
!?
じゃあ、作るのは不可能なんですか・・?

905 :デフォルトの名無しさん:2006/06/26(月) 00:14:33
え?キャプチャしたいんじゃなくて表示したいの?

906 :デフォルトの名無しさん:2006/06/26(月) 00:32:32
君の知性では無理。

907 :デフォルトの名無しさん:2006/06/26(月) 00:46:27
エベレストの山頂行って帰って来るくらいの努力は必要だな。

908 :デフォルトの名無しさん:2006/06/26(月) 03:41:47
高橋名人に、PrtSc→貼り付け→保存を繰り返してもらう。
5コマぐらいはいけるかも。

909 :デフォルトの名無しさん:2006/06/26(月) 06:10:01
NVIDIA SDK
http://developer.nvidia.com/object/sdk_home.html

910 :デフォルトの名無しさん:2006/06/26(月) 08:56:58
>>903
なんでその程度の知識しか無いのにEEなんて持ってるの?
割れ厨ですか?


911 :デフォルトの名無しさん:2006/06/26(月) 09:16:15
>>910
EE = Express Edition
最上位はTeam System

912 :デフォルトの名無しさん:2006/06/26(月) 10:23:33
・パレットを設定して、色を使う。
・配列に色の値を持たせておいて、色を使う。

この2つの違いが分かりません。
同じことをしているのではないかと思うのですが…。

913 :デフォルトの名無しさん:2006/06/26(月) 10:58:52

ちがうよ

LUTとかADCでぐぐってみな


914 :デフォルトの名無しさん:2006/06/26(月) 11:22:56
教えてください。
Editコントロールの右クリックメニューに、独自のコマンドを追加するにはどうしたらいいでしょうか。
WM_INITMENUPOPUPは来ないし、WM_CONTEXTMENUだと一から作ることしかできないし。

915 :デフォルトの名無しさん:2006/06/26(月) 11:50:17
サブクラス化で出来ないかな


916 :449:2006/06/26(月) 12:58:53
> 結果は書いてなかったので試してみます。
下記のようなソースで試した結果、ロックを判定できました。

> while( 1 )
> {
> Sleep( 3000 );
> hDesk = OpenInputDesktop(0, FALSE, 0);
> if( GetUserObjectInformation( hDesk, UOI_FLAGS, &UserObjFlg, sizeof( UserObjFlg ), &WriteByte ) ) {
> puts( "ロック中ではありません。" );
> } else {
> puts( "ロック中です。" );
> }
> }


917 :デフォルトの名無しさん:2006/06/26(月) 20:44:09
>>914
この手のアプリは一から頑張って作ってるに一票

918 :デフォルトの名無しさん:2006/06/26(月) 20:52:46
>>884
ありがとうございます!

BCCだけで何とかするように頑張っている訳ですが、きっと参考になると思います!

しかし何でこの部分「Platform SDK: COM」文書はウヤムヤな事しか書いていないのか・・・

で、一応報告。

まだまだゴソゴソやってるんですが、自作コントロールの場合、

1. RegisterClass() / g_hWndMain = CreateWindow("MyClass")
2. CoCreateInstance(CLSID_..., IID_IOleObject, &pOleObject)
3. pOleObject->EnumVerbs() // 取得したポインタはそのまま捨てる(Release)
4. pOleObject->QueryInterface(IID_IOleWindow, &pOleWindow);
5. pOleWindow->GetWindow(&g_hWndWBC)
6. SetParent(g_hWndCtrl, g_hWndMain); // 無理矢理子ウィンドウに(^^;)
7. ShowWindow(g_hWndWBC, SW_SHOW); // 表示
8. メッセージループ突入

こんなやり方で、一応表示されているように見えます。コントロールに搭載されているボタンに結びつけられたOnClickプロシージャもちゃんと動作しているように見えます。
このコントロールに限りこれで使える事は使えるのかも。

しかし、WebBrowserコントロールにはこのやり方は通用しない・・・WebBrowserはEnumVerbs()してもウィンドウは生成されない。
どのコントロールでも使える正しい方法はどういうものなのだろうか?
というかそもそもEnumVerbs()して何で生成されるかワケがわからない・・・

919 :デフォルトの名無しさん:2006/06/26(月) 21:25:02
>>918
この辺はもう読んでるんですよね。
コンテナには結構 Required (必須) のインタフェイスがありますよ。

http://msdn.microsoft.com/library/default.asp?url=/workshop/components/containers/overview/containers.asp

920 :デフォルトの名無しさん:2006/06/27(火) 01:31:27
ttp://vista.xii.jp/img/vi5133909614.gif
この図のように、キーボードの「A」を打つと、それを別のソフトに「A」「B」「C」「D」という入力を
等時間間隔で送る、というような入力支援ソフトをつくりたいと思っています。
そこで、他のソフトへ入力を送る手段を教えてほしいです。

921 :デフォルトの名無しさん:2006/06/27(火) 07:02:11
SendInput

922 :914:2006/06/27(火) 11:00:14
WM_CONTEXTMENUで一から作るしかなさそうですね。
回答してくれた方、ありがとうございました。

923 :デフォルトの名無しさん:2006/06/27(火) 13:56:15
リッチエディットをCreateWindowで作ってすぐ
SendMessage(hEdit, EM_SETCHARFORMAT, SCF_DEFAULT, (LPARAM)&cfm);
したら入力した文字の2文字目から違うフォントになってしまいますどうしたら良いんでしょうか?

924 :デフォルトの名無しさん:2006/06/27(火) 18:06:00
button(チェックボックス)がチェックされているかを調べる関数を教えて下さい。
宜しくお願いします。

925 :デフォルトの名無しさん:2006/06/27(火) 18:10:58
SendMessage

926 :デフォルトの名無しさん:2006/06/27(火) 18:17:02
>>925
ありがとうございます。
このご恩は忘れません。

927 :923:2006/06/27(火) 18:22:08
自己解決しました

928 :920:2006/06/27(火) 20:12:08
>>921
できました!
ありがとうございました!

929 :920:2006/06/27(火) 23:29:59
SendInputの件ですが、メモ帳には入力を送れたのですが、
MAME32というゲームのエミュレータは無反応です・・・
SetForegroundWindowで送り先のウィンドウをアクティブにし、SendInputで入力する、という
処理ですが、ウィンドウはアクティブになるものの、入力が反映されません。
同じ入力をキーボードから直接行うと反応するのですが・・・
キーボードからの直接入力とソフトからのSendInputによる入力ではどこが違うのでしょうか?

930 :デフォルトの名無しさん:2006/06/27(火) 23:30:53
MAMEはDirectInputでも使ってるんじゃない?

931 :920:2006/06/27(火) 23:51:11
>>930
DirectInputを使っていても、MapVirtualKey()でスキャンコードを取得すれば
大丈夫らしいんですが、それでもできないです(汗)
ttp://printf.jugem.jp/?eid=346

↓送信部はこんなかんじです。(仮想キーコード65は「A」のことです)

case WM_TIMER:
 hWnd_obj = FindWindow( "classMAME32" , NULL );
 input[0].type = INPUT_KEYBOARD;
 input[0].ki.wVk = 65;
 input[0].ki.wScan = MapVirtualKey( 65 , 0 );
 SetForegroundWindow( hWnd_obj );
 Sleep( 30 );
 SendInput( 1 , input , sizeof( INPUT ) );
 return 0;

932 :デフォルトの名無しさん:2006/06/28(水) 01:01:29
自己破産しました

933 :デフォルトの名無しさん:2006/06/28(水) 01:38:34
よそ様のウィンドウのタブコントロールをTabCtrl_SetCurSelで選択している
タブを変えて、その親ウィンドウにタブが変更されたことを示すWM_NOTIFY
をLPARAMにNMHDRへのポインタをセットして送信したいのですが、アドレス
空間が違うためうまくいきません。
解決策、あるいは他の良い代替方法はありますか?

934 :デフォルトの名無しさん:2006/06/28(水) 01:40:17
VirtualAllocExでよそ様のウインドウのアドレス空間にNMHDRの領域を確保して
WriteProcessMemoryでデータを書き込んで
そのポインタを渡してやるとか

935 :デフォルトの名無しさん:2006/06/28(水) 09:55:21
マウスで押された事をエミュレートした方が楽な希ガス

936 :デフォルトの名無しさん:2006/06/28(水) 10:27:33
>>931
キーは押し下げるだけでなく、
上げることもあるのだ。

937 :デフォルトの名無しさん:2006/06/28(水) 10:31:12
>>931
それから、65じゃなくて、'A'としたほうがわかりやすい。
ASCII以外の文字セットを使っているWindowsは、寡黙にして聞かない。

938 :デフォルトの名無しさん:2006/06/28(水) 10:40:30
顧客に納品後にごくたまにrun timeエラーが出るときがあるんだけど、状況を聞いてもエラーを再現出来なくて問題を特定出来なくて困ってる。
で最近しったんだけど、タブブラウザのスレープニールとか、Mozilaとかにはエラーフィードバックエージェントみたいなのがあるみたいなんだけど、
これって、どうやって実装してるんだろうか?、そういうパッケージとかソリューションがあるの?
何か情報持ってたらお願いします。


939 :デフォルトの名無しさん:2006/06/28(水) 10:55:35
ということはプニルはMozilaからソースパクってるのか

940 :デフォルトの名無しさん:2006/06/28(水) 12:41:31
鯖落ちた?

941 :デフォルトの名無しさん:2006/06/28(水) 14:13:31
復活

942 :デフォルトの名無しさん:2006/06/28(水) 16:27:39
>>938
スレープニールもMozillaもどうやってるのか知らんけど、
発生するエラーが特定来てるんなら、そのエラーを
ハンドルすればいいじゃんかよ?
あとは実行ログとかエラーログとか画面キャプチャと付き合わせる。
パッケージは知らん。

943 :デフォルトの名無しさん:2006/06/28(水) 16:51:05
画面キャプチャも送信させちゃうのか。

944 :デフォルトの名無しさん:2006/06/28(水) 18:15:12
IEのsend, recvをhookしようとしてて、APIHook試そうとしてもまったく出来ない
ActiveXでブラウザ部分のコンポーネント使ってるからIE自体の実行部分にsend, recvが見当たらないんだと思うけど

どっかにIEのsend, recvをHookしてるようなサンプルソースありません?

945 :デフォルトの名無しさん:2006/06/28(水) 18:55:22
串使うんじゃないか?

946 :デフォルトの名無しさん:2006/06/28(水) 21:25:00
>937
UNICODE

947 :デフォルトの名無しさん:2006/06/28(水) 21:26:41
リストボックスのアイテム選択したら生成できなくなったんですが
どうやったら新たにアイテムを追加できますか?
教えてください。お願いします。


948 :デフォルトの名無しさん:2006/06/28(水) 21:29:02
ビットマップの幅と高さを得るAPIってありますか?
HBITMAPまたはHDCを使って得るようなやつです

949 :デフォルトの名無しさん:2006/06/28(水) 21:36:47
>>948
GetObject

950 :デフォルトの名無しさん:2006/06/28(水) 21:38:59
>>949
てふd

951 :947:2006/06/28(水) 21:49:53
事故解決しました。
手前で範囲外の配列指定やってました。

952 :デフォルトの名無しさん:2006/06/28(水) 22:45:30

次スレ立てときましたよ。
【Win32API質問箱 Build44】
http://pc8.2ch.net/test/read.cgi/tech/1151501925/

953 :デフォルトの名無しさん:2006/06/28(水) 22:50:15


954 :920:2006/06/28(水) 23:21:08
良くわからないうちにできるようになりました・・・

>>936
後々、その問題にもあたりました。
今は解決しています。
ありがとうございました。
>>937
'A'という表記もありなんですね。
ありがとうございました。

955 :デフォルトの名無しさん:2006/06/29(木) 00:29:06
Win64API

956 :デフォルトの名無しさん:2006/06/29(木) 13:31:01
タスクトレイのアイコンにマウスを乗せると、ツールチップが出ますが、
この文字列をアプリケーションから取得するには何というAPIを使えばできますか?

957 :デフォルトの名無しさん:2006/06/29(木) 14:15:21
GetWindowText

958 :956:2006/06/29(木) 14:44:18
>>957
GetWindowTextは試してみましたが、タスクトレイのアイコンのツールチップの内容ではなく、
そのアプリケーションのタイトルバーらしき文字列しか取得できませんでした。
例えばタスクマネージャを起動すると、タスクトレイには "CPU 使用率 ○%" というツールチップが出ますが、
GetWindowTextで得られるのは "タスクマネージャ"という文字列のみでした。

"CPU 使用率 ○%" を取得する方法って無いものでしょうか。

959 :デフォルトの名無しさん:2006/06/29(木) 15:14:02
>>958
ちゃんと「ツールチップのウィンドウハンドル」を渡しているのか?

960 :デフォルトの名無しさん:2006/06/29(木) 16:06:42
てか、ツールチップのウィンドウハンドルなんて取得できるの?

961 :デフォルトの名無しさん:2006/06/29(木) 17:41:06
>>960
ウィンドウハンドルを取得できないウィンドウなんてあるのか?

962 :デフォルトの名無しさん:2006/06/29(木) 18:32:42
必要なくなって破棄されたウィンドウとか

963 :デフォルトの名無しさん:2006/06/29(木) 18:39:58
実行ファイルのあるフォルダの名前を取得する方法ありますか?

964 :デフォルトの名無しさん:2006/06/29(木) 18:52:07
>>963
argv[0]

965 :デフォルトの名無しさん:2006/06/29(木) 18:52:24
>>962
それは既にウィンドウじゃないだろ。

966 :デフォルトの名無しさん:2006/06/29(木) 18:55:54
GetModuleInstance

967 :デフォルトの名無しさん:2006/06/29(木) 18:57:13
>>963
「実行ファイル」とは何なのか、詳しく説明してもらおうか。

968 :デフォルトの名無しさん:2006/06/29(木) 19:01:51
>>965
>956 >958 でツールチップって言ってたからな。

> この文字列をアプリケーションから取得
いや、吊られちまったのか

969 :デフォルトの名無しさん:2006/06/29(木) 19:11:35
>>964
WinMainからの起動なのでargvが見当たりません。

>>966
ぐぐってみましたけど、これはC++のメソッドですか?
APIなど、Cからでもできる方法が嬉しいです。

>>967
VC++で作成したx86実行バイナリと言えばいいでしょうか。
拡張子.exeを持つファイルです。

970 :デフォルトの名無しさん:2006/06/29(木) 19:20:34
#include <stdlib.h>
__argv[0]



971 :デフォルトの名無しさん:2006/06/29(木) 19:20:43
>>969
スマン間違い
GetModulePath

972 :デフォルトの名無しさん:2006/06/29(木) 19:21:15
GetModuleFileName(NULL, , );

973 :デフォルトの名無しさん:2006/06/29(木) 19:25:38
GetModuleFileName( NULL, path, MAX_PATH )

974 :デフォルトの名無しさん:2006/06/29(木) 19:31:01
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpdllpro/html/_win32_getmodulefilename.asp

975 :デフォルトの名無しさん:2006/06/29(木) 19:37:55
>>970-974
ありがとうございます。
ばっちりいけました。

976 :958:2006/06/29(木) 23:28:04
マウスを乗せると出てくるツールチップ(呼び方違いますか?)の文字列を、マウスを乗せずに取得したいんですよ・・。
そういうAPIって無いんですかね。ググっても全然それらしいのが出てこないっすね。

977 :デフォルトの名無しさん:2006/06/29(木) 23:41:30
>>976
ツールチップが表示されていないときに文字列を取得するのは無理な場合もあると思う。
マウスを乗せて初めて文字列を決定する場合があるから。
文字列が固定されているツールチップなら取得できるかもしれないけど…。

978 :デフォルトの名無しさん:2006/06/29(木) 23:44:07
ツールチップを出すのはアプリケーションだ。
ツールチップが出る前に中身がほしいと思ったら
アプリケーションに働きかけるしかないんじゃないだろうか。
ツールチップが表示された後なら、ウィンドウハンドルを
どうにかして取得すれば後は簡単だと思うが。

目的と手段が逆になってたりしないか?

979 :958:2006/06/30(金) 01:19:14
タスクトレイにアイコンを登録する時点でツールチップの文字列も指定するので、
どこかに常に格納されてていいはずなんですよね。

980 :デフォルトの名無しさん:2006/06/30(金) 03:50:28
>>979
それがその後のホバー時に表示される文字列と同じという
保証はないだろ。

981 :デフォルトの名無しさん:2006/06/30(金) 13:26:13
>>979
タスクトレイのツールチップって、実装としてはNOTIFYICONDATA構造体のszTipだろ?
ウィンドウハンドル取得しても、ウィンドウハンドルとNOTIFYICONDATA構造体を、
内部的にどうやって関連付けてるかなんてわからんし、
ウィンドウハンドルから取得するのは無理だと思うけど。

タスクトレイに登録されている一覧を取得するAPIがあったらできるかもしれんが、わしはしらん。

982 :デフォルトの名無しさん:2006/06/30(金) 13:38:31
Shell_NotifyIcon(SHELL32.dll)にフックしかけとけば?


983 :デフォルトの名無しさん:2006/06/30(金) 14:56:44
CPUの使用率ならパフォーマンスカウンタとかそれ専用のAPIから取れそうな気もするが、
タスクマネージャから情報を取らねばならぬのはなぜ。

984 :デフォルトの名無しさん:2006/06/30(金) 15:05:50
EDITコントロールの最大入力文字数をIDで設定するにはどうしたら
よかったのでしょうか?

985 :デフォルトの名無しさん:2006/06/30(金) 15:18:53
>>984
SendMessage(EM_LIMITTEXT, GetDlgItem(hWndDlg, IDC_EDIT). (WPARAM)999, 0);

986 :デフォルトの名無しさん:2006/06/30(金) 16:10:34
>>985
ありがとぅ、答えてくれて!

987 :デフォルトの名無しさん:2006/06/30(金) 18:13:51
>>983
よくわかんないけどNT系ならNtQuerySystemInformationで得た値をいじる

988 :デフォルトの名無しさん:2006/06/30(金) 18:50:33
>>985
SendDlgItemMessageも忘れないで。

989 :デフォルトの名無しさん:2006/06/30(金) 19:37:53
そんなくそ関数だからマクロだから知らないけど知りません

990 :デフォルトの名無しさん:2006/06/30(金) 19:46:37
そういう場合は
「関数だかマクロだか」
と表現するのですよお嬢様


991 :デフォルトの名無しさん:2006/06/30(金) 19:52:33
>>989
知らないなら是非知ってください。

992 :デフォルトの名無しさん:2006/06/30(金) 19:53:25
>>992
SendDlgItemMessageを使うメリットは?

993 :デフォルトの名無しさん:2006/06/30(金) 20:20:37
>>992
985のようにSendMessageとGetDlgItemを組み合わせるより文字数が少なくてすむ。

994 :デフォルトの名無しさん:2006/06/30(金) 20:22:57
つまりどうでもいいAPIってことだな

995 :デフォルトの名無しさん:2006/06/30(金) 20:30:31
埋め

996 :デフォルトの名無しさん:2006/06/30(金) 20:32:27
>>994
そういうこと。

逆に言えばSendMessageとGetDlgItemで代用できるから、
知らなくても困らないし、知らない人も多いのだろう。

997 :デフォルトの名無しさん:2006/06/30(金) 20:34:28


998 :デフォルトの名無しさん:2006/06/30(金) 20:35:19

次スレ
【Win32API質問箱 Build44】
http://pc8.2ch.net/test/read.cgi/tech/1151501925/


999 :デフォルトの名無しさん:2006/06/30(金) 20:36:00
一時期使ってたけど、ハンドルの方が関数化したときに扱いやすいことに気付いて使うのやめた

1000 :デフォルトの名無しさん:2006/06/30(金) 20:36:19

Win32API質問箱 Build44
http://pc8.2ch.net/test/read.cgi/tech/1151501925/l50

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

238 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)