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

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

Win32API質問箱 Build28

1 :デフォルトの名無しさん:05/02/12 18:08:24
-過去スレ
Build27:http://pc5.2ch.net/test/read.cgi/tech/1106103119/
Build26:http://pc5.2ch.net/test/read.cgi/tech/1104109858/
Build25:http://pc5.2ch.net/test/read.cgi/tech/1101393155/
Build24:http://pc5.2ch.net/test/read.cgi/tech/1098967135/
Build23:http://pc5.2ch.net/test/read.cgi/tech/1095534704/
Build22:http://pc5.2ch.net/test/read.cgi/tech/1092524669/
Build21:http://pc5.2ch.net/test/read.cgi/tech/1090422324/
Build20:http://pc5.2ch.net/test/read.cgi/tech/1088140233/
Build19:http://pc5.2ch.net/test/read.cgi/tech/1084697545/
Build18:http://pc5.2ch.net/test/read.cgi/tech/1081702990/
Build17:http://pc5.2ch.net/test/read.cgi/tech/1077470361/
Build16:http://pc2.2ch.net/test/read.cgi/tech/1073830065/
Build15:http://pc2.2ch.net/test/read.cgi/tech/1069339866/
Build14:http://pc5.2ch.net/tech/kako/1065/10653/1065328397.html
Build13:http://pc5.2ch.net/tech/kako/1059/10595/1059549320.html
Build12:http://pc5.2ch.net/tech/kako/1056/10560/1056033645.html
Build11:http://pc5.2ch.net/tech/kako/1052/10526/1052651750.html
Build10:http://pc5.2ch.net/tech/kako/1047/10478/1047819779.html
Build9:http://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
Build8:http://pc5.2ch.net/tech/kako/1040/10409/1040964626.html
Build7:http://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
Build6:http://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
Build5:http://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
Build4:http://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
Build3:http://pc.2ch.net/tech/kako/1017/10170/1017072275.html
Build2:http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Build1:http://pc.2ch.net/tech/kako/991/991576947.html
(★は「いやーごめんなさい。」に巻き込まれた模様


2 :デフォルトの名無しさん:05/02/12 18:10:03
- MSDN Online
http://www.microsoft.com/japan/msdn/
- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/
- Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
- Google
http://www.google.com/

Win32 API入門
http://wisdom.sakura.ne.jp/system/winapi/
Win32 プログラミング入門
http://www7.plala.or.jp/keny01/windows/win32/
Win32 SDK Programming
http://usr_vogel.at.infoseek.co.jp/Win32SDK/

3 :デフォルトの名無しさん:05/02/12 18:36:17
3

4 :デフォルトの名無しさん:05/02/12 18:39:33
4

5 :デフォルトの名無しさん:05/02/12 18:43:01
>>1


6 :デフォルトの名無しさん:05/02/12 21:05:56


7 :デフォルトの名無しさん:05/02/13 07:32:52
ttp://pc5.2ch.net/test/read.cgi/tech/1106103119/984
>サービスでウインドウを作りたくねえよなぁww

サービスに「デスクトップとの対話をサービスに許可」という
チェック項目が存在する意味を理解できない方ですか?


8 :デフォルトの名無しさん:05/02/13 12:16:07
なるほど!デスクトップとの対話をサービスに許可するのは、
ネットワークサービスのためだったのか!!勉強になりました!!!

9 :デフォルトの名無しさん:05/02/13 12:23:31
前スレ
>>http://pc5.2ch.net/test/read.cgi/tech/1106103119/989

------------------------------------------------------
アンインストール情報は、
HKLM \ Software \ Microsoft \ Windows \ CurrentVersion \ UnInstall \
以下に保存します。
ここに DisplayString、UninstallString をはじめとするいくつかの値を適切に書き込んでおくと、
コンパネの「プログラムの追加と削除」からアンインストールできるようになります。
------------------------------------------------------

自分のメモのあるものです、確認していないので

10 :デフォルトの名無しさん:05/02/13 12:32:00
>>8
氏ね

11 :デフォルトの名無しさん:05/02/13 13:16:54
http://pc5.2ch.net/test/read.cgi/win/1099978949/

12 :前スレ989:05/02/13 13:19:51
>>9
見つかりました。こんなところに保存されていたんですね…。
どうもありがとうございました。

13 :デフォルトの名無しさん:05/02/13 13:24:32
Installshield
http://www.java.com/ja/download/help/regkey_addremove.jsp
http://homepage1.nifty.com/softport/InstallFaq.htm


14 :デフォルトの名無しさん:05/02/13 13:28:06
1000 名前:デフォルトの名無しさん[sage] 投稿日:05/02/13(日) 06:37:30
Win32API質問箱 Build28
http://pc5.2ch.net/test/read.cgi/tech/1108199304/l50


良い1000の取り方だな。乙。

15 :デフォルトの名無しさん:05/02/13 14:44:10
サブクラス化したエディットコントロールでマウスの左クリックした
場所の位置を特定することはできるでしょうか?教えてください

16 :デフォルトの名無しさん:05/02/13 14:50:49
WM_LBUTTONDOWN

17 :デフォルトの名無しさん:05/02/13 14:51:49
よく読めボケ

18 :デフォルトの名無しさん:05/02/13 15:35:33
今ゲームを作っていて、ウィンドウのサイズをフルスクリーン表示は分からないので起動時に最大化で変更できないようにして作ってます。
文字などを表示する際、1024*768として表示させているのですが、この大きさはみんな同じなのでしょうか?
他の人にやって貰うとき小さいディスプレイの人だったら表示とかおかしくなってしまうのですか?

説明が下手ですいません^^;
分かる方教えて下さい。

19 :デフォルトの名無しさん:05/02/13 15:49:35
日本語の勉強先にした方がいいぞ


20 :デフォルトの名無しさん:05/02/13 15:54:20
ファイルからメモリに読み込んだ16×16ピクセルのBMPを並べて
640×480ピクセルのBMPイメージをメモリ上に作成し
それをウインドウに表示させたいんですがうまくいきません、どうしたらいいでしょうか?

以下ソース
#define FIELD_X 40
#define FIELD_Y 30
//変数
static HDC hMemDC_BG;  //作成する640×480イメージ用のDCハンドル
static HDC hMemDC_BG_BLOCK; //メモリに読み込む16×16のBMPのDCハンドル
static HBITMAP hBitmap; //メモリに読み込んだ16×16のBMPのBMPハンドル
static HBITMAP hBitmap_BG; //作成する640×480イメージ用のBMPハンドル
static BITMAP bitmap;
static BITMAP bitmap_BG;

void MakeBG(void)
{
int i;
int j;
for(i=0;i < FIELD_Y;i+=16)
{
for(j=0;j < FIELD_X;j+=16)
{
BitBlt(hMemDC_BG,j,i,bitmap_BG.bmWidth,bitmap_BG.bmHeight,hMemDC_BG_BLOCK,0,0,SRCCOPY);
}
}

}

21 :20続き:05/02/13 15:55:55
//プロシージャ-
case WM_CREATE:

hMemDC_BG = CreateCompatibleDC(NULL);
hMemDC_BG_BLOCK = CreateCompatibleDC(NULL);

hBitmap = LoadImage((HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE),BMPFILE,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
SelectObject(hMemDC_BG_BLOCK,hBitmap);
GetObject(hBitmap,sizeof(BITMAP),&bitmap);

hdc = GetDC(hWnd);
hBitmap_BG = CreateCompatibleBitmap(hdc,640,480);
ReleaseDC(hWnd,hdc);
SelectObject(hMemDC_BG,hBitmap_BG);
GetObject(hBitmap_BG,sizeof(BITMAP),&bitmap_BG);

return 0;

case WM_PAINT:
hdc = BeginPaint(hWnd,&ps);
MakeBG(); //16×16のイメージを並べる関数
BitBlt(hdc,0,0,bitmap.bmWidth,bitmap.bmHeight,hMemDC_BG,0,0,SRCCOPY);
EndPaint(hWnd,&ps);
return 0;
}



22 :デフォルトの名無しさん:05/02/13 15:59:55
誰も実際に実行してみようとは思わないから、上手くいきません
とだけ書いても上手くいかないよ

23 :デフォルトの名無しさん:05/02/13 16:05:06
っていうかMakeBGのループが何回まわるか数えてみろ

24 :デフォルトの名無しさん:05/02/13 16:14:44
パターンブラシで塗りつぶせばいいんでないか?
Win9xだと制限があるからアレだけど。

25 :デフォルトの名無しさん:05/02/13 16:17:48
そうでした、実行結果も書かないと;
実行すると16×16のBMPが一個しか表示されません。

メモリ上に仮想イメージを上記のMake関数みたいなもので作成する方法がわかれば解決すると思うんですが・・・


26 :デフォルトの名無しさん:05/02/13 16:24:34
>>25
俺は>>23では無いが、まず>>23の言うことについて考えるのが良いと思う

27 :デフォルトの名無しさん:05/02/13 16:32:40
WM_PAINTも変だよ。

28 :デフォルトの名無しさん:05/02/13 16:39:42
確かにMake関数イカレてますね;
出直してきます、ありがとうございました

29 :デフォルトの名無しさん:05/02/13 16:58:08
>>18
ディスプレイの大きさなどにもよるし、たとえ同じディスプレイでも画面のプロパティから自由に大きさを変えられる。
GetDeviceCapsのHORZRESとVERTRES

30 :デフォルトの名無しさん:05/02/13 18:02:39
GetDesktopWindow()して、GetClientRect()とか。

31 :デフォルトの名無しさん:05/02/13 19:02:24
画像を半透明にして表示させたいのですが、どうすればいんですか?

32 :デフォルトの名無しさん:05/02/13 19:11:28
>>31
APIスレ的にはWS_EX_LAYERED属性付き枠無しウィンドウに画像を表示させてSetLayeredWindowAttribute()。で、そのウィンドウを別のウィンドウに重ねる。

マジレスするとCreateDIBSectionでビットマップ作成して自前で合成

33 :69式フリーPG ◆hND3Lufios :05/02/13 19:14:28
http://www.codeproject.com/dialog/pellucid.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowfunctions/setlayeredwindowattributes.asp
http://www.sm.rim.or.jp/~shishido/walpha.html

34 :デフォルトの名無しさん:05/02/13 19:28:04
>>31
DirectGraphicsを使う。

35 :デフォルトの名無しさん:05/02/13 20:07:10
GDI+も忘れないでね・・・

36 :デフォルトの名無しさん:05/02/13 21:51:51
>>20
ソースが汚く、分かりにくいかもしれないけど、参考にどうぞ。
ビットマップは、ソースと同じパスに置いて、
そのファイル名に合わせて、マクロを変更してください。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/210.txt

37 :デフォルトの名無しさん:05/02/13 22:29:40
おもいっきり猫でもわかるって書いてるがな

38 :デフォルトの名無しさん:05/02/13 22:56:43
今、RPGの戦闘で時間が溜まると行動できるというシステムを作ってます。
その時間は、SetTimerで時間をためているのですが、それを実行するとCPU使用率が100%になり重くなってしまいます。

他に時間をためれる関数は無いのでしょうか?

39 :デフォルトの名無しさん:05/02/13 23:01:33
>>38
そんな限定的な関数があってたまるか。

40 :デフォルトの名無しさん:05/02/13 23:03:39
次に誰かが行動できるまでの時間を計算してそれをタイマーの引数にすれば隠者ねーの

41 :デフォルトの名無しさん:05/02/13 23:06:29
タイマー用のスレッドをつくって、一定時間ごとのループをさせる。


42 :デフォルトの名無しさん:05/02/13 23:09:27
>>41
タイマーの間隔がおなじなら別スレッドだろうが負荷100%になるんじゃねーの

43 :デフォルトの名無しさん:05/02/13 23:12:12
>36
ありがとうございます

44 :デフォルトの名無しさん:05/02/13 23:19:34
>38
タイマー無限増殖病か?
いずれにしても愚か者

45 :デフォルトの名無しさん:05/02/13 23:29:18
>>42
セットタイマーってことは、メッセージ投げまくってるってことでは?
メッセージが投げられない分スレッドのほうが軽いと思うが

46 :デフォルトの名無しさん:05/02/14 00:08:31
>>36-37
ワロタ


47 :デフォルトの名無しさん:05/02/14 09:42:00
Editボックス内でのカーソルの位置を取得するAPIは
ありますでしょうか?


48 :デフォルトの名無しさん:05/02/14 11:06:19
あります。

49 :デフォルトの名無しさん:05/02/14 11:07:28
ありました。ありがとん

50 :デフォルトの名無しさん:05/02/14 14:56:43
一つ質問があるのですが、
RichEditCtrlは、任意の場所に文字列を挿入するということはできないのでしょうか?

もしできるなら、その際に使用する関数(方法)を教えていただきたいのですが。

宜しくお願いいたします。

51 :デフォルトの名無しさん:05/02/14 15:02:58
>>50
EM_REPLACESEL

52 :デフォルトの名無しさん:05/02/14 17:24:48
漢字変換のポップアップウィンドウを出したい(漢字変換をこちら側で指定したい)んだけど、
そうゆうライブラリある?
たとえば、
functionA(”とうきょう");
と漢字変換させたいひらがなを引数として渡せば、漢字変換される漢字のリストがわかるみたいなもの。

自作のテキストエディタを作りたいんです。

53 :デフォルトの名無しさん:05/02/14 18:01:45
ImmGetConversionList()

54 :デフォルトの名無しさん:05/02/14 18:44:46
LPCTSTRって
LONG ポインタ なんか なんか 文字列の略だと思ったんですが
CとTはなんですか?

55 :デフォルトの名無しさん:05/02/14 18:48:29
typedef const TCHAR FAR *LPCTSTR;

56 :デフォルトの名無しさん:05/02/14 18:53:13
>>54
Cはconst
TはUnicodeビルドだとLPCWSTRになる。


57 :デフォルトの名無しさん:05/02/14 19:04:45
>56
すみません、unicodeビルドというのがよくわからないんですが
TもしくはWは文字コードによって変わるということでしょうか?

58 :デフォルトの名無しさん:05/02/14 19:35:46
>>57
#ifdef UNICODE
typedef CHAR TCHAR;
#define TEXT(s) s
#else
typedef WCHAR TCHAR;
#define TEXT(s) L ## s
#endif
typedef CONST TCHAR FAR *LPCTSTR;
こういう風になっていて、UNICODEを定義してビルドするのがUnicodeビルド。
プログラムで使用する文字列をUnicodeにするかどうか選べる。
さらにAPIも〜Aと〜Wを切り替えるようにできている。(というよりこれのためにTCHARがあるような)

59 :デフォルトの名無しさん:05/02/14 21:19:44
test

60 :デフォルトの名無しさん:05/02/14 21:20:39
test

61 :デフォルトの名無しさん:05/02/14 21:24:16
|  先生! 「WinAPIの設計は明らかに時代遅れ」って主張している人がいるんですが、
 \ WinAPIは本当に時代遅れなんですか? 無駄だから覚えないほうがいいんですか?
     ̄ ̄ ̄ ̄ ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
           ∧_∧ ∩
        ( ´∀`)/
       _ / /   /
      \⊂ノ ̄ ̄ ̄ ̄\
        ||\        \
        ||\|| ̄ ̄ ̄ ̄ ̄||
        || ̄ ̄ ̄ ̄ ̄||
http://www.ziyu.net/~rent/tree/wforum.cgi?id=C_lan&mode=all_read&no=2355&page=10

62 :デフォルトの名無しさん:05/02/14 21:30:01
たとえそれが真実だとしても、代替手段はない。

63 :デフォルトの名無しさん:05/02/14 21:32:35
>>61
その話の本質は、「ふたりはプリキュア〜」でそ。

64 :デフォルトの名無しさん:05/02/14 21:37:37
メモリモデルの設計はwin登場の当時は画期的だったが…。
でも、古いスタイルのメモリ割り当てより優れているし、winアプリ設計には必要な知識だ。全てを知る必要はないが。

65 :デフォルトの名無しさん:05/02/14 21:38:00
十数年前から互換性を保っているのだけが取り柄。

MacやLinuxなんて悲惨だぞ。

66 :デフォルトの名無しさん:05/02/14 21:40:58
From 赤坂玲音
>また、僕が時代遅れであると言うのは Win32 API の設計です。
>Win32 で作られたプログラムや、その開発者が時代遅れと言うわけではないので、この点は誤解しないでください。

>最後に、開発スタイルについて少し。
>個人に対して言えば、どうぞあなたの好きな言語とAPIを使ってくださいという程度です。
>しかし、組織でどの言語と API を使うかを決断するには、好き嫌いの次元ではいけません。
>プロジェクト管理者であれば、好みではなく純粋に生産性、移植性、安全性、目的、チームのレベル、
>教育のし易さなど、様々な観点から採用するプラットフォームを決断する必要があります。

From 齎禍
>確かに、Win32APIは時代遅れ感が滲み出てますね。
>フラグは使い過ぎ、キャストは乱用する、エラー処理は統一されていない・・・
>正直、これを現代風に上手くラップするには、相当な知識と技量が必要だと感じますね。

67 :デフォルトの名無しさん:05/02/14 21:50:06
便利で操作性のよいアプリが作れるなら何でもいい

68 :デフォルトの名無しさん:05/02/14 22:08:07
WinAPIを勉強したからといって、
次世代の何かがでたときに、足かせになるとは思えんのだがな。


69 :デフォルトの名無しさん:05/02/14 22:21:34
BASIC使いがCで躓いたり、C使いがJAVA(C++?)で躓いたりってのはあるっぽいけど
個人的にはWinAPIは覚えた方が良いと思われ(少なくとも、今勉強するなら)

70 :デフォルトの名無しさん:05/02/14 23:26:31
MessengerPlusのポップアップ通知みたいな動きってどうやればいい?
タイマー使ってMoveWindowか?

71 :デフォルトの名無しさん:05/02/15 00:10:53
>>69
それは単に順応能力がない人間の責任であって開発環境の問題ではないと思う。

仕事であろうと趣味であろうとひとつのパラダイムに縛られるのはすごくもったいないとは感じる。
そういう俺はWinAPI派なんだけどな。だってWindowsの標準的なクラスライブラリって無いじゃん。
有っても高価だったりするし。
フリーなライブラリはわりと特定の機能に特化されてたりして今ひとつなんだよな。
強力なクラスライブラリはUnix由来のポータビリティ優先でWindowsっぽさが無くて重かったりとか。

72 :デフォルトの名無しさん:05/02/15 00:22:31
言語などに縛られる必要はない

目的を達成できればいい。

73 :デフォルトの名無しさん:05/02/15 00:34:40
とりあえず、WinFSとかまではWIN32APIはありだと思う
WinFSってちょっとしか調べてないけど、どんなんだろ

74 :デフォルトの名無しさん:05/02/15 00:39:53
SHBrowseForFolder() でフォルダ選択ダイアログを表示できますが
このダイアログの表示位置を指定(例えばデスクトップのセンターに)
する方法はありますか?

75 :デフォルトの名無しさん:05/02/15 01:00:52
>>73
WinFXだよ。
WinFSはファイルシステム。

76 :デフォルトの名無しさん:05/02/15 01:06:27
>>75
う、よく間違える。

77 :デフォルトの名無しさん:05/02/15 01:07:18
WinFSは未実装

78 :デフォルトの名無しさん:05/02/15 01:14:29
WinFSが一番期待してたんだけど
次期Winに魅力が無くなってしもたよ(´・ω・`)

79 :デフォルトの名無しさん:05/02/15 06:41:33
次世代ネタは次世代スレで

80 :デフォルトの名無しさん:05/02/15 07:14:23
>>74
できるよ。

81 :デフォルトの名無しさん:05/02/15 09:34:17
OSは2K、VB6+SP6で指定時間内の間、
インターネットを閲覧出来ないようなプログラムを作ろうと思っています。
ですが、どういう風にすれば「ネットが出来なくなる」かが、分かりません。
VBでは不可能でしょうか?


82 :デフォルトの名無しさん:05/02/15 09:40:28
>>81
ExitWindowsEx(EWX_POWEROFF, 0)

83 :デフォルトの名無しさん:05/02/15 09:47:37
>>81
モデム側で何とかすべきじゃね?
モデムを家電用のタイマーと連動させておくとか。

84 :デフォルトの名無しさん:05/02/15 10:44:33
ケーブルを抜き差しするロボットアームを

85 :81:05/02/15 11:38:29
やっぱしムリですかね?
子供のネットの時間規制かけたいと頼まれたもんで。
家電タイマーとかがついてると「あからさまに怪しい」って疑われるので、
それはパスしたいんですよ。

「夜はトラフィック込んでてつながりにくい〜」と錯覚させるように、
こっそり忍ばせたいので。。。

ルータ越しに繋いでるんでLANボードの動作を停止させるとかでもいいんだけど、
実行中のプロセスだろうから止めれるのかな〜とか。


86 :デフォルトの名無しさん:05/02/15 12:02:06
そんなせこいことせずにきっぱりと親が子供に言い聞かせるべきだな

87 :デフォルトの名無しさん:05/02/15 12:13:49
ポリシー(実体は多分レジストリ)の設定で
インターネット接続の可否って決定できるような気はする。
再起動が必要な可能性はある。
また、めっせーじが「この操作は管理者によって禁止」
とか出ると思う。

あと、ネットワークデバイスを無効にするとか、
ぱっと思いついただけだが、やりようはナンボでもありそう。

88 :デフォルトの名無しさん:05/02/15 12:14:14
pDevMode->dmCopies=100;
hPrinterDC.CreateDC(〜,pDevMode);
StartDoc(hPrintedDC,〜);
hfont=CreateFont(1000,0,〜);
SelectObject(hPrinterDC, hfont);
SetTextColor(hPrinterDC, RGB(255,0,0));
TextOut(hPrinterDC, 0, 0, "インターネットはX時からX時まで");
EndDoc(hPrinterDC);

89 :デフォルトの名無しさん:05/02/15 12:17:55
>>85
>ルータ越しに繋いでるんでLANボードの動作を停止させるとかでもいいんだけど、
なら、デフォルトゲートウェイ消すとか

というか、その手のフィルタリングソフトって探せばいくらでもありそうな希ガス



90 :デフォルトの名無しさん:05/02/15 12:21:26
インターネット設定で、ありえないプロキシを指定するとか。

IEだけ殺せればいいなら、コンパネのインターネット設定で
制御できる項目をいじるのが良い。
全部まとめてならTCP/IPの設定あたりがいいかな。

91 :デフォルトの名無しさん:05/02/15 12:24:28
つーか、そう言うせこいことをやっててばれたら子供に嫌われる悪寒。
寧ろ、きちんと言い聞かせるなりして露骨にモデムの電源落とす方が躾にはなる。
勿論、頭ごなしに禁止するのが一番いかんのだが。

92 :デフォルトの名無しさん:05/02/15 12:27:30
そう言う障害を乗り越えようと色々いじり倒して、将来の技術者が育つんだよ。

93 :デフォルトの名無しさん:05/02/15 12:32:44
WinSock(orIPHelper)での話です。
自分のローカルIPはすぐに調べられたのですが、
グローバルIPはどのようにすれば調べられるのでしょうか?
また、調べられた結果、火壁との兼ね合いはどうなるのでしょう?
宜しくお願いします。

94 :デフォルトの名無しさん:05/02/15 12:34:42
意味不明

95 :デフォルトの名無しさん:05/02/15 12:42:57
>>93
UPnP対応ルータからならとれる、はず。

96 :デフォルトの名無しさん:05/02/15 12:48:36
自室にPCやTV、ゲーム機を与えないほうがいいよ。
引き篭もる動機を与えることになる。

ネットやPCが無かったら、引き篭もりなんか出来ないんだから。

97 :93:05/02/15 12:50:55
ローカルIPアドレスは
char ac[80];
gethostname(ac, sizeof(ac));
gethostbyname(ac);
で調べられるのですが、グローバルIPアドレス(*1)
(ルータのWAN側IPアドレス≠MACアドレス)
はどうやって知ればいいのかが分かりません。
また知ることができたとしてもクライアントが*1でLAN外部から繋げた時
火壁が問答無用でメッセージを排除してしまうものなのでしょうか?

98 :デフォルトの名無しさん:05/02/15 12:57:41
そういう形の接続でのWAN側アドレスは、一般的にはルータの設定画面から知るしかない
HTTPなりtelnetなりでその画面を呼び出して解析汁

最後の文は相変わらず意味不明

99 :デフォルトの名無しさん:05/02/15 13:01:49
サブクラス化したエディットコントロールにn個の要素を持つ配列aを
表示してるのですが、配列aのx番目の要素にフォーカスかキャレットが
来たのことを判別する方法はありますか?教えてください

100 :デフォルトの名無しさん:05/02/15 13:05:14
>>97
だーかーらー、UPnP使わないと取得できないんだってば。
UPnP詳しいことは知らんけど。
それ以外の方法だと、グローバルにそういうサービス立てるか
ルータのWEB設定画面から返された文字列を解析とか
そういう汚い汎用性に欠ける方法しか思いつかん。

101 :デフォルトの名無しさん:05/02/15 13:08:45
グローバルIPアドレスを入力してください
というウィンドウを出す

102 :デフォルトの名無しさん:05/02/15 13:10:38
>>97
OSが管理してない情報はAPIを使っても取得できません

103 :デフォルトの名無しさん:05/02/15 13:43:43
tracertでたどる

104 :81:05/02/15 15:20:15
>>84
当初、NICを無効にするのもアリかなーって思ったんだけど、
それらしきやり方見つからなかったので。。。

>>90
インターネットの設定をレジストリで換えるってのはやってみたんですが、
IEを開いてる状態で、レジストリのほうのプロキシ換えても、
その最初に開いてるIEには反映されないんですよ。

105 :デフォルトの名無しさん:05/02/15 15:26:19
>104
予言しよう
そういう育て方するとガキは引きこもる
うちの弟同じ事やられて切れて引きこもり中

106 :デフォルトの名無しさん:05/02/15 15:36:17
>>104
>インターネットの設定をレジストリで換えるってのはやってみたんですが、
直接レジストリじゃなくて InternetSetOption 関数とか使うべきだろうね。
開いてるIEにまで適用されるかどうかは知らない。

107 :デフォルトの名無しさん:05/02/15 15:38:38
うちの弟 = 自分
だけどな。

108 :デフォルトの名無しさん:05/02/15 15:45:00
>>104
NICを無効にするなら、
INetConnectionのDisconnectとか

↓のAPIでゴソゴソやるとか
SetupDiGetClassDevs
SetupDiEnumDeviceInfo
SetupDiSetClassInstallParams
SetupDiCallClassInstaller

109 :デフォルトの名無しさん:05/02/15 15:46:49
>>104
>IEを開いてる状態で、レジストリのほうのプロキシ換えても、
>その最初に開いてるIEには反映されないんですよ。
設定を変更するスクリプトをSYSTEM権限の
スタートアップサービスとかにすればいいじゃん
というかスレ違い

110 :デフォルトの名無しさん:05/02/15 15:55:59
class thrbase{
protected:
virtual unsigned WINAPI ThreadProc(void);
public:
static unsigned WINAPI ThreadCall(void* p);
};

unsigned WINAPI thrbase::ThreadCall(void* p){
return reinterpret_cast<thrbase*>(p)->ThreadProc();
}
unsigned WINAPI thrbase::ThreadProc(void){
return 0;
}

スレッド関数をメンバ化するために作った静的関数ThreadCallと、その処理内容ThreadProcが↑
そこでこのThreadProcをオーバーライドして使いまわしたいのです。

ThreadProcにvirtualをつけて継承しようとすると、ビルドは問題無く通るものの
実行してみるとUnhandled exceptionが出てうまく動きません。

どうか知恵を授けてぐたさい。

111 :デフォルトの名無しさん:05/02/15 16:01:42
そこだけではわからん

112 :デフォルトの名無しさん:05/02/15 16:01:48
FATAL ERROR: このスレの住人はC++が出来ません。

113 :デフォルトの名無しさん:05/02/15 16:10:03
↓継承先のクラスです。

#include "stdafx.h"
#include "thrbase.h"

class potato : public thrbase{
unsigned WINAPI ThreadProc(void);
};
unsigned WINAPI potato::ThreadProc(void){
MessageBox(0,TEXT("test"),0,MB_OK);
return 0;
}


スレッドはWinMainから_beginthreadexで呼び出しています。
_beginthreadex(0, 0, &potato::ThreadCall, &dwID, 0, &dwID);

114 :111:05/02/15 16:16:16
4番目の引数はそのスレッドオブジェクトのアドレスを渡すんじゃないの?

115 :デフォルトの名無しさん:05/02/15 16:16:51
potatoのインスタンスをどこで渡しているのやら

116 :デフォルトの名無しさん:05/02/15 16:17:01
beginthreadexの。

117 :デフォルトの名無しさん:05/02/15 16:20:40
>>114-116
beginthreadexの方かっ。。。

…と言われてもすぐにわからないへたれなので今からマニュアルと格闘してきます。
ありがとうございます。

118 :デフォルトの名無しさん:05/02/15 17:02:06
リソースファイルってどうやって埋め込むの?

119 :デフォルトの名無しさん:05/02/15 17:05:54
リソースファイルは埋め込まない
リソースファイルに基づいてリソースを埋め込む
何が知りたいかよく分からんが、

HELP hHelp;
hHelp=Google( TEXT("リソーススクリプト") );

120 :デフォルトの名無しさん:05/02/15 17:08:51
埋め込むのは梨花のお仕事

121 :デフォルトの名無しさん:05/02/15 18:04:01
>>113

>beginthreadex(0, 0, &potato::ThreadCall, &dwID, 0, &dwID);

potato::ThreadCallに&がついとる。
(staticな)メンバ関数のアドレスは通常のC関数と同じく&いらんよ

beginthreadex(0, 0, potato::ThreadCall, &dwID, 0, &dwID);
でおk
WinAPIっつーよりC++の基本的問題というか

122 :デフォルトの名無しさん:05/02/15 18:05:06
>>121
ばか

123 :121:05/02/15 18:06:32
って全然おkじゃないや。
>>115で指摘されてるけどインスタンス渡してないし。
C++の基本がわかってない予感が。

124 :デフォルトの名無しさん:05/02/15 19:54:32
VC8からは&が必須になっている希ガス

125 :デフォルトの名無しさん:05/02/15 21:44:20
Outlookのデータ(メールやアドレス帳)に外部アプリケーションからアクセスしようとすると
アクセス確認ダイアログが出てくるため、これを自動で「はい」ボタンを押してくれる
プログラムを作成しているのですが、下記のようなプログラムでうまくいきません。

ボタンを連打するとたまに反応する程度で、ループさせても閉じてくれません。
ほかにもWM_LBUTTONDOWN、WM_LBUTTONUPを使用したりALT+Yを送る等
しましたが、こちらの環境ではうまくいきませんでした。
なお、「いいえ(&N)」、「ヘルプ(&H)」に対しては正常に効きます。

ネットで調べてみたものの、ClickYesというアプリ(?)使用することで解決している人が多いようですが
自分で作成したいと思っているので、どなたか力を貸してもらえないでしょうか?
よろしくお願いします。

Express ClickYes
http://www.contextmagic.com/express-clickyes/

126 :125:05/02/15 21:44:50
ソースです。
Private Sub Click_Yes()
Dim wnd As Long
Dim wndYes As Long

wnd = FindWindow(vbNullString, "Microsoft Outlook")

If wnd <> 0 Then
wndYes = FindWindowEx(wnd, 0, "Button", "はい(&Y)")
End If

SendMessage ByVal wnd, ByVal WM_COMMAND, ByVal (BN_CLICKED * &H10000 + GetDlgCtrlID(wndYes)), wndYes

End sub

Private Sub Command_Click
Call Click_Yes()
End Sub

環境
OS :WinXP Pro
言語:VB6.0
その他:Outlook2000

127 :デフォルトの名無しさん:05/02/15 21:51:39
CreateProcessで作成されるプロセスのメインスレッドに
メモリマップトファイルで共有メモリをつくり、そこにアセンブラのコードを書き込んで、
それを実行させることはできますか?
つまり
・メインスレッドの開始のアドレスを取得し、
・そのアドレスのコードを書き換え、共有メモリのコードにジャンプさせ、
・自分の関数を処理させた後、
・再び開始アドレスに元のコードを戻し、
・そこにジャンプさせる

開始アドレスの取り方とか、そのためのAPIとか、そういうことをやっているページとか、
ヒントをいただけないでしょうか。
よろしくお願いします。


128 :デフォルトの名無しさん:05/02/15 22:08:32
出来ません

129 :デフォルトの名無しさん:05/02/15 23:17:44
それはいやです。

130 :デフォルトの名無しさん:05/02/15 23:17:58
>>125>>127
通報しますた

131 :デフォルトの名無しさん:05/02/15 23:36:53
MSDNに堂々と書いてあるけど?

132 :デフォルトの名無しさん:05/02/16 00:03:20
>>130
理由言ってみ?

133 :デフォルトの名無しさん:05/02/16 00:31:53
>>81
俺ならネット関連のAPIをフックして常に失敗したことにする。
タスクトレイとかから見えなくするのに一工夫いるかもしれない。

134 :デフォルトの名無しさん:05/02/16 00:50:16
>>131
どこでしょうか?

135 :デフォルトの名無しさん:05/02/16 11:57:01
結果報告です。
他プロセスのウィンドウへのSendMessage(パラメータでアドレスlpIntを渡す)
について以下の2パターンを試したところ、1はNG、2はOKでした。

1.プロセス毎メモリ空間(0x04000000〜0x41ffffff)の利用
lpIntLocal = (int *)API.HeapAlloc(ph1, API.HEAP_ZERO_MEMORY, 80);//メモリのアロケート
hMyWnd = API.FindWindow (null, "Test"); //自ウィンドウハンドルの取得
ReturnValue = API.GetWindowThreadProcessId (hMyWnd, &hProc); //自プロセスハンドルの取得
lpInt = (int*)API.MapPtrToProcess(lpIntLocal, hProc); //他プロセス受け渡し可能なアドレスの取得
  ※自プロセス以外を指定してMapPtrToProcessを実行するとエラー発生。

2.メモリマップファイル領域(0x42000000〜0x7fffffff)の利用
hFileMap = API.CreateFileMapping (0xffffffff, 0, API.PAGE_READWRITE, 0, 80, 0);
lpInt = (int*)API.MapViewOfFile (hFileMap, API.FILE_MAP_WRITE, 0, 0, 0);

136 :デフォルトの名無しさん:05/02/16 11:57:46
ここの引用です
ttp://bbs.wince.ne.jp/ch1/mqbbs.cgi?UMODE=BETA&FILE=bbs.log.120


137 :デフォルトの名無しさん:05/02/16 13:33:16
目的のハンドルからWM_GETTEXTで文字は取得できるのですが
EM_GETSELTEXTだと取得できません。なぜでしょうか?

138 :137:05/02/16 13:47:51
解決しました

139 :デフォルトの名無しさん:05/02/16 14:42:12
リッチエディットってエディットコントロールに比べて激烈に読み込み動作遅いんだけどなんで?

140 :デフォルトの名無しさん:05/02/16 15:10:23
テキスト以外の情報も入ってるから

141 :デフォルトの名無しさん:05/02/16 16:46:13
シャットダウンまであと何秒っていうダイアログあるじゃない
あれってどうやってだすの?

142 :デフォルトの名無しさん:05/02/16 16:53:24
ダイアログ

143 :デフォルトの名無しさん:05/02/16 18:03:32
変数x←テキストデータ
変数xの中身をいじらないでエディットコントロールに転送したときに
等間隔(1文字おきとか)に空白入れる方法ありますか?教えてください

144 :デフォルトの名無しさん:05/02/16 20:17:16
エディットコントロールに転送するときに
変数xの中身をいじらないで等間隔(1文字おきとか)に空白入れる方法ありますか?

ってことかな?
変数yを作ってxをコピーしていじれば?

145 :デフォルトの名無しさん:05/02/16 20:21:11
空白入れ・転送用の関数でも作ってローカルな変数で処理するとか?
やってることは>>144と同じようなもんだが。

146 :デフォルトの名無しさん:05/02/16 20:34:37
>>143
なんかフラグをたてれば勝手にやってくれるといいなー
なーんて甘いことは考えてないよな


一文字ごとといっても、半角・全角は気をつけるように。

147 :143:05/02/16 20:46:52
文字間の間隔をフォントの設定で変えれませんか?

148 :デフォルトの名無しさん:05/02/16 20:57:10
強いて言うならSetTextCharacterExtraだろうか。

149 :デフォルトの名無しさん:05/02/16 20:58:28
>>147
GDIを直接呼べばそういうこともできるが、ただのエディトコントロールにはそういう機能はない。
リッチエディットコントロールでならできるかもしれない。IEコンポーネントなら間違いなくできる。

どんどん敷居が上がっていく罠。

150 :デフォルトの名無しさん:05/02/16 21:04:33
もうね、エディットコントロール作っちゃいなさいよ

151 :デフォルトの名無しさん:05/02/16 21:10:17
継承

152 :デフォルトの名無しさん:05/02/16 21:39:14
でもなんだかんだ言ったってスマートなやり方ではないけど、
1番最初に144が言っていた1文字おきに空白を入れる方法が1番楽。
Unicodeを使えば全角・半角を気にする必要も無い。
std::vector<WCHAR>やstd::wostringstreamも便利。

153 :デフォルトの名無しさん:05/02/16 21:42:50
Unicodeでも2文字で一文字表すのなかったっけ?

154 :143:05/02/16 21:43:07
とりあえず>>148でできますた。どうも

155 :デフォルトの名無しさん:05/02/16 21:59:21
>>153
どんなエンコーディングルールでも、「2文字で1文字表す」ってのはまず無いと思う。
2バイトで1文字とか、2ワードで1文字とかならともかく。

156 :デフォルトの名無しさん:05/02/16 22:09:58
サロゲートペアがあるだろ。

157 :デフォルトの名無しさん:05/02/16 22:11:21
>>153
サロゲートのこと?
現在のところ、日本語にサロゲートを使う文字は
存在しなかったと思う・・・。

将来的にはわからんが。

158 :デフォルトの名無しさん:05/02/16 22:14:15
×エディットコントロール
○エジットコントロール

159 :デフォルトの名無しさん:05/02/16 22:18:38
それを突き詰めていくとこうなるわけで
×エディットコントロール
×エジットコントロール
○EditControl

160 :デフォルトの名無しさん:05/02/16 22:19:43
サロゲートではなくて寧ろ結合文字では?
実装がどうなってるのかはしらんが。

161 :デフォルトの名無しさん:05/02/16 22:25:22
>>156
「吉」の上が「土」になってるやつは、UTF-16だとサロゲートペアになるようだけど、
これはD840+DFB7の2ワードで1文字を表しているわけで、別に2文字なわけではない。

162 :デフォルトの名無しさん:05/02/16 23:19:40
WH_GETMESSAGEのフックで取得したメッセージを
ウィンドウプロシージャに渡す前に破棄したいのですが
どうすればいいんでしょうか?

今はメッセージをWM_NULLに書き換えることで対処しています。

163 :デフォルトの名無しさん:05/02/16 23:34:54
>>162
渡さなければいいんじゃないの?

164 :デフォルトの名無しさん:05/02/16 23:38:00
その場でreturnしたらまずい理由でもあるのか?

165 :デフォルトの名無しさん:05/02/16 23:39:20
>>162
CallNextHookEx呼ばすにreturnしとけば?

166 :162:05/02/17 05:19:50
WH_GETMESSAGEの場合は、その場でreturnしても
メッセージは流れてしまいます。
後ろのフックには処理が渡らないので、Spy++からは
見えなくなりますが。

167 :デフォルトの名無しさん:05/02/17 05:46:04
フックで対象ウィンドウのプロセスにDLL突っ込んでそこからサブクラス化、とか。

168 :デフォルトの名無しさん:05/02/17 07:18:15
既に別の目的でサブクラス化はしているのですが、そのアプリケーションでは
目的のメッセージ(WM_SYSKEYDOWN)は元々ウィンドウプロシージャには
渡さずにメッセージループ内で処理しているようです。

なので、PeekMessageの段階でキューからそのメッセージだけを直接的に
削除する手段はないかと探していたのですが、どうもWM_NULLに置き換える
という方法が一般的なようです。

以下、CodoGuruのWM_NULLの説明より
WM_NULL also is used to filter messages in the WH_GETMESSAGE hook. Returning 0 from a hook does not prevent you from processing a message. Replacing a message with WM_NULL will filter the message properly.

169 :デフォルトの名無しさん:05/02/17 09:34:56
教えてください。
msecのウエイトってどうやってやればいいんですか?
該当するAPIってあるんですか?

170 :デフォルトの名無しさん:05/02/17 09:40:15
>>169
元スレに断らずに移動するような香具師には教える気はありません。
つーか、MSDN位読めや。

171 :デフォルトの名無しさん:05/02/17 09:47:28
>>170
それはスイマセンでした。
MSDN読んでも分からないので教えて下さい。

172 :デフォルトの名無しさん:05/02/17 10:04:12
読んでも分からないやつに教えても無駄だと思われ

どこを読んでいいか分からないなら別だろうけどな

173 :デフォルトの名無しさん:05/02/17 10:13:08
SetTimerを使えばいいんですかねぇ〜?
マイコン関連だとウエイト関数が用意されているんで、使い方が
良く分からないんです。

174 :デフォルトの名無しさん:05/02/17 12:17:14
わりと最近同じような質問見たけどな。
とりあえずウェイトしたい時間と要求する精度をはっきりさせれ。


175 :デフォルトの名無しさん:05/02/17 12:20:35
それほど精度を問わないなら既に>170に答えがある罠。

176 :デフォルトの名無しさん:05/02/17 12:34:07
>>174
目的は、_outp()を使ってパラレルポートから通信用のパルス信号を出力したいんですが、
パルス幅を作る為にウエイトしたいんです。パルスは"L"が4.7us、"H"が4.0usです。
パルスの出力方法として、具体的に他の方法があるのでしたら教えて下さい。


177 :デフォルトの名無しさん:05/02/17 12:39:28
どこがmsecなのかと小一時間(以下略

で、
>パルスは"L"が4.7us、"H"が4.0usです。
ってどこがどうパルスなのかと小一時間(以下略

つーか素直にこっちに行け。
制御系なら俺に聞いてもいいぜ(6)
http://pc5.2ch.net/test/read.cgi/tech/1099574832/


178 :デフォルトの名無しさん:05/02/17 12:49:58
Windowsアプリからそんなに正確に出せるか甚だ疑問だな。
ミリ秒だって不安なのに・・・

179 :デフォルトの名無しさん:05/02/17 12:58:47
Sleep(0)でぶん回してパフォーマンスカウンタで経過時間確認するしか思いつかん

180 :デフォルトの名無しさん:05/02/17 17:23:25
>>179


181 :デフォルトの名無しさん:05/02/17 17:27:52
パフォーマンスカウンタがずれる場合があるからなぁ。

182 :デフォルトの名無しさん:05/02/17 18:01:24
http://www.linux.or.jp/JF/JFdocs/IO-Port-Programming/high-resolution.html#AEN160
>ポートアドレス 0-0x3ff の範囲にある大抵のポートへの I/O 命令は
>実際のところほぼ正確に 1 マイクロ秒かかります。だから例えば
>パラレルポートを直接扱っている場合なら、ディレイを作るためには
>そのポートに対して inb() をいくつか追加するだけでいいわけです。

183 :デフォルトの名無しさん:05/02/17 18:01:52
パフォーマンスカウンタがずれたのではなく、
ユーザの計時関数呼び出しの間隔がずれただけではないか?
そもそもどうやってCPUのカウンタがずれたと確認するのかと小一時間

184 :デフォルトの名無しさん:05/02/17 18:04:38
どうやって、って他のカウンタも併用するに決まってるじゃん。
http://crystalmark.info/special/clock.html

185 :デフォルトの名無しさん:05/02/17 18:18:38
>>184
おいおい・・・、相当に痛いな。ワロタ

186 :デフォルトの名無しさん:05/02/17 18:25:05
・・・アホ過ぎる。文系臭漂いまくりだな。
己自身に絶対価値を付与するあたりが、まるで朝日新聞のようだ。

187 :デフォルトの名無しさん:05/02/17 18:29:10
98年頃のMSJにus単位の正確なウェイトを実現する方法が載ってたな。
あの雑誌は凄く面白かったから、今でも全巻欲しいと思ってる。
英語版ならWebでも読めるが。

っていうか、その精度のウェイトを求めるなら、間にPICとかを挟んで
そっちに制御させるべき。

188 :デフォルトの名無しさん:05/02/17 18:34:09
<vector>インクルードしたらエラーでるんだけど何で?

189 :デフォルトの名無しさん:05/02/17 18:44:33
>>188
スレ違い。
VCスレででも聞け。
まぁ恐らくはCでコンパイルしようとしているか警告が出ただけじゃないかとは思うのだが。

190 :デフォルトの名無しさん:05/02/17 20:20:35
GetGlyphOutlineで文字"列"を描画しようとしているのですが、
GetGlyphOutlineW(Unicode)をGGO_GRAY8_BITMAPでコールしたとき、ホワイトスペース系の
文字はGLYPHMETRICSのgmBlackBoxXおよびgmBlackBoxYに実際の幅が入りません。
ですからスペースだけは別にGetTextExtentPoint32で幅を取りにゆく方法もありますが、
本当にそうやって幅を取得すべき文字は半角/全角スペースだけでよいのか、わかりません。
すばらしい解決策がありましたら、ご享受願います。
あ、gmCellIncXでいいのか、事故解決しました。スマソ。

191 :デフォルトの名無しさん:05/02/17 22:03:27
>>190
自己解決してるようだが補足しておくと、gmBlackBoxXとgmBlackBoxYは
文字の大きさじゃないぞ。
文字を表すピクセルを囲む最小限の矩形の大きさだ。

だからスペースのようにピクセルが存在しないものは0になる。

文字送りはスペースに限らずgmCellIncXとgmCellIncYで行う。

192 :デフォルトの名無しさん:05/02/17 22:10:42
BlackBoxで文字進めてたら、「---」が直線になっちゃうわな。

193 :190:05/02/17 22:59:00
>>191-192
疑問が解消して、スッキリしました。どうもすみません。

194 :74:05/02/18 01:24:31
>>80
いろいろ悩んでみたんですが、どうも自己解決できません。
小細工するのでしょうか?厨でスマソ

195 :デフォルトの名無しさん:05/02/18 01:29:07
>>194
80じゃないし想像ですまんが
コールバック関数使ってBFFM_INITIALIZEDのときにMoveWindowで動かしてやればいいと思う

196 :sage:05/02/18 11:17:02
WindowsXPで、

SystemParametersInfo(SPI_SETNonClientMetrics 0,
&NonClientMetrics, SPIF_UPDATEINIFILE or SPIF_SENDWININICHANGE );

とすると、タイトルバーの縦サイズがWindows2000等よりも大きい為に、
タスクトレイのアイコンが勝手に大きくなってしまいます。

WindowsXPのタイトルバー縦サイズ・・・25
Windows2000のタイトルバー縦サイズ・・・18

SystemParametersInfoを設定しても、アイコンが大きくならないようにする方法を
ご存知でしたら教えて頂けないでしょうか。
よろしくお願いいたします。

197 :デフォルトの名無しさん:05/02/18 17:08:37
win32APIをつかったプログラムに自作のクラスを使いたいんですが
どうしたらいいでしょうか?
構造体とかC++だと使えないからPOINTとか使えないと思うんですが
WinMainとかプロシージャ-とかはそのまま使えますか?

198 :デフォルトの名無しさん:05/02/18 17:12:10
??わけわかめ

199 :デフォルトの名無しさん:05/02/18 17:19:33
>>197
C++でも構造体は使える。
それどころかstructとclassの違いはデフォルトでpublicかprivateか、それだけ。

200 :デフォルトの名無しさん:05/02/18 17:52:48
structって、継承できたっけ?

201 :デフォルトの名無しさん:05/02/18 18:23:08
MFCとか、class CPoint : public tagPOINT{...};
なんてことを平気でやってるな。

202 :デフォルトの名無しさん:05/02/18 18:23:55
どうも何か勘違いしていたようなんで出直してきます;

203 :デフォルトの名無しさん:05/02/18 19:06:58
>>201
何かまずいの?

204 :デフォルトの名無しさん:05/02/18 19:20:00
>>203
201 は 200 へのレスだろ

205 :デフォルトの名無しさん:05/02/18 20:37:20
MIDIの再生をmidiOutShortMsgで行う際に、演奏する楽器を選択出来るようにしたいのですが、
楽器の名前一覧を取得するAPIはありますか?
関係しそうなAPIはmidiOutGetDevCapsしか見つかりませんでした。
http://www.microsoft.com/japan/msdn/library/ja/jpmltimd/html/_win32_midioutgetdevcaps.asp
どうも、MIDIOUTCAPSには無さそうなのですが……

206 :デフォルトの名無しさん:05/02/18 20:49:09
>>205
ないよ。


207 :デフォルトの名無しさん:05/02/18 20:54:14
MMOを作ろう!企画を立ち上げました。協力できる人はこちら
http://www112.sakura.ne.jp/~kaientai-project/creategame.htm

2chスレ
http://game10.2ch.net/test/read.cgi/mmominor/1108379282/l50

くすぶってないで、自分の力を試してみよう!!

208 :デフォルトの名無しさん:05/02/18 21:01:17
いくらまで出せるんだ?

209 :デフォルトの名無しさん:05/02/18 22:13:44
>>206
どもです。
リソースファイルにでも書き込んでおきます。

210 :デフォルトの名無しさん:05/02/18 23:20:25
>>205
midiOutShortMsgで音源にプログラムチェンジメッセージ送るだけじゃないのか?
楽器の名前はGM規格準拠の音源なら0から127まで楽器の配置は決まってる。


211 :デフォルトの名無しさん:05/02/18 23:43:33
>>210
>楽器の名前一覧を取得するAPIはありますか?

212 :デフォルトの名無しさん:05/02/19 00:11:55
ネットで調べ物してたら、変なリンクが引っかかった…
http://www.symantec.com/region/jp/avcenter/security/content/12095.html
GDI+のバグより、LoadImageの方がよっぽどヤダ

213 :デフォルトの名無しさん:05/02/19 01:53:16
質問なんですが、今複数の画像を読み込みなんかも描画する物を作ってます。
画像の描画なんですが、普通
a = (HBITMAP)LoadImage(NULL, "test.bmp", IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADFROMFILE);
b = (HBITMAP)LoadImage(NULL, "test1.bmp", IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADFROMFILE);
c = (HBITMAP)LoadImage(NULL, "test2.bmp", IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADFROMFILE);
と読み込んで
SelectObject(hMemDC, a);
BitBlt(hdc, 0, 0, 100 100, hMemDC, 0, 0, SRCCOPY);
SelectObject(hMemDC, b);
BitBlt(hdc, 0, 0, 100, 100, hMemDC, 0, 0, SRCCOPY);
SelectObject(hMemDC, c);
BitBlt(hdc, 0, 0, 100, 100, hMemDC, 0, 0, SRCCOPY);

みたいな感じで描画するみたいですが、

a = ( HBITMAP )LoadImage( NULL , "test.bmp" , IMAGE_BITMAP , 0 , 0 , LR_LOADFROMFILE | LR_CREATEDIBSECTION );
SelectObject(BhMemDC, a);
BitBlt(hdc, 0, 0, 100, 100, hMemDC, 0, 0, SRCCOPY);
a = ( HBITMAP )LoadImage( NULL , "test1.bmp" , IMAGE_BITMAP , 0 , 0 , LR_LOADFROMFILE | LR_CREATEDIBSECTION );
SelectObject(BhMemDC, a);
BitBlt(hdc, 0, 0, 100, 100, hMemDC, 0, 0, SRCCOPY);
a = ( HBITMAP )LoadImage( NULL , "test2.bmp" , IMAGE_BITMAP , 0 , 0 , LR_LOADFROMFILE | LR_CREATEDIBSECTION );
SelectObject(BhMemDC, a);
BitBlt(hdc, 0, 0, 100, 100, hMemDC, 0, 0, SRCCOPY);

みたいな感じで描画してはいけないのでしょうか?
処理速度などはどうなのですか?
分かる方お願いします。

214 :デフォルトの名無しさん:05/02/19 02:56:53
別に、その方法でも良いし
処理速度は、ほとんど変わらないけど…

DeleteObjectしたり、SelectObjectで
戻ってきた値をSelectObjectしなおしたり
しなくても良いのか?


215 :デフォルトの名無しさん:05/02/19 05:46:05
>>213
なんでそんなこと気にすんの?

216 :デフォルトの名無しさん:05/02/19 10:35:27
ペンやブラシの色を問わず背景の反転色で描画したいときは
SetROP2 で R2_NOT を指定すればいいことを知ったのですが
Rectangle などの図形描画には使えるのですが
DrawText などの文字描画では色が反転されません。
反転色で文字列を描くにはどうすればいいのでしょうか。

217 :デフォルトの名無しさん:05/02/19 12:29:21
OPAQ

218 :デフォルトの名無しさん:05/02/19 12:52:14
>>214
ども^^
下の方法だと時間がたつにつれ重くなったんで・・・・
原因はなにかなと思って聞いてみました。

219 :デフォルトの名無しさん:05/02/19 12:57:51
そりゃGDIオブジェクト解放せずにだだ漏れさせてりゃ重くもなるわな。

220 :デフォルトの名無しさん:05/02/19 13:06:03
解放って、最後に
ReleaseDC(hwnd,work_hdc);
DeleteDC(BhMemDC);
DeleteObject(Bitmap);
みたいな感じに書くんですよね?

221 :デフォルトの名無しさん:05/02/19 13:16:12
WNDCLASSEX構造体のlpszClassNameってなんでしょう?

222 :デフォルトの名無しさん:05/02/19 13:18:50
LPSZ型の変数

223 :デフォルトの名無しさん:05/02/19 13:21:01
>>222
ごめんなさい、質問の仕方がまずかったですね
WNDCLASSEX構造体のlpszClassNameってプログラム中ではどういった働きをするんですか?
あと、普通はどういう内容にするのでしょう?

224 :デフォルトの名無しさん:05/02/19 13:22:34
(アプリ名)MainWindowClass

みたいにしておくと、外部プロセスからアプリを探すときに
楽かもしれんね。

225 :デフォルトの名無しさん:05/02/19 13:25:04
>>220
考え方としてはそう。
わかってると思うけど、その三行だけでは、213に書かれた内容に対応したものにはならないから

とりあえずタスクマネージャのGDIオブジェクトの列を出しておくと、わかりやすいよ

226 :デフォルトの名無しさん:05/02/19 13:28:07
>>224
ありがとうございますっ!

227 :デフォルトの名無しさん:05/02/19 13:36:06
>>221
CreateWindow(Ex)で使うだろ。
と言う俺もアトム派。

228 :デフォルトの名無しさん:05/02/19 13:42:50
>>225
そうなんですか?
一応GDIオブジェクトの列を表示にしましたが、どれがそうなのかワカラナイです^^;
なにが足りないのでしょうか?

229 :デフォルトの名無しさん:05/02/19 14:05:49
センス

230 :デフォルトの名無しさん:05/02/19 14:16:52
GDIオブジェクトの列分かりました^^
凄い勢いであがていきます・・・・


231 :デフォルトの名無しさん:05/02/19 16:04:26
エディットボックスでENTERキーを押すとポーンとエラー音が出るのを止める
にはどうしたらいいんですか?

232 :デフォルトの名無しさん:05/02/19 16:33:45
>>228
214さんがサラリとかいてあるのだが・・・

作ったオブジェクトは、SelectObjectしたままでは消せない。
ので、
一番最初にSelectObjectしたときの返り値を保存しておく(*)。
消すときには、保存しておいたものをSelectObjectし、
作ったオブジェクトは、全部Selectされてない状態にする。
そうしてから消す。
*返り値に何が入ってるかはちゃんと勉強しておいてね

しかし、きちんと消してないなら
213の上も下もGDIが酷いことになりそうな気がするんだが・・・


233 :231:05/02/19 16:34:00
解決しちゃいますたごめんなさいorz

234 :デフォルトの名無しさん:05/02/19 16:34:45
>>230
概出
http://web.h-is.com/~gaia/bbs/test/read.cgi/uo_tool/1085572740/155


235 :デフォルトの名無しさん:05/02/19 16:36:33
>>233
解決報告するだけマシ

236 :デフォルトの名無しさん:05/02/19 17:04:31
CreateProcessでターゲットプロセスのメインスレッドが
WinMainやmainなどのエントリーポイントに突入するところでフックするには
どうすればよいでしょう?


237 :デフォルトの名無しさん:05/02/19 17:11:55
カーネルサンダースおじさんを襲う

238 :デフォルトの名無しさん:05/02/19 17:17:31
同じプログラムを複数個起動している際にそれぞれのウインドウハンドルを取得したいのですが、
FindWindowで取得しようとすると必ず後に起動したウインドウハンドルしか取得してくれないのですが、
このような場合はどのようにしたら良いのでしょうか?

239 :デフォルトの名無しさん:05/02/19 17:21:12
>>238
EnumWindows

240 :デフォルトの名無しさん:05/02/19 17:21:35
>>238
EnumWindows

241 :デフォルトの名無しさん:05/02/19 17:22:02
>>239
ありがとうございます。便利な関数あるもんですね・・・

242 :デフォルトの名無しさん:05/02/19 17:22:33
FindWindowExでもよくね?

243 :239か240:05/02/19 17:24:44
>>242
あまりよくない

244 :デフォルトの名無しさん:05/02/19 17:52:42
>>243
242じゃないが、どんな問題があり得ます?

245 :243:05/02/19 18:17:30
>>244
FindWindowExの仕様がGetWindowに似てるから

246 :デフォルトの名無しさん:05/02/19 18:41:20
>>245
なるほど、こういうのですね……。ありがとうございました。

>すべての子ウィンドウを取得する場合、EnumChildWindows 関数を使った方が
>GetWindow 関数をループ処理で呼び出すよりも信頼性の高い結果が得られます。
>GetWindow 関数を呼び出してウィンドウを列挙すると、無限ループに陥ったり、
>すでに破棄されているウィンドウのハンドルを参照する危険性がでてきます。

247 :デフォルトの名無しさん:05/02/19 18:43:49
>>241
便利と思えるとはある意味幸せな人だ。
ウィンドウ間・プロセス間で協調しなければならないマルチタスクOSなら
こういう関数が当たり前に提供されていなければ、
話にならない気がするがどうだろうか?

248 :デフォルトの名無しさん:05/02/19 18:58:23
どうでしょう?

249 :デフォルトの名無しさん:05/02/19 19:49:01
当たり前のものが当たり前にあるから便利なんだろうと思う。
あるはずのものが無かったりするとイライラする。
特にVBとか使ってるとそう思う。

250 :デフォルトの名無しさん:05/02/19 21:01:05
>>247
>>249
279の方に賛成かな

251 :デフォルトの名無しさん:05/02/19 21:31:41
>>279
がんばれ。

252 :デフォルトの名無しさん:05/02/19 21:59:14
Spy++のように他のアプリケーションが送受信しているメッセージをロギングするには
どうすればいいんでしょうか?
SetWindowsHookEx を使ってもうまくいかないんだけど

253 :デフォルトの名無しさん:05/02/19 22:03:03
なにがどううまくいかないのか書かなければ
「お前がヘボいからだ」
としか言いようがないわけだが。

254 :デフォルトの名無しさん:05/02/19 22:40:23
DLLを作ろうとしています。これはAveDeskというソフトのプラグインです。

void CALLBACK DeskletSetStatic(HWND hwndDesklet, bool staticValue)
{
  typedef void (CALLBACK *DUMMY)(HWND,bool);
  DUMMY HDeskletSetStatic = (DUMMY) GetProcAddress(GetModuleHandle(0),"DeskletSetStatic");

  if(!HDeskletSetStatic)return;

  HDeskletSetStatic(hwndDesklet,staticValue);
}
というコードがあるんですけど、
これっていったん呼び出されたら、永遠にループしちゃうんじゃないでしょうか??
ここはどんな処理をしてるのかサッパリです。詳しい方教えてください。よろしくお願いします。

255 :デフォルトの名無しさん:05/02/19 22:55:45
なんでだよ。
まずちゃんとC言語勉強してから作れ。

256 :デフォルトの名無しさん:05/02/19 23:05:20
>>255
そうか?

257 :デフォルトの名無しさん:05/02/19 23:06:31
わかった〜〜!!
このDeskletSetStaticという関数がDLLの呼び出し側(AveDesk)
にあるんだきっと。
それで、ここでは逆にDLLから本体の関数を呼び出してるんだ。

258 :デフォルトの名無しさん:05/02/19 23:32:56
GetProcAddress
GetModuleHandle(0)

しらべれば簡単にわかることなのにな。

259 :デフォルトの名無しさん:05/02/20 00:14:39
>>252
大方フック部分をDLLにしてない or しててもそのDLLとアプリ間でデータのやりとりができていないに一票。

260 :デフォルトの名無しさん:05/02/20 01:11:52
>>252 >>259
同じく。フック部分をDLLにしてないにもう一票。


261 :デフォルトの名無しさん:05/02/20 02:53:46
>>157
1999年からタイムスリップしてきましたか?

262 :デフォルトの名無しさん:05/02/20 03:01:28
>>261
02/16からタイムスリップしてきましたか?

263 :デフォルトの名無しさん:05/02/20 13:46:56
シンボルコードって自分で指定しちゃだめかな?

例えると
リソースファイルに
"新規作成" IDM_NEW
とかさ

264 :デフォルトの名無しさん:05/02/20 14:47:46
質問です。
デスクトップアイコンすべてを表示/非表示するプログラムを作ろうと
思っているのですが、手がかりがいまいちつかめません。

動作としてましては、
ディスクトップのなにも無いところで右クリック->[アイコンの整列]->[ディスクトップアイコンの表示]
で出来るのと同じことを、プログラムからしたいのです。

MSDNのSystemParametersInfoを呼んでみたのですが、それらしいものが
見つかりませんでした。

検索するとディスクトップのアイコンの表示や非表示するソフトは結構あるみたいでしたが、コードに
ついては見つけることが出来ませんでした。

キーワードやサイト等、なにか手がかりを教えていただけませんでしょうか。



265 :デフォルトの名無しさん:05/02/20 14:57:05
>ディスクトップ
ハードディスク上ってこと?

266 :デフォルトの名無しさん:05/02/20 15:05:47
ツマんない突っ込みすんなよ。オレモナー。

267 :デフォルトの名無しさん:05/02/20 15:05:55
>>265

いえ、実際には存在しますが、デスクトップ画面には表示されないということです。
本当に消去するわけではありません。

ディスクトップ画面にはなにもアイコンは表示されない、
でも、エクスプローラでデスクトップフォルダをのぞくとちゃんと表示されるという状態です。

単純に壁紙が、ディックトップの前面に出てきて、アイコンが隠れてしまうようなイメージですかね。


ちゃんと回答できているか自身ありませんが、私がしようとしている動作は上記のようになります。

268 :デフォルトの名無しさん:05/02/20 15:27:58
×ディスクトップ
○デスクトップ(desktop)

269 :デフォルトの名無しさん:05/02/20 15:37:35
>>264
>検索するとディスクトップのアイコンの表示や非表示するソフトは結構あるみたいでしたが
そのソフトがどうやってるのかSpy++で見ればわかるかもね。
やったこと無いけど、ウィンドウを最下面に配置してPaintDesktopで壁紙描画すればそれらしくなるんじゃない?

270 :デフォルトの名無しさん:05/02/20 15:41:59
レジストリ変更一箇所するだけだろ?


271 :デフォルトの名無しさん:05/02/20 15:43:18
>>267
こんなもんでどう?検証で書いたからそのまま載せる。

HWND hWnd = NULL;
hWnd = ::FindWindow( "Progman", "Program Manager" );
hWnd = ::GetTopWindow( hWnd );
hWnd = ::GetTopWindow( hWnd );
::ShowWindow( hWnd, SW_HIDE ); // to hide
// ::ShowWindow( hWnd, SW_SHOW ); // to show

あとは、SPYで該当ウィンドウの意味を調べて自分なりにアレンジしてくらさい。


272 :271:05/02/20 15:48:34
一応参考までに、「ひょっとしたら」IActiveDesktop とかから
何かごにょごにょやるのが正統な方法なのかもしれないけど、
ちょっとそっちは見つけられなかった。

273 :デフォルトの名無しさん:05/02/20 15:52:28
>>269
そうですね、一度ソフトを落として、メッセージを見てみます。

>>270
レジストリを操作した場合、OSの再起動が必要になるんですよね。
再起動は出来るだけ避けたいと思っています。

>>271
ありがとうございます、早速ためさせていただきます。

274 :デフォルトの名無しさん:05/02/20 15:54:39
>>273
いまどき再起動しなくても変更されるよ


275 :デフォルトの名無しさん:05/02/20 15:57:47
>>274
「いまどき」は全く関係ありません。

276 :デフォルトの名無しさん:05/02/20 16:06:10
とりあえず場所はここのようです
HKEY_CURRENT_USER
Software
Microsoft
Windows
CurrentVersion
Explorer
Advanced
HideIcons


277 :デフォルトの名無しさん:05/02/20 16:07:03
>>267
素晴らしい。
>ディスクトップ
>デスクトップ
>ディックトップ

278 :デフォルトの名無しさん:05/02/20 16:07:26
>>271
ありがとうございました。
いただきましたコードで動作しました。

あと、受け取りましたコードでハイドし、
[アイコンの整列]->[デスクトップアイコンの表示](正当な手順)で
Showすることができました。多分、同じしかけなのではないかと思います。

>一応参考までに、「ひょっとしたら」IActiveDesktop とかから
>何かごにょごにょやるのが正統な方法なのかもしれないけど、
>ちょっとそっちは見つけられなかった。

そうですね、頂きました、コードで表示をHIDEしても、OS側は内部でSHOWされてると
思ってるみたいです。どこかに、OSの記憶する内部状態と同期がとれるコードがあり
そうです。

基本的に、271さんに頂いたコードで、動作としては、ぜんぜんOKです。
使わせていただきます、本当にありがとうございました。

>>274
すみません、私が無知でした。
気分をがいされたかもしれませんが、私の不勉強でした
申し訳ございませんでした。そして、ありがとうございました。




279 :デフォルトの名無しさん:05/02/20 16:11:53
>>278
っていうかその方法だと再起動したらまた出てくるんじゃない?

280 :271:05/02/20 16:24:08
>>279
あーそう言えばそうですわ。
>>276 のレジストリ変更して SHChangeNotify でも投げてやるのが
いいかもしれないです…。

281 :デフォルトの名無しさん:05/02/20 16:27:09
dick

1 《米古風》探偵,刑事,「でか」 
a private 〜  私立探偵.
2 《俗》間抜け,やつ.
3 《俗》ペニス.

282 :デフォルトの名無しさん:05/02/20 16:27:34
エクスプローラにボタンやツールバーを追加するのってどうやるんでしょうか。
上手く説明出来ませんが、Norton AntiVirusがやってるようなやつです。
IEにボタンを追加するのならレジストリいじれば出来るようでしたが、
作りたいのはファイルのリネームツールとかでして…。

283 :デフォルトの名無しさん:05/02/20 16:38:40
>>282
多分、シェル拡張(shell extension)

284 :デフォルトの名無しさん:05/02/20 17:00:30
ProcessWalkerを使ってあるプロセスがオープンしている
オブジェクトハンドルのリストを取得できるのですが、
これと同じ情報を取得するにはどのAPI(テクニック?)を
使えばいいのでしょうか?

ProcessWalker
http://www001.upp.so-net.ne.jp/yamashita/product/pw4.htm

285 :デフォルトの名無しさん:05/02/20 17:11:26
MSDN読んだ?

286 :デフォルトの名無しさん:05/02/20 17:18:00
読みました。でもそれらしき物が見つかりません。
単純なAPIは用意されておらずメモリ解析などしているんだと思いますが?

287 :デフォルトの名無しさん:05/02/20 17:24:03
>>286
sysinternalsに行ってみれば?

288 :282:05/02/20 17:28:20
>283
ありがとう。
ググってみたらそれっぽいサイト見つけたので、のんびり調べてみます。


289 :デフォルトの名無しさん:05/02/20 17:31:29
>>287
失礼ですが、何か知っていて言っているんですか?
それとも何も知らないけど、とりあえず
MSDNやsysinternalsにあるかもと言っているだけなんですか?

290 :デフォルトの名無しさん:05/02/20 17:34:03
とりあえずdependsでも使ってみたらどうか。

291 :デフォルトの名無しさん:05/02/20 18:32:20
debugとreleaseってどう使い分けるのですか?

292 :デフォルトの名無しさん:05/02/20 18:33:12
>>289
NtOpenHoge?

293 :デフォルトの名無しさん:05/02/20 18:44:07
>>291
VC++スレへどうぞ。

294 :デフォルトの名無しさん:05/02/20 18:56:58
>>282
IDeskBand


295 :デフォルトの名無しさん:05/02/20 21:37:41
ありえないような場所をHeapFreeするのは危険?
例えばHeapFree(GetProcessHeap(),0,NULL);みたいにNULLポインタを渡すとか。
ただ単にエラーが返ってくるだけならいいが何か実害出たりしない?

296 :デフォルトの名無しさん:05/02/20 22:10:38
>>295
GetLastError() で試してみれば?

297 :デフォルトの名無しさん:05/02/20 22:27:16
アイコンリソースってどのサイズまでOK?
Windowsに最初からあるのは48×48があるみたいだけど
Windowsのバージョンとかで変わってきたりする?

298 :デフォルトの名無しさん:05/02/21 00:04:29
>>297
2000までは32x32

299 :デフォルトの名無しさん:05/02/21 00:38:31
>>298
ありがとう。
32でそろえます。

300 :デフォルトの名無しさん:05/02/21 01:14:12
WM_CHARを使って、zが押された時に処理するプログラムを作りたいんですけどどうすればいいのですか?
switch(msg) {
case WM_CHAR
switch(wParam)
case ?
?の部分が分かりません・・・・

301 :デフォルトの名無しさん:05/02/21 01:22:33
z

302 :デフォルトの名無しさん:05/02/21 01:26:13
zだとエラーが出ます。

303 :デフォルトの名無しさん:05/02/21 01:27:13
'z'

304 :デフォルトの名無しさん:05/02/21 01:28:39
それだと、反応無しです

305 :デフォルトの名無しさん:05/02/21 01:39:57
'z'と'Z'は違うぞ?

306 :デフォルトの名無しさん:05/02/21 02:41:10
switch(msg) {
case WM_CHAR:
switch(wParam) {
case 'Z':
case 'z':
case '\x1A':
あと適当に
}
}


307 :デフォルトの名無しさん:05/02/21 03:01:09
なぜ、ctrl-z・・・

308 :デフォルトの名無しさん:05/02/21 03:06:23
>>307
>>300

309 :デフォルトの名無しさん:05/02/21 03:24:11
いや・・・いらんだろ

310 :デフォルトの名無しさん:05/02/21 03:26:38
ctrl-z は orz に似てるとオモタ

311 :デフォルトの名無しさん:05/02/21 11:07:07
恥を偲んでお尋ねします
"DWORD_PTR"ってどのインクルードファイルで定義されてるのでしょうか・・・
DX9SDKのDirectsoundを使うとき、windows.h、mmsystem.h、mmreg.h、dsound.hを
インクルードしたのですが、ビルド時に"DWORD_PTR"型が定義されてないと
怒られます
名前の通り*DWORDなんでしょうけど自分で定義するのもなんだし

DirectX7のdirectsoundはこれだけで通ったような気もするんだけどな・・・
依存関係がわかんねぇよウワァァァン

312 :デフォルトの名無しさん:05/02/21 11:13:01
>>311
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/windows_data_types.asp
Basetsd.hだそーだ

313 :デフォルトの名無しさん:05/02/21 12:05:07
まぁ、>>311のbasetsd.hにはDWORD_PTRは定義されてないけどね。

PlatformSDKをいれてインクルードパス(優先順位に注意)通せば良いと思うよ。

314 :デフォルトの名無しさん:05/02/21 12:12:28
>>311
grepやfindが出来ないエディタ使ってるのか?


315 :デフォルトの名無しさん:05/02/21 12:46:11
>>314
放っといて下さい

316 :311:05/02/21 12:58:18
Basetsd.hには定義されてないようです
今PlatformSDKをインスコしております(PCがクソ遅くて眩暈)
なんかVC4+DX7とは勝手が違ってさっぱりだ…

317 :デフォルトの名無しさん:05/02/21 13:05:08
>>316
念のため書くけど、
PlatformSDKのBasetsd.hには定義されてて、
Basetsd.hはwindows.hをインクルードすればインクルードされるから、
#include <basetsd.h>とか書く必要ないからな。

318 :デフォルトの名無しさん:05/02/21 13:26:02
>>311
DWORD_PTR は>.311の想像とはまったく違っていて、「DWORDと何かへのポインタの両方を
情報の欠落無しに納めることの出来る整数」のこと。Win32 では普通のDWORDとほぼ同じ。
他にもLONG_PTRとか似たようなものがある。

319 :デフォルトの名無しさん:05/02/21 13:49:55
LPDWORD

320 :311:05/02/21 13:49:59
色々とマリガトウございます
>>317
つまりまずはPlatformSDKを入れねばならんという事ですな…
>>318
盛大に勘違いしてますた('A`)

今PlatformSDKをインスコしてサーチパスを登録してビルドしたらエラー数が100を超えて中断しますた
もうだめぽ

PlatformSDKについてもうちょっと調べてみます

321 :311:05/02/21 14:29:57
挫折の悪寒
なんでこんなに複雑になってんだyo…

322 :デフォルトの名無しさん:05/02/21 15:39:09
<dsound.h>の前に<dplay.h>をインクルードしたらコンパイル通ったりしない?

323 :デフォルトの名無しさん:05/02/21 15:44:58
あ、>>322のは、あくまで
#define DWORD_PTR DWORD
が定義されているヘッダファイルについて書いただけね。
なんか、話が違ってきてるみたい。

324 :311:05/02/21 16:00:29

 ヾ(゚∀。)ノシ
  
時代の流れについていけなくなりますた
そもそもPlatformSDKってなんだよ

>>323
駄目ですた

325 :デフォルトの名無しさん:05/02/21 16:33:20
LoadStringで文字列が切れた(バッファが足りない)ことを検出する方法はないのでしょうか?

326 :デフォルトの名無しさん:05/02/21 17:06:06
>>325
MFCやWTLのCString::LoadString()では
戻り値とバッファのサイズであれこれやってるね

327 :デフォルトの名無しさん:05/02/21 17:07:46
>>325
MSDN の記述。
>関数が成功すると、バッファにコピーされたバイト数 (ANSI 版) または文字数 (Unicode 版) が返ります
>(終端の NULL は含まない) 。
(…NULL とか間抜けな事が書いてあるが、そこは目を瞑って)
切り捨てられていなければ、
  戻り値 < nBufferMax
のはず。

328 :デフォルトの名無しさん:05/02/21 17:08:55
>>325
バッファに1文字以上(1バイトじゃないよ)の余地があること。
マルチバイトならGetCPInfoで1文字の最大バイト数を調べる。
S-JISなら、\0の後に2バイト以上の余地があることを確認する。
でいいと思う。

たしかLoadStringは、最後の全角文字が分割されそうなときは先行バイトもロードしない。
だから\0の後方に1バイトの余地があるからといって、全体がロードできた証拠にはならない。

329 :デフォルトの名無しさん:05/02/21 17:31:17
まぁ、最初から大き目のバッファ用意して、
そもそも切捨てが起こらないようにした方がいいよ。

330 :デフォルトの名無しさん:05/02/21 18:16:54
>>324
ダメってのは、dplay.hには宣言されてないのか?
上の質問では、その変数が定義されてないって質問しかしてないから、変化があったのに知らせないと誰も助けてくれないよ

まぁ、DirectSoundに関する質問ならスレ違いだけどね
(DX質問スレの方)

331 :デフォルトの名無しさん:05/02/21 18:34:28
>>326-329
328が完璧みたいですね、ありがとうございました。


332 :デフォルトの名無しさん:05/02/21 18:57:51
ツールバーで、始めからモッコリしているのではなく、
マウスポインタが上に来た時にモッコリさせるやり方、
または検索する為のキーワードを教えてください。

333 :デフォルトの名無しさん:05/02/21 19:06:45
TBSTYLE_FLAT

334 :332:05/02/21 19:34:21
>>333
色が白に変わってしまいますが(透けて親ウィンドウが見えている?)、
オンザモッコリは出来ている模様です。
ありがとうございました。
色が変わってしまう部分も、対処法が分かりましたらご報告します。

335 :デフォルトの名無しさん:05/02/21 20:33:30
まあ漏れなんか彼女と会う前からモッコリしてるけどな。

336 :332:05/02/21 21:18:04
猫に乗っていましたが、以下のように後から設定するとうまくいきました。
LONG lStyle;
lStyle = GetWindowLong(hToolWnd, GWL_STYLE);
lStyle |= TBSTYLE_FLAT;
SetWindowLong(hToolWnd, GWL_STYLE, lStyle);

>>335
私も若かりし時(10代)はそういう事もありました。

337 :デフォルトの名無しさん:05/02/21 21:24:00
>>306
そのコード打ったのですが、なにも起こらないです・・・・・

338 :デフォルトの名無しさん:05/02/21 22:07:02
>>337
そりゃ、自分で何もしなければ何も起きない

339 :デフォルトの名無しさん:05/02/21 23:34:34
TB_MOKKORI

340 :デフォルトの名無しさん:05/02/22 01:02:56
DWebBrowserEvents2::OnQuitはどういうときに呼び出されるのでしょうか?
ホストウインドウ(AtlAxWin)をDestroyWindowしても呼び出されません。

341 :デフォルトの名無しさん:05/02/22 01:13:55
>>340
OutProcでIE(など)を開き、それがユーザ操作で終了したとき。

開くとこまではこんなソース。

CLSIDFromProgID(L"InternetExplorer.Application", &clsid);
CoCreateInstance(clsid, NULL, CLSCTX_ALL,IID_IUnknown, (LPVOID *)&pUnknown);

342 :デフォルトの名無しさん:05/02/22 01:34:15
340
分かりました、ありがとうございます。
自分のアプリケーションへの埋め込みブラウザの場合、IEと同様な動作を期待するなら適切なタイミングで自分で発行してやるってことですね?

343 :デフォルトの名無しさん:05/02/22 04:09:38
デバイスコンテキストに描画する座標を指定できるapiはありますか

344 :デフォルトの名無しさん:05/02/22 04:23:15
何言ってんだかわからない。MSDNでも開け。ぐぐってさえもいないだろう。

345 :デフォルトの名無しさん:05/02/22 04:35:27
>>344
はぁ?文盲は黙ってろデブ

346 :デフォルトの名無しさん:05/02/22 05:11:10
香ばしいな

347 :デフォルトの名無しさん:05/02/22 05:33:52
デブが何か言ってますよw

348 :デフォルトの名無しさん:05/02/22 05:44:40
香ばしいな

349 :デフォルトの名無しさん:05/02/22 05:46:41
アロエリーナ

350 :デフォルトの名無しさん:05/02/22 06:03:02
自前アプリに埋め込んだウェブブラウザの画像読み込みを抑止する方法がわかりません
ざっと検索した範囲だと、ホストから実装して、Invokeをオーバーライドするみたいな事が書いてあるようなのですが、

CAxWindow::SetExternalDispatchで外部ディスパッチを指定すれば
そこでダウンロードコントロールをいじれるんじゃないかなという気がして試してみたいのですが、、
ここで必要なディスパッチインターフェイスをどうやって用意するべきか分かりません。

何か良いサンプルはありませんか?

351 :デフォルトの名無しさん:05/02/22 06:23:38
MFCスレ行くか?

352 :デフォルトの名無しさん:05/02/22 10:06:51
>>344
文盲

353 :デフォルトの名無しさん:05/02/22 10:56:09
>>352
粘着

354 :デフォルトの名無しさん:05/02/22 12:11:03
>>353
ぬるぽ

355 :デフォルトの名無しさん:05/02/22 12:15:32
>>354
ガッ

356 :デフォルトの名無しさん:05/02/22 13:02:11
>>351
あ、すいませんATLスレでしたorz

357 :デフォルトの名無しさん:05/02/22 15:09:09
円を描くには、Ellipseですが、これだと外枠しか描かれません。
円の内側を描くようにするためには、どのAPIをつかえばいいのでしょうか?

358 :デフォルトの名無しさん:05/02/22 15:11:24
>>357
Ellipse

Ellipse
1 個の楕円を描画します。
指定された外接長方形の中心が楕円の中心になります。
現在のペンを使って楕円を描画し、現在のブラシを使って塗りつぶします。


359 :デフォルトの名無しさん:05/02/22 17:22:25
MSDN読まない奴大杉

360 :デフォルトの名無しさん:05/02/22 18:38:06
WS_POPUPとして、メニューもどきなウィンドウを作って(自作)表示させたのですが、
CreateMenuで表示されるWindowsデフォルトのメニューとは違い、以下の問題が浮上しました。

・メニューを消す際に、一瞬、親のウィンドウが非アクティブに切り替わる。(その後、アクティブに戻る)
・他のメニューに切り替える時、メニューをSW_HIDEして消しますが、CreateMenuで作成されたMenuをHideする時のように綺麗に消えてくれない。

解決法がわかるかたいらっしゃいますか?

361 :デフォルトの名無しさん:05/02/22 18:43:36
>>360
CreatePopupMenu()
TrackPopupMenu()

辺りを使用し、メニューもどきではなく、
ちゃんとしたメニューを生成・表示する。

362 :360:05/02/22 19:03:20
>>361
いえ、それはわかっているのですが、
あくまで自作のメニューを表示させたいので、
CreatePopupMenu内部でどのようにコードが組まれているのかが知りたいですね。

363 :デフォルトの名無しさん:05/02/22 19:17:45
先頭はあれだ。消す前にSetFocusでおやにフォーカスを戻せ。
後者はあれだ。きれいに消える、が何を意味しているのかによる。
ひょっとするとAnimateWindowで解決するかもしれない。

364 :デフォルトの名無しさん:05/02/22 19:30:11
>>362
何故、「自作メニューもどき」にこだわるのか?

365 :デフォルトの名無しさん:05/02/22 19:56:17
wineのソース見てみるとか

366 :デフォルトの名無しさん:05/02/22 20:27:30
>>360
最近のメニューはカスタムドローでDirectXのSurfaceのGDIを渡してくる
らしきところからおそらくLayered Windowになってると思う。

カスタムドローした方が楽だと思うけど。
何ならメニューアイテム1個で中は自由に描いてもいいし。

367 :デフォルトの名無しさん:05/02/22 22:16:06

STARTUPINFO si;
を宣言すると

エラーC2275
'identifier' : typedef 識別子に、クラス メンバ アクセス演算子 (->) を使用しました。

発生してしまうんですけど、どうしたら良いのでしょうか?

368 :デフォルトの名無しさん:05/02/22 22:31:48
>>367
エラー発生行はその行で間違いないか?
あと、もうちょっと前後のコード晒せ。

369 :デフォルトの名無しさん:05/02/22 22:45:09
>>368
間違いないです

//コメントアウトするとちゃんと通るので

エラーは こうでした
C:\My Documents\ABC\a.c(87) : error C2275: 'STARTUPINFO' : typedef 識別子に、クラス メンバ アクセス演算子 (->) を使用しました。
c:\program files\microsoft visual studio\vc98\include\winbase.h(3818) : 'STARTUPINFO' の宣言を確認してください。
C:\My Documents\ABC\a.c(87) : error C2146: 構文エラー : ';' が、識別子 'si' の前に必要です。
C:\My Documents\ABC\a.c(87) : error C2065: 'si' : 定義されていない識別子です。


370 :デフォルトの名無しさん:05/02/22 22:46:52
>>369
その上の行あたりが間違ってると思うよ。

371 :デフォルトの名無しさん:05/02/22 22:50:48
>>370みたいな可能性があるから、>>368が前後のコード晒せって言ってるのに。

372 :デフォルトの名無しさん:05/02/22 22:53:08
分かりました
こうなんですけど

int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst,
LPSTR lpsCmdLine, int nCmdShow)
{
MSG msg;
hINSTANCE = hCurInst;
  STARTUPINFO si; //STARTUPINFO si;  ← こうすると通りますけど

if (!InitApp(hCurInst))
return FALSE;
if (!InitInstance(hCurInst, nCmdShow))
return FALSE;

while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

373 :デフォルトの名無しさん:05/02/22 23:03:05
ネットワークプログラミング板で質問したのですが、
スレ違いだったと指摘を受けたので、こちらで質問させていただきます。
ttp://www.geocities.jp/wininet_dll_jp/
このHPをサンプルに使って、WinInetでPOST処理を作ってみたのですが、
POSTのボディ部をPHPの受信側が受け取りません。
パケットキャプチャしてみた結果では、ボディ部はちゃんと
送信していました。
同様にPHPで作った送信PGでPOSTしてみて、
結果ではうまく値がわたったので、受信側はうまく動いていると思います。
どうやれば、受信部のPHPで受け取ってくれるようになるのでしょうか?
どうぞよろしくお願い致します。

374 :デフォルトの名無しさん:05/02/22 23:05:00
文字セットとかはちゃんとあってるのか?
つうか、ソースをちょっとは晒せ。
超能力者じゃねぇんだから。

375 :デフォルトの名無しさん:05/02/22 23:09:22
>>372

もしかして、拡張子.cにしてないか?
宣言と文の混在はc++の仕様だぞ

376 :デフォルトの名無しさん:05/02/22 23:15:51
今いろいろ調べていたんですが
どうしても分かりませんでした

>>375

言われたとうり a.c ファイルで *.cだったので
a.cppにしたら通るようになりました

どうも、ありがとうございます m(ヽ)m

377 :デフォルトの名無しさん:05/02/22 23:16:41
( ゚д゚)ポカーン

378 :デフォルトの名無しさん:05/02/22 23:17:59
>  STARTUPINFO si; //STARTUPINFO si;  ← こうすると通りますけど
なにか違うか?


379 :デフォルトの名無しさん:05/02/22 23:22:32
>>378
STARTUPINFO si;
をコメントアウトしたらって意味じゃね?

380 :デフォルトの名無しさん:05/02/22 23:23:16
>>375
C99(ぼそ

381 :デフォルトの名無しさん:05/02/22 23:24:37
>>379
naruhodo

382 :デフォルトの名無しさん:05/02/23 02:33:49
beginpaintでエディットコントロールのハンドルからDCを取得して
textoutで描画してもキー入力を受け付けません。受け付けるようにするにはどうしたらいいですか?

383 :382:05/02/23 02:52:24
できました。すいません

384 :デフォルトの名無しさん:05/02/23 03:01:42
エディットコントロールを自作したいのですがどうすればいいですか?

385 :384:05/02/23 03:26:24
やっぱりいいです

386 :デフォルトの名無しさん:05/02/23 03:37:06
フォトショッをプ自作したいのですがどうすればいいですか?

387 :386:05/02/23 04:00:27
やっぱりいいです

388 :386:05/02/23 04:33:33
できました。すいません

389 :デフォルトの名無しさん:05/02/23 05:50:37
あんまりオモロナイ

390 :デフォルトの名無しさん:05/02/23 09:11:35
ウィンドウAの上にウィンドウBとCが並んで表示されています。
ウィンドウCにはスクロールバーはありません。
ウィンドウBをスクロールさせるとウィンドウCもスクロールするようにしたいのですがどうすればいいですか?

391 :デフォルトの名無しさん:05/02/23 09:34:45
>>374
ソースは基本的にリンク先のコードそのままで、
プロキシ対応の処理などを追加しただけです。
貼っても長いし、インデント崩れてみにくいので…
送信先がPHP以外のものなら、POSTできてるので、
文字セットはあっているとおもいます。


392 :デフォルトの名無しさん:05/02/23 10:14:01
>>390
ウィンドウBで WM_XSCROLL が呼ばれたらそこで
ウィンドウBとウィンドウCに再描画命令を送ればいいんでないかい?
ウィンドウCの描画でウィンドウBのスクロール情報を
使ってはならない規則などないからな。

393 :デフォルトの名無しさん:05/02/23 10:26:13
再描画したところで全く意味はありません。

↓次の解決策をどうぞ

394 :デフォルトの名無しさん:05/02/23 11:28:14
393==386

395 :392:05/02/23 11:38:35
というか 393==390 じゃないのか?あまりにも失礼じゃないか?
ウィンドウB,Cが自分で定義したウィンドウなら
WM_PAINT でスクロール情報をもとに描画すればスクロールは実現するだろ?
ウィンドウズ定義のコントロールだったら、そのくらい質問でちゃんと書いとけよ。

教える気が萎えた。

396 :デフォルトの名無しさん:05/02/23 12:36:59
>>391
だから、ソース晒せ。

397 :デフォルトの名無しさん:05/02/23 13:01:08
自己解決しました。

398 :デフォルトの名無しさん:05/02/23 15:36:52
TrueTypeフォントを斜体にしたときのオーバーハング値って取れますか?
GetTextMetrics/GetOutlineTextMetricsじゃだめっぽいんです。


399 :デフォルトの名無しさん:05/02/23 16:53:43
リストビューの項目を一時的に隠すことが可能でしょうか?

400 :デフォルトの名無しさん:05/02/23 17:20:41
>>398
GetTextExtentPoint32
オーバーハングって分からんが
斜体にした時としない時の差?

401 :398:05/02/23 18:25:49
>>400
>斜体にした時としない時の差?
です。
GetTextExtentPoint32も試してみますー


402 :デフォルトの名無しさん:05/02/23 23:15:43
Win2000orWinXPですがntdll.dllがマップされる仮想アドレス空間でのアドレスは
常に同じですか?kernel32.dllは同じだそうですが。
なぜかというとクラッシュが起きてデバッガが起動し、呼び出し履歴を見ると
ntdllの中でクラッシュしてるのですがそこが何なのか知りたいのです。
でもそのプロセス内で何処にロードされたかは今となっては後の祭りで分らないんです。
よろしくお願いします。


403 :デフォルトの名無しさん:05/02/24 00:10:50
>>402
悪いのはntdllじゃなくて、もまいのプログラム。
まちがいない。

404 :デフォルトの名無しさん:05/02/24 00:55:52
自作クラスをCreateWindowで複数作ったのですが、staticの部分が共通化されてしまいます。
それぞれのクラスごとにデータを保持していて欲しいのですが、こういう場合は普通どうしていますか?

405 :デフォルトの名無しさん:05/02/24 00:56:43
>>404
それぞれのウィンドウごとにデータを保持していて欲しい、です。

406 :デフォルトの名無しさん:05/02/24 01:00:04
「自作クラス」が何のことやらよくわからんが、SetPropやSetWindowLongじゃだめなんか?
C++のクラスって事ならstaticじゃ無くすればいいだけだな。

407 :デフォルトの名無しさん:05/02/24 01:00:24
GetWindowLongPtr
SetProp

408 :デフォルトの名無しさん:05/02/24 01:24:20
>>406
WNDCLASSEXをRegisterClassExで登録したもので、そのうちの、プロシージャ部についての話です。
例えば、HBITMAPの形で画像を保持しておいても、
staticだと別ウィンドウ向けに登録したものに変更されてしまい、全てのウィンドウが同じ画像になってしまいます。

今から、その2つについて調べてみます。

409 :デフォルトの名無しさん:05/02/24 03:00:52
そもそも、なんでstaticにしたのだ?


410 :デフォルトの名無しさん:05/02/24 05:04:18
>>404=408
GetWindowLong の GWL_USERDATA か
もしくは拡張ウィンドウメモリを使え。
どっちも GetWindowLong に載ってる。

というかお前の404の日本語は下手過ぎ。読む側のことも考えろ。

411 :410:05/02/24 05:09:12
(´-`).。oO(っていうか407が微妙に答えてるじゃん。でも GetWindowLongPtr ってなんだ?)

412 :デフォルトの名無しさん:05/02/24 05:24:50
>>410
ぐぐれ

413 :410:05/02/24 05:30:28
(´-`).。oO(インクルードディレクトリ探しても見つからなかったから誤植かとオモタ、スマソ)

414 :デフォルトの名無しさん:05/02/24 11:32:31
thisポインタをどっかに保存して
共通部分になってるウィンドウプロシジャーのメソッドから
それぞれのクラスのメソッドをthisポインタを介して参照する

保存場所については散々でてるしいいな

415 :デフォルトの名無しさん:05/02/24 14:25:01
>>414
もしかしてこんなプログラム書いてるひと?
http://pc5.2ch.net/test/read.cgi/tech/1108815602/124


416 :デフォルトの名無しさん:05/02/24 18:37:02
SetTimer関数を使って定期的に画面を更新したいんですが、画面が更新されません。

ウインドウ作成時に
SetTimer(hWnd,1,10,NULL);
でタイマを作って

WM_TIMER:
SendMessage(hWnd,WM_PAINT,wParam,lParam);

で10ミリ秒ごとにWM_PAINTを発行し再描画されるようにしているんですが・・・何か間違ってますか?

417 :デフォルトの名無しさん:05/02/24 18:40:08
>>416
WM_PAINTはシステムが発行するものです。
ユーザプログラムが発行してはいけません。
WM_PAINTを発生させたければInvalidateRect等を使いなさい。

418 :デフォルトの名無しさん:05/02/24 18:40:12
はい。

419 :デフォルトの名無しさん:05/02/24 19:01:48
>417
WM_TIMER:
//描画

とすれば10ミリ秒ごとに描画されますか?

420 :デフォルトの名無しさん:05/02/24 19:12:48
やってみろヴォケ

421 :デフォルトの名無しさん:05/02/24 19:22:09
>>420
やるの面倒くさいから聞いてるんだヴォケ

422 :デフォルトの名無しさん:05/02/24 19:24:52
そういう書かれ方されると10人20人もそういう人がいるみたいな印象受けますけど、そうでもないですし。
正直なとこ、自分としては割と傷つくんですが。

423 :デフォルトの名無しさん:05/02/24 19:25:48
>>421
419の方法で大丈夫です。やってみましょう。

424 :デフォルトの名無しさん:05/02/24 19:25:49
シリアル通信でWriteFileのときに
フレーミングエラーがたまに起きて、これがでると
その後のWriteFileやReadFileが失敗してしまうのですが
なんか対策ってありますか?
どーやったら復帰できるのでしょうか?

425 :デフォルトの名無しさん:05/02/24 19:43:15
>>416
この場合はGetDCの方で描画する方がいいかも。
後、1タイマーの精度が悪いのでせいぜい50ミリ秒ぐらいかな。

426 :デフォルトの名無しさん:05/02/24 19:46:02
>>403
あなたはゴミですねぇ。ここに居る必要ないんじゃないですか?
もう自分で調べましたけどね。ちなみに俺のプログラムがよんでるんじゃないんですが。。
(バカのてめぇ勝手な仮定に突っ込んでも無駄か。。)


427 :デフォルトの名無しさん:05/02/24 19:49:45
>>426
すれ違い
http://pc5.2ch.net/test/read.cgi/tech/1108989422/

428 :デフォルトの名無しさん:05/02/24 19:50:04
>>425
タイマーの精度50ミリか?

429 :デフォルトの名無しさん:05/02/24 20:04:16
SetTimer自体の精度は50msよりマシだった気がするけど、メッセージで来るから全く信用できない気がする。
というか10msで更新だとかなりCPUパワー食われるような‥‥

何をやりたいのか書いた方がいいと思われ。

430 :デフォルトの名無しさん:05/02/24 20:11:52
>>427
だから説明してみろよ。
何処にntdllに問題があると書いてある?
何処に俺のプログラムからクラッシュしていると書いてある?
日本語が読めるか?質問はdllのロードされる位置についてだ。
なんでこんな見当違いで無駄なレスをつける奴を擁護するのか言ってみろ。


431 :デフォルトの名無しさん:05/02/24 20:16:21
>>402
kernel32だったか忘れたけどWin2KでSP当てたらアドレスが変わってた事があった。
過信は禁物。

432 :デフォルトの名無しさん:05/02/24 20:16:30
>>430
すれ違い
http://pc5.2ch.net/test/read.cgi/tech/1108989422/


433 :デフォルトの名無しさん:05/02/24 20:17:30
>>432
バカダネェ。しかし。死ねよ


434 :デフォルトの名無しさん:05/02/24 20:19:03
>>432
さっさと答えろ。なんか考えでもあるのか?
すれ違いだの書いてりゃ2チャンらしくていいとでも思ってるのか?


435 :419:05/02/24 20:29:14
>417さんのやり方でやってみました。
ヴォケとか書いてるのは私じゃないので悪しからず

436 :デフォルトの名無しさん:05/02/24 20:29:15
とにかくお前>>432みたいなのはリアルでもネットでも消えろ。
なんの価値もないレスがつかなければまだ知識のある人のレスが望めたんだよ。
答えを持ってないなら書かなきゃいいじゃねぇか。ばっかじゃねぇの?


あと関係ない皆さん、スレ汚しちゃってすみませんね。
もう消えるよ

437 :デフォルトの名無しさん:05/02/24 20:31:45
>>402
マジレスするとDUMPBINか何かでDLLのエクスポートテーブル見れば
どんな場所かわかるよ。

ちなみにシステムdllのロードアドレスは固定。
つーかPEヘッダ手繰ってけばわかるけど。
アドレスとかの仕組みはAdvancedWindowsという本に詳しく載ってる。

438 :デフォルトの名無しさん:05/02/24 20:34:44
>>437
ありがとうございます。アドレスについては今日調べて解決しました。


439 :デフォルトの名無しさん:05/02/24 20:35:50
Advanced Windows
http://www.amazon.co.jp/exec/obidos/ASIN/4756138055/250-8382872-5552210

440 :デフォルトの名無しさん:05/02/24 20:39:33
高いけど物凄い良書なので買ったほうがいいね>Advanced
版を重ねてるから古いのをつかまされない様注意

441 :デフォルトの名無しさん:05/02/24 20:51:38
>>428>>429
宍戸さんの所に載ってるけど、自分のマシンも同じ感じ。
http://www.sm.rim.or.jp/~shishido/timeri.html

タイマーを10ミリ秒ぐらいの間を取って5つ生成して、
それぞれ50ミリ秒感覚で来る事で、
結果的に10ミリ秒感覚になるとか出来ないかな。

442 :デフォルトの名無しさん:05/02/24 20:53:03
このスレの存在意義を失わせるような本を紹介するなよ・・・。

443 :デフォルトの名無しさん:05/02/24 21:54:43
ttp://wisdom.sakura.ne.jp/system/winapi/win32/win47.html
>タイマーには 分解能 という限界周期が定められており
>この分解能以上の周期でメッセージを発行することはできないのです
>この周期は 9x と NT で異なり、 9x の場合は55ミリ秒、NT は10ミリ秒です
>つまり、9x は1秒間に最大で18回、 NT は100回までしか WM_TIMER を発生させられないのです

444 :デフォルトの名無しさん:05/02/24 23:18:49
すごい自作自演なスレですね。

445 :デフォルトの名無しさん:05/02/25 02:17:03
PCVOID という型が用意されていないことに ヽ(`Д´)ノ ウワァァァァン となったことはありませんか?

446 :デフォルトの名無しさん:05/02/25 02:21:26
ありません

447 :445:05/02/25 02:58:20
いえね、LPTSTR 等の先頭の L は過去の遺物だって話を聞いたものですから、
私は文字列ポインタ型に PTSTR と PCTSTR を使っていたわけですよ。
で、最近、汎用ポインタに PVOID を使おうとしたところ、PCVOID が
用意されていないということに気がついた次第でございまして。
まあ本質的な問題ではないのですが、イケてるWin32プログラマの皆様は一体
どの組み合わせを使っていらっしゃるのかなーなんて気になっちゃいまして。
 (1) LPVOID と LPCVOID
 (2) PVOID と CONST VOID *
 (3) void * と const void *
ちなみに MSDN の CopyMemory() の項目では (2) が使われているんですよね…。

448 :デフォルトの名無しさん:05/02/25 10:14:35
エディットコントロールのソースみたいのですが見ることはできますか?

449 :デフォルトの名無しさん:05/02/25 12:57:24
>>448
お好みでどうぞ。
http://www.bulldog.co.jp/ ブルドックソース株式会社 東京都
http://www.kagome.co.jp/ カゴメ株式会社 愛知県
http://www.otafuku.co.jp/ オタフクソース株式会社 広島県
http://www.ikari-s.co.jp/ イカリソース株式会社 大阪府
http://www.kikkoman.co.jp/ キッコーマン株式会社 千葉県
http://www.oliversauce.com/オリバーソース株式会社 兵庫県
http://www.sky-net.or.jp/toshi/ カープソース 広島県
http://www.maruki-su.com/ 株式会社 川上酢店 愛知県
http://www.kozima.co.jp/ 小島食品製造株式会社 愛知県
http://www.komi.co.jp/ コーミ株式会社 愛知県
http://www.sankyohikari.co.jp/ サンキョーヒカリ 愛知県
http://www.junmaru.co.jp/ 株式会社 純正食品マルシマ 広島県
http://www.papaya-sauce.co.jp/ パパヤソース本舗 大洋産業株式会社 京都府
http://www.takahashisauce.com/ 高橋ソース株式会社 埼玉県
http://www.choko.co.jp/ チョーコー醤油株式会社 長崎県
http://www.timelyhit.ne.jp/ajiyoko/shop/sauce/sauce1.htm 阪神ソース株式会社 兵庫県
http://www.kyoto-thinking.co.jp/hirota/京風味ソース本舗 蛇ノ目食品廣田徳七商店 京都
http://www.optic.or.jp/com/fujiisauce/fujiisauce.html 有限会社 藤井ソース工場 岡山県
http://www2.neweb.ne.jp/wd/hikari/ ヒカリ食品 徳島県
http://www.hat.hi-ho.ne.jp/aokia/ 下北沢ビレッジソース 丸寿食品工業株式会社 東京都
http://www.yamayashokuhin.co.jp/ 山屋食品株式会社 東京都
http://www4.osk.3web.ne.jp/~brother1/ブラザーソース森彌食品工業株式会社
http://www.asahi.co.jp/you/t20011026.html神戸地ソース物語
【関連団体】
http://www.maff.go.jp/koueki/sougou/35/35.htm(社)日本ソース工業会
http://www.japan-tomato.or.jp/社団法人 全国トマト工業会
http://www.soysauce.or.jp/ 日本醤油協会

450 :デフォルトの名無しさん:05/02/25 13:34:26
空気読めてない馬鹿がいるな

451 :デフォルトの名無しさん:05/02/25 14:13:39
>>447
俺だったら自分でtypedef const VOID *PCVOID;と書くか、
PVOIDとconst VOID *あるいはvoid *とconst void *の組み合わせにする。

452 :デフォルトの名無しさん:05/02/25 15:37:44
>>447
オレは極力標準の型を使う。
と言うわけで3。

453 :デフォルトの名無しさん:05/02/25 16:36:56
>>447

おいらは>>452さんとは真逆で型は極力MS定義を使うようにしてる。
なので(1)

自前定義よりは他の人が見たとき混乱しにくいかなとか
将来何かしらの拡張があった場合とかMSヘッダ側でうまい事修正・対応してくれるかな
とか期待して。

上の理由は逆にすると、実際の型を知る場合に複雑なMSヘッダから定義を探さなければならないとか
MSヘッダでまずいこと修正・対応される場合もあるとかいろんな問題も含んでるので
どれが良いって事もないと思う。
ケースバイケースって感じで

454 :デフォルトの名無しさん:05/02/25 16:43:43
GetWindowText,SetWindowTextで扱える文字列って通常何文字までですか?
エディットコントロールは32KBみたいですけど、普通のウィンドウでも最大そこまでOK?

455 :デフォルトの名無しさん:05/02/25 16:46:52
>>454
勝手な想像では、GetWindowTextLength() で扱える数値分ではないだろうかと。

456 :デフォルトの名無しさん:05/02/25 17:02:00
>>454
エディットの32KBは9xの制限でNTは制限ない。(メモリ上の制限はあるが)
コントロールによりけりだと思われ。

457 :デフォルトの名無しさん:05/02/25 18:25:01
>>456
はぁ?NTでも32K越えたら編集できねぇよボケ

458 :デフォルトの名無しさん:05/02/25 18:34:52
???わけワカメ

459 :デフォルトの名無しさん:05/02/25 18:39:19
>>457
とりあえず、732kBのテキストファイルをメモ帳で普通に開けたことを
報告しておく。

460 :デフォルトの名無しさん:05/02/25 18:46:37
おまいらそういう時は取りあえずMSDNみようよ

EM_LIMITTEXTの解説から抜粋

Rich edit controls: If this parameter is zero, the text length is set to 64,000 characters.
Edit controls on Windows NT/2000/XP: If this parameter is zero, the text length is set to 0x7FFFFFFE characters for single-line edit controls or ?1 for multiline edit controls.
Edit controls on Windows 95/98/Me: If this parameter is zero, the text length is set to 0x7FFE characters for single-line edit controls or 0xFFFF for multiline edit controls.

まあ、この数値がMAXと書いてあるわけでもなく
この数値がまで保障されると書いてあるわけでもないのでソースにならんと言えばその通りだけど
この数値が制限だとおもっていいんじゃない?

461 :デフォルトの名無しさん:05/02/25 18:54:53
だから何?

462 :447:05/02/25 19:56:39
>>451
なるほど。データ型の意味が明白なら、自前で定義するというのもアリですよね…。

>>452
そういう考え方もありますね。私も最初はそうだったのですが、文字配列に
TCHAR を使うようになってからすっかり Windows のデータ型に染まってしまいまして。

>>453
やはり、どれを採用するにしてもメリットとデメリットがあるでしょうし、
コーディングスタイルも人それぞれということになりそうですね。

たいへん参考になりました。レスを下さった皆さん、どうもありがとうございました。

463 :デフォルトの名無しさん:05/02/26 00:51:57
あんの〜ハンガリー記法の中の
PSTRとPTSTRとは
どう違うんですか?
Tが付くのと付かないのの差がよくわからないんですが・

464 :69式フリーPG ◆hND3Lufios :05/02/26 00:55:50
LPTSTR/PTSTR == TCHAR *
LPSTR/PSTR == char *

かな。

465 :デフォルトの名無しさん:05/02/26 01:30:57
そろそろソースもUNICODEで書きたいな・・・

466 :デフォルトの名無しさん:05/02/26 01:59:48
>>465
メモ帳で書くといいよ

467 :デフォルトの名無しさん:05/02/26 03:37:29
コンパイル出来たっけ?

468 :デフォルトの名無しさん:05/02/26 04:39:02
fopenで得たFILE*型のハンドルから、
CreateFileで使うハンドルを得られた気がするんですが、
なんて名前のAPIかどなたかご存じないでしょうか?

469 :デフォルトの名無しさん:05/02/26 06:50:21
>>468
そういうAPI/ライブラリ関数は無い。
FILE *をごにょごにょすれば?

470 :デフォルトの名無しさん:05/02/26 08:03:22
_get_osfhandle(_fileno(fp))
これじゃないか?

471 :デフォルトの名無しさん:05/02/26 12:50:19
Unicode版は重くなるだけ。
MBCSを基本にすえておいて、必要な場面だけバッファをUnicodeに変換して
Unicode版の関数を使うのがベターだと思うよ。

472 :デフォルトの名無しさん:05/02/26 12:54:05
抽象的な質問で大変申し訳ないんだが、画面上に関数のグラフを描画する際に
WM_CREATEがきた時に関数の値を計算して、staticな関数に保存するのと
WM_PAINTが来るたびに計算するのとどっちがいいと思う?

473 :デフォルトの名無しさん:05/02/26 12:54:25
こんにちは

LPCTSTRの文字列のある文字が、1バイト文字なのか2バイト文字(日本語など)なのかを調べるAPIはあると思いますが、
教えていただけますか?

474 :デフォルトの名無しさん:05/02/26 12:54:36
>>472
staticな関数じゃない、staticな配列だ…
ゴメンね

475 :デフォルトの名無しさん:05/02/26 12:55:32
>>473
こんにちは

476 :デフォルトの名無しさん:05/02/26 13:00:37
>>473
やぁ、こんにちは

477 :デフォルトの名無しさん:05/02/26 13:04:55
>>471
NT系のOSでもそうなん?


478 :デフォルトの名無しさん:05/02/26 13:11:52
>>473
IsDBCSLeadByteExあたりだろーか

479 :デフォルトの名無しさん:05/02/26 13:17:49
実際に見たわけではないけど、
よく聞く話としては英語版のWindowsXPは日本語版よりかなり軽いらしい。
ソースコードは同じでも、
ビルドされた生成物が文字列の変換や比較で使う関数の実装が違うから。
日本語環境はかなりCPUを損していると思う。

480 :デフォルトの名無しさん:05/02/26 13:27:20
>>472
計算する物にもよるけど、計算結果を他に使わないなら、毎回WM_PAINTで計算&描画するのでいいと思う。
昔の定石だとWM_CREATEが来たときに計算して裏のメモリデバイスコンテキストに描画。
WM_PAINTが来たときには、BeginPaint()で再描画必要な領域を取得して、
裏からそこだけコピー・・・としてたけど、最近の高性能なパソコンなら、
そこまでする必要もないかと。


481 :デフォルトの名無しさん:05/02/26 13:27:23
ソースをすべてUnicode対応にしてしまうと、
単にバッファ全体を扱いたいにもかかわらず、関数が厳密に文字として扱おうとして
過保護な作りになってしまうことが多々ある。
最適化で劣っているはずのLinuxが速度面で優位なのは
Unicode周りの処理が関係しているからかもしれない。

482 :デフォルトの名無しさん:05/02/26 13:39:34
それって、日本語版XPは、英語版XPとは違うビルドってこと?

483 :デフォルトの名無しさん:05/02/26 13:40:03
>>480
ありがとうございまし

484 :デフォルトの名無しさん:05/02/26 13:42:29
んなわきゃない。それだとLinuxでJavaを扱うと劇重ってことになっちゃう

485 :デフォルトの名無しさん:05/02/26 13:51:49
>>484
意味がわからん。何を比較対象にしたの?

486 :473 :05/02/26 13:58:12
>>478
解決しました。
ありがとうございました。

487 :デフォルトの名無しさん:05/02/26 13:59:56
>>486
IsDBCSLeadByteもあるからな

488 :デフォルトの名無しさん:05/02/26 14:08:52
IsDBCSLeadByteA
IsDBCSLeadByteW

489 :473:05/02/26 14:15:03
自作のエディタを作ってるので
今日から開発開始ですが、今日の夜には完成すると思います。
エディタもそうなんですが、自作のターミナル(TeraTermやHyperTerminalみたいなもの)もあわせて作る予定です。
Cisco製品で試してみようと思います。

はい。
一番の山は漢字変換当たりだろうと思います。

490 :デフォルトの名無しさん:05/02/26 14:38:34
>>489
MBCS(SJIS)の1バイト目と、2バイト目の範囲は重なってる。
IsDBCSLeadByteがTrueを返しても、1バイト目か2バイト目だと言うこと
以上は分からないぞ。
作る前に、ShiftJISやEUCやJISの仕様について、勉強してきた方が良い。

491 :489:05/02/26 14:48:57
>>490
一バイトがDBCSかどうかわかれば結構ですよ。
別にMS-WORDのような重装備なものをつくるわけじゃありません。

全テキスト文字スタイル固定のシンプルなテキストエディタですから。
ご意見ありがとうございました。

492 :デフォルトの名無しさん:05/02/26 14:57:21
根本的にわかってない悪寒。

493 :デフォルトの名無しさん:05/02/26 15:02:46
2バイト系文字(漢字)のSJISの場合、第一バイトは81h〜9Fhだから
1バイト文字(ASCII)と区別できるんだよな。
でも2バイト系文字の第二バイトは40h〜7Ehが存在するから
これがASCIIと区別できないんだよな。
だから2バイト系かどうかは先頭から順にリード、トレイル、ASCII、を
チェックしながら調べないと絶対わからんはずだが。。


494 :デフォルトの名無しさん:05/02/26 15:10:20
スレ違い

495 :デフォルトの名無しさん:05/02/26 15:10:36
489は半角カタカナの仕組みがわかってればいいんだけど・・・

496 :デフォルトの名無しさん:05/02/26 15:13:08
素直にランタイムの_mbsbtypeとか使っておけという話だ。

497 :デフォルトの名無しさん:05/02/26 15:24:24
なにも改善されないんだが

498 :デフォルトの名無しさん:05/02/26 15:26:11
されるよ

499 :デフォルトの名無しさん:05/02/26 15:30:55
もう春だね。

500 :デフォルトの名無しさん:05/02/26 15:33:13
全部Unicodeにすれば良いんだよ

501 :デフォルトの名無しさん:05/02/26 15:39:29
>>491
WCHARを使わないのであれば、
文字列へのポインタをそのままインクリメントデクリメントせずに、
必ずCharNextとCharPrevを使うこと。

これでどう?>All

502 :デフォルトの名無しさん:05/02/26 15:50:42
473の株があったら空売りすれば絶対儲かる

503 :デフォルトの名無しさん:05/02/26 15:54:21
>>471
NT系のOSは、UNICODEを基本として動作しているわけだから
むしろMBCSを使う方が非効率だと思う。

504 :デフォルトの名無しさん:05/02/26 15:59:30
>473の株があったら空売りすれば絶対儲かる

これどういう意味?

505 :デフォルトの名無しさん:05/02/26 16:59:04
>>503
そのへんどうなんだろうねぇ
ファイル名なんかはUNICODEにしておくと無駄な変換がなくて済みそうだけど
ウィジェットのテキストラベルやテキストボックスなんかはどうなってるんだろ

506 :デフォルトの名無しさん:05/02/26 17:11:23
失礼します。

漢字変換のポップアップウィンドウを使いたいのですが。

http://www.geocities.jp/ayana_city/ime.JPG

MS側でAPIで用意されてると思うんですよ。たぶん。。。
フォントやファイルのコモンダイアログみたいに。
誰かご存知な方はいますか?

507 :デフォルトの名無しさん:05/02/26 17:29:07
>506
リンクが見れない。
どのウィンドウを指してるのかよくわからんが、
IMEの操作は、「Imm〜」で始まる関数と「WM_IME_〜」で始まるメッセージを使う。
特に"candidate"の扱い方を調べろ。

508 :デフォルトの名無しさん:05/02/26 17:29:21
>>503
それはプロセスが文字列リソースを扱っている時の話。
適切な関数を使わないと、ただのバッファデータにまで
重厚・親切な文字列処理が行われかねない。
本来memcmp・memcpyで済ませて構わない場所や
従来strlenでヌル終端位置を取得していた場所が無駄に重くなる。
Unicode対応は、確かに多言語対応・機能拡張には柔軟になるが
バイナリバッファへの直接アクセスがセールスポイントであるC/C++の恩恵を捨てることにもなる。

そもそもマルチバイトコードの大市場というべき日本語環境でMBCS版がちゃんと動くなら、
無理にUnicode版でビルドする必要など皆無。
あれは英語圏の人間が、未知のマルチバイト言語用にビルドするためのものといって差し支えない。

509 :506:05/02/26 17:41:42
>>507
どうもです。

507さんの情報をヒントにグーグル検索をしたら、
いいものが見つかりました。
ありがとうです。
http://www.cisnet.or.jp/home/tsuneoka/win32tech/7.html

画像は見れると思うんですが(^^

510 :デフォルトの名無しさん:05/02/26 17:53:29
多機能・高速な日本語テキストエディタがUnicodeでビルドされる日は来ないだろう。
わざわざ独自の実装で直接バッファアクセスによる高速化・最適化を実現しているのを、
汎用的なWindowsAPIに置き換えるメリットなどないからだ。

511 :506:05/02/26 18:10:20
候補ウィンドウを表示させるAPIがどうしても見つかりません。
http://www.geocities.co.jp/SiliconValley-Cupertino/5872/String/Ime/index.html

どのように表示させるのかご存知な方はいますか?

512 :506:05/02/26 18:10:44
候補リストウィンドウ
http://www.geocities.co.jp/SiliconValley-Cupertino/5872/String/Ime/img3.gif

513 :506:05/02/26 18:13:29
ImmGetCandidateWindow IME候補リストウインドウ位置取得
ImmSetCandidateWindow IME候補リストウインドウ位置設定

取得や設定ならわかりましたが、
肝心の変換文字を指定〜候補リストウィンドウの表示がわかりません。

514 :506:05/02/26 18:14:54
IME候補ウィンドウのハンドルを取得できるのでしょうか?

515 :506:05/02/26 18:18:06
ImmGetDefaultIMEWnd?

516 :デフォルトの名無しさん:05/02/26 18:27:18
>>512
やっぱりリンク先が見られないんだが。

IMEプログラミングは、かなり環境に依存するし情報も少ないので、
それなりに大変。ちょっと関数呼んで終わりとか、そういうのじゃないよ。
とりあえず、メッセージフック用ののソフトで、IMEを操作したときに
どういうメッセージがやり取りされてるか知れべて見ろや。
Spy、WinSightあたりを持ってないか。

517 :506edwin:05/02/26 18:31:18
>>516
そーですね。
こっちが覚えたくても情報がないから、
手探り状態。

でも乗り越えないといけない山・・・。
険しく寒い山。
ガンバ自分。

どうもです。

518 :デフォルトの名無しさん:05/02/26 19:47:10
http://home.h07.itscom.net/buruturi/VCTIPS_008.html
(3)-(F)のImmReleaseContext();の直後にreturn 0;を書けば(4)は不要。

519 :デフォルトの名無しさん:05/02/26 19:53:36
>>508
WindowsだからUTF-16が前提で話すけど
UNICODE文字列をmemcmp memcpyして何か問題ありますか?
wcslenは非効率な処理をしてるんですか?
むしろ1文字のバイト数が固定されているからランダムアクセスが
効率的に行えるでしょ。

SJISで文字探索するときの非効率さの方が問題。

520 :デフォルトの名無しさん:05/02/26 19:56:37
LPSTRを引数に取るAPIってさ、NT版だと内部でUnicodeに変換してるんでない?

521 :デフォルトの名無しさん:05/02/26 20:05:30
Windows XP は、Windows 9X や Windows MEのために書かれたアプリケーションとの
後方互換性を保つために、非 Unicode 文字 (ANSI や DBCS) をパラメータとしている
API を備えています。対応する API は Unicode 文字コードをパラメータとしてとります。
基本的には、非 Unicode API は、対応する Unicode API を呼び出す前に、パラメータ内
の文字コードを Unicode に変換します。

http://www.microsoft.com/japan/technet/prodtechnol/winxppro/evaluate/muiovw.mspx

522 :デフォルトの名無しさん:05/02/26 20:15:11
API呼ぶたびに文字列引数をMBCSからUnicodeに変換してるのって恐ろしく
非効率じゃないのかなぁ。俺、Unicodeでコンパイルしてるよ。

もちろん、SJISのほうが便利な部分もあるから、どっかでまとめて変換するんだけどね。
MBCS版のAPIを呼ぶことはしないな。

523 :デフォルトの名無しさん:05/02/26 20:44:59
Win9x 系を見捨てますかそうですか

524 :デフォルトの名無しさん:05/02/26 20:56:10
>>517
けなげだから、ヒント教えよう。
以下のコードを書いて実行してみてください。

char moji[]={"それがPSPの仕様だ。"};
HIMC hIMC = ImmGetContext(m_hWnd);
ImmSetCompositionString(hIMC, SCS_SETSTR, moji,strlen(moji),NULL,0);
ImmNotifyIME(hIMC, NI_COMPOSITIONSTR, CPS_CONVERT, 0);
ImmNotifyIME(hIMC, NI_OPENCANDIDATE, 0, 0);
ImmReleaseContext(m_hWnd, hIMC);

あと、imm.hをinclude&リンク指定としてimm32.libを忘れずに。
これで結構、筋がわかると思うよ。

525 :デフォルトの名無しさん:05/02/26 20:59:22
>>523
tcharって知ってます?

526 :デフォルトの名無しさん:05/02/26 21:26:01
>>523
9xでもMicrosoft Layer for Unicode入れれば動かせたような希ガス。

527 :デフォルトの名無しさん:05/02/26 21:28:34
http://www.microsoft.com/downloads/details.aspx?FamilyId=73BA7BD7-ED06-4F0D-80A4-2A7EEAEE17E2&displaylang=en

528 :学生プログラマン:05/02/26 21:50:53
みんなUnicode対応と非Unicodeでちゃんとコンパイル出来る様にソース書いてないの?

529 :デフォルトの名無しさん:05/02/26 21:59:48
俺は一応、切替できるように作っているつもり。
しかし、実際のところWin98なんでUnicodeにしたことはない。
MSLUも試す気には(今のところ)ならない。

530 :デフォルトの名無しさん:05/02/26 22:01:01
どのみちUnicodeかMBCSかで内部のロジックまで組みかえる必要あるから最近は全部内部Unicodeで通してAPIは9xで使える奴だけに絞ってUnicode版直接呼んでる。

531 :デフォルトの名無しさん:05/02/26 22:16:10
ところでlstrcpyWはNT系と98以降ってなんでこんな中途半端なことになっているんだ?

532 :デフォルトの名無しさん:05/02/26 22:45:32
Unicode版とMBCS版で速度比較したらどんな結果がでるんだろうか?

533 :デフォルトの名無しさん:05/02/26 22:53:27
両対応にするとソースが
#ifdef _UNICODE
・・
#else
・・
#endif
だらけになる。

534 :デフォルトの名無しさん:05/02/26 23:23:05
>>533
> だらけになる。

・CStringみたいな文字列クラスを適切に使う
・TCHARだの_tcs*だのを使う

ってのを徹底すればそうでもない
完全になくすわけにはいかないけど、
末端に追いやることはできるっしょ

>>532
どっかないかねえ?

535 :デフォルトの名無しさん:05/02/26 23:43:13
ちょっとした比較物作ろうとしてもVC6だとiostream系が
(ノ∀`)アチャー
だからなぁ・・・。

536 :デフォルトの名無しさん:05/02/26 23:44:41
ファイル名はFindFirst系とかどうかな
User32だと何が適切だろう

537 :デフォルトの名無しさん:05/02/26 23:59:59
キーコードを、実際の文字charに変換する関数はなんでしょうか?

538 :デフォルトの名無しさん:05/02/27 00:10:31
>>537
MFCだけど
str.Format("%c ", nChar);

539 :デフォルトの名無しさん:05/02/27 01:33:20
すんごいバカ

540 :デフォルトの名無しさん:05/02/27 01:44:28
>>537
ms-help://MS.PSDK.1033/winui/winui/windowsuserinterface/userinput/VirtualKeyCodes.htm

541 :540:05/02/27 01:46:01
>>537
何貼ってんだ俺
MapVirtualKey

542 :デフォルトの名無しさん:05/02/27 06:10:16
ウィンドウアプリケーションからコンソールアプリケーションを実行して、
出力される情報をリアルタイムで得るにはどうしたらいいのでしょうか?
出力をファイルにリダイレクトすれば、実行後には出力結果を得られますが、
あいにく実行時間が長いプログラムなので、リアルタイムで出力情報が欲しいのです。

543 :デフォルトの名無しさん:05/02/27 06:10:57
ぱいぷ?

544 :542:05/02/27 06:22:12
自己解決しました。検索したら出てきました。
CreateProcessに渡すSTARTUPINFO構造体にhStdOutputという標準出力ハンドルがありました。

545 :デフォルトの名無しさん:05/02/27 09:57:22
>>541
かっこわるぅ〜。馬鹿だね。

546 :デフォルトの名無しさん:05/02/27 10:44:45
>>537
MapVirtualKeyでGo!
KeyDownイベントで拾うんだぞ。
ほかの同様のKeyイベントがあるけど、仮想キーコードが異なるんだ。

547 :デフォルトの名無しさん:05/02/27 11:56:01
>>546
それで今までやってきたのか・・・分かってないんだねぇ・・・
俺の部下にも注意しないと。

548 :537:05/02/27 12:07:37
>>546
仮想キーコードが異なる場合、どのように対処すればいいのでしょうか?
同じキーでも、コードが異なるのでは処理がややこしくなるのですが。

549 :デフォルトの名無しさん:05/02/27 12:35:58
純粋にどのキーが押されたのかを知りたいだけなら、
GetAsyncKeyStateでも使えばいい。
本当はゲーム作ったりする時に使う関数だから、メッセージ通す方法の方が
いいのかもしれないけどね。

550 :デフォルトの名無しさん:05/02/27 13:12:33
>>549
>>547

551 :デフォルトの名無しさん:05/02/27 13:44:05
>>549
どっちかというと装飾キーの状態判定がメインな気が

552 :デフォルトの名無しさん:05/02/27 14:34:33
SelectObject(pPen);をはじめて実行したときは何が返ってくるんですか?


553 :デフォルトの名無しさん:05/02/27 15:54:53
コンパイルエラー

554 :デフォルトの名無しさん:05/02/27 16:24:17
506ではないですが、
自前でIMEの変換状態を描画しているのですが
COMPOSITIONとCANDIDATEの各ウィンドウを
表示させない(変換動作はバックグラウンドで行う)ように
するにはどうすればいいか、ご存知の方はいませんか?


555 :554:05/02/27 17:19:49
COMPOSITIONウィンドウは以下で
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
HIMC hIMC = ImmGetContext(hWnd);
COMPOSITIONFORM cmf;
cmf.dwStyle=CFS_RECT;
cmf.rcArea.left=0;
cmf.rcArea.right=-5;
::ImmSetCompositionWindow(hIMC,&cmf);
・・・
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
とすれば、非表示になりましたが、CANDIDATEウィンドウを
非表示にする方法が分かりません。誰か教えてください。

556 :デフォルトの名無しさん:05/02/27 17:48:55
>>552
以前選ばれていた、Penハンドルが返ります。

557 :デフォルトの名無しさん:05/02/27 17:57:36
要するに、何も選ばれて無い状態のPenハンドルは、黒のドット一本線ですから。
それが返ります。
つまり、デフォルトの状態が返るわけです。

558 :デフォルトの名無しさん:05/02/27 18:13:05
>557
それを保存して後でまたSelectObject関数で戻さないといけないんですよね?
戻さないと何か問題ありますか?

559 :デフォルトの名無しさん:05/02/27 18:20:53
>>558
いえ、戻さなくても問題はおきませんが。
ただ、元(デバイスコンテキストに対するデフォルトな状態)に戻したいばあいは必ずあるので、SelectObjectが返すオブジェクトは大切だと思いますが。

560 :デフォルトの名無しさん:05/02/27 18:54:48
現在選択中のGdiObjectはDeleteObjectに失敗するので、
GDIリソースが漏れる。

561 :デフォルトの名無しさん:05/02/27 20:02:05
>559-560
thx


562 :デフォルトの名無しさん:05/02/27 20:26:39
GetStockObjectでとってきたGDIオブジェクトは解放せんでええから
いざとなったらそれSelectすればいい話だけどな。

563 :デフォルトの名無しさん:05/02/27 20:41:45
なるほど、良いこと聞いた

564 :デフォルトの名無しさん:05/02/27 20:51:07
スレッドA,B,Cがあって、CがEnterCriticalSectionでクリティカルセクションに入って
次にA,Bの順で同じクリティカルセクションに入った場合、
CがLeaveCriticalSectionで抜けると、次はAが動き始め、Bは待つのですか?
A,Bが一緒に動き始めたりしないですか?

Win2000です。



565 :デフォルトの名無しさん:05/02/27 20:52:53
ミューテックスをロックできた順に動きます。

566 :デフォルトの名無しさん:05/02/27 21:11:16
>>564

>次にA,Bの順で同じクリティカルセクションに入った場合、
>CがLeaveCriticalSectionで抜けると、次はAが動き始め、Bは待つのですか?
>A,Bが一緒に動き始めたりしないですか?

用語が混乱してますね。「クリティカルセクションに入った」ってことは、
Mutexをすでに獲得したということですよ。

というのは措いといて、A,Bが同時に動くことはありません。
必ず一つずつです。

567 :デフォルトの名無しさん:05/02/27 21:20:27
全てのコントロールをウィンドウ化させたら、重くなる?
ボタンもスクロールバーもタブもスライドもコンボボックスも。

568 :デフォルトの名無しさん:05/02/27 21:32:49
????????????

569 :デフォルトの名無しさん:05/02/27 21:37:28
全てのコントロールはウィンドウだと思われ


570 :デフォルトの名無しさん:05/02/27 22:00:02
VirtualAlloc(Ex)のflAllocationTypeのMEM_RESETって
どういうときに使うんでしょう?
page stateを変えるものではなさそうだし・・・

571 :デフォルトの名無しさん:05/02/27 22:08:45
>>566
平然とウソをつくのはやめてくれ。

572 :デフォルトの名無しさん:05/02/27 22:21:51
>>571
どこら辺がウソなの?


573 :デフォルトの名無しさん:05/02/27 22:35:13
>>572
クリティカルセクションとミューテックスを混同しているあたり。

574 :デフォルトの名無しさん:05/02/27 22:36:00
571ではありませんが
みゅーてっくすは全く関係ありません

575 :デフォルトの名無しさん:05/02/27 22:36:58
だから、素直にAdvancedWindows読め
Win32マルチスレッドプログラミングでもいいが

576 :デフォルトの名無しさん:05/02/27 22:39:11
>>570
AdcancedWindows読め
全ての答えが書いてある

577 :デフォルトの名無しさん:05/02/27 22:39:46
アドバンスド大戦略を読め。

578 :デフォルトの名無しさん:05/02/27 22:39:58
ここの奴らの言う事を鵜呑みにするなよ
合ってる場合は稀で、ほとんどが間違ってる
いいからAdvancedWindows買え

579 :デフォルトの名無しさん:05/02/27 22:40:33
アドバンスト覚えたて厨がうざいんですが

580 :デフォルトの名無しさん:05/02/27 22:41:28
アドバンスド・ファンタジアン

581 :デフォルトの名無しさん:05/02/27 22:42:01
>>564
EnterCriticalSection〜LeaveCriticalSectionで囲われた部分は同時に実行されない。
先にどこかのスレッドが中に入っている場合、後から来た方はEnterCriticalSectionで待ちぼうけ。
そういうことをさせるためのクリティカルセクション。

582 :デフォルトの名無しさん:05/02/27 22:44:31
クリティカルセクションはリソース競合が起きなかった場合、カーネルモードに移行しない
競合が起きた場合でも、所有権を持つスレッドはカーネルモードに移行せず実行される
だからミューックスより速い
これらの情報はすべてAdvancedWindowsに載ってる
買え

583 :デフォルトの名無しさん:05/02/27 22:54:11
もうスレッドとか、カーネル周りの質問とかは「AdvancedWindows読め」でいいよね。

584 :デフォルトの名無しさん:05/02/27 22:54:35
GameBoyAdvance

585 :デフォルトの名無しさん:05/02/27 22:56:26
>>574
あー、そういう意味でMutexと書いたわけではないのだが・・・。
いわゆるCreateMutex等で作られるオブジェクトではなく、
相互排他に使われるモノ一般のことを言ったんだけど、
確かに誤解される書き方でした。失礼。

しかしまあ、「クリティカルセクション」ってのは、
一般に相互排他されたコード領域を指す言葉なわけで、
クリティカルセクションに入「った」ってことは、
すでに相互排他された状態だと思うわけですよ。

WindowsのCRITICAL_SECTIONのおかげで、若干混乱しがちですが。

586 :デフォルトの名無しさん:05/02/27 22:59:14
>>585
おまえ、ミューテックスってどういう意味かわかってないだろ
いいからAdvancedWindows買えよ
意味載ってるから

587 :デフォルトの名無しさん:05/02/27 23:01:07
MuTeX は TeX で楽譜を組版するためのマクロパッケージです

588 :デフォルトの名無しさん:05/02/27 23:02:42
>>585
ホントに分かってなかったんだな。軽くジャブ入れただけだったのに。
どんまい。勉強して出直してきな。

589 :デフォルトの名無しさん:05/02/27 23:12:25
本屋の回し者がいっぱい居るな、ボケ

590 :デフォルトの名無しさん:05/02/27 23:17:21
こんにちわ、紀伊国屋書店です。

591 :デフォルトの名無しさん:05/02/27 23:22:32
紀伊国屋書店は、なぜ、カウンター員とレジ処理員が別になってるのか、理由きぼんぬ。

592 :デフォルトの名無しさん:05/02/27 23:23:32
MSDN のPlatform SDKのSynchronization Objectsにこと細かく書いてあるじゃん

593 :デフォルトの名無しさん:05/02/27 23:54:46
>>533
自作ライブラリのUnicode対応をやった。C++前提だと意外と楽だね。
関数オーバーロードとテンプレートを駆使して
MBCS版バイナリとUnicode版バイナリを、生成物の中で両立できた。

TCHAR.H依存のマクロ切り替えだと
MBCS版バイナリとUnicode版バイナリが共存できない。

594 :564:05/02/27 23:59:23
みなさん。いろいろありがとうございました。
AdvancedWindows持ってますがいま会社に置きっぱなしなので
明日読みます。では

595 :デフォルトの名無しさん:05/02/28 00:48:17
AdvancedWindowsは定番って書いてあるのに
なんでAmazonだと配送に4〜6週間かかるんだろう?

596 :デフォルトの名無しさん:05/02/28 01:15:59
AdvancedWindowsなんて、普通の一般人は読まんよw
たぶん、在庫がないから発注してるんだろうな。

597 :デフォルトの名無しさん:05/02/28 01:38:04
普通じゃない一般人

598 :デフォルトの名無しさん:05/02/28 01:52:56
この業界なら普通だろ。
Windows系扱う会社でこの本が常備してないとこはヤバイな。

599 :デフォルトの名無しさん:05/02/28 02:07:50
Windowsプログラミングを仕事としている会社なんて極僅かだよw

600 :デフォルトの名無しさん:05/02/28 02:12:38
普通の一般人w

601 :デフォルトの名無しさん:05/02/28 04:51:07
私は普通の一般人です。
皆さんは普通の一般人ですか?

602 :デフォルトの名無しさん:05/02/28 05:38:59
P5ページです。

603 :デフォルトの名無しさん:05/02/28 09:37:27
ここはひどい AdvancedWindows ですね。

604 :デフォルトの名無しさん:05/02/28 10:00:56
AdvancedWindowsお買い上げいただきましてありがとうございます。

605 :デフォルトの名無しさん:05/02/28 10:19:28
AdvancedWindows ぬるぽ

606 :デフォルトの名無しさん:05/02/28 10:44:05
パスの示すものがファイルなのかフォルダなのかを調べる
APIを教えてください。以前使ったことがあるんですけど、
忘れちゃって…。

607 :606:05/02/28 11:05:08
すいません、たまたま見つかりました。
GetFileAttributes ですね。

608 :デフォルトの名無しさん:05/02/28 18:05:15
WM_VSCROLLって垂直スクロールバーを触ったときに来るメッセージだけど
スクロールバーに触ってない状態でスクロールバーが動いたときにくるメッセージないの?

609 :デフォルトの名無しさん:05/02/28 18:39:40
sendmessageでWPARAMのLOWORDにメッセージ送りたいんだけどできる?

610 :609:05/02/28 18:57:34
解決した

611 :デフォルトの名無しさん:05/02/28 18:57:53
>>608
或る夜

612 :デフォルトの名無しさん:05/02/28 19:00:02

文字間を制御する必要があるため、TextOutで1文字づつ出力しているのですが、ごく稀に
代替フォントで使用されたフォントがずーっと使用されてしまうことがあります。
1文字づつSelectObjectすればちゃんと出るのは確認してますが非常に遅くなります。

文字種(漢字・アラビア文字・ヘブライ文字とか)が分かればその変わり目で
再設定すれば良さそうなのですが、文字種を判定するにはどうしたら良いでしょうか。
テーブル作るのが早いのかなぁ…
あるいは代替フォントが使用される・されない・使用不可、等が判定できる方法が
ありましたらご教授ください。



613 :デフォルトの名無しさん:05/02/28 19:38:48
GetFontUnicodeRanges
とかか?

614 :デフォルトの名無しさん:05/02/28 20:00:20
>>611
はぁ?嘘言ってんじゃねぇよデブ

615 :デフォルトの名無しさん:05/02/28 20:13:20
なんかここで聞くよりホント>>439買ったほうが早そうだな。
こいつらmsdnより使えないことに最近気づいた

616 :デフォルトの名無しさん:05/02/28 20:26:32
聞く側の分際で

617 :デフォルトの名無しさん:05/02/28 20:35:45
>>615 はmsdn使えないへたれ

618 :デフォルトの名無しさん:05/02/28 20:58:56
MSDNの検索がうまくいかない

619 :デフォルトの名無しさん:05/02/28 21:36:53
>>612
字が多くて読む気しない
質問以前

620 :デフォルトの名無しさん:05/02/28 21:45:39
ム板ってID出ないんだね

621 :デフォルトの名無しさん:05/02/28 22:12:55
馬鹿には見えないんだよ、きっと。

622 :デフォルトの名無しさん:05/02/28 22:23:41
(´-`).。oO(またデブ好きが紛れ込んでいるな。ぜひとも実際に会ってみたいものだ)

623 :デフォルトの名無しさん:05/02/28 23:53:18
デブ好きなんだ…

624 :デフォルトの名無しさん:05/03/01 00:24:41
漏れ、会社でMSDNを知らない人っていうのをはじめて見たよ
チョトびびった。

625 :608:05/03/01 08:40:36
教えてください。お願いします

626 :608:05/03/01 09:33:01
解決しました。

627 :608 ◆HRpxQ/NMfs :05/03/01 10:05:27
>>626は偽者ですので教えてください。お願いします

628 :デフォルトの名無しさん:05/03/01 10:15:10
スクロールバーに触ってない状態でスクロールバーが動いたとき
ってどんな状況だ?ホイールスクロール?

629 :デフォルトの名無しさん:05/03/01 10:16:06
>>608
WM_VSCROLL

630 :デフォルトの名無しさん:05/03/01 10:29:45
>>608
つ Spy++

631 :デフォルトの名無しさん:05/03/01 10:36:25
>>608
っ Winspector

632 :デフォルトの名無しさん:05/03/01 10:37:51
つ ω

633 :612:05/03/01 11:26:57
>613

ありがとう〜
GetFontUnicodeRanges
から辿ってみたら
GetGlyphIndices
てのもみっけ。

でもどちらも_WIN32_WINNT>=500なんでつね。
今回はXP前提なのでコレ使ってみまっす。



634 :デフォルトの名無しさん:05/03/01 12:09:26
ウィンドウベース(非コンソール)でのアプリケーションで
stdoutやstderrのデータを フック?して、EditBox等に表示したいんですが。
何かAPIありますか?

できれば、自分自身のアプリケーションと
systemやらCreateProcess、ShellExcecutなどで立ち上げた別のアプリケーションの
stdout,stderr,を別々に監視したいです。





635 :デフォルトの名無しさん:05/03/01 13:08:00
>>634
CreateProcessの引数のSTARTUPINFO構造体にstdin/out/errの各ハンドルを
指定できる。あとはパイプと組み合わせれば実現できます。
呼び出し側がVBならコレが使いやすいかもね。
ttp://www2d.biglobe.ne.jp/~Philopon/soft.html#tpcsrunca

636 :デフォルトの名無しさん:05/03/01 13:13:46
リッチエディットコントロールでは、
キーを押した時にメッセージは来ないのでしょうか。
普通のエディットコントロールでは、WM_COMMANDが来るようなのですが。

637 :デフォルトの名無しさん:05/03/01 13:42:07
リアルタイムにネットワークの転送量を表示したいのですが、
式はどうなるのでしょうか?
dwInOctets
dwInUcastPkts
dwInNUcastPkts
は表示できるのですが、Octetsは通信してない時も値が入ってますし・・
どうかよろしくお願いします。

638 :636:05/03/01 15:39:38
サブクラス化して、WM_KEYDOWNで処理する事にしました。

639 :デフォルトの名無しさん:05/03/01 16:06:28
調査結果:
ファイルアクセスを必要とする場合、SJIS形式のファイルを読み込む処理がある場合が多い。
UNICODEファイルを読み込むケースはほとんどない。
SJISファイルをUNICODEビルドで読み込む場合に用いるC標準関数_fgetts()が非常に遅い。
エンコードと無関係な部分においても、
文字列ソートする際などに用いる比較関数_tcsicmp()の処理がUNICODE版は非常に遅い。


補足:
MFCのUNICODE版ソケットクラスには長らく不具合が存在した。
ソケットプログラムのようなマルチプラットホームを意識すべき環境には、
UNIOCDEで開発する人が少ないので不具合の発見が遅れたとみるべきだろう。


結論:
多くの場合、UNICODEビルド生成物は処理が遅い。
単にバッファサイズが2倍必要になるだけなく、諸々の処理も重くなる。
UNICODEビルドの優位性を確認できない場合がほとんどである。

640 :637:05/03/01 16:49:20
移動します。スレ汚しスマソ

641 :デフォルトの名無しさん:05/03/01 17:04:17
C#NETなんですが、ListBoxのある特定のItem(行)の
文字色を変えたり、背景の色を変えたりすることはできますか?

642 :デフォルトの名無しさん:05/03/01 17:04:32
>>639
Win32スレなのに、NT系におけるAPIコールの速度比較を
何一つ行っていないのにワロタ。

643 :デフォルトの名無しさん:05/03/01 17:11:10
MFCスレでやれ。

644 :デフォルトの名無しさん:05/03/01 17:45:36
>>641
オーナードロー使え。
そしてスレ違い。

645 :デフォルトの名無しさん:05/03/01 18:36:50
>>644
色変えたいだけなのに
オーナードロー使え?
馬鹿も休み休み言え!

646 :デフォルトの名無しさん:05/03/01 18:39:57
>>645
オーナードロー

647 :デフォルトの名無しさん:05/03/01 18:43:42
正解はWM_CTLCOLORLISTBOX

オーナードローとか言ってる馬鹿は氏ね。

648 :デフォルトの名無しさん:05/03/01 18:57:49
こんばんわ

//フォーマット出力
void Format(TCHAR* pFm,...){
TCHAR pOut[MAX_LOADSTRING];
wsprintf(pOut,pFm,...);
}

フォーマット出力をするwsprintfを、自分で作成した関数Formatでラップしたのですが、
なぜかwsprintfの ... の部分の指定がおかしいとのエラーが出ます。
この場合、wsprintfの ... の部分はどのように指定すればいいのでしょうか?

宜しくお願いいたします。

649 :デフォルトの名無しさん:05/03/01 19:02:28
#include <stdarg.h>

va_list v;
va_start(v,pFm);
wvsprintf((char*)pOut,(char*)pFm,v);
va_end(v);

これで解決です。


650 :デフォルトの名無しさん:05/03/01 19:11:37
DirectXのバージョン情報を取得したいのですが、
どうやって取得したらいいのでしょうか?
SDKってやつも見てみたのですが、
なにで検索していいのかさっぱりわかりませんでした。
もしかしたらスレ違いかも知れないのですが、
よろしくお願いします。

651 :デフォルトの名無しさん:05/03/01 19:12:41
スタートメニューの「ファイル名を指定して実行」からdxdiagです。

652 :デフォルトの名無しさん:05/03/01 19:12:56
>>639
UNICODEビルドでSJISファイルを読むのに_fgetts()を使ってどうすんだよ。 w
無茶苦茶だな。

653 :デフォルトの名無しさん:05/03/01 19:14:56
>>647
オーナードロー

654 :デフォルトの名無しさん:05/03/01 19:15:20
>>647
行ごとにWM_CTLCOLORLISTBOXメッセージが来ないんですが・・・
うちのWindowsが悪いのかな



                       (・∀・)ニヤニヤ

655 :デフォルトの名無しさん:05/03/01 19:18:42
>>647
そのメッセージでどうやって特定の行の色を変えるの?

656 :デフォルトの名無しさん:05/03/01 19:19:40
そんなはずはありません。
OSを再インストーノレし最新パッチを当てれば解決します。

657 :デフォルトの名無しさん:05/03/01 19:20:50
おまいら釣られすぎですよ。

658 :デフォルトの名無しさん:05/03/01 19:21:42
こんなとこで釣りすんなよ
だれも寄り付かねーぞ

659 :デフォルトの名無しさん:05/03/01 19:28:46
>>651
ありがとうございます!
これで表示されているDirectXのバージョン情報を
API(C言語)で取得するのは可能なのでしょうか?
MSDNを見たのですが、どこのレジストリに書き込まれているのか
みつけられませんでした…


660 :デフォルトの名無しさん:05/03/01 19:35:50
>>659
GetFileVersionInfoで検索すればわかるよ

661 :デフォルトの名無しさん:05/03/01 19:35:55
>>639 
>UNICODEビルドでSJISファイルを読むのに_fgetts()を使ってどうすんだよ。 w 
>無茶苦茶だな。 


は?



662 :デフォルトの名無しさん:05/03/01 19:44:58
>>652
UNICODEビルドで速度を実測したことないのか?

APIへ文字列渡しする機会などほとんどない。
よってAPI呼び出しによる差異はほとんど発生しない。

むしろ、CのUNICODE関数が遅いために問題が発生する。
バッファをエンコードせず直接読み出した場合、
結局MBCS系の関数を使い続けなければならず、
UNICODE関数はSJISファイル処理に向いてない。

663 :デフォルトの名無しさん:05/03/01 19:47:57
ちょっと分からないのでヒントください。

今、ハードウェアを制御するアプリケーションを作っていて、ハードウェアには付属のDLLが付属していてそれを使ってコントロールまでは出来ます。
そこで、2つのアプリケーションからそのハードウェアを制御したいのですが、付属のDLLを使用すると当然1つのアプリケーションしか制御できません。
(2つ目のアプリケーションを実行した時点でハードウェアが無いと怒られる)
そこで、複数のアプリケーションから操作できるように付属DLLを操作するDLLを作成していて
今現在、DLL間での変数の共有やGetProcAddressで関数のアドレスの取得などやってみたのですが、動かず。
GetProcAddressは仮想メモリ空間のアドレスなので他プロセスから呼び出せないのは当然な所までは分かりました。
こんな感じにしたいのですが↓

 アプリケーション1→|
             |制御DLL→付属DLL→ハードウェア
 アプリケーション2→|

今思い浮かぶ解決策としては、別プロセスの関数を呼び出す、もしくは
DLL内にスレッドを作成し、スレッドをループさせ、共用変数を監視して実行させる方法の2種類です。
もうちょっと簡単な方法があると思うのですが、何かヒントをください。

664 :デフォルトの名無しさん:05/03/01 19:50:59
>>663
そんな君にこそAdvancedWindows。
読めばたぶん即・解決。
ここで説明してやってもいいけど長くなりそうなんでね・・・。
とりあえずNt系ならCreateRemoteThreadでも試せば?

665 :デフォルトの名無しさん:05/03/01 19:51:16
アウトプロセスCOMにでもしといたら?

666 :デフォルトの名無しさん:05/03/01 19:52:04
>662
UNICODEビルドなら、ReadFile直後にMultiByteToWideChar。
何でCRTのMBCS関数が関係するのかわからん。

667 :デフォルトの名無しさん:05/03/01 19:52:06
GetTextExtentPoint32
wsprintf

とりあえず思いついた、上記二つの関数1,000,000回連続呼び出しという
意味の無さそうなテストの結果。

UNICODE : GetTextExtentPoint=2.406sec wsprintf=2.407sec
MBCS : GetTextExtentPoint=2.547sec wsprintf=2.735sec

結論:
差はあるっつえばある

668 :デフォルトの名無しさん:05/03/01 20:00:35
>>663
漏れもOutprocのCOMにするのに1票。簡単だから。
何らかの事情でそれが出来ないなら、自前でサーバプロセスを作って、
クライアントはWindows Messageなりソケットなりで繋げて使う。

669 :デフォルトの名無しさん:05/03/01 20:04:25
>>666
え?
それじゃ、_wfopen()、fgetws()をテキストモードで用いるのと同じだろw


>>667
GUならびにリソースを文字列渡しAPIで操作する機会は少ない。
1秒に1000回あるかどうか。

実際に圧倒的に多いのはユーザが用いる文字列比較関数・文字列操作関数。
この作業は、ユーザによるただのメモリ操作に属するが、
しかしこの作業がプログラム処理の主体になる。

670 :デフォルトの名無しさん:05/03/01 20:07:52
>669
fgetwsとはMultiByteToWideCharの呼び出し頻度が異なる。
その上スレが違う。

671 :デフォルトの名無しさん:05/03/01 20:09:35
msvcrtはもはやAPIの一種だろ
アフォ

672 :デフォルトの名無しさん:05/03/01 20:10:56
えーとUNICODEについていけないUNIX厨乙?

673 :デフォルトの名無しさん:05/03/01 20:11:45
>>669
メモリ帯域は最近比較的多目なので、文字列操作で1バイトずつ処理するのも
1ワードずつ処理するのもたいして変わらないような気がする。

扱う対象がSJISならSJISのままでやればよろし、というのは当然だけどさ。

674 :デフォルトの名無しさん:05/03/01 20:12:27
ワードはプリフィックス付くからx86系では不利

675 :663:05/03/01 20:23:49
色々制約が付いちゃってるのでOutProcのCOMとか使えないのでループさせる方法で行きます。
答えて頂いた方々、ありがとうございました。

AdvancedWindowsは買ってみようと思います。

676 :デフォルトの名無しさん:05/03/01 21:14:26
これもスレ違いだけど、STLのアルゴリズムとかstd::wstring、つまりstd::char_traits<wchar_t>とかだとどうなんだろうか。

677 :デフォルトの名無しさん:05/03/01 22:22:44
 アプリケーション1→|
             |自前DLL→ハードウェア
 アプリケーション2→|

678 :デフォルトの名無しさん:05/03/01 22:26:31
>>663
DLLはそれぞれのプロセスでLoadする必要があることは理解してる?

679 :デフォルトの名無しさん:05/03/01 22:28:16
DLL側で排他制御すりゃいいじゃん

680 :デフォルトの名無しさん:05/03/01 22:31:27
>>679
付属DLLが排他処理を実現していると何度言えば(ry
むしろ、その排他処理を無効化したい質問者の真意を汲めと何度言えば(ry

681 :デフォルトの名無しさん:05/03/01 22:33:55
1. DLLをどっかでロードしたらハードウェア制御スレッドを作り待機
2. プロセスがアタッチしたら歯痛スレッド作る
これだけでしょ?


682 :デフォルトの名無しさん:05/03/01 22:34:55
_tcsicmp()とlstrcmpi()の違いを記述しなさい。
また、その処理速度の違いについても記述しなさい。

683 :デフォルトの名無しさん:05/03/01 22:36:45
strcmpごときの速度でガタガタ言ってんじゃねーよヴォケ

684 :デフォルトの名無しさん:05/03/01 22:42:17
クラッキングしたいと言っている質問者に
なぜか自前の排他処理を紹介する日本語の不自由なスレ住人。


1.DLLを使うミニプログラムを作成する。
2.そのミニプログラムは起動時の引数指定で異なる動作を行い、すぐに終了する。
3.2つのプログラムから好きな時にミニプログラムをキックする。。

685 :デフォルトの名無しさん:05/03/01 22:42:40
リソースが1っこだけならかなり簡単な問題だと思うが。
Windowsならなおさら。

686 :デフォルトの名無しさん:05/03/01 22:46:41
663は単にスレッドとプロセスの違いを知らない人みたいだが。

687 :デフォルトの名無しさん:05/03/01 22:48:07
AdvancedWindows読めといったはずだが。

688 :デフォルトの名無しさん:05/03/01 22:48:39
684=663な気ガス

689 :684:05/03/01 22:49:46
>>684のDLLは付属DLL。

対処法その2
1.「付属DLLを使うプログラム」をウィンドウアプリとして作成。
2.「付属DLLを使うプログラム」はメッセージループさせつつ常駐。
3.別プログラムから「付属DLLを使うプログラム」にユーザー定義メッセージなどを送る。


690 :デフォルトの名無しさん:05/03/01 22:53:25
>>682
_tcsicmp()はCライブラリ関数(の処理系独自拡張)。lstrcmpi()はWinAPIの関数。
lstrcmpi()は一般に時間が掛かる(と言われている)DLLの関数を呼び出すことになるので、
計測してみたら(どの程度の差が出るかはともかくとして)おそらくlstrcmpi()が_tcsicmp()より遅くなるだろう。

691 :684:05/03/01 22:53:45
対処法その3
1.「付属DLLを使うプログラム」をソケットサーバーとして作成。
2.「付属DLLを使うプログラム」をlistenさせつつ常駐。
3.別プログラムから「付属DLLを使うプログラム」にソケットで命令送信。

692 :デフォルトの名無しさん:05/03/01 22:54:12
メッセージループとか意味不明なこといってる可哀想な684は放置ということでOK?


693 :デフォルトの名無しさん:05/03/01 22:56:49
>>692
その2、その3は妥当だと思うけどね。 SendMessageって使ったことないの??

694 :デフォルトの名無しさん:05/03/01 22:58:12
>>690
あのさあ、msvcrt.dll使うことにしたらどのみちdllの関数呼び出すんだけど

695 :デフォルトの名無しさん:05/03/01 22:58:49
なんでわざわざメッセージキューなんて使うのかな・・
不思議

696 :デフォルトの名無しさん:05/03/01 22:59:38
一番の対処法は、付属DLLのマニュアルを良く読むことだと思う。

697 :デフォルトの名無しさん:05/03/01 23:00:23
>>693=684
ちょっと黙っててもらえる?

698 :デフォルトの名無しさん:05/03/01 23:02:46
>>694
スマソ
忘れていた。

699 :デフォルトの名無しさん:05/03/01 23:03:20
問題は>>663がWindowsの排他処理を理解してるのかどうか

700 :デフォルトの名無しさん:05/03/01 23:06:09
DLL関数の呼び出しはIAT(インポートアドレステーブル)というものあってだね、
それ経由で間接的に呼び出されるのだよ。
だから静的リンクされたライブラリよりちょっとばかし不利になる。
不利といっても参照かjmpが一回増えるだけだけどね。
ということがAdvancedWindowsに書いてあったりなかったり・・


701 :デフォルトの名無しさん:05/03/01 23:08:59
今、確信をもって言えることは質問に対して見当違いな排他処理を説明して
その間違いを指摘した善意の別人を質問者と同一人物と思い込んで
勝手に他人を自演認定しているテンパッたアフォが一名、
このスレを荒らしているということだ。

702 :デフォルトの名無しさん:05/03/01 23:09:23
>>669
そのDLLがどんなものかわからないけど簡単にリソースのオープンとクローズが
できるならプロセス間の排他処理でいけますが、
オープンのときにハードウェアに時間のかかる初期化処理が発生するなどの
理由でそういった操作が不可能なんじゃないかな。
そういう理由なら1プロセスに処理を集中する必要があるように思うよ。

703 :デフォルトの名無しさん:05/03/01 23:10:14
まあ、これには例外があって
GetProcAddressで得たDLL関数はIATを経由せずに呼び出せる。
GetProcAddressは直接エクスポートされた関数アドレスを返す。
だからもしもより速い方が良いと思うのなら、
使うDLL関数をGetProcAddressで取得しなおすと良いかもしれない。

704 :デフォルトの名無しさん:05/03/01 23:11:20
切れた。
>>703>>701の続き。

705 :デフォルトの名無しさん:05/03/01 23:13:25
>>701
だから最初に起動したプロセスのDLLの一番はじめに制御スレッド立ち上げて
プロセスアタッチ毎に排他制御しろってのが伝わってないみたいだね。
わかんないのはDLLの原理が理解できてないだけ。

706 :デフォルトの名無しさん:05/03/01 23:16:25
>>705
一番わかってないのは君だと思う。

707 :デフォルトの名無しさん:05/03/01 23:16:48
701が痛すぎる件について

708 :デフォルトの名無しさん:05/03/01 23:20:38
一番痛いのは>>705だろうね。
ユーザーが何をしたいか、どのような制限化にあるか、
全く理解できていないと思われる。
いつからユーザーがDLLを作ることが前提になったのか不思議だ。

709 :デフォルトの名無しさん:05/03/01 23:24:31
まあ、質問自体がスレ違いだけどねw

710 :デフォルトの名無しさん:05/03/01 23:27:21
つまりさあ、
制御DLLだけは663が弄れるんだろ?

アプリ1 → 制御DLL → 付属DLL

最初のアプリ、制御DLLで2つスレッド立ち上げるんだわ。
付属DLLを制御するスレッド
制御スレッドに命令を送るスレッド
ついでにCreateMutexかなんかの排他制御用オブジェクトと
命令通知用のイベントオブジェクトを作る。
データを共有したかったら制御DLL内に共有セクション作ればいい。

アプリ2 → 制御DLL

制御DLLがこんときに立ち上げるスレッドは1つ
制御スレッドに命令を送るスレッド
付属DLLはアプリ1の制御DLLが占有してるのでリンクしない。

これでわかんねーかなあw

711 :デフォルトの名無しさん:05/03/01 23:28:26
>>690
_stricmp()ではないけど、UNICODE環境で速度を試してみた。
400000個ほどあるUnicode文字列をqsortでソートする際の比較関数を変えてみた。

_tcsicmp() 17秒 ※実際は_wcsicmp()
lstrcmpi() 2秒


予想に反してlstrcmpi()が速いのだけど、_wcsicmp()が異様に遅いともいえる。
誰か理由を教えてくれ・・・。

712 :デフォルトの名無しさん:05/03/01 23:34:13
lstrcmpiってUNICODEじゃないと思うけど。
なんか勘違いしてるとか。

713 :デフォルトの名無しさん:05/03/01 23:35:22
つーか無能の人はどうして粘着してるの?

714 :デフォルトの名無しさん:05/03/01 23:35:30
>>710

怒るかもしれないが、書かせてもらう。
制御DLLが必須ということになっている時点で、
君の中で強固な脳内補完が行われたのではないかね?
いくら排他制御を実装したところで、それを利用できるのは自分のプログラムだけだろ。

715 :デフォルトの名無しさん:05/03/01 23:39:03
>>712
人を勘違い呼ばわりする前に、自分が勘違いしてないか
確認した方がいいぞ。
WinBase.hでも見てこい。

716 :デフォルトの名無しさん:05/03/01 23:41:12
>>714
やっぱ俺の説明ちっとも理解してないみたいね。

>自分のプログラムだけだろ。

これ、何の反論なの?
>>663に対して説明したつもりなんだけど。
意味不明なんですがw

717 :デフォルトの名無しさん:05/03/01 23:42:16
こんばんわ

アドビのホットショップみたいに、
ツールウィンドウをクリックしても、親のウィンドウはアクティブなままにしておく方法を教えていただきたいのですが。

通常だと、TOOLWINDOWをクリックすると、親のウィンドウは非アクティブ化しますが、
TOOLWINDOWも親のウィンドウも両方ともアクティブのままにしておきたいのです。

よろしくお願いいたします。

718 :デフォルトの名無しさん:05/03/01 23:42:48
663が退場している以上その辺は闇のなかだなぁ。前提が異なるだけで
みんなそんなにはずしてないように思うけどね。
ただいえることは、675の書き込みが微妙すぎる(笑

719 :デフォルトの名無しさん:05/03/01 23:47:41
一家に一冊AdvancedWindows

720 :デフォルトの名無しさん:05/03/01 23:49:41
>>718
>みんなそんなにはずしてないように思うけどね。 

排他処理を用意しようとしている人は、思い切りはずしているでしょw
制御DLLを作ってもかまわないが、排他処理を入れる意味が全くない。

721 :デフォルトの名無しさん:05/03/01 23:53:38
↑馬鹿?

722 :デフォルトの名無しさん:05/03/01 23:57:30
>>720
付属DLLを複数で使うための排他制御なんだが。
付属DLLからぶら下がってるハードウェアは関係ない。
なんも理解してないな。


723 :デフォルトの名無しさん:05/03/01 23:59:18
ちなみにさあ、

>制御DLLが必須

とか妙な思い込みしてるみたいだけど、
DLL化しなくていいなら直接アプリ自身で制御DLLの役やっても変わらないが。
いいかげんAdvancedWindowsでも読んだら?


724 :デフォルトの名無しさん:05/03/02 00:01:58
>>711
普段気にしたことはないけどsetlocale系の設定って影響すんでしょうかね?
APIのlstrcmpiはコントロールパネルのロケールで動いてるんでしょうけど。

725 :デフォルトの名無しさん:05/03/02 00:10:25
>>720=>>714=>>708=>>706=>>701=>>693=>>684

726 :デフォルトの名無しさん:05/03/02 00:16:24
>>694
Cランタイムをスタティックリンクすることも多いよ

727 :デフォルトの名無しさん:05/03/02 00:17:03
>>717
Spy++かなんかでホットショップとやらの窓のスタイルがどうなってるのか調べる。

728 :デフォルトの名無しさん:05/03/02 00:20:28
>付属DLLからぶら下がってるハードウェアは関係ない。 

だからこそ、排他処理を自分で作る意味ないつってんだろ、アフォかお前?
オナニー排他処理なぞ作って楽しいのか?

729 :デフォルトの名無しさん:05/03/02 00:22:39
キチガイを飼ってるスレ

730 :デフォルトの名無しさん:05/03/02 00:31:14
>>728の脳内設計では排他制御は必要ないってことでいいんじゃない?
きちんと説明できないアフォみたいだし。

731 :デフォルトの名無しさん:05/03/02 00:34:01
そろそろWin32APIの話に戻ろうぜ。

732 :デフォルトの名無しさん:05/03/02 00:38:50
>>711
Cランタイムをスタティックリンクしてもダイナミックリンクしても
結果は同じ?

733 :デフォルトの名無しさん:05/03/02 00:44:54
>>689
ブラックボックス(この場合付属DLL)を抱えてる以上、メッセージ待機は危険。
ブラックボックス内でメッセージ処理されたら悲惨なことになる。

734 :デフォルトの名無しさん:05/03/02 00:49:27
これもある前提の上の話だけど、
ひとつの制御スレッドだけが付属DLLをコントロールする構造なら、各アプリからの
命令はシリアライズ(順番化)するまたはされるから排他処理はいらないとも
いえるし、シリアライズすることが一種の排他処理ともいえる。
それでも複数の命令をセットで発行する必要があるなら排他は必要になりますけどね。
最初の質問をした人が戻ってこないとこれ以上の議論は無意味だと思うよ。
>>733
「付属DLLを使うプログラム」<−ここは弁護するよ、これをよくみよう

735 :711:05/03/02 00:52:38
>>732

>>711はスタティックリンクを使ってます。
ロケールは、_tsetlocale(LC_ALL, _T(".ACP")) を実行しています

当方の環境は、ToolKit2003のため、
標準C++ライブラリをダイナミックリンクするためのMSVCPRT.LIBがないため、
即座にダイナミックリンクを試せないので、ダイナミックリンクでやる気が沸きません。
C ランタイム ライブラリ用MSVCRT.LIBは入っているのですが。
なぜ、このような中途半端な配布になっているのか謎です。



736 :デフォルトの名無しさん:05/03/02 00:54:58
>>733
>ブラックボックス内でメッセージ処理されたら悲惨なことになる。

もっと詳しく

737 :デフォルトの名無しさん:05/03/02 00:57:09
Ruby!!!!!!!!!!!!!!!!!!!!!!!

738 :デフォルトの名無しさん:05/03/02 01:05:13
技術を駆使して無意味なことを実装しようとしている馬鹿ばかり。
排他処理のための排他処理かよ。
ポーリングだけで十分じゃん。氏ね、お前ら。

739 :デフォルトの名無しさん:05/03/02 01:09:18
今時ポーリングだけですむような簡単なアプリを作ってらっしゃると。

740 :デフォルトの名無しさん:05/03/02 01:11:19
>>739
今時好きなだけフリーズする簡単なアプリを作ってらっしゃると。

741 :デフォルトの名無しさん:05/03/02 01:13:22
>>738
誰がどの書き込みかはわからなくなってるけど、
なんかこれは関係ないのが煽りにきた感じだな。

742 :デフォルトの名無しさん:05/03/02 01:14:25
ポーリング機能だけで十分だろ。
待つかどうかはユーザアプリ次第。

同期をDLLのなかでやろうとする馬鹿まで現れたか。

743 :デフォルトの名無しさん:05/03/02 01:14:27
ポーリングて聞くと、CPU占有率100%のあれですか?

744 :デフォルトの名無しさん:05/03/02 01:15:44
>>742
なんなの、そのユーザーアプリって。
ポーリングはどこに掛かってるの?

745 :デフォルトの名無しさん:05/03/02 01:25:06
まあいいじゃないか。
CPUを遊ばせておくよりは。

746 :デフォルトの名無しさん:05/03/02 01:30:43
AdvancedWindowsのおかげで彼女ができました

747 :デフォルトの名無しさん:05/03/02 01:36:47
AdvancedWindowsで城が建ちました。

748 :デフォルトの名無しさん:05/03/02 01:59:35
>>735
それ(_tcsicmp)ねえ、_tsetlocale呼ばないとすごく速くなるんだけど、
そのかわり"ABCDE"と"abcde"が区別されちゃう。
デフォルトでは大小文字判定する文字が限定されているようだ。

749 :デフォルトの名無しさん:05/03/02 02:53:57
_tcsicmp()と比較する場合は、
lstrcmpi()じゃなくてCompareString()でやらないとアンフェアということかねぇ。

750 :デフォルトの名無しさん:05/03/02 04:09:18
RickEditで、そのエディタ上でドラッグの動作をすると、
カーソルの点滅が止まってしまい、CPU率がすごく重くなるんですが、
解決方法がありましたら教えてください。

左ボタンを最初に押した時のみメッセージが来るようで、
押し続けている時は来なく、それはサブクラス化した場合も同じなので、
どれかのメッセージを防いで解決しようと思いましたがうまくいきませんでした。

751 :677:05/03/02 05:02:19
思うに
>>736 == >>730 == >>729 == >>718 == >>707 == >>706 == >>701 == >>693 == >>684 == >>663

752 :デフォルトの名無しさん:05/03/02 05:04:40
>>750
RickEdit
ってなんでしょう?

753 :デフォルトの名無しさん:05/03/02 05:17:40
リックエディット知らないの?ドムの一種だよ、ドム

754 :750:05/03/02 05:23:40
>>752>>753
すみません、間違えました。RichEditですorz。

755 :750:05/03/02 06:05:26
バージョンアップ版のRICHEDIT_CLASSだと、その重いのが
改善されているようなので、そちらでやってみたいと思います。
失礼します。

756 :デフォルトの名無しさん:05/03/02 07:06:50
>>751
この手の書き込みする奴に聞きたいんだけど、
「だから何?」

757 :デフォルトの名無しさん:05/03/02 07:08:16
msvcrtでの実装では、LOCALEがC以外のとき、
towlowerがとっても遅いのでそれに引きずられて
wcsicmpも遅くなる。何せ、かたやテーブル参照、方や
LCMapString呼び出しだから。

758 :717:05/03/02 07:18:39
>>727
Spyで調べて、スタイルをそのとおりにしましたが、
できませんでした。

誰か、解決法をご存知な方はいらっしゃいますか?
私の今必死にグーグルなどで調べています。

759 :デフォルトの名無しさん:05/03/02 07:21:27
WM_NCACTIVATE?

760 :デフォルトの名無しさん:05/03/02 07:39:45
リアルタイムにネットワークの転送量を表示したいのですが、
式はどうなるのでしょうか?
dwInOctets
dwInUcastPkts
dwInNUcastPkts
は表示できるのですが、Octetsは通信してない時も値が入ってますし・・
どうかよろしくお願いします。


761 :717:05/03/02 07:56:37
>>759
ありがとうございました。

もう一点ですが、アクティブ化されるウィンドウ(タイトルバーの色がアクティブ色になる)は、デフォルトでは必ずひとつですが、
2つ以上のウィンドウをアクティブ表示したいのですが、その方法をご存知でしょうか?
この辺の資料が少なすぎて、手探り状態です。

よろしくお願いいたします。

762 :デフォルトの名無しさん:05/03/02 08:55:25
>>660
調べてみます。
ありがとうございました!
レス遅くなってすいません。

763 :デフォルトの名無しさん:05/03/02 09:29:54
>>760
API GetIfEntryのMIB_IFROW構造体のことだと書かないとスレを移しても回答はないと思いますよ。

764 :デフォルトの名無しさん:05/03/02 09:32:45
>>763
すいません。誰かが探してくれているみたいです。

765 :デフォルトの名無しさん:05/03/02 09:41:28
エディトコントロール上でなく、普通のstaticウィンドウなどで、
漢字変換を実装したいのですが、ひらがなを引数に渡すと、
それに対応する漢字が得られるAPIがありましたら教えてください。

766 :デフォルトの名無しさん:05/03/02 10:14:14
複数候補があったときにどんな漢字にするかはどうやって決める?


767 :765:05/03/02 10:25:58
>>766
自作のウィンドウを出して、そこに得た漢字をずらっと並べて、
数が10個を超えた場合は、スクロール処理させる感じで、
そこで選んだ漢字を戻り値にして、元のウィンドウに表示させる感じです。

768 :デフォルトの名無しさん:05/03/02 10:30:40
第278章 IMEの操作 その1
第279章 IMEの操作 その2
第280章 IMEの操作 その3
第281章 IMEの操作 その4
第282章 IMEの操作 その5
第283章 IMEの操作 その6
http://www.kumei.ne.jp/c_lang/index_sdk3.html

769 :765:05/03/02 10:36:53
>>768
ありがとうございます。やってみたいと思います。

770 :765:05/03/02 10:56:36
たぶん探していたのはEnumRegisterWordProcですかね。
もう少し深く調べたいと思います。
お答えいただいた方、どうもありがとうございました。

771 :デフォルトの名無しさん:05/03/02 12:18:54
>>669
あんたの作るプログラムがすべてのように語られてもねぇ w

772 :デフォルトの名無しさん:05/03/02 12:51:25
誤爆?

773 :デフォルトの名無しさん:05/03/02 13:41:39
質問です。

Windows2000/XP系で、キーボードの低レベル割り込み
(9x系で言うとVxD)ってありますか?
また、Windows2000/XPに対してVxDでの割り込み(無理?)
できませんでしょうか?



774 :デフォルトの名無しさん:05/03/02 13:55:08
そういう質問をするときは、目的を書いて手段を聞いた方がいいと思うぞ。

775 :デフォルトの名無しさん:05/03/02 15:13:05
ウィンドウクラスに登録されているアイコンを取り出す(Get)場合、
どの関数を使うんですか?

776 :デフォルトの名無しさん:05/03/02 15:27:29
wincore.cppを見たいけど、どこのディレクトリにあるんだい?

777 :デフォルトの名無しさん:05/03/02 15:28:56
>>775
GetClassLongPtr

778 :デフォルトの名無しさん:05/03/02 16:10:13
>>776
MFCのことならスレ違い

779 :デフォルトの名無しさん:05/03/02 16:20:49
拡張子に関連付けられているアイコンを取得するにはどうすればいいのでしょうか?

780 :デフォルトの名無しさん:05/03/02 16:37:24
>>779
ExtractAssociatedIcon

781 :デフォルトの名無しさん:05/03/02 16:38:17
>>779
「アイコン 拡張子 取得 API」とかでググればすぐにわかるのに。

782 :779:05/03/02 16:42:42
>>780
d

783 :デフォルトの名無しさん:05/03/02 16:53:32
画像付きで
http://www.geocities.jp/ayana_city/window.jpg

表示されている2つのウィンドウを両方とも「タイトルバー部分のアクティブ表示」にしたいのですが、
どうすればいいのでしょうか?


784 :デフォルトの名無しさん:05/03/02 17:25:06
>>776
C:\Program Files\CBuilder6\Source\Mfc

785 :デフォルトの名無しさん:05/03/02 17:34:19
wm_mousewheel使うと定義されてないってなるんだけどどうすりゃ使えるんだ?

786 :デフォルトの名無しさん:05/03/02 18:15:41
>783
なんでそんなことしたいの?
フォーカスがどこにあるのか混乱するじゃん。

787 :783:05/03/02 18:21:35
>>786
ご返答助かります。

通常のウィンドウは、通常どおり、一つのウィンドウ(トップにある)だけアクティブにすればいいのですが、
ツールウィンドウは、常にアクティブにするような仕様にしたいのです。
フォットショップとかも、ツールウィンドウは常にアクティブ(タイトルバーの色もアクティブ)ですよね。

それに、ツールウィンドウは常にトップに位置するものですが、
このツールウィンドウが非アクティブになると、右上の閉じるボタン×が使えなくなり、

 ・トップに表示されているのに非アクティブ表示なのは不自然
 ・トップに表示されているのに、閉じるボタン×が使えない

ということになるので、
ツールウィンドウだけ常にアクティブ表示としたいのです。(タイトルバーの色がアクティブということです。)

グーグルで調べていますが、なかなかHitしません。
誰かご存知な方がいらっしゃいましたら、教えていただけないでしょうか。


788 :デフォルトの名無しさん:05/03/02 18:28:52
NCPAINTで自分で塗るのが早いんじゃないの。

789 :787:05/03/02 19:17:30
>>788
そうします。
自分でツールバーを模擬します。

そうするしか方法がないみたいです。
というより、Excelのツールバーを見て、ツールバー部分を独自に描画してるのを気づきました。 orz

790 :デフォルトの名無しさん:05/03/02 19:19:53
>>783
WM_NCACTIVATEを投げるの。

791 :663:05/03/02 21:15:07
DIALOG出してる時にmessageでWM_CHARが受けれないんだけど何か方法ありませんか?

792 :デフォルトの名無しさん:05/03/02 21:59:36
サブクラス化

793 :デフォルトの名無しさん:05/03/02 22:09:31
>>785
_WIN32_WINNTを0x400以上あるいは_WIN32_WINDOWSを0x410以上と定義してからwindows.hをインクルードすれば良い。
前者はNT4以降、後者だとWin98以降で追加されているAPIなどが使用可能になる。WM_MOUSEWHEELもその「など」のうち。

794 :デフォルトの名無しさん:05/03/02 22:43:17
ある一点(スクリーン座標)に対してマウスクリックメッセージを送る時に、
そこが非クライアント領域だった場合、どのウィンドウハンドルに対して
どんなメッセージと座標で送信すればいいんですか?
その点が非クライアント領域かどうかは WM_NCHITTEST を送って調べています。

795 :787:05/03/02 23:21:50
>>790
ありがとうございます。
WM_NCACTIVATEを投げて、
DefWindowProc(hWnd, message, 1, lParam);でアクティブ化したらできました。

ただ、タイトルバーはアクティブ表示になったのですが、
右端の閉じるボタン×が反応しなくなりました。
×ボタンを押しても、ウィンドウが閉じないのです。
見た目はアクティブ化されていますが、実際は非アクティブ化されたものでしょうから、
SetActivateWindowでアクティブ化をしましたが、×ボタンはマウスクリックに反応しません。
これはなぜなのでしょうか?

796 :デフォルトの名無しさん:05/03/02 23:24:35
>>760

797 :787 795:05/03/02 23:32:29
画像で説明しますとこうなります。
http://www.geocities.jp/ayana_city/window2.JPG

SHOWされている3つのウィンドウ全て、×ボタンに反応させたいのです。
なぜか、WS_EX_TOOLWINDOWの2つの×ボタンが反応しません。

798 :デフォルトの名無しさん:05/03/03 00:45:29
いつも安直に聞いて気が引けるのですが、
rich edit control の version を調べる API にありますでしょうか。
winXP では、問題ないみたいだけど、win98 では EM_GETPARAFORMAT
が失敗します。
winXP で、default での line spacing が間延びしているのをなんとか
したいと思っているところです。(wordpad も間延びしていると思って
います。)

799 :デフォルトの名無しさん:05/03/03 01:25:39
あのさあ、
OSのバージョンの問題とは思わないのかよ。

800 :デフォルトの名無しさん:05/03/03 01:28:28
DrawIconExでアイコンを描画したのですが、
VisualStudioで作成したアイコンを滑らかにしたような表示になるんですよね。
綺麗にみえるんですが、
そういう滑らかにする表現をしないで、ドットのまま描画させる方法ってありますか?

801 :デフォルトの名無しさん:05/03/03 02:33:47
サイズがあってないんだろうな

802 :デフォルトの名無しさん:05/03/03 02:44:24
>>800
48×48、32×32、24×24、16×16
をそれぞれ16色・256色・16777216色で全てアイコンファイルに組み込む。
ただし、16777216色版は必ずしも必要ない。

803 :デフォルトの名無しさん:05/03/03 03:50:17
>>798
クラス名とOSのバージョンで判断するんだったと思うが。
http://abfan.active.client.jp/024.html
リッチエディットは、新しいバージョンだと使えない機能なんかもあってややこしい。
各バージョンごとの機能の違いを書いたページがあったけど、URL忘れた。



804 :798:05/03/03 09:49:02
>>799, >>803 レス感謝。
>>クラス名とOSのバージョンで判断するんだった...
そうと思っていましたが、win98 の Windows フォルダ見たら、
riched.dll  v? ファイルバージン 4.0 257,440 バイト
riched20.dll v3.0 ファイルバージン 5.30.... 431,133 バイト
riched32.dll v? ファイルバージョン 4.00.... 197,392 バイト
があるので、EN_GETPARAFORMAT で PARAFORMAT2 が使えるのではと
期待しました。しかし失敗。バージョンが確認できて 2.0 未満なら
EM_GETPARAFORMAT を止めようかと思った次第。
  win98 では、2.0 に行かないんなら、上の dll はなんなんだろう
  って思ってしまった。
  line spacing では、ぐぐると、うまく行かない Q&A があったりする。


805 :804:05/03/03 11:17:34
7行目の EN_... は EM_... の間違い。失礼。

806 :デフォルトの名無しさん:05/03/03 14:45:41
>>793
_WIN32_WINDOWSを0x410以上と定義って意味わかんないんだけど

807 :デフォルトの名無しさん:05/03/03 15:41:27
>>806
#define _WIN32_WINDOWS 0x410
#include <windows.h>

808 :デフォルトの名無しさん:05/03/03 16:28:39
デバイスコンテキスト上での文字列の長さを知りたいのですが、
どの関数を使えばいいのでしょうか。

宜しくお願いします。

809 :デフォルトの名無しさん:05/03/03 16:40:28
strlen

810 :デフォルトの名無しさん:05/03/03 16:40:55
IEの右クリックで出るメニューの拡張ってどうやるんでしょうか
参考になるサイトがあったら教えてください

お願いします

811 :デフォルトの名無しさん:05/03/03 16:44:54
>>808
意味不明

812 :デフォルトの名無しさん:05/03/03 16:50:28
>>810
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt以下を弄くる
http://support.microsoft.com/?scid=kb;ja;177241

813 :デフォルトの名無しさん:05/03/03 16:58:31
>>807
余裕で同じエラーでるんだけど

814 :813:05/03/03 17:00:08
インクルードの前に#define持ってきたらできた

815 :810:05/03/03 17:00:54
>>812
ありがとうございました
見てみます

…聞いてみるもんだなあ

816 :808:05/03/03 17:50:17
文字列の長さがしりたいです。
文字列数(strlen)ではありません。

DCにSelectされているGDIOBJCTの状態での文字列の長さを知りたいです。

817 :デフォルトの名無しさん:05/03/03 17:53:38
はあ。
strlenじゃないとすると、GetTextExtentPoint32かな。

818 :デフォルトの名無しさん:05/03/03 18:30:10
長さじゃなくて、幅と言うべきかと。

819 :デフォルトの名無しさん:05/03/03 19:54:40
>>818
俺の感じてた違和感はそれだったのかー

820 :デフォルトの名無しさん:05/03/03 19:57:19
>>81
馬鹿か?黙っていればいいものを、それか、もっと別の面白いことでボケなさい

821 :デフォルトの名無しさん:05/03/03 20:00:28
>>818
文字列をGDIOBJECTとしてDCにSelectできるようなWindowsが出るまで
待ってくだちい。おながいします。

822 :デフォルトの名無しさん:05/03/03 20:10:44
Windows Server 2003 family / _WIN32_WINNT>=0x0502 
Windows XP / _WIN32_WINNT>=0x0501 
Windows 2000 / _WIN32_WINNT>=0x0500 
Windows NT 4.0 / _WIN32_WINNT>=0x0400 
Windows Me / _WIN32_WINDOWS=0x0490 
Windows 98 / _WIN32_WINDOWS>=0x0410 
Internet Explorer 6.0 / _WIN32_IE>=0x0600 
Internet Explorer 5.01, 5.5 / _WIN32_IE>=0x0501 
Internet Explorer 5.0, 5.0a, 5.0b / _WIN32_IE>=0x0500 
Internet Explorer 4.01 / _WIN32_IE>=0x0401 
Internet Explorer 4.0 / _WIN32_IE>=0x0400 
Internet Explorer 3.0, 3.01, 3.02 / _WIN32_IE>=0x0300 


823 :デフォルトの名無しさん:05/03/03 21:54:31
>>816
DrawTextもDT_CALCRECTでRECTで戻してくれるぞ。確か。

824 :デフォルトの名無しさん:05/03/03 21:55:44
Internet Explorer 5.5 / _WIN32_IE>=0x0501
詐欺だな

825 :デフォルトの名無しさん:05/03/03 22:08:09
ttp://homepage3.nifty.com/aokura/tips/trouble.html
そういやこれ見て#define _WIN32_WINNT 0にする技を思いついたことを思い出した。

826 :デフォルトの名無しさん:05/03/03 22:19:16
Windowsプログラミングができると尊敬されますか?

827 :デフォルトの名無しさん:05/03/03 22:29:10
いんや

828 :デフォルトの名無しさん:05/03/04 00:42:03
むしろ奴隷にされる

829 :デフォルトの名無しさん:05/03/04 00:46:04
奴隷はいやだ!
奴隷はいやだ!
奴隷はいやだ!

830 :デフォルトの名無しさん:05/03/04 00:53:42
文字列が、Windowsのファイル名として適当なものであるかを判定する関数ってあるでしょうか?

hoge("filename.cpp");  //true
hoge("text");       //true
hoge(".");         //「.」一文字はファイル名にならないのでfalse
hoge("2005\\03\\05");  //「\」をファイル名に使うことはできないのでfalse

こんなことができないかなと・・・

831 :デフォルトの名無しさん:05/03/04 02:17:30
>>830
CreateFile

832 :デフォルトの名無しさん:05/03/04 03:27:12
質問です。次の手順でコンボボックスを操作するものとします。(Windows XP)
 (1) 「ドロップダウン」でコンボボックスを作成
 (2) 1つ以上のアイテムを追加 (例:"Windows")
 (3) 追加したアイテムのうちの1つと同じ文字列を先頭から一部だけ入力 (例:"Win")
 (4) MoveWindow() もしくは SetWindowPos() でコンボボックスのサイズを変更
このようにすると、フォーカスの有無にかかわらず勝手に "Windows" が選択され、
表示されてしまいます。"Win" を表示したままサイズを変更する方法をご存知の方が
いらっしゃいましたら、どうか教えてください。よろしくお願いします。

833 :デフォルトの名無しさん:05/03/04 07:13:15
>>828
理由言ってみ?

834 :デフォルトの名無しさん:05/03/04 10:17:32
ふと疑問に思ったんだけど、文字コードを1byteしか使わない国(アメリカ等)の
ファイル名に0x81〜0x9Fや0xE0〜0xFFが使われてる事ってあるのかな?


835 :デフォルトの名無しさん:05/03/04 10:52:23
昔はそう言うコードを持ったファイル名のファイルを埋め込むツールがあって困った。

836 :デフォルトの名無しさん:05/03/04 10:52:57
いかん、メール欄は気にしないでくれ。

837 :デフォルトの名無しさん:05/03/04 11:03:47
>>834
あるよ。
ウムラウトとかね。

838 :デフォルトの名無しさん:05/03/04 12:09:16
>>830
#define hoge(name) strpbrk(name, "\\/:*?\"<>|")

839 :デフォルトの名無しさん:05/03/04 12:50:55
>>830
前に調べたこと歩けど、APIでは用意されてないはず。
書いてあるの以外にも、ファイルの長さチェックやCOM1とかの予約名もあって結構複雑で。

>>838
例の3つ目に書いてある
>hoge(".");         //「.」一文字はファイル名にならないのでfalse
でいきなり駄目だと思うけど。

840 :デフォルトの名無しさん:05/03/04 13:30:03
実際にファイルを作ってみて、成功したらOKってことで……。

841 :デフォルトの名無しさん:05/03/04 13:36:26
>>838
一部の漢字を使用したファイル名も使えなくなるね。

842 :デフォルトの名無しさん:05/03/04 13:47:34
>>841
そのメル欄は>>170からそのまんまなんでつか?

843 :デフォルトの名無しさん:05/03/04 14:05:45
ファイル名なんて、ファイルシステムによって違うじゃん。

844 :デフォルトの名無しさん:05/03/04 14:08:14
NTFSはUTF-16だっけ?

845 :841:05/03/04 14:32:04
しまった、またやったか。

846 :デフォルトの名無しさん:05/03/04 15:59:49
>>834
アメリカなんかのソフトでReadMeとかに突然、半角のゥやョが出てきて何かと思ったら、
欧文フォントにすると©や®になるなんてことはしょっちゅう。これはファイル名じゃないけど。

847 :デフォルトの名無しさん:05/03/04 17:02:52
Photoshopィ

848 :838:05/03/04 17:25:28
>>839 >>841
うぬぬぬ…
定義済みファイル名は置いといて、
  #define hoge(name) (! _mbspbrk(name, "\\/:*?\"<>|") && (*name != '.' || *(name + 1) != '\0'))
これでどうだっっ

849 :デフォルトの名無しさん:05/03/04 17:38:04
>>848
無駄な足掻きを。
".."もダメだし、nameが""だったらname[1]はやっちゃダメだろう。

850 :デフォルトの名無しさん:05/03/04 17:44:30
そういや、Win9X限定で、cd ....とかやれるんだよね。

851 :デフォルトの名無しさん:05/03/04 17:45:21
>>841
もうそういうハンドルにしなさい。

852 :デフォルトの名無しさん:05/03/04 17:49:30
>>850
Win2kでNTFSでもふつーに .. 使えるんですけど。

>>851
やだ。

853 :デフォルトの名無しさん:05/03/04 17:52:20
>852
..(親)が出来るのは当然。
...(=..\..)や、
....(=..\..\..)ができると言う話だ。

854 :デフォルトの名無しさん:05/03/04 18:31:58
フルパスでファイルを開いた後、相対パスでファイルを開いた時や、
GetOpenFileNameでOFN_NOCHANGEDIRをつけない時などに、
うまく動作しなくなる事があるのですが、これはどういう現象なんでしょうか。

855 :デフォルトの名無しさん:05/03/04 18:45:56
カレントディレクトリが変更されたわけです。
特にGetOpenFileNameはねぇ。

856 :デフォルトの名無しさん:05/03/04 18:45:56
カレントディレクトリが変わってしまうから。

857 :逆アセ初級者:05/03/04 18:47:06
逆アセンブラのファイルをDLしたのですが、
その後の使い方などよくわかりません。
どうすればいいのでしょうか?
DLしたURL
ttp://flasm.sourceforge.net/

858 :デフォルトの名無しさん:05/03/04 18:51:06
>>857
マニュアル嫁スレ違い

859 :デフォルトの名無しさん:05/03/04 18:54:59
>>855>>866
おおっ、時間がまったく同じ!
なるほど。ドスでcdでパスを変化させますが、
あれと同じようなことが起こっているんですね。
ありがとうございました。

860 :854, 859:05/03/04 18:56:16
時間が同じでも、レス番が違っていた・・。

861 :デフォルトの名無しさん:05/03/04 19:18:45
>>834

半角カタカナの小さい「ゥ」・・・ゥ
著作権を表わす(c)のかわりによく使われる。

862 :デフォルトの名無しさん:05/03/04 19:39:59
GetFileTitleの反対で、パスの方を得るWin32APIがありましたら教えてください。

863 :デフォルトの名無しさん:05/03/04 19:56:41
GetFullPathName

864 :デフォルトの名無しさん:05/03/04 20:22:50
>>863
ありがとうございました。

865 :デフォルトの名無しさん:05/03/04 22:06:21
かなり激しく初歩的なことですが
BCCってVBみたいにランタイムみたいなもの必要ないですよね?

866 :デフォルトの名無しさん:05/03/04 22:07:29
>>865
氏ね

867 :デフォルトの名無しさん:05/03/04 22:19:36
>>865
たぶんkernel32.dllあたりが必須。

868 :デフォルトの名無しさん:05/03/04 22:24:35
VBのランタイムもmsvcrt.dllみたいにOS標準であったなら、
こんな差別はなかったかもしれない、ね。

869 :デフォルトの名無しさん:05/03/04 23:48:50
猿でも使えるようにするためにはある程度の犠牲はやむえない。

870 :デフォルトの名無しさん:05/03/04 23:50:48
Win32APIで小数点の扱い方がよく解らないので質問させていただきます。
FLOAT で変数を宣言したのですが、中の値がずっと0と表示されます。
FLOAT a とし、
CHAR ch;
wsprintf(ch , "a=%f" , a);
TextOut(hdc , 0 , 0 , xh , lstrlen(xh));
(途中を省略しています。)
これで「a=0」と表示されます。
何がおかしい、またはここをこうすればよいなど、教えていただきたいです。

871 :デフォルトの名無しさん:05/03/04 23:53:53
>>870
とりあえず、ソースファイルの拡張子を*.cから*.cppに変えてビルドを試してから来い。
Cしか使わないからという短絡的動機で拡張子を*.cにする初心者が多すぎる。

872 :デフォルトの名無しさん:05/03/04 23:57:32
>>870
wsprintfの書式指定にfはありません。

873 :870:05/03/05 00:02:03
>>871
.cppにしても同じ状態でした。
>>872
小数を扱えて、それを文字列に代入するにはどうすればよいでしょうか?

874 :デフォルトの名無しさん:05/03/05 00:21:46
>>873
どうしてもと言うなら wsprintf(ch,"iTest=%d.%d", (int)a, (int)(a * 1000.0f) % 1000);

875 :デフォルトの名無しさん:05/03/05 00:46:21
>CHAR ch;
>wsprintf(ch , "a=%f" , a);
これって間違いだよねぇ?

876 :デフォルトの名無しさん:05/03/05 00:56:57
どこでも突っ込み放題だな。

877 :デフォルトの名無しさん:05/03/05 00:59:09
>>875
というかコンパイル通らないだろ。それ?

878 :デフォルトの名無しさん:05/03/05 01:26:28
WinXPでタスクバーの空のツールバーのサブクラス化しようとしたんだけど、
GetWindowLongとSetWindowLongで「アクセスが拒否されました。」が返ってくるんだけど
何かいい方法無いのかな?

879 :デフォルトの名無しさん:05/03/05 02:07:13
要するに、

>これで「a=0」と表示されます。

が嘘な訳で、答える気しない。

880 :834:05/03/05 02:20:59
>>835
>>837
>>846
>>861
遅レスですが、勉強になりますた。
やはり、各言語に対応させるには、その言語分の
バージョンを作らないと駄目なんですね…。

1つのアプリで多言語対応…ってファイルを
扱う時点で無理って事ですか(;´Д`)

もし、やるとしたらOSの国コード調べて分岐とか…?


881 :デフォルトの名無しさん:05/03/05 04:09:46
CHAR ch;

882 :デフォルトの名無しさん:05/03/05 04:11:28
>>878
AdvancedWindowsでプロセスとスレッドについて勉強して出直して来い。

883 :デフォルトの名無しさん:05/03/05 04:39:54
マウスホイールメッセージをグローバルフックするのに
DLL で SetWindowsHookEx(WH_GETMESSAGE, ...) して、
WM_MOUSEWHEEL が来たら処理しているのですが、
以下の状況ではメッセージが送られてきません。

1.コンソールウィンドウがアクティブなとき
2.最小化ウィンドウがアクティブなとき(Alt+ESC使用時など)

上記の状況でもホイールメッセージを取得できる方法を知りませんか?


884 :デフォルトの名無しさん:05/03/05 05:30:22
WH_MOUSE_LL

885 :883:05/03/05 11:46:56
>>884
素早いレスどうもです。
確かに WH_MOUSE_LL を使用する方法で試したら解決しました。
でもこの方法は NT系でしか使えないのが難点ですね…。
ひとまずはこれでやってみることにします。
ありがとうございました。


886 :デフォルトの名無しさん:05/03/05 13:28:32
XPなんかのパスワード入力ボックスはどうやって実現したら良いでしょうか。
あの「●●●」って表示されるやつです。

887 :デフォルトの名無しさん:05/03/05 13:53:39
とりあえずファイル名の規則について
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/naming_a_file.asp

>880
Windows 上なら UNICODE 使っとけ、になるんじゃないの?

888 :デフォルトの名無しさん:05/03/05 14:07:44
こんにちは

HeapAllocで作ったメモリのサイズを調べる関数は何でしょう?
char* cp=HeapAlloc( 〜 )

cp <−このポインタのデータサイズを知りたい

889 :デフォルトの名無しさん:05/03/05 14:10:45
HeapSize

890 :デフォルトの名無しさん:05/03/05 14:14:28
>>886
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/editcontrols/editcontrolreference/editcontrolstyles.asp

891 :888:05/03/05 14:37:16
>>889
ありがとうございました。

892 :デフォルトの名無しさん:05/03/05 15:34:11
>>891
MSDNでHeapAllocを見ればSee Alsoに「HeapSize」って入ってるんだか
ら、自分で調べられるようになろうな。



893 :デフォルトの名無しさん:05/03/05 16:13:50
>>892
君、的はずしまくってるんだけど。
多分コメントしようがないと思うぞ。
はずしすぎてて。

894 :デフォルトの名無しさん:05/03/05 17:17:19
GlobalAllocやHeapAllocで、動的にメモリ配置をした場合、
なぜか例外が多発するんです。

文字列の長さを、Setする文字列にあわせて動的にサイズ変更をしたいのですが、
例外が多発します。
この問題はどのようにすればクリアー(解決)できるのでしょうか。

895 :デフォルトの名無しさん:05/03/05 17:20:22
>>894
「クリアー(解決)」



なんでこういう余計なことするの?理由書いてみ?

896 :デフォルトの名無しさん:05/03/05 17:22:34
クリアーと入力した直後に、(消去)と思われないようにするために、(解決)とつき加えました。

897 :デフォルトの名無しさん:05/03/05 17:27:48
そんなもん「つき加え」なくても「クリアー」を削除して改めて「解決」と書けばいいじゃん。
まぁ、ソース晒すのが一番の近道だね。

898 :894:05/03/05 17:39:22
#include "stdafx.h"
#include "Memory.h"

CMemory::CMemory(){
//hProcess=HeapCreate(HEAP_GENERATE_EXCEPTIONS,128,64000);
}

CMemory::~CMemory(){
Release();
}

void CMemory::Allocate(SIZE_T size){
pVoid=(char*)HeapAlloc(GetProcessHeap(),HEAP_GENERATE_EXCEPTIONS|HEAP_ZERO_MEMORY,size);
}

void CMemory::ReAllocate(SIZE_T size){
pVoid=(char*)HeapReAlloc(GetProcessHeap(),HEAP_GENERATE_EXCEPTIONS,pVoid,size);
}

char* CMemory::Get(){
return (char *)pVoid;
}


899 :デフォルトの名無しさん:05/03/05 17:39:39

unsigned long CMemory::GetSize(){
unsigned long ret;
ret=(unsigned long)HeapSize(GetProcessHeap(),HEAP_NO_SERIALIZE,(void*)pVoid);

return ret;
}

void CMemory::CopyMemory(CMemory* pSrcMem){
//
long size=pSrcMem->GetSize();
ReAllocate(size);

//
int c;
char* pDstMem=Get();
char* pSrcMem2=pSrcMem->Get();

for(c=0;c<size;c++){
*pDstMem=*pSrcMem2;
pDstMem++;
pSrcMem2++;
}
}

void CMemory::Release(){
HeapFree(GetProcessHeap(),0,(void*)pVoid);
}

900 :894:05/03/05 17:42:36
↓HeapAlloc
void CMemory::Allocate(SIZE_T size)
↓HeapReAlloc
void CMemory::ReAllocate(SIZE_T size)
↓char*にキャストして返り値
char* CMemory::Get()
↓サイズを得る
unsigned long CMemory::GetSize()
↓複製
void CMemory::CopyMemory(CMemory* pSrcMem)
↓解放
void CMemory::Release()


今年からプログラミングを始めた大学生です。
なにぶん、初心者でわからない点が多いのでアドバイスいただけたらうれしいです。

901 :デフォルトの名無しさん:05/03/05 17:46:25
>>894
メモリ確保失敗してるのに文字列をコピーしてるとか
ポインタとハンドル混同してるとか
確保した領域よりデカい文字列入れてるとか
そんなとこだろ

902 :デフォルトの名無しさん:05/03/05 17:48:02
>>896
アホの上塗りか。素直に「アホだから」ってかいときゃいいんだよ。

>>897
まさにその通り。アホのフォローは大変だな。

903 :デフォルトの名無しさん:05/03/05 18:10:04
>>902
ha ha ha
質問者より3ヶ月早くプログラミングを始めただけで上級者気取りか。
おめでてーな。

904 :デフォルトの名無しさん:05/03/05 18:38:31
>>903
技術以前の問題ですが。

それすらも分からないのに勝手に入ってこないでください。

905 :デフォルトの名無しさん:05/03/05 21:29:40
LVCOLUMNのpszTextにはconst char *を渡しても良いですか?
リストコントロールが自分で作ったバッファにコピーして、それを使ってくれるの?


906 :デフォルトの名無しさん:05/03/05 21:35:29
>>903
期間は関係ない。理解度の問題。
10年やってもアフォはアフォ。

907 :デフォルトの名無しさん:05/03/05 21:41:52
>>905
いいよ

908 :デフォルトの名無しさん:05/03/05 21:43:07
>>894
終端null分を確保していないに3000バッファ

909 :デフォルトの名無しさん:05/03/05 22:13:11
>>906
こらこら、君も理解できてないのに分かったようなレスを
しないように。

910 :デフォルトの名無しさん:05/03/05 23:37:42
>>907
サンキュー

911 :デフォルトの名無しさん:05/03/05 23:42:46
ファイルを作成するときに与えられたパスが存在しない場合、
「なんちゃらフォルダを作成します」とか表示してファイルを作成できるAPIはありますか?


912 :デフォルトの名無しさん:05/03/05 23:44:13
フォルダを作成するつってるのに、ファイルを作成するんですか?
おかしなAPIですね。

913 :デフォルトの名無しさん:05/03/05 23:46:40
それいただき。

914 :デフォルトの名無しさん:05/03/05 23:56:26
ファイルを作成するときに、そのパスが存在していない場合、
そのことをユーザーに確認するダイアログを表示し、
OKを押下された場合にフォルダを作成して、
そこにファイルを作成できるAPIはありますか?


915 :デフォルトの名無しさん:05/03/05 23:58:55
>>914
そんなもんはない。
CreateDirectory
MessageBox
この辺使って自分で作れ。


916 :デフォルトの名無しさん:05/03/06 00:12:01
そのうち、「〜なソフトを作れるAPIはありますか?」という質問が…

917 :デフォルトの名無しさん:05/03/06 00:18:57
CPhotoshopクラスの使い方を教えてください^^

918 :デフォルトの名無しさん:05/03/06 00:27:18
>>915
そうします。ありがとう。

919 :デフォルトの名無しさん:05/03/06 00:29:20
>>917

CPhotoshop ps;
for(;;)
 sell(ps.clone());


920 :デフォルトの名無しさん:05/03/06 00:31:51
通報しますた

921 :abobe:05/03/06 00:40:33
僕は何も悪いことはしていませんよ

922 :デフォルトの名無しさん:05/03/06 00:48:06
CreateNamedPipe()について、
第2引数にFILE_FLAG_OVERLAPPEDフラグを指定しない事と
第3引数にPIPE_WAITフラグを指定する事は同じ意味でしょうか?
同期モード、オーバーラップモード、ブロッキングモード、非ブロッキングモードの
意味を理解するのに混乱してしまっています。

923 :デフォルトの名無しさん:05/03/06 00:48:40
>>915
普通はSHCreateDirectoryEx()でしょ。

924 :デフォルトの名無しさん:05/03/06 00:54:09
>>923
Minimum operating systems Windows 2000, Windows Millennium Edition
だしなぁ・・・

925 :デフォルトの名無しさん:05/03/06 01:07:34
シャアウェアを作るAPIはありますか?

926 :デフォルトの名無しさん:05/03/06 01:18:19
赤く塗っとけ。

927 :デフォルトの名無しさん:05/03/06 01:33:33
>>919
sellのtargetを指定してないな。
エラーを吐くぞ

928 :デフォルトの名無しさん:05/03/06 04:48:36
>>923,924
対話ダイアログはないけど
MakeSureDirectoryPathExists()とか。

929 :デフォルトの名無しさん:05/03/06 06:08:13
>>912
Windows使ったことないのか?というか質問の意図が分かってなさそう。

930 :デフォルトの名無しさん:05/03/06 08:25:31
興味で質問するんですが、

あるファイルを開いているプロセスを調べたり、
あるプロセスが開いているファイルハンドルを調べたりするってどうやるんですか?

要するにこういうことなんですが
ttp://www.sysinternals.com/ntw2k/freeware/procexp.shtml

931 :デフォルトの名無しさん:05/03/06 10:19:36
>>930
興味本位での質問はNGです。

932 :デフォルトの名無しさん:05/03/06 10:43:04
朝からすいません。

フォントを作る際、
       int fontsize=12;
       LOGFONT logfont;
memset(&logfont, NULL, sizeof(logfont));
logfont.lfHeight = fontsize;
logfont.lfWeight = FW_NORMAL;
logfont.lfCharSet = SHIFTJIS_CHARSET;
logfont.lfOutPrecision = OUT_DEFAULT_PRECIS;
logfont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
logfont.lfQuality = DEFAULT_QUALITY;
logfont.lfPitchAndFamily = FIXED_PITCH;
strcpy(logfont.lfFaceName, "MS ゴシック");

と、フォントのサイズをint fontsize=12;としたのですが、MS-メモ帳と比べてフォントサイズの大きさに違いがあるんですけども、
何か修正しなければならないことはあるのでしょか?
MS−メモ帳と同じ大きさにしたいんです。

933 :デフォルトの名無しさん:05/03/06 11:11:41
>>932
たしかメモ帳の初期値はFixedSysの14ポイント。

934 :932:05/03/06 11:17:16
>>933
ええ、メモ帳のフォントのサイズも「12」と合わせた上で比較したのですが、大きさが異なるんです。
私の知識不足からくるものということはわかってますが、
どこに修正を加えればいいのでしょうか?

935 :デフォルトの名無しさん:05/03/06 11:39:29
>932
メモ帳のフォントで使われている単位は「ポイント」
それに対して、LOGPONTのlfHeightは「ピクセル」
12センチと12インチを比べても一致しないのと同じこと。
相互変換にはGetDeviceCaps()を使うけど、定番の処理なので検索すればすぐ見つかる。


936 :932:05/03/06 12:09:03
>>935
解決しました。
ありがとうございます。

937 :デフォルトの名無しさん:05/03/06 13:19:56
>>930
> あるファイルを開いているプロセスを調べたり、
> あるプロセスが開いているファイルハンドルを調べたりするってどうやるんですか?

使ったこと無いけど、NTネイティブAPIをつかえばできると思う。
ZwQuerySystemInformationとかそのあたり。

http://www.pearsoned.co.jp/washo/win/wa_win49-j.html
http://www.amazon.co.jp/exec/obidos/ASIN/4891001917/250-4347431-2972203

938 :デフォルトの名無しさん:05/03/06 22:23:51
Win32 VC++のサンプルにあった、Spyプログラムを動かしています。
IE6の各種イベント(ボタンをおしたりメニューを選択したり)はフックできますが
(WM_COMMANDがフックされる)、例えばFireFoxのイベントは取得できません
(例えばメニュー選択中にMENU_SELECTは発生しない)。

Beckyのイベントはフックで来ますが、Netscape7.1のイベントは取得できません。

すべてのイベントを取得するにはどうしたらよいでしょう?


939 :デフォルトの名無しさん:05/03/06 22:32:35
FirefoxのメニューはそもそもWindowsのメニューコントロール使ってないんだろ。

940 :デフォルトの名無しさん:05/03/06 22:35:31
オープンソースなんだから

941 :デフォルトの名無しさん:05/03/06 23:31:45
メニューコントロールって何よ

942 :デフォルトの名無しさん:05/03/06 23:42:28
WinXPで
InitializeCriticalSectionAndSpinCountを使おうと思ってコンパイルしたら
error C3861: 識別子は、引数依存の照合を使用しても見つかりません。
と言われて、仕方ないんで#define _WIN32_WINNT 0x0501と書いたらとりあえずエラーは出なくなったんだけど、
これでいいのかな?それとも何か別の正しい方法があるのかな

943 :デフォルトの名無しさん:05/03/07 00:02:10
AdvancedWindows(ry

944 :デフォルトの名無しさん:05/03/07 08:27:10
ウィンドウクラス定義するときの背景ブラシを

wc.hbrBackground = CreateSolidBrush(RGB(0, 0, 0));

ってした場合ってこのブラシ破棄しないとダメぽ?


あと、BCCとVCとかBCBとかの総合環境ってのはどのくらい違うのでせうか・・。


945 :デフォルトの名無しさん:05/03/07 09:14:00
>>942
その手の定義が必要なものは見たまま、
使用するOSがそのバージョン以上であることを要求するからだよ。
デフォルトの状況だと昔のバージョンのOSでも動く関数しか使えない状態になってる。

仮に
_WIN32_WINNT 0x0501
を定義しないと使えないのであれば、その関数はWinXP以上の環境でないと使えない関数ということになる。
(NT4.0・2000等では動かない)

InitializeCriticalSectionAndSpinCountの説明見ると
 Windows NT 4.0 SP3 以降
 Windows 98 以降
となっているのでもう少し定義Verをさげられるんじゃまいかな?
面倒なのでその辺は自分でしらべておくれ。

946 :デフォルトの名無しさん:05/03/07 09:19:09
>>944
UnregisterClass時にシステムが破棄するから自分で破棄しちゃだめぽ と書いてある。

自前でUnregisterClass呼ばなくてもプロセス終了時にUnregisterClassされるはずなので
普通にアプリ作る場合はUnregisterClassも呼ばないかな、あんまり。


947 :デフォルトの名無しさん:05/03/07 13:45:09
質問です。
GetCurrentThreadで返されたハンドルを他のスレッドに渡して使わせるには、
DuplicateHandleしないといけないんですよね?

948 :デフォルトの名無しさん:05/03/07 13:54:24
え、プロセス間で共有するときに使うんじゃないの?

949 :デフォルトの名無しさん:05/03/07 14:12:16
>>947
その場合DuplicateHandle必須。
GetCurrentThreadが返す擬似ハンドルは、他のスレッドからは使えないと思った方がいい。

>あるスレッドがこの関数を使って、自分自身を表す擬似ハンドルを作成しても、
>他のスレッドは最初のスレッドを参照する目的ではその擬似ハンドルを利用
>できません。擬似ハンドルは常に、その擬似ハンドルを使っているスレッド自
>身と解釈されます。
http://www.microsoft.com/japan/msdn/library/ja/jpdllpro/html/_win32_getcurrentthread.asp?frame=true

950 :デフォルトの名無しさん:05/03/07 15:11:05
#include <io.h>
#include <stdio.h>

void main( void )
{
intold ;
FILE *fp;

old = dup( 1 ) ;
fp = fopen( "data", "w" ) ;
_dup2( _fileno( fp ), 1 ) ;
puts( "この行はファイル 'data' に出力されます。\r\n" );
printf("hoge\n") ;
fflush( stdout );
_dup2( old, 1 ) ;
printf( "foo" ) ;
fclose( fp );
getchar() ;//ここのgetcharが、fooより先に表示されてしまうのは、なぜなんですか?
}
誰か分かる人いますか?

951 :あら:05/03/07 15:15:38
ウィルス送ってきて〜 お願い




952 :デフォルトの名無しさん:05/03/07 15:16:33
どこら辺がwin32apiなのやら

953 :デフォルトの名無しさん:05/03/07 15:44:25
質問ですが、
GetDC(m_hWnd)
したあと、必ずReleaseDCをしなければならないと決まりがありますが、
特にReleaseDCをしなくても、エラーは出ません。

これはGetDCをするたびに、メモリ領域が作成され、
終了後、すぐにReleaseで削除しないといけないということなのでしょうか?

GetDCを呼び出す回数が多いので、いちいちReleaseDCを呼び出すのが難です。

954 :デフォルトの名無しさん:05/03/07 15:50:02
>>953
Use MFC.

955 :デフォルトの名無しさん:05/03/07 15:50:58
>>950
「getcharが表示される」とはどういう意味?
それから、スレ違い。

956 :デフォルトの名無しさん:05/03/07 15:52:44
>>953
WTLについてるCDCとかCPaintDCがお勧め

957 :デフォルトの名無しさん:05/03/07 16:23:10
>>953
文字列表示関数、ビットマップ表示関数などを作って、引数の指定によっては、
関数の中で、Get〜Releaseを行うみたいな事をすればいい。

958 :デフォルトの名無しさん:05/03/07 16:25:23
WM_CREATEでGetDCしてWM_DESTROYでReleaseDCすりゃいいよ。

959 :デフォルトの名無しさん:05/03/07 16:50:38
CreateProcessして出来たプログラムから、
呼び出し元のウィンドウハンドルを得る方法を教えてください。

呼び出し先への引数で、ウィンドウクラス名、ウィンドウタイトル名を渡して、
呼び出し先でFindWindowという方法は思いついたのですが、
ウィンドウクラスが渡せない状況の時はどうすればいいでしょうか。

960 :デフォルトの名無しさん:05/03/07 16:56:14
>>959
ウィンドウクラス名、ウィンドウタイトル名が渡せるのなら
ウィンドウハンドルを直接渡せばいいじゃない。

961 :959:05/03/07 17:04:19
>>960
すいません。ウィンドウハンドルも渡せません。

例えば、一般のテキストエディタからプログラムを呼び出し、
その引数にテキストエディタ名(.exe)、編集中の.txtを渡して、
呼び出し元の方でなんかやる見たいな事がしたいんです。

962 :959:05/03/07 17:06:19
>>961
間違えました。呼び出し先でなんかやるです。
編集中の.txtは、ファイル名の事です。

963 :デフォルトの名無しさん:05/03/07 17:14:20
>>961
ウィンドウハンドル渡せない理由が無いが?

964 :959:05/03/07 17:24:56
>>963
JmEditor2というテキストエディタからプログラムを呼び出したくて、
ツール実行という機能があるので、それで呼び出します。

ファイル名は、当然知っているので簡単に渡せますが、
ウィンドウクラス名、ウィンドウハンドル名は、
JmEditor2の中にアクセスできない状況(ユーザーとして使う状況)では、
分からないと思うのですが。

965 :デフォルトの名無しさん:05/03/07 17:35:40
ウィンドウクラス名、ウィンドウタイトルのみっでは同名クラス同タイトルの別ウィンドウが存在しうるので一意の同定は不可能。


966 :デフォルトの名無しさん:05/03/07 17:39:51
JmEditor2側にそういう仕組みが無いならFindWindow等で調べるしかない。

967 :959:05/03/07 18:04:48
>>965>>966
そうですよね。%fとかで、ファイル名は簡単に分かるんですが、
ウィンドウクラス名、ウィンドウハンドルも渡す機能が欲しいです。

所で、テキストエディタから、別のテキストエディタを呼び出して、
その引数に現在編集している.txtのファイル名を渡すと、
(EcoNote.exe(フルパス一時ファイル名) → JmEditor.exe)
呼び出し先で編集して、呼び出し元の.txtも変わる見たいな事が
出来る事が分かったんですけど、これはどういう感じで行っているのでしょうか。

ファイル名しか渡していなく、僕の状況と同じだと思うんですが、
こちらはアクセスして処理できています。

968 :デフォルトの名無しさん:05/03/07 18:21:16
>>967
FindFirstChangeNotificationで監視していて
変更されたら再読み込みしてるとか?

969 :959:05/03/07 18:29:18
>>968
そのキーワードで調べてみます。
お答えくださった皆様、どうもありがとうございました。
うまくやるやり方が分かった時は、ご報告させていただきます。

970 :デフォルトの名無しさん:05/03/07 23:07:22
えと、質問です。

RubyでWinInet.dllを使おうとしているのですが、なんだかうまくいきません。
いかんせん、RubyでWin32APIを使うのは初めてなので、試行錯誤の連続ですが。

このサイトのVB用コードを参考に、翻訳+αしてみました。
ttp://www.geocities.co.jp/SilkRoad/4511/vb/wininet.htm

これがソースです。汚くてすいません;;
ttp://www.freewebz.com/pme_jp/inetlib.rb

このファイルを外部ライブラリとしてrequireした後、
(変数)=GetHttpData("(URL)")と呼び出します。

しかし、irbでやってみたところ、なぜか予期しない"1"を返してきます。
なぜでしょ?

971 :970:05/03/07 23:11:56
あ、それから「socketライブラリ使えばできるじゃないか」ってツッコミはなしの方向でw

972 :デフォルトの名無しさん:05/03/07 23:20:13
それはWin32APIの質問じゃなくてRubyの質問なんじゃないのか

973 :デフォルトの名無しさん:05/03/08 00:13:08
>>946
ありがとうございました

974 :デフォルトの名無しさん:05/03/08 00:37:46
リストビューコントロールについて2つ質問させてください。

一つ目はカラムの数を知ることができるマクロ(メッセージ)についてです。
ListView_GetColumnCountみたいなマクロがあれば一番なんですが、ないみたいなので
今のところListView_GetColumnでカラムのインデックスを0から増やしていって
FALSEが返るまで呼び出すことで数えています。
ただ、このやり方でホントに常に正しく数えられるのかどうか分からないし、
いまいちスマートさに欠けるやり方なのでよりよい取得方法があれば教えてください。


二つ目はListView_GetColumnWidthについてです。MSDNを見ると・・・

If you use the returned string width as the column width in a call to the ListView_SetColumnWidth macro,
the string will be truncated. To retrieve the column width that can contain the string without truncating it,
you must add padding to the returned string width.

となっていて、カラム幅を適切に設定したいならpaddingを足せとのことですが、このpaddingの値を適切に
取得する方法が分かりません。

以上です。どなたかご存知の方がいればよろしくお願いします。

975 :974:05/03/08 00:40:49
すみません。二つ目の質問のマクロは
ListView_GetColumnWidth
じゃなくて
ListView_GetStringWidth
でした。
英文もこっちのマクロの説明です。

あ、あとあげ忘れてた。

976 :デフォルトの名無しさん:05/03/08 00:45:00
>>959
ちょっとよく分からないで書いてる部分もあるけど、
親プロセスを取得することは可能みたい。
というわけで、FindWindowしたウィンドウが親プロセスの
ウィンドウかどうかを確かめるなどの方法で、確実に起動元の
ウィンドウを特定することは可能だと思う。

親プロセス取得は、
- Retrieving the parent of a process (WinNT)
ttp://www.codeguru.com/Cpp/W-P/win32/article.php/c1437/
- class Win32_Process
http://msdn.microsoft.com/library/en-us/wmisdk/wmi/win32_process.asp
※ ParentProcessIdというメンバ
あたりを見てみました。

977 :デフォルトの名無しさん:05/03/08 01:31:51
>>974
一つ目はListView_GetHeaderしてHeader_GetItemCountかな。

978 :974:05/03/08 02:12:18
>>977
どうもです。一個目のほうはうまくいきました。

二つ目は今のところ適当に10pixelほど足してごまかしています。
カラム間の境界部分をダブルクリックするのをエミュレートすれば勝手に幅を整えてくれるとも
考えたのですが、なんか余計に泥臭くなってしまいそうでいまいちです。

Windows内部ではこの幅の調整の処理をうまく行えているということは
何か方法があるとは思うのですが・・・


979 :デフォルトの名無しさん:05/03/08 02:24:31
単純にカラム幅をアイテム幅に合わせたいなら
ListView_SetColumnWidthをLVSCW_AUTOSIZEでかな。

980 :974:05/03/08 02:43:55
>>979
ガ━━(゚Д゚;)━━━ン!!
・・・今までの苦労はいったいorz

何はともあれ、どうもありがとうございました。

981 :959:05/03/08 07:47:57
>>976
ありがとうございます。やってみます。

982 :デフォルトの名無しさん:05/03/08 09:40:48
WMIでワークグループ取得ってどこでやるんでしょうか?
Win32_NetworkAdapter
Win32_NetworkAdapterConfiguration
Win32_NetworkAdapterSetting
を使ってみたのですが、該当項目が見当たらなくて。
取得不可能??


983 :デフォルトの名無しさん:05/03/08 10:07:56
>>982
Win32_ComputerSystemのDomainじゃダメ?

984 :デフォルトの名無しさん:05/03/08 10:59:30
>>983
とれました!
ネットワークと違うところに格納されているとは盲点でした。
ありがとうございました。

985 :デフォルトの名無しさん:05/03/08 12:09:36
WNDClASSで決まっているスタイルを変更する方法を教えてください。


986 :デフォルトの名無しさん:05/03/08 12:28:48
>>985
SetClassLongPtr 関数を使え。

987 :985:05/03/08 12:40:51
できました、ありがとうございました。


988 :デフォルトの名無しさん:05/03/08 12:47:09
window messageをアプリケーションに送るツールありませんか?

989 :デフォルトの名無しさん:05/03/08 13:02:00
>>988
そのくらい自分で書け

990 :デフォルトの名無しさん:05/03/08 13:13:02
SendMessage(otherAppHWnd, WM_APP, wParam, lParam);

991 :デフォルトの名無しさん:05/03/08 15:44:34
次スレまだー?

992 :デフォルトの名無しさん:05/03/08 19:24:41
【AdvancedWindows】Win32API質問箱 39【読め】

993 :デフォルトの名無しさん:05/03/08 20:28:51
39かよっ!

994 :デフォルトの名無しさん:05/03/08 20:36:32
【AdvancedWindows】Win32API質問箱 29【読め】


995 :デフォルトの名無しさん:05/03/08 20:40:46
Win32API質問箱 Build29
http://pc5.2ch.net/test/read.cgi/tech/1110281860/

996 :デフォルトの名無しさん:05/03/08 20:48:51


997 :デフォルトの名無しさん:05/03/08 20:57:42


998 :デフォルトの名無しさん:05/03/08 21:03:59
      ((
       ) )
     ノ           /^l'"'"~/^i'ツ'ッ.,
    ((  ((        ヾ          ヾ    モフー・・・
     )    ) 丿   ミ ´ ∀ `      彡
    (( (   ノノ     ッ       _    ミ 
     ∴∵ >>      (´彡,.     (,,_,ノ  _,,.ヽ 
   //》||ヾミ\        "'"'゙''""''''゙""´

999 :デフォルトの名無しさん:05/03/08 21:13:47
ume-

1000 :デフォルトの名無しさん:05/03/08 21:17:30
このスレ終了。続きは次スレ。

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

224 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)