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

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

Win32API質問箱 Build22

1 :デフォルトの名無しさん:04/08/15 08:04
- 過去スレ
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 :デフォルトの名無しさん:04/08/15 08:06
- MSDN Online
http://www.microsoft.com/japan/msdn/default.asp
- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/index.html
- Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
- Google
http://www.google.com

Win32 API入門
http://black.sakura.ne.jp/~third/system/winapi/win.html
WIN32 Programming
http://www7.plala.or.jp/keny01/win32/
Win32 SDK Programming
http://usr_vogel.at.infoseek.co.jp/Win32SDK/index.html
WindowsSDK入門
http://kerochan.no-ip.com/vcsdk/letsprog/letsprog-index.htm

3 :デフォルトの名無しさん:04/08/15 09:40
ExitWindowsEx(EWX_SHUTDOWN,EWX_FORCE);

4 :デフォルトの名無しさん:04/08/15 17:53
右クリックでディレクトリ構造をメニューで出すためにメニュー・サブメニューを動的に多数
つくりたいけど、やはり右クリックのタイミングに全部のメニューを作ってしまわないと
いけないんだろうか?なんか遅くなりそうな気がするんだけど、大丈夫ですか?
経験者アドバイスお願いします。


5 :デフォルトの名無しさん:04/08/15 20:25
あらかじめ作っておいたものをキャッシュして持っておけば?

6 :デフォルトの名無しさん:04/08/15 23:14
>>4
ポップアップメニューが表示されるときに、そのメニュー以下のメニューを作ればいいと思うけど。

7 :デフォルトの名無しさん:04/08/16 02:40
>6 それだ!そうしたい。できるんだ?
で検索するとWM_MENUSELECT メッセージを発見
ありがとう。

8 :デフォルトの名無しさん:04/08/16 03:04
あ WM_INITMENUPOPUPか。。まいいや

9 : ◆Z0vd5w812U :04/08/16 14:56
ちとウィンドウリージョンについて質問です。
10fpsくらいでフレームごとにウィンドウリージョンを変形させたところ
すごいCPU負荷でした。元のウィンドウサイズは320x320くらいなのですが、
頻繁なリージョン変形をしても負荷を高めない方法ってあるのでしょうか?

10 :デフォルトの名無しさん:04/08/16 15:26
>>9
LayeredWindow + αチャネルを使う


11 :デフォルトの名無しさん:04/08/16 15:29
>>9
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdnwui/htm/layer.asp


12 :誰にともなく:04/08/16 17:53
ExpandEnv(ry
なんて関数があったのか。はじめて知った

13 :デフォルトの名無しさん:04/08/16 17:57
>>12
仕様によるがSHGetSpecialFolderPathもアリだね。

14 :デフォルトの名無しさん:04/08/16 18:00
環境変数についてはたしかAdvancedWindowsに書いてるよな

15 :デフォルトの名無しさん:04/08/16 18:06
>>12
ついでに誰へともなく書くけど、ExpandEnvironmentStrings はレジストリの
REG_EXPAND_SZ タイプとセットで覚えておくと吉だと思う。型のものは、環境変数が展開されることを期待しているから、
ExpandE略( で展開する必要がある。

16 :デフォルトの名無しさん:04/08/16 18:07
>>15
ちゃんと編集してから書き込めよ、漏れ orz

17 :デフォルトの名無しさん:04/08/16 18:10
っていうか %SystemRoot% とかって普通にどう処理してるのかとおもた。

18 :デフォルトの名無しさん:04/08/16 18:12
リストボックスのLBN_SELCANCELって
MSDNライブラリでは「リスト ボックスの現在の選択項目がキャンセルされたとき。」
に送られると書いてありますが、具体的にどういう操作をした場合ですか?
選択項目が変わる直前に来るかと思っていたのですが、
違うみたいです。

LBN_SELCHANGEだと選択項目が変わったあとに通知されるので、
変わる前の状態が欲しかったのですが、
自分で、記録しておかないとダメですかね?

19 :デフォルトの名無しさん:04/08/16 18:25
リストボックス上でボタンダウン
のまま何らかの原因でアクティブウィンドウが切り替わってしまった

てな時

20 :18:04/08/16 18:34
>>19
ありがとうございます。
なるほど、やっぱり自分で管理する部分を作らないとダメですね。

21 :デフォルトの名無しさん:04/08/16 18:57
SELCHANGEがあるならSELCHANGINGがないのかな?

22 : ◆Z0vd5w812U :04/08/16 19:01
>>10>>11
おおおー、レイヤードウィンドウか。こんな技もあったとは。THANX。
SetLayeredWindowAttributesとUpdateLayeredWindowの組み合わせでできるのね。


23 :デフォルトの名無しさん:04/08/16 19:16
>>9 & >>22
OpenGLスレで質問してたひとですか?

24 : ◆Z0vd5w812U :04/08/16 19:33
>>23
そうですよ。どうかしましたか?

25 :デフォルトの名無しさん:04/08/16 22:24
モニタの省電力モードの実行状態を知るAPIってあるのでしょうか。
省電力モードの設定を知ることや、省電力モードに移行/復帰できるのは探し当てたのですが、実行状態を知るのは見つからなくて

26 :デフォルトの名無しさん:04/08/16 23:39
SystemParametersInfoでSPI_GETLOWPOWERACTIVEとかダメ?
試してないけど。

27 :デフォルトの名無しさん:04/08/17 00:20
>>26
設定を得ることができるだけのようです

28 :デフォルトの名無しさん:04/08/17 00:24
WM_NOTIFY メッセージにおいて、wParam と、NMHDR構造体の idFrom が
違う値で送られてくることってありますか?
もしあるとすれば、例えばどのような場合でしょうか?

29 :デフォルトの名無しさん:04/08/17 00:52
>>25
IOCTL_VIDEO_QUERY_DISPLAY_BRIGHTNESS
とかどうだろう?試してないけど。

30 :デフォルトの名無しさん:04/08/17 01:00
>>28
つまり、自作のプログラムで違う値が送られてきたことがあった、と?

31 :28:04/08/17 01:14
>>30
いえ、自分で実験してみた限りでは同じ値が送られてくるんですが、WM_NOTIFY の説明によると
「wParam はユニークであることが保証されていないので、idFrom を使うべし」
というようなことが書いてあるので、もしかして何か違いがあるのかなと思いまして…。

32 :デフォルトの名無しさん:04/08/17 02:10
違いは、idFormならユニークである事が保証されてるところだろ?

33 :デフォルトの名無しさん:04/08/17 02:14
>>32
>>28読め

34 :デフォルトの名無しさん:04/08/17 02:20
ずいぶん偉そうな催促だ

35 :28:04/08/17 02:55
>>32
確かに、idFrom の方を使っていれば何の問題もないということになりますが…。
wParam が使えないとすると、はじめから wParam は別の用途に割り当てておけば
よかったわけで…そう考えると本当は何か使い道があるんじゃないかと思いまして。

36 :デフォルトの名無しさん:04/08/17 04:44
仮想リストビュー(LVS_OWNERDATA)を使ってテキストだけのレポート(LVS_REPORT)を作成しようとしています。
イメージを表示するつもりがないにもかかわらず、LVN_GETDISPINFOメッセージが
LVITEM構造体のmaskにLVIF_IMAGEがセットされた状態で送られてきてしまいます。
どのように対処するのが最も正当な手段と言えるでしょうか?
 (1) maskのLVIF_IMAGEをセットしないでLVN_GETDISPINFOを送らせる方法があるので、それを使う。
 (2) maskのLVIF_IMAGEを強制的にクリアして応答しても構わない。
 (3) iImageに特殊な値(-1とか)をセットして応答する。
 (4) その他。
いろいろ調べたのですが分かりませんでした。どうかご教示ください。

37 :デフォルトの名無しさん:04/08/17 11:40
>>36
>イメージを表示するつもりがないにもかかわらず

ま、イメージを表示するつもりかどうかは誰にも分からないわけだし、表示できるように
マスクがセットされていると考えれば、(2) でいいんじゃないの >試してないけど

38 :デフォルトの名無しさん:04/08/17 11:42
const int THREADS_COUNT = 10;
HANDLE start;

unsigned __stdcall proc(void*)
{
::WaitForSingleObject(start, INFINITE);
return 0;
}

int main(int argc, char* argv[])
{
start = ::CreateEvent(NULL, FALSE, FALSE, NULL);
assert( start );
HANDLE threads[THREADS_COUNT] = {0};
int i;

for(i = 0; i < THREADS_COUNT; ++i) {
threads[i] = reinterpret_cast<HANDLE>(_beginthreadex(0, 0, proc, (void*)i, 0, 0));
assert( threads[i] );
}

::Sleep(10000);
for(i = 0; i < THREADS_COUNT; ++i) {
::SetEvent(start);
::Sleep(0); // <---------- ここ
}

for(i = 0; i < THREADS_COUNT; ++i) {
::WaitForSingleObject(threads[i], INFINITE);
::CloseHandle(threads[i]);
}


39 :38:04/08/17 11:49
VC++6.0SP6 Win2k Win32コンソールアプリ

メインはスレッドを10コ作りイベントを10回セットしスレッドの終了を待ち
スレッドはイベントがセットされたら終了するというものです。

正常に10コのスレッドが終了するのですが
コメントの::Sleep(0);を無効にすると1コのスレッドしか終了しません。
スレッド切り替えが起きずにSetEventが10回行われ
結局1回のSetEventと同等になってしまうということなのでしょうか?
これは仕様なのでしょうか?

40 :38:04/08/17 11:59
言い忘れましたが、テストした環境はシングルプロセッサです。

41 :デフォルトの名無しさん:04/08/17 12:55
なんか違和感のあるソース・・・何か変なんだけど、わからん。

42 :デフォルトの名無しさん:04/08/17 13:07
Sleepが無い場合mainが一回のタイムスライスで10回イベントセットするからだろ。
アホか。

43 :デフォルトの名無しさん:04/08/17 13:25
>>42
スレッドの最後にOutpuDebugStringを入れてみたら、確かに1コしか解放されてませんでした。
で、疑問なのですが自動リセットイベントの場合
SetEventは待ちスレッドがあった場合それを解放してイベントを非シグナル状態にする
とMSDNには書いてあります。

上記のプログラムでは待ちスレッドが10コあるため
SetEvent->イベントシグナル->スレッド解放->非シグナル
が10回繰り返されると思ったのですが…
いったいどのタイミングでスレッドは解放されるのでしょうか?

44 :デフォルトの名無しさん:04/08/17 13:30
>>43
煽られて感情高ぶってるのはわかるけど、
知ったところで意味のない質問はしない方がいいよ。
プラットホームで変わるかもしれないし。

45 :デフォルトの名無しさん:04/08/17 13:32
>>39
>The state of an auto-reset event object remains signaled until a single waiting thread is released,
>at which time the system automatically sets the state to nonsignaled.
- Microsoft Platform SDK Document "SetEvent"

待機中のスレッドが何時リリースされるかについては触れられていないのがポイントっぽいですね。
実際にリリースされるまでの間は、単にイベントがシグナル状態にあるだけで、

>Setting an event that is already set has no effect.
となってしまう。

46 :デフォルトの名無しさん:04/08/17 13:35
auto reset event の場合ですけど、

誤>SetEventは待ちスレッドがあった場合それを解放してイベントを非シグナル状態にする
正>SetEventはイベントをシグナル状態にする。待機中のスレッドが一つ開放されるとイベントは自動的に非シグナル状態になる。

待機中のスレッドがリリースされる前に制御は戻ってきますよ。

47 :デフォルトの名無しさん:04/08/17 13:41
>>43
>いったいどのタイミングでスレッドは解放されるのでしょうか?
そりゃ、スレッドの待機が解除されたら・・・だろ?

で、スレッドの待機が解除されるには、
そのスレッドが実行されなければいけない

Sleep(0)で明示的にタイムスライスを放棄すれば、
上手く行くんだから明らかだろ?

なんだったら、作成したスレッドの優先度を上げて見たら?

48 :デフォルトの名無しさん:04/08/17 14:07
>>29
hDeviceを得るためにCreateFileを使おうと思いましたが
CRTディスプレイに該当するlpFileNameの文字列が分かりません

49 :38:04/08/17 14:20
>>44-47
ありがとうございました。
なぜこの疑問が浮かんだかというと、
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndllpro/html/msdn_metrsect.asp
のメータードセクションを試しに作ってみて上手くいかず原因をさぐってみたところ

LeaveMeteredSectionの
for (iCount=0; iCount < lReleaseCount ; iCount++)
{
lpMetSect->lpSharedInfo->lThreadsWaiting--;
SetEvent(lpMetSect->hEvent);
}

で必要分スレッドがリリースされてなかったからです。(Sleep(0)を入れて解決しました)


50 :38:04/08/17 14:38
何度も申し訳ない。
>>38 で名前付きイベントを使いメインとスレッドの処理を別プロセスで動かしたところ
Sleep(0)を入れなくてもスレッド10コ分リリースされました。
これはたまたまなんでしょうか…
趣味でWindowsプログラム7年やってますが、同期オブジェクトの扱い方がわからなくなってきました…

51 :デフォルトの名無しさん:04/08/17 15:44
”コマンドプロンプト”用のプログラムの標準入出力を
GUI(画面)に表示するプログラムがありますが、
あれはどうやって作るんでしょうか。

52 :36:04/08/17 15:50
>>37
> マスクがセットされていると考えれば、(2) でいいんじゃないの >試してないけど

うちの環境(XP)で (2) が使えることは確認していたのですが、他の環境でもうまくいくとは
限りませんし、(1) の見落としの可能性もあったので一応質問させていただいた次第です。
お返事、どうもありがとうございました。

53 :デフォルトの名無しさん:04/08/17 15:51
パイプでぐぐれ

54 :デフォルトの名無しさん:04/08/17 17:41
ウインドウサイズ変更出来ないようにするにはどすればいいの?

55 :デフォルトの名無しさん:04/08/17 17:53
>>54
WM_GETMINMAXINFOを処理しる

56 :デフォルトの名無しさん:04/08/17 17:55
~WS_THICKFRAME

57 :デフォルトの名無しさん:04/08/17 18:48
>>54
WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX

58 :デフォルトの名無しさん:04/08/17 18:58
winampのように動かしながら画面吸着させたいんですが、
WM_MOVINGでparamから位置をもらいながら位置判定して、movewindowしてるんですが、
それだと頻繁に、通常のウィンドウ動かしたときのような点線枠が変な風に(びよ〜んと伸びる)表示されてしまいます。
どうすればWinampみたいな動きが実現できるのでしょうか?


59 :デフォルトの名無しさん:04/08/17 19:04
ドラッグ処理を全部自前でやればどうとでもなる。

60 :デフォルトの名無しさん:04/08/17 19:04
>>58
WM_WINDOWPOSCHANGING

61 :デフォルトの名無しさん:04/08/17 19:35
>>54,57
出来ました。サンクスコ
>>57で簡単に出来たけど>>54の方でやるメリットと言うか
違いって何かあるんですかね。

62 :デフォルトの名無しさん:04/08/17 19:56
>>54は質問のようだが

63 :デフォルトの名無しさん:04/08/17 20:10
スマヌ
>>55>>57だった

64 :デフォルトの名無しさん:04/08/17 20:51
>>55だと縦方向だけ変えたくないとかを柔軟に処理できる
>>57だと枠線がサイズ変更できないウィンドウ標準のものになる
(95以降は区別が付きにくいけど)

65 :デフォルトの名無しさん:04/08/17 22:01
>>51
コンソールを開く


66 :デフォルトの名無しさん:04/08/17 22:22
WM_MOUSEMOVEにX = LOWORD(lParam);でX座標取得して、
SetCapture()でキャプチャーしてるんですけど、ウインドウの右側はみ出た場合は
数値がそのまま増えていくんですけど、左から出た時は0の左が65535になって左に
行けば行くほど数値が低くなるんですけど、何で65535なんて数値になるんでしょう?

67 :デフォルトの名無しさん:04/08/17 22:23
 

68 :デフォルトの名無しさん:04/08/17 22:26

「ひろゆき」から「今晩のおかず」までを手広くカバーする巨大掲示板群
             『3ちゃんねる』へようこそ!

                   ▲▲
                  ( ・3・) <見に来てね
                  (|.   .|)   
                   |. ω |       
                   ∪ ∪
           3ちゃんねるイメージキャラクター
              「3チコ (さんちこ)」
          
              http://www.3ch.jp/   

69 :デフォルトの名無しさん:04/08/17 22:30
>>66
signed, unsigned について説明してみろ

70 :デフォルトの名無しさん:04/08/17 22:34
>>69
signed   符号付き
unsigned  符号無し
ですか?

71 :デフォルトの名無しさん:04/08/17 22:42
WORD が無符号整数型だから負数を表現できないんだよ。
いったん short にキャストしてから int なり何なりに代入汁。

72 :デフォルトの名無しさん:04/08/17 22:45
>>66
左端から出たら、どんな数値になって欲しいのさ?

73 :デフォルトの名無しさん:04/08/17 22:46
WORD型ってのはunsigned shortだから0から65535までしか表せなくて
-1じゃなくて65535になってしまうってことですか。

>>71
どうも有り難うございます。

74 :デフォルトの名無しさん:04/08/17 22:49
SetLayeredWindowAttributes使いたいんですが、
windows.hだけではダメなんですか?
いちおう
#define _WIN32_WINNT 0x0500
これもしたんですが、定義されてないとエラーが出てしまいます

75 :デフォルトの名無しさん:04/08/17 22:52
つーか専用のマクロあるんだから使え
GET_X_LPARAM

76 :デフォルトの名無しさん:04/08/17 23:03
>>74
includeディレクトリをgrepして、無ければPlatformSDKをゲット

77 :デフォルトの名無しさん:04/08/17 23:17
PlatformSDKのinclude内のWinUser.h内にみつけましたが、
そのフォルダ、ディレクトリ設定のインクルードファイルの欄にちゃんと入ってます…

78 :デフォルトの名無しさん:04/08/17 23:36
>>77
#ifディレクティブに注意

79 :デフォルトの名無しさん:04/08/18 01:12
#define _WIN32_WINNT 0x0500
これかいててもダメですね…
検索かけたらみんなこれで解決してるのに…

80 :デフォルトの名無しさん:04/08/18 01:21
Platform SDKのinclude・libフォルダ設定を一番上にしたらいけました…

81 :デフォルトの名無しさん:04/08/18 01:23
ぬっ殺す

82 :デフォルトの名無しさん:04/08/18 10:45
いくら使わせたくないからって
winternl.hのプロトタイプ宣言が間違ってるのってどうよ

83 :デフォルトの名無しさん:04/08/18 14:08
レジストリキーの変更をしたいのですが、キーを変更するAPIが見つかりません。
削除して新たに作成するしかないのでしょうか?


84 :デフォルトの名無しさん:04/08/18 15:21
ローカルシステムアカウントで実行しているプロセスから、
IEを起動すると最初一回だけ、「インターネット接続ウィザード」が表示されてしまいます。
これを回避したいのですが、どうすればよいでしょうか。
お知恵をお貸しください。


85 :C言語初心者:04/08/18 15:51
ウイルスの作り方を教えてくdさい!!!!

86 :デフォルトの名無しさん:04/08/18 16:27
CreateVirusEx()

87 :デフォルトの名無しさん:04/08/18 16:41
CreateViruSEX()

88 :sage:04/08/18 16:42
>>86-87
ありがとうございます!!!!
でもどうやって使えばいいんですか??
教えてくださいお願いします!!!!

89 :デフォルトの名無しさん:04/08/18 16:49
int main()
{
 HSEX sex = CreateViruSEX();
 RunViruSEX(sex, "立ちバック");

 return 0;
}

90 :デフォルトの名無しさん:04/08/18 17:50
>>83
RegSetValueEx でいけなかったっけ?

91 :デフォルトの名無しさん:04/08/18 17:53
値の変更はできるけど、キーの変更はできないよ。

92 :デフォルトの名無しさん:04/08/18 18:20
>>89
RunViruSEXが0をFALSEを返します!!!!
GetLastError()の戻り値は5でした!!!!
何故ですか????

93 :C言語初心者:04/08/18 18:35
>>92
僕のまねをしないでください!!!
なんでみんな真面目に答えてくれないんですか???・

94 :デフォルトの名無しさん:04/08/18 18:41
DeleteObject((HGDIOBJ)"C言語初心者");

95 :デフォルトの名無しさん:04/08/18 18:43
>>89
main(int) { CreateViruSEX; return } << "立ちバック"
こうですか?わかりません。

96 :デフォルトの名無しさん:04/08/18 18:43
>>92

/*
  HPENIS GetPenisHandle(
    LPCTSTR HumanName // 所有者名
  );

  LONG SetPenisLong(
    HPENIS hPenis, // ペニスのハンドル
    int nIndex, // 設定する値のオフセット
    LONG dwNewLong // 新しい値
  );

  HADLITM GetStockItem(
    int fnItem // ストックアイテムのタイプ
  );
*/

SetPenisLong(GetPenisHandle(NULL), SPL_CONDOM, (LONG)(HCONDOM)GetStockItem(WARTY_CONDOM));

97 :デフォルトの名無しさん:04/08/18 18:50
>>93
皆が真面目に答えないのはウィルス作成に米国家の専門資格が必要だから。
それで初心者を名乗るお前は絶対持っていないだろうと皆が思っているから。

98 :デフォルトの名無しさん:04/08/18 18:51
>>93
真面目に答えて欲しければ、質問を変えた方がいいと思うよ。
誰もウイルス作成の手助けなんかしたくない。スレ違いのような気もするし。

99 :デフォルトの名無しさん:04/08/18 19:20
>>97-98
そんなとこで釣られるn(ry

100 :デフォルトの名無しさん:04/08/18 19:35
つーかまずローカルルール読め低脳

101 :デフォルトの名無しさん:04/08/18 21:33
>>92
おまえ童貞だろ。なら当然FALSEが返る。

102 :デフォルトの名無しさん:04/08/18 23:54
質問です.宜しくお願いします!

win32 console で,stdin にインプットがあるかどうかを調べるには
どうすればよいのでしょうか? unix 系の環境での select() 関数の
ようなものを探しています.今のところ _kbhit() を使用していますが,
標準入力がキーボードの時しか上手く働いてくれません...

103 :デフォルトの名無しさん:04/08/19 00:22
selectで良いと思いますが・・・

104 :デフォルトの名無しさん:04/08/19 00:49
ダイアログボックスの中にテキストボックスがある時、
そのテキストボックスにキーボードフォーカスを移すには
どうすればいいんですか?


105 :デフォルトの名無しさん:04/08/19 01:00
雪兎不応粕

106 :デフォルトの名無しさん:04/08/19 01:20
ダイアログボックス上ということであれば
WM_NEXTDLGCTLの使用を推奨したい。

107 :デフォルトの名無しさん:04/08/19 01:32
>>103
winじゃselectはsocketにしか使えませんが?

108 :デフォルトの名無しさん:04/08/19 01:43
質問です。

プログラムから、そのプログラム自身を実行した時の CreateProcess API の
各引数を調べる方法はあるのでしょうか?
その辺を多少調べたけれどわからんかったので教えていただければ嬉しいです。
ヒントとなるキーワードやAPI名でもいいんで教えてくださいエロい人。

109 :デフォルトの名無しさん:04/08/19 01:45
>>107
ネタにマジレスするな

110 :デフォルトの名無しさん:04/08/19 02:01
>>109ネタ解答は迷惑なので他所でやってください

111 :104:04/08/19 02:23
>>106
普通にGetDlgItemでできましたけどね……。

112 :デフォルトの名無しさん:04/08/19 02:35
>>108
CreateProcess索いて、See Alsoをざっと見てみた。
GetCommandLine, GetEnvironmentStrings, GetStarupInfoあたりが使えそうだな。

>>111
ボタンに黒枠が残っても気にしないのならそれで問題ない。

113 :デフォルトの名無しさん:04/08/19 02:45
>>102
WaitForSingleObject(GetStdHandle(STD_INPUT_HANDLE), 0)とか?
入力ハンドルがコンソールじゃなかった場合にWaitFor〜していいのかちょっと怪しいが

114 :102:04/08/19 03:27
>>113

解決しました!
ありがとうございました.

115 :115:04/08/19 05:16
あるアプリのクライアント領域の描写を右に100ピクセルずらすDLLをつくっているのですがうまくいきません
DLLはプラグインとしてアプリからロード,実行されアプリのWindowProcをSetWindowLongPtrで書き換えて
自分のProcが呼ばれるところまではうまくいきました
実際にずらす処理は
if(msg==WM_PAINT)
{
  HDC hdc = BeginPaint(hwnd, &ps);
  InvalidateRect(hwnd, &ps.rcPaint, ps.fErase);
  SetGraphicsMode(hdc, GM_ADVANCED);
  XFORM xnew, xlast;
  GetWorldTransform(hdc, &xlast);
  xnew.eM11 = 1;xnew.eM12= 0;
  xnew.eM21 = 0;xnew.eM22= 1;
  xnew.eDx = 100;xnew.eDy= 0;
  SetWorldTransform(hdc, &xnew);
  LRESULT result = CallWindowProc(g_DefProc, hwnd, msg, wp, lp);
 
  //ためしに変数helloの文字列を0,0に描写
  TextOut(hdc, 0, 0, hello, wcslen(hello));
  SetWorldTransform(hdc, &xlast);
  SetGraphicsMode(hdc, GM_COMPATIBLE);
  EndPaint(hwnd, &ps);
  return result;
}

116 :115:04/08/19 05:17
だいたいこんな感じのを自分のProcでやっているのですが変数helloの文字は確かに右にずれて描写されるのですが
アプリによってのほうは,今までのままです.原因はSetWorldTransformを適用してるHDCとアプリが実際使ってるHDCが
異なっているためだと思うのですが,ずらす系(?)API(SetWorldTransformとOffsetViewportOrgEx)の両方とも
引数としてHDCをとるため事前にアプリが使用するHDCを固定するかでもしないとなりません.そのようなことは可能ですか?
もしくは,ずらす系APIの引数がHWND版みたいなものはないでしょうか?
長文になってしまい,まことに申し訳ないのですがよろしくおねがいします

117 :115:04/08/19 05:59
BeginPaintとEndPaintを置き換えるやり方を見つけたのですが
ttp://www.fengyuan.com/article/wmprint.html
ちょっと複雑そうなのでSetWorldTransformなどのずらす系APIのHWND版を
教えていただく方向でお願いします.図図しくてすみません

118 :デフォルトの名無しさん:04/08/19 06:33
DLL側ではBeginPaintとEndPaintは使わない方がいいんじゃない?
GetDC(hWnd)で取れるよ。


119 :115:04/08/19 06:37
>>118
BeginPaintをGetDCに,EndPaintをReleaseDCに書き換えてみましたがだめでした

120 :デフォルトの名無しさん:04/08/19 06:40
ずらしたあとにアプリ側の再描画で元に戻されてるのでは?

121 :115:04/08/19 06:51
>>120
自分のイメージ的にはSetWorldTransform(hdc, &xnew)でかってに右に移動しちゃう行列が
適用されて,その後のSetWorldTransform(hdc, &xlast)がよばれるまでの間に呼び出された
CallWindowProc(g_DefProc, hwnd, msg, wp, lp);によってアプリ側には,ずれてることすらわからないはずみたいな感じなのですが
WM_PAINT以外で元に戻されるということでしょうか?

122 :デフォルトの名無しさん:04/08/19 07:07
あらかじめ SetGraphicsMode 関数を呼び出して、指定したデバイスコンテキストのグラフィックスモードを GM_ADVANCED に設定しておかなければ、SetWorldTransform 関数は失敗します。

123 :115:04/08/19 07:14
WM_ERASEBKGNDで送られてくるHDCを引数としてSetWorldTransformを呼び出すことで
アプリ側が描写したものに対しても100ピクセルずらすことができました.OffsetViewportOrgExでも大丈夫でした
 
>>122
いちおう115のソースの5行目で呼び出してます
 
回答していただきました皆様ありがとうございました


124 :デフォルトの名無しさん:04/08/19 14:34
Spy++みたいにほかのウィンドウのメッセージを取得したいのですが
どうやればいいのでしょうか?

125 :デフォルトの名無しさん:04/08/19 14:45
グローバルフックをインスコ

126 :デフォルトの名無しさん:04/08/19 14:55
>>125
こんな便利なものがあるなんて知りませんでした。
ありがとうございした。

127 :デフォルトの名無しさん:04/08/19 15:07
C++からWin32API使いたいんだけど、いちいちWrapperクラスなんか作らないとダメかな?

128 :デフォルトの名無しさん:04/08/19 15:10
>>127
C++に対する理解が足りないのでは

129 :デフォルトの名無しさん:04/08/19 15:11
そうした方が便利なら。

130 :127:04/08/19 15:18
結局MFCやれってことになるのかな?

MFC >>>>>>>>> 自作Win32API wrapper

ってこと?

131 :デフォルトの名無しさん:04/08/19 15:26
は?
どこからそういう結論が出るんだヴォケ

132 :デフォルトの名無しさん:04/08/19 15:34
まだまだ、残暑が続くからな。
変なやつの相手すんなって。

133 :127:04/08/19 15:40
このスレの住人て民度が低いね。(プ

134 :デフォルトの名無しさん:04/08/19 15:51
>>133
民度という用語に対する理解が足りないのでは

それはともかく、C++のソースからでもWin32APIの呼び出しはできるでしょ?
呼び出しをクラスメソッドにするかどうかは設計者であるアナタ次第。
というわけでスレ違い。

135 :デフォルトの名無しさん:04/08/19 15:52
近頃どのスレでも>>133みたいなのを見かける。


136 :デフォルトの名無しさん:04/08/19 16:06
> 近頃どのスレでも>>133みたいなのを見かける。
自分で作った Thread に>>133みたいなのが居るのを想像してしまった。orz

137 :デフォルトの名無しさん:04/08/19 16:22
ウィンドウズOSのコモンツールバー実装方法に疑問を感じる。
実装が自己矛盾に満ちている。

138 :デフォルトの名無しさん:04/08/19 16:23
以降、肛門ネタ禁止

139 :デフォルトの名無しさん:04/08/19 18:09
                      ''';;';';;'';;;,.,                  ザッ
                       ''';;';'';';''';;'';;;,.,   ザッ
          ザッ            ;;''';;';'';';';;;'';;'';;;
                        ;;'';';';;'';;';'';';';;;'';;'';;;
                        vymyvwymyvymyvy     ザッ
               ザッ     MVvvMvyvMVvvMvyvMVvv、
                   Λ_ヘ^−^Λ_ヘ^−^Λ_ヘ^Λ_ヘ
     ザッ            ヘ__Λ ヘ__Λ ヘ__Λ ヘ__Λ
                __,/ヽ_ /ヽ__,.ヘ /ヽ__,.ヘ _,.ヘ ,.ヘ    ザッ
    /\___/ヽ   /\___ /\___/ヽ _/ヽ /\___/ヽ
   /''''''   '''''':::::::\/''''''   '''/''''''   '''''':::::::\   /''''''   '''''':::::::\
  . |(●),   、(●)、.:|(●),    |(●),   、(●)、.:|、( |(●),   、(●)、.:|
  |   ,,ノ(、_, )ヽ、,, .::::|   ,,ノ(、_, )|   ,,ノ(、_, )ヽ、,, .::::|_, )|   ,,ノ(、_, )ヽ、,, .::::|  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
.   |   `-=ニ=- ' .:::::::|   `-=ニ= |   `-=ニ=- ' .:::::::|ニ=|   `-=ニ=- ' .:::::::| < ageますよ
   \  `ニニ´  .:::::/\  `ニニ \  `ニニ´  .:::::/ニ´ \  `ニニ´  .:::::/   \_________
   /`ー‐--‐‐―´\ /`ー‐-  /`ー‐--‐‐―´\-‐‐ /`ー‐--‐‐―´\

140 :デフォルトの名無しさん:04/08/19 18:51
                      ''';;';';;'';;;,.,                  ザッ
                       ''';;';'';';''';;'';;;,.,   ザッ
          ザッ            ;;''';;';'';';';;;'';;'';;;
                        ;;'';';';;'';;';'';';';;;'';;'';;;
                        vymyvwymyvymyvy     ザッ
               ザッ     MVvvMvyvMVvvMvyvMVvv、
                   Λ_ヘ^−^Λ_ヘ^−^Λ_ヘ^Λ_ヘ
     ザッ            ヘ__Λ ヘ__Λ ヘ__Λ ヘ__Λ
                __,/ヽ_ /ヽ__,.ヘ /ヽ__,.ヘ _,.ヘ ,.ヘ    ザッ
    /\___/ヽ   /\___ /\___/ヽ _/ヽ /\___/ヽ
   /''''''   '''''':::::::\/''''''   '''/''''''   '''''':::::::\   /''''''   '''''':::::::\
  . |(●),   、(●)、.:|(●),    |(●),   、(●)、.:|、( |(●),   、(●)、.:|
  |   ,,ノ(、_, )ヽ、,, .::::|   ,,ノ(、_, )|   ,,ノ(、_, )ヽ、,, .::::|_, )|   ,,ノ(、_, )ヽ、,, .::::|  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
.   |   `-=ニ=- ' .:::::::|   `-=ニ= |   `-=ニ=- ' .:::::::|ニ=|   `-=ニ=- ' .:::::::| < ageますよ
   \  `ニニ´  .:::::/\  `ニニ \  `ニニ´  .:::::/ニ´ \  `ニニ´  .:::::/   \_________
   /`ー‐--‐‐―´\ /`ー‐-  /`ー‐--‐‐―´\-‐‐ /`ー‐--‐‐―´\

141 :デフォルトの名無しさん:04/08/19 19:14

DWORD size;

size = GetFileSize(GetStdHandle(STD_INPUT_HANDLE));



上の方法で標準入力に何バイト溜まっているかを取得できますか?

142 :デフォルトの名無しさん:04/08/19 19:18
ぼくの肛門にも何バイトか溜まっているようです

143 :デフォルトの名無しさん:04/08/19 19:18
>>141
http://msdn.microsoft.com/library/en-us/fileio/base/getfilesize.asp
> You cannot use the GetFileSize function with a handle of a
> nonseeking device such as a pipe or a communications device.


144 :デフォルトの名無しさん:04/08/19 19:23
>>143
読み落としていました。

標準入力に何バイト溜まっているかを取得する方法はありませんか?
全部読まないとわからないのでしょうか?

145 :デフォルトの名無しさん:04/08/19 19:29
>>144
>標準入力に何バイト溜まっているかを取得する方法はありませんか?
ありません。

>全部読まないとわからないのでしょうか?
「全部」の意味によりますが、そんな感じです。

146 :141 == 144 == 146:04/08/19 19:31
>>145
thx!

147 :デフォルトの名無しさん:04/08/19 19:48
                      ''';;';';;'';;;,.,                  ザッ
                       ''';;';'';';''';;'';;;,.,   ザッ
          ザッ            ;;''';;';'';';';;;'';;'';;;
                        ;;'';';';;'';;';'';';';;;'';;'';;;
                        vymyvwymyvymyvy     ザッ
               ザッ     MVvvMvyvMVvvMvyvMVvv、
                   Λ_ヘ^−^Λ_ヘ^−^Λ_ヘ^Λ_ヘ
     ザッ            ヘ__Λ ヘ__Λ ヘ__Λ ヘ__Λ
                __,/ヽ_ /ヽ__,.ヘ /ヽ__,.ヘ _,.ヘ ,.ヘ    ザッ
    /\___/ヽ   /\___ /\___/ヽ _/ヽ /\___/ヽ
   /''''''   '''''':::::::\/''''''   '''/''''''   '''''':::::::\   /''''''   '''''':::::::\
  . |(●),   、(●)、.:|(●),    |(●),   、(●)、.:|、( |(●),   、(●)、.:|
  |   ,,ノ(、_, )ヽ、,, .::::|   ,,ノ(、_, )|   ,,ノ(、_, )ヽ、,, .::::|_, )|   ,,ノ(、_, )ヽ、,, .::::|  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
.   |   `-=ニ=- ' .:::::::|   `-=ニ= |   `-=ニ=- ' .:::::::|ニ=|   `-=ニ=- ' .:::::::| < ageますよ
   \  `ニニ´  .:::::/\  `ニニ \  `ニニ´  .:::::/ニ´ \  `ニニ´  .:::::/   \_________
   /`ー‐--‐‐―´\ /`ー‐-  /`ー‐--‐‐―´\-‐‐ /`ー‐--‐‐―´\

148 :デフォルトの名無しさん:04/08/19 21:54
                      ''';;';';;'';;;,.,                  ザッ
                       ''';;';'';';''';;'';;;,.,   ザッ
          ザッ            ;;''';;';'';';';;;'';;'';;;
                        ;;'';';';;'';;';'';';';;;'';;'';;;
                        vymyvwymyvymyvy     ザッ
               ザッ     MVvvMvyvMVvvMvyvMVvv、
                   Λ_ヘ^−^Λ_ヘ^−^Λ_ヘ^Λ_ヘ
     ザッ            ヘ__Λ ヘ__Λ ヘ__Λ ヘ__Λ
                __,/ヽ_ /ヽ__,.ヘ /ヽ__,.ヘ _,.ヘ ,.ヘ    ザッ
    /\___/ヽ   /\___ /\___/ヽ _/ヽ /\___/ヽ
   /''''''   '''''':::::::\/''''''   '''/''''''   '''''':::::::\   /''''''   '''''':::::::\
  . |(●),   、(●)、.:|(●),    |(●),   、(●)、.:|、( |(●),   、(●)、.:|
  |   ,,ノ(、_, )ヽ、,, .::::|   ,,ノ(、_, )|   ,,ノ(、_, )ヽ、,, .::::|_, )|   ,,ノ(、_, )ヽ、,, .::::|  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
.   |   `-=ニ=- ' .:::::::|   `-=ニ= |   `-=ニ=- ' .:::::::|ニ=|   `-=ニ=- ' .:::::::| < ageますよ
   \  `ニニ´  .:::::/\  `ニニ \  `ニニ´  .:::::/ニ´ \  `ニニ´  .:::::/   \_________
   /`ー‐--‐‐―´\ /`ー‐-  /`ー‐--‐‐―´\-‐‐ /`ー‐--‐‐―´\

149 :デフォルトの名無しさん:04/08/19 22:18
                      ''';;';';;'';;;,.,                  ザッ
                       ''';;';'';';''';;'';;;,.,   ザッ
          ザッ            ;;''';;';'';';';;;'';;'';;;
                        ;;'';';';;'';;';'';';';;;'';;'';;;
                        vymyvwymyvymyvy     ザッ
               ザッ     MVvvMvyvMVvvMvyvMVvv、
                   Λ_ヘ^−^Λ_ヘ^−^Λ_ヘ^Λ_ヘ
     ザッ            ヘ__Λ ヘ__Λ ヘ__Λ ヘ__Λ
                __,/ヽ_ /ヽ__,.ヘ /ヽ__,.ヘ _,.ヘ ,.ヘ    ザッ
    /\___/ヽ   /\___ /\___/ヽ _/ヽ /\___/ヽ
   /''''''   '''''':::::::\/''''''   '''/''''''   '''''':::::::\   /''''''   '''''':::::::\
  . |(●),   、(●)、.:|(●),    |(●),   、(●)、.:|、( |(●),   、(●)、.:|
  |   ,,ノ(、_, )ヽ、,, .::::|   ,,ノ(、_, )|   ,,ノ(、_, )ヽ、,, .::::|_, )|   ,,ノ(、_, )ヽ、,, .::::|  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
.   |   `-=ニ=- ' .:::::::|   `-=ニ= |   `-=ニ=- ' .:::::::|ニ=|   `-=ニ=- ' .:::::::| < ageますよ
   \  `ニニ´  .:::::/\  `ニニ \  `ニニ´  .:::::/ニ´ \  `ニニ´  .:::::/   \_________
   /`ー‐--‐‐―´\ /`ー‐-  /`ー‐--‐‐―´\-‐‐ /`ー‐--‐‐―´\

150 :デフォルトの名無しさん:04/08/19 22:21
馬鹿127が荒らしてる

151 :127:04/08/19 22:53
>>150
おれじゃねーよヴァカ

152 :127:04/08/19 23:23
                      ''';;';';;'';;;,.,                  ザッ
                       ''';;';'';';''';;'';;;,.,   ザッ
          ザッ            ;;''';;';'';';';;;'';;'';;;
                        ;;'';';';;'';;';'';';';;;'';;'';;;
                        vymyvwymyvymyvy     ザッ
               ザッ     MVvvMvyvMVvvMvyvMVvv、
                   Λ_ヘ^−^Λ_ヘ^−^Λ_ヘ^Λ_ヘ
     ザッ            ヘ__Λ ヘ__Λ ヘ__Λ ヘ__Λ
                __,/ヽ_ /ヽ__,.ヘ /ヽ__,.ヘ _,.ヘ ,.ヘ    ザッ
    /\___/ヽ   /\___ /\___/ヽ _/ヽ /\___/ヽ
   /''''''   '''''':::::::\/''''''   '''/''''''   '''''':::::::\   /''''''   '''''':::::::\
  . |(●),   、(●)、.:|(●),    |(●),   、(●)、.:|、( |(●),   、(●)、.:|
  |   ,,ノ(、_, )ヽ、,, .::::|   ,,ノ(、_, )|   ,,ノ(、_, )ヽ、,, .::::|_, )|   ,,ノ(、_, )ヽ、,, .::::|  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
.   |   `-=ニ=- ' .:::::::|   `-=ニ= |   `-=ニ=- ' .:::::::|ニ=|   `-=ニ=- ' .:::::::| < sageますよ
   \  `ニニ´  .:::::/\  `ニニ \  `ニニ´  .:::::/ニ´ \  `ニニ´  .:::::/   \_________
   /`ー‐--‐‐―´\ /`ー‐-  /`ー‐--‐‐―´\-‐‐ /`ー‐--‐‐―´\

153 :デフォルトの名無しさん:04/08/19 23:37
CreateFileで作成したファイルをメモリマップドファイルを用いずに
行単位で入力する方法を探しています。
C言語のfgetsに相当する関数は無いのでしょうか?
また、自作するにはどうしたらよろしいでしょうか?

154 :デフォルトの名無しさん:04/08/19 23:50
>>153
精進が足りんな。
API直叩きにはスキル無さ杉。
まずバッファリングのやり方、勉強汁!
嫌なら素直にランタイム使っとけ。

155 :デフォルトの名無しさん:04/08/20 00:38
>>110
なんで俺に言うんだよ。>>103に言えよ。

156 :デフォルトの名無しさん:04/08/20 00:47
CreateWindowExで作ったエディットコントロールの…
 ・フォントのサイズ変更、
 ・フォントの種類変更、
 ・フォントの色変更、
 ・背景色変更、
 ・半透明化、
の仕方が分かりません。

リッチエディットまではいかなくてもWindows付属のメモ帳くらい変更したいのですが。

半透明化については、
SetLayeredWindowAttributes関数でできるかと思ったのですが、
ウィンドウ全体の半透明化はできてもエディットコントロールの変更は無理のようです
(エディットコントロールに同じことをするとエディットコントロール自体が消えます)

分かる方よろしくお願いします。

157 :デフォルトの名無しさん:04/08/20 01:04
>>156
子ウィンドウはレイヤードウィンドウにできないはず。

158 :デフォルトの名無しさん:04/08/20 01:06
WS_CHILD外して貼り付けたいウィンドウにあわせて移動。

159 :デフォルトの名無しさん:04/08/20 01:22
XPや2000におけるHTMLでのボタンのような外観にはどうやったらできるんですか?

160 :デフォルトの名無しさん:04/08/20 01:46
>>159
そうですか

161 :デフォルトの名無しさん:04/08/20 01:55
>>160
カスが

162 :デフォルトの名無しさん:04/08/20 01:56
>>160
そうですよ
http://www.microsoft.com/japan/msdn/windows/windowsxp/xptheming.asp

163 :156:04/08/20 02:03
ありがとうございます。

>>157
なるほど、それでできなかったんですね。

>>158
WS_CHILDを外してみましたが
何も変わりませんでした・・・
エディットコントロール作成時に、親ウィンドウのハンドルのところをNULLにもしてみたりしたんですが。

164 :デフォルトの名無しさん:04/08/20 06:27
>>163
エディットコントロールと同じ大きさの枠無し窓でも作ればいいんじゃないかな

165 :デフォルトの名無しさん:04/08/20 09:19
>>156
今や不評ですが、「猫でもわかる...」に例があったような。
半透明化はやっていませんが、他は、私は猫のお陰でやっています。

166 :デフォルトの名無しさん:04/08/20 10:41
ユーザー名とドメイン名からそのユーザーがlogonしているかどうかを
知りたいのですが、そのようなAPIはありませんでしょうか?

現在logonしているユーザーのリストを取得できる関数がないかなと
思っているのですが…


167 :デフォルトの名無しさん:04/08/20 11:44
>>156
ボタンをサブクラス化。
バックバッファを作り、WM_PAINTで元のボタンにWM_PRINT送って描画してもらう。
背景と重ね合わせる。

でどお?

168 :デフォルトの名無しさん:04/08/20 11:58
>>166
これなんかどう?
ttp://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=8548&forum=6&6

169 :デフォルトの名無しさん:04/08/20 12:44
>>156

WM_SETFONT でフォントのセット、背景色は WM_CTLCOLOREDIT への応答で

170 :デフォルトの名無しさん:04/08/21 02:32
HWNDに対応したキャレットの幅と高さを調べられるAPIはありますか?

171 :デフォルトの名無しさん:04/08/21 12:42
メニューが複数行表示されているか、どうやったら調べられますか?
またウィンドウの幅がどれくらい縮んだらメニューが折り返されるか調べる方法はありませんでしょうか?


172 :デフォルトの名無しさん:04/08/21 17:43
現在のタスクバーの高さを一発で求める API はなんでしょうか。
MSDN で探すのは TASKBAR とかでは駄目で、他の用語があるんでしょうか。

173 :デフォルトの名無しさん:04/08/21 17:50
タスクマネージャのように
プロセスごとの、ユーザー名、CPU、メモリ使用量を取得するには
どのようにすればよいのでしょうか

174 :デフォルトの名無しさん:04/08/21 18:05
>>172
タスクバーが左右に縦に表示されている場合でも"高さ"が欲しいのか?

なんとなくSystemParametersInfo(SPI_GETWORKAREA, ...)とかGetMonitorInfo()で
取得できるワークエリアが必要な気もするが。

175 :デフォルトの名無しさん:04/08/21 19:42
>>172
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shappbarmessage.asp

176 :デフォルトの名無しさん:04/08/21 22:22
>>173
PSAPI

177 :172:04/08/21 23:47
>>174, >>175
どうもありがとうございます。
高さってのは軽率でした。screen から workarea を引くしかないんですね。

178 :デフォルトの名無しさん:04/08/22 07:14
メニューにチェック形式のアイテムをもたせるにはどうすればいいんですか?

179 :デフォルトの名無しさん:04/08/22 10:04
ある意味では、すべてのMENUITEMはチェック形式であるといってもいいね。

180 :デフォルトの名無しさん:04/08/22 10:23
>>179がなんか言い出したぞ。

181 :デフォルトの名無しさん:04/08/22 13:18
>>178
CheckMenuItem()じゃない?

いやまて、そんな単純な質問ではないのか?

182 :デフォルトの名無しさん:04/08/22 13:40
>>181
うん。皆、その裏が読めなくて答えられないのだよ。

183 :170:04/08/22 14:53
マダー?

184 :デフォルトの名無しさん:04/08/22 15:06
>>183
ざっとみたかんじ、そんなAPIはなさげです

185 :デフォルトの名無しさん:04/08/22 15:20
ListView_SortItemsを使ってリストビューをソートしようと思ったのですが、
何故か出来ません。


int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);


この比較関数の引数のlParam1とlParam2の値が、常に0です。
リストビューには数百ぐらいいれているのですが

186 :デフォルトの名無しさん:04/08/22 15:34
CreateDIBSectionとmemcpyとかを使ってペイントソフトみたいの作れって言われたんだけどさっぱり分からん!
どこか解説ページとかない?

CreateDIBSectionの意味すら今一分かんないorz

187 :デフォルトの名無しさん:04/08/22 15:39


188 :デフォルトの名無しさん:04/08/22 15:45
まずググれ

189 :デフォルトの名無しさん:04/08/22 15:53
>>186
CreateDIBSectionとmemcpyについて解説してあげてもいいけど、
ペイントソフト作るのってその二つ理解するよりはるかに難易度高いから
そのくらい自分で調べた方が良いよ。

190 :デフォルトの名無しさん:04/08/22 16:53
>>185
そのソースさらしてよ、でなきゃ原因はわからんです。

ListView_SortItemsの使い方だったら、ググれば
たくさん出てくる。

191 :185:04/08/22 17:06
猫を参考にしています。

HWND hList;//リストビューのハンドルを入れてあるグローバル変数

int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
  static LV_FINDINFO lvf ;
  static int item1, item2 ;
  static char buf1[512] , buf2[512] ;
  lvf.flags = LVFI_PARAM ;  lvf.lParam = lParam1 ;

  item1 = ListView_FindItem(hList, -1, &lvf) ;
  lvf.lParam = lParam2 ;
  item2 = ListView_FindItem(hList, -1, &lvf) ;
  ListView_GetItemText(hList, item1, (int)lParamSort, buf1, sizeof(buf2));
  ListView_GetItemText(hList, item2, (int)lParamSort, buf2, sizeof(buf2));
  return strcmp(buf1, buf2);
}

呼び出すのはこうやってます。

  NMLISTVIEW pNMlist = (NMLISTVIEW *)lParam ;
  ListView_SortItems(hList, CompareFunc, pNMlist->iSubItem);

リストビューのウインドウハンドル、hListは確かに存在します。
実験的に、ListView_SortItems()の前にIsWindow()をやって確かめました。

192 :185:04/08/22 17:15
すみません。ちょっと行数を調節していたら途中に変な改行が。

それから呼び出すのは
WM_NOTIFYの、リストビューのIDからのメッセージで、
LVN_COLUMNCLICKが来たときにです。

193 :デフォルトの名無しさん:04/08/22 17:46
>>191

compare関数が呼び出された時点でlParam1, lParam2共に0なんだから、
その関数をみせられてもわからんですよ。

猫のところのプログラムは動くのだから、そこから手を加えた
ところを探ってみた方がいいんじゃない?アイテムを追加するところとか。


194 :デフォルトの名無しさん:04/08/22 17:58
lParamを設定していない落ちとか。

私の場合は必ずアイテム追加するときにlParam設定しておくからなぁ。
#しかもMFC利用。

195 :185:04/08/22 18:45
>>194
LPARAMを設定?

196 :デフォルトの名無しさん:04/08/22 19:16
親ウィンドウAとその子ウィンドウBがあり、子ウィンドウBを親ウィンドウAの
キャプションのように扱いたいのですがどうすればいいのでしょうか?
以下のような感じで、子ウィンドウBをドラッグすると親ウィンドウが動くとい
うか…わかりづらくてすいません。
+---------------+
| +-----------+ |
| | 子ウィンドウB |. |
| +-----------+ |
| 親ウィンドウA   |
+---------------+

最初、子ウィンドウBでWM_NCHITTESTで親Aにそのまま流しましたがダメ
でした。
次に子ウィンドウBでWM_NCHITTESTにreturn HTCAPTIONを返し、Bの
WM_WINDOWPOSCHANGINGで親ウィンドウに対しMoveWindowしてみると
一見うまくいってるようですが親とズレてしまったり、親のクライアント領域
外に出られないなどの問題がありました。

要はシステムメニューから移動を選択したのと同じ動作をさせたいのです。
どなたがご教授頂けませんか。


197 :デフォルトの名無しさん:04/08/22 19:33
キャプション?

198 :デフォルトの名無しさん:04/08/22 21:34
>>196
子ウィンドウでは HTTRANSPARENT を返して、親ウィンドウでは
マウス座標を調べて子ウィンドウの座標内にあれば HTCAPTION を
返すようにしたらどうですか?

199 :185:04/08/22 23:05
自己解決しました。

LVITEM構造体のlParamを設定する必要があるんですね。
比較関数に送られてくるのはその値だったのか。
道理で全部ゼロになっているわけだ。

200 :テレパス名無しさん:04/08/22 23:05
>>178
チェックボックスのように自動でチェックする機能はないので、
自分で状態を管理してチェックを付けたり外したりしてください。

201 :196:04/08/22 23:36
>>198
レスが遅くなって申し訳ありません。
子ウィンドウでHTTRANSPARENT(-1)を返し、親ウィンドウで座標をチェックして
HTCAPTIONを返したところ期待通りの動作になりました。
ご教授頂きありがとうございました。


202 :デフォルトの名無しさん:04/08/23 02:37
関連づけられたアイコンの小さいサイズを取得する方法はありますか?
ExtractAssociatedIconでは32x32サイズのアイコンしか取得できませんでした。
ExtractIconExだとEXEやDLLの場合は小さいサイズも取得できますが、フォルダ
の小さいアイコンを取得できません。
ぐぐってみたりMSDNをみたりしましたが見つけることができませんでした。


203 :デフォルトの名無しさん:04/08/23 08:22
Windows2000でコンピュータ名を変更できるAPIはないでしょうか?

SetComputerNameでは、NetBIOS名しか変わりませんでした。
Win32_ComputerSystemのRenameメソッドはXP以降でしか使えないようです。

204 :デフォルトの名無しさん:04/08/23 08:25
そろそろXP専用でも何も文句言われなくなってくる時期

205 :デフォルトの名無しさん:04/08/23 08:29
>>202
SHGetFileInfo

206 :デフォルトの名無しさん:04/08/23 09:57
>>203
よくわからずに書くけど、SetComputerNameExもダメ?

207 :デフォルトの名無しさん:04/08/23 10:42
>>206
ありがとうございます。

Exの方はドキュメントだけ見て、試してませんでした。
SetComputerNameExのComputerNamePhysicalDnsHostnameで上手く行きました。

お騒がせしました。


208 :デフォルトの名無しさん:04/08/23 14:29
現在実行中のプロセスから、自分自身が所有しているメモリサイズを知りたいのですが、
そういうふうに使えそうなAPIはないでしょうか?
できれば、スレッドごとのスタックサイズも取れると嬉しいです。
お知恵を拝借させてください。
お願いします。

209 :202:04/08/23 15:35
>>205
ありがとうございます、調べてみます。


210 :186:04/08/23 15:36
>>208
MEMORYSTATUS
GlobalMemoryStatus
で出来ると思います。

>>189
大変亀レスですけど、ペイトソフトといってもただMoveToExとか使わずに直線を引いたりするだけのプログラムでして。
一番重要そうなCreateDIBSectionの使い方と言うか意味の理解い苦しんでます。
hdcを取得するとかしてどうするのかとか…

211 :デフォルトの名無しさん:04/08/23 16:00
>>210
ググって一番最初に出てくるページどおりにやればできるんでないの?
某お絵かきソフトの作者のページだが。

212 :デフォルトの名無しさん:04/08/23 16:02
>>208
プロセスごとのメモリの情報は NT 系では PSAPI の GetProcessMemoryInfo()
9X 系では、ToolHelp のヒープウォークをする必要があります。

213 :デフォルトの名無しさん:04/08/23 16:42
アクセラレータキーってマウスボタンは使えないんですか?
VK_LBUTTONとかVK_RBUTTONなんてものがあるからやってみたのですが、うまくいきません。
ほかの適当なボタンに変えると動きます。

214 :デフォルトの名無しさん:04/08/23 17:08
>>208
パフォーマンスモニタ方面のAPI使えば大体のことはできそう。
詳しくは知らんのでMSDNあたってくらさい。

215 :デフォルトの名無しさん:04/08/24 00:31
VC++6.0です。
レイヤードウィンドウを使いたくて調べたところ、
SDKをインストールする、とあったのでインストールしてみたんですが相変わらず

'SetLayeredWindowAttributes' : 定義されていない識別子です。

と出ます。
core SDK のインストールだけじゃダメなんでしょうか?

216 :デフォルトの名無しさん:04/08/24 00:39
>>215
>>74

217 :215:04/08/24 01:46
まさか同じ質問がスレ上にあったとは・・・
別の単語で検索して引っかからなかったので見落としてしまいました。

でも、まだ解決できません。
オプションからSDKのインクルードとライブラリは
ディレクトリに加えてあるんですけど、全然効果がないです。
何故なのかわかりませんが、他に設定が必要なのでしょうか?

218 :デフォルトの名無しさん:04/08/24 02:03
>>217
追加した奴を上の方にしてるか?

219 :215:04/08/24 02:41
>>218
はい、それは書いてあったので試してみました。
でもダメなんです。

そういえば、>>78の意味がわかりませんでした。
調べても何がなにやらで。

普通だったらちゃんと定義されてるって認識するんですよね?

220 :デフォルトの名無しさん:04/08/24 02:54
#define _WIN32_WINNT 0x500
#include "windows.h"

こーしろってこと。


221 :デフォルトの名無しさん:04/08/24 04:27
>>220
stdafx.hネタと同じくらいメジャーな「初心者泣かせ」かもな(w

222 :222:04/08/24 06:51
IMEの表示をずらしたいのですがうまくいきません.どの段階での表示かといいますと
ちょっとうまく伝えられるか自身がないのですが,メモ帳を立ち上げていただいて
[半角/全角キー]を押していただき[Aキー]を押していただくと[あ]の文字の下に点線が
表示されてる状態になると思うのですが,これをずらしたのです.
実際にずらしたいのはメモ帳なども外部アプリの物ではなく自分でCreateWindowしたEDITの物です

WM_IME_REQUESTで,なおかつWPARAMがIMR_QUERYCHARPOSITIONのときLPARAMはIMECHARPOSITIONという
構造体へのポインタでありまして,それをうめて1を返せばいいみたいなことがmsdnに書いてあるとおもうのですが
英語なので自信がありません.
msdn.microsoft.com/library/en-us/intl/ime_2nu6.asp

ここにソースを貼りました
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1086258254&rm=100

223 :222:04/08/24 08:36
WM_IME_NOTIFYでWPARAMがIMN_SETCOMPOSITIONWINDOWのときに
ImmSetCompositionWindowで無事ずらすことができました

224 :デフォルトの名無しさん:04/08/24 12:33
質問です。

VC++6.0にて、
新規作成 -> Win32 Console Application -> 空のプロジェクト
から、ウィンドウ(またはダイアログ)を生成することは可能でしょうか。




225 :デフォルトの名無しさん:04/08/24 12:38
>>224
試してみてください

226 :224:04/08/24 12:42
ハーイ

227 :デフォルトの名無しさん:04/08/24 12:43
>>224
ぶっちゃけ、可能です。
作り方は自分で調べましょう。
手取り足取り教えられる暇人はいません。

終了

228 :224:04/08/24 12:50
>227 再開
可・不可だけたずねたつもりでしたので、
思わぬ回答、ありがとうございました。



229 :215:04/08/24 12:54
>>220
できました、そうやるのですか。
本当にありがとうございました。

230 : ◆Z0vd5w812U :04/08/24 13:25
>>224
オレはいつもconsoleでWin32アプリを作ってる。printfを使いたいから。
リリース時にはWinMain()を呼び出すように切り替えてコンパイル。

で、一つだけ教える。GetModuleHandle(NULL)でアプリケーションのインスタンスハンドルを入手できる。

231 :デフォルトの名無しさん:04/08/24 13:33
>>230
OutputDebugString()は許されない環境なのか?

232 : ◆Z0vd5w812U :04/08/24 13:43
>>231
コマンドラインでmakefile派だから。IDEを使わないので。


233 :デフォルトの名無しさん:04/08/24 13:44
>>231
慣れというものがあるっしょう。
かく言う俺もConsole使ってる。_DEBUG定数でmainとWinMainを切り替えたりして。

234 :デフォルトの名無しさん:04/08/24 14:04
>>233
WinMainを使っててもコンパイルオプションでコンソールが出る。
(少なくともMingwとlcc-win32では。)
いちいちWinMainとmainを切りかえるのは面倒じゃないか?

235 :デフォルトの名無しさん:04/08/24 15:51
>>232
は?IDE?なんの関係が?

236 :デフォルトの名無しさん:04/08/24 16:17
OutputDebugStringって、普通にコンソールに出力出来るのか?

237 :デフォルトの名無しさん:04/08/24 16:26
...\Microsoft Platform SDK\Bin\winnt\Dbmon.Exe

238 :デフォルトの名無しさん:04/08/24 17:12
>>234
IDE や Makefile 等で、リリース時とデバッグ時でリンカの設定も変えてるのでは?
んでソースの中では _DEBUG 見て main 生かしたり WinMain 生かしたりしてるとか。

239 :224:04/08/24 17:25
>>230-238
有用な情報有難うございます。

今までWindowアプリは食わず嫌いでしたというか
機会がなかったので、食っていくのために少しオベムキョウして見ます。

240 : ◆Z0vd5w812U :04/08/24 21:00
>>234>>238
そう。Makefile中でコンパイルオプションとリンクオプションを変えてる。
#ifdefでmainとWinMainを切り替えてる。10行程度だし一回作ってしまえばあとは使い回し。

>>239
深淵なる糞APIの世界へようこそ。ガンガッテ下さい。

241 :デフォルトの名無しさん:04/08/24 21:40
質問なんですが
猫でもわかるプログラミングのサイトのWindows SDK編 12章の
リソーススクリプトとヘッダの部分を教えてください。
お願いします。

242 :デフォルトの名無しさん:04/08/24 23:11
>>241
先ずはそのサイトの該当ページを飽きるまで読んでください。

243 :デフォルトの名無しさん:04/08/24 23:20
読んだのですがどこみていいのか わかりません
システムメニューのリソーススクリプトはのっているのでしょうか
これは12章以降を見るっていうことでしょうか

244 :デフォルトの名無しさん:04/08/24 23:31
12章の内容ってシステムメニューいじってるだけやん。
自分で好きなようにダイアログリソース作ってよし。

ついでにおまいらに言っとくが、[閉じる(C) Alt+F4]の下にメニュー追加するやつは頃す。

245 :デフォルトの名無しさん:04/08/25 00:38
>>244
タスクバー右クリから閉じようとした時、切なくなるね

246 :デフォルトの名無しさん:04/08/25 00:54
>>244
cmd.exeのコトかー!

247 :デフォルトの名無しさん:04/08/25 01:12
ひでまるのことかー!

248 :デフォルトの名無しさん:04/08/25 01:35
>>244
*.chmファイルとか開いた時とか

249 :デフォルトの名無しさん:04/08/25 01:44
バージョン情報が表示されるたびに学習能力のない自分に苛立ち手首を切りたくなります。

250 :デフォルトの名無しさん:04/08/25 02:11
特定の外部アプリケーションのEDITウインドウの
ウインドウハンドルを拾うにはどうすればいいですか?

251 :デフォルトの名無しさん:04/08/25 02:33
トップウィンドウから徹底的にさがしまくる

252 :デフォルトの名無しさん:04/08/25 04:07
記録されている物理的なデータを暗号化する関数ってある?
例えば.txtの中身がaだけだととしても暗号化してrk&0 見たいに見えるようにするような

253 :デフォルトの名無しさん:04/08/25 05:02
ない

254 :デフォルトの名無しさん:04/08/25 05:58
DirectXを使わずにフルスクリーンウィンドウを作りたいのですが、その時解像度も指定する方法ってないですか?

255 :デフォルトの名無しさん:04/08/25 06:08
ChangeDisplaySettings

256 :254:04/08/25 06:17
たすかりました!

257 :デフォルトの名無しさん:04/08/25 09:55
>>236
http://www.vector.co.jp/vpack/filearea/winnt/prog/debug/index.html

258 :デフォルトの名無しさん:04/08/25 09:59
>>244
そんなもん人の勝手だろうが

259 :デフォルトの名無しさん:04/08/25 10:15
メニューの折り返しも考慮してくれるAdjustWindowRectってありませんか?

260 :デフォルトの名無しさん:04/08/25 10:20
>>244
MSDNライブラリも頃される対象になるわけだな・・・。

261 :デフォルトの名無しさん:04/08/25 10:20
ない。仕方ないからWM_NCCALCSIZE投げて再計算してる
実際にウィンドウ作らないと計算できないのがイマイチだが

262 :デフォルトの名無しさん:04/08/25 10:59
実際のところ、メニューが折り返されてもそれを意識しないアプリも結構多いな。
漏れはメニューに等幅フォント使ってるんで時々そういうのに出くわす。

折り返すのがイヤならReBarスタイルのメニューを使うという手もあるが
マンドクサそうだ。

263 :デフォルトの名無しさん:04/08/25 11:15
>>261
WM_NCCALCSIZEを投げるサンプルみたいなものってどこかに無いでしょうか?
検索しても、WM_NCCALCSIZEに応答するサンプルしか見当たらず、
MSDNを見てもどのメンバを埋めてSendMessageするべきなのか検討もつきません。

264 :デフォルトの名無しさん:04/08/25 12:06
リサイズするときはこんな感じになるのかな

int ResizeWindowByClient(HWND hwnd, int width, int height, int times_to_try=2)
{
  RECT rc = { 0, 0, width, height};
  ::ClientToScreen(hwnd, reinterpret_cast<POINT*>(&rc));
  ::ClientToScreen(hwnd, reinterpret_cast<POINT*>(&rc)+1);
  ::AdjustWindowRectEx(&rc,
    ::GetWindowLongPtr(hwnd, GWL_STYLE),
    ::GetMenu(hwnd) ? TRUE : FALSE,
    ::GetWindowLongPtr(hwnd, GWL_EXSTYLE));

  for (int i = 0; i < times_to_try; i++) {
    RECT client = rc;
    ::SendMessage(hwnd, WM_NCCALCSIZE, FALSE, reinterpret_cast<LPARAM>(&client));
    if (client.right-client.left == width && client.bottom-client.top == height) {
      ::SetWindowPos(hwnd, NULL, rc.left, rc.top,
        rc.right-rc.left, rc.bottom-rc.top, SWP_NOZORDER|SWP_NOACTIVATE);
      return true;
    }
    rc.right += width + client.left-client.right;
    rc.bottom += height + client.top-client.bottom;
  }
  // これしとかないと、変更予定だったサイズでメニューが折り返すときおかしくなる
  ::GetWindowRect(hwnd, &rc);
  ::SendMessage(hwnd, WM_NCCALCSIZE, FALSE, reinterpret_cast<LPARAM>(&rc));
  return false;
}


265 :デフォルトの名無しさん:04/08/25 12:52
俺はこんなのを使ってる
void AdjustWindowRect(HWND hwnd,int width,int height)
{
RECT wrect,crect;
::GetWindowRect(hwnd,&wrect);
::GetClientRect(hwnd,&crect);
int ncwidth,ncheight;
ncwidth = (wrect.right - wrect.left) - (crect.right - crect.left);
ncheight = (wrect.bottom - wrect.top) - (crect.bottom - crect.top);
::SetWindowPos(hwnd,NULL,0,0,
width + ncwidth,height + ncheight,
SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOMOVE);
::GetWindowRect(hwnd,&wrect);
::GetClientRect(hwnd,&crect);
int ncheight2 = (wrect.bottom - wrect.top) - (crect.bottom - crect.top);
if (ncheight != ncheight2)
{
::SetWindowPos(hwnd,NULL,0,0,
width + ncwidth,height + ncheight2,
SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOMOVE);
::GetWindowRect(hwnd,&wrect);
}
RECT drect;
::GetClientRect(GetDesktopWindow(),&drect);
int x = wrect.left - (wrect.right > drect.right ? wrect.right - drect.right : 0);
int y = wrect.top - (wrect.bottom > drect.bottom ? wrect.bottom - drect.bottom : 0);
x = x < 0 ? 0 : x;
y = y < 0 ? 0 : y;
::SetWindowPos(hwnd,NULL,x,y,0,0,
SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOSIZE);
}

266 :デフォルトの名無しさん:04/08/25 17:53
CD-ROMの入れ替えで、ファイルリストの情報を更新したいのですが、上手く行きません。
入れ替えると、WM_DEVICECHANGEが来て、
ボリュームラベルなどの情報は取れるのですが、アイコンが更新されません。
アイコンを更新するためにはどうしたらいいのでしょうか?

267 :デフォルトの名無しさん:04/08/25 18:13
>>236 のツールのように他アプリの OutputDebugString 出力を取得するにはどうすればよいのでしょうか?

268 :デフォルトの名無しさん:04/08/25 18:26
>>266
よくわからんけど、SHChangeNotifyRegisterで登録して、
SHCNE_UPDATEIMAGEを待ってから取得するのはどうだろう?
アイコン取得方法とかもうちょい詳細を晒せば、誰かもっといい答えをくれるかも。

269 :デフォルトの名無しさん:04/08/25 19:01
>>268
ありがとうございます。
ただ、ドキュメントを見るとSHChangeNotifyRegisterはWin2K以降用なのでWin98では駄目みたいです。
アイコンはSHGetFileInfoで取得してます。
(フラグはSHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON)

270 :デフォルトの名無しさん:04/08/25 19:59
>>267
そのツールにはソースが付いてるだろ。読め

271 :デフォルトの名無しさん:04/08/25 20:46
>>269
Win98では隠しAPIかも。
www.geocities.com/SiliconValley/4942/
に載ってるので。

あとは、タイミングの問題に思えるので、ウェイト&リトライ入れるか
ポーリング入れるとか?

272 :デフォルトの名無しさん:04/08/25 22:35
OLEドラッグ&ドロップをエミュレートするにはどうしたらいいのでしょうか?
ウインドウについてるプロパティリストを見ると、
OleDropTargetInterface と OleDropTragetMarshalHwnd というのがくっついているので、
IMarshalを使うのかなと想像してるのですが、IMarshalを使った事無いので検索しようにも
手がかりがつかめません。

検索のヒントだけでも良いので挙げてもらえないでしょうか?

273 :デフォルトの名無しさん:04/08/25 22:56
エミュレートっていうのは分かりませんが、OLEドラッグ&ドロップを実現するには、
IDropSource、IDropTarget、IEnumFORMATETC、IDataObject等を実装する必要があります。

ドラッグ操作を開始するときは、DoDragDrop API(引数はIDataObjectとIDropSource)を
使用します。

ドラッグを受け付けるときは、RegisterDragDrop API(引数はIDropTarget)で
ドラッグ受け入れ用のインターフェイスを登録します。

RegisterDragDropで登録したあとは、いちおう念のため、IDropTargetを
CoLockObjectExternalでロックしておいたほうが安全のようです。

274 :デフォルトの名無しさん:04/08/25 23:24
>>273
レスありがとうございます。
エミュレートというのは、プログラムからバッチ処理的に直接ドラッグ&ドロップをしたいということで、
DoDragDropによってできる通常のマウスによるドラッグドロップではないのです。

ウインドウハンドルやプロセスID等から直接ターゲットプロセスのIDropTargetを操作したいんです。

275 :デフォルトの名無しさん:04/08/25 23:27
パスの取得方法について質問です
コマンドラインから
>hoge.exe "c:\aaa\bbb\ccc\ddd.txt"
と引数を渡してやったときに、フルパスからファイル名を除いた
c:\aaa\bbb\ccc\を取得したいのです。

ググった所、_splitpathでドライブ、ディレクトリ、ファイル名
に分割できる事はわかりましたが、一発でファイル名のみ除去できるAPIはないのでしょうか?

276 : ◆Z0vd5w812U :04/08/26 00:00
>>275
文字列のケツから'\\'を探して'\0'で置き換えればよいのでは?

277 :デフォルトの名無しさん:04/08/26 00:07
練習問題としてはありなんですが、バックスラッシュとか、
多バイト文字が不味いんじゃないでしょうか

標準で安全なものがあればそれを使うのが最善でしょうけど、
MFCとか.NETとかでならメソッドがあるみたいなんですけど……

278 :デフォルトの名無しさん:04/08/26 00:12
>>275
PathFindFileName()

279 :デフォルトの名無しさん:04/08/26 00:13
>>270
デルフィーのソースを読むのは嫌です

280 :デフォルトの名無しさん:04/08/26 00:24
>>274
なるほど。

反則的な技ですが、相手先のウィンドゥに直接WM_DROPFILESを送ってやることで可能です。
DROPFILES構造体用のメモリを確保し、そこに必要情報を書き入れ、相手先の
ウィンドウに送りつけます。

メモリ確保は、シェルAPIのSHGetMalloc(&pMalloc)でメモリインターフェイスを
取得し、pMalloc->Alloc()でメモリを確保します。

pMalloc->Alloc()で確保したメモリは異プロセス間で参照可能です。

pMallocを使用し終わった後はpMalloc->Release()を忘れないようにしてください。

なお、DROPFILESに入れるファイル名ですが、Windows NT系列ではUNICODE、
それ以外ではANSIで入れないといけないようです。
(DROPFILES::fWideも適切にセットする。)

281 :280:04/08/26 00:26
あ〜。書いてしまった後でなんですが、これだと
>>直接ターゲットプロセスのIDropTargetを操作したいんです。
の希望に添えませんね…。
お役にたてなくてすみません。

282 :デフォルトの名無しさん:04/08/26 00:38
>>274
UndocumentedだがOleDropTargetInterfaceプロパティに
IDropTargetのポインタが入ってる。

283 :デフォルトの名無しさん:04/08/26 00:39
>>279
???
何でMSDNにDelphiのソースがあるの? 何か別のものを想像してないか?

284 :デフォルトの名無しさん:04/08/26 00:52
>>282
他プロセスからじゃ操作できないんじゃね?

285 :デフォルトの名無しさん:04/08/26 01:07
SetCursorPosでマウスカーソルを対象ウィンドウ上に移動してDoDragDropすればいける気もするが。

286 :デフォルトの名無しさん:04/08/26 01:08
>>284
そこはDLL注入とかでがんがる

287 :デフォルトの名無しさん:04/08/26 01:33
>>275
PathRemoveFileSpec()

288 :デフォルトの名無しさん:04/08/26 12:20
・子ダイアログである
・そのダイアログ上にあるコントロールを触った後でも、フォーカスは常にメインウィンドウにある
・フォーカスの有無にかかわらず、タイトルバーは常に明るい(灰色ではない)

以上の条件を満たすダイアログって作れますでしょうか?

要するにMFCのフローティングリバーと同じ挙動なのですが…
我々はあれを指加えて見てるしか無いのかな(´・ω・`)

289 :デフォルトの名無しさん:04/08/26 12:30
MFCならソース公開されてるじゃん。

290 :288:04/08/26 12:40
>>289
すいません、書き忘れましたがVC++持って無いのがそもそもの悩みでして
公開されてるんですか。触りだけでもどなたか教えて頂けないでしょうか

MFCって、どこかで落とせるのかな…

291 :デフォルトの名無しさん:04/08/26 13:18
>>288
そのダイアログで、WM_ACTIVATEに応答してアクティブにならないようにすればいいんじゃないの?

292 :デフォルトの名無しさん:04/08/26 13:51
>>275
PathRemoveFileSpec

293 :デフォルトの名無しさん:04/08/26 13:54
>>288
WS_EX_TOOLWINDOW にして WS_EX_NOACTIVATE しておけばいいんじゃない?
(Win2K / XP 以降ってことで)。

294 :デフォルトの名無しさん:04/08/26 13:57
>>292
>>287

295 :288:04/08/26 15:13
>>291-294
お二人ともレスありがとうございます
全て試してみましたが、しかしどうにも上手くいかないです。

・WM_ACTIVATE
メッセージが来たら親ウィンドウにSetFocusしてみましたが、何故か上手くフォーカスが移りません。

・WS_EX_TOOLWINDOW
リソースからダイアログを作り、後からexスタイルを変えた場合、
あるいは最初から自前でCreateWindowExした場合、いずれもフォーカスが無いときは
やはり灰色のタイトルバーになってしまいます…。

・WS_EX_NOACTIVATE
これは0x08000000でよろしいのでしょうか?
コントロールも含め、全てWS_EX_NOACTIVATEを指定してみましたが、
これもフォーカスは通常通りで…一応spyでスタイルが定まっているのは確認しました。

この際、タイトルバーの色が変わらない方法だけでも、詳しく教えて頂けないでしょうか。
私のWS_EX_TOOLWINDOWの使い方が間違っている気がします…。

296 :デフォルトの名無しさん:04/08/26 15:59
>>295
WM_NCHITTEST/HTTRANSPARENT

297 :288:04/08/26 17:22
>>296
レスありがとうございます。やってみたのですが、ちょっと問題が。
・マウスメッセージが来なくなる
・タイトルバーをつかんでダイアログのの移動が出来なくなる(これは何とかなるかな)
・コントロールには、結局フォーカスが移る
・なのでコントロールをサブクラス化してWM_NCHITTESTを処理すると、コントロールが固まる
・タイトルバーはやっぱり灰色

なんか否定的なレスばかりで申し訳ないです。
もうVC(MFC)買ってこようかな…。

298 :288:04/08/26 17:30
そうか、すいません>>288の文が不明瞭でした

・フォーカスの有無にかかわらず、ダイアログのタイトルバーと
 (メインウィンドウのダイアログのタイトルバーが共に)、常に明るい(灰色ではない)

まぁ、見栄えが悪いっていう理由だけなので、いい加減諦めるべきですかね…。

299 :デフォルトの名無しさん:04/08/26 17:36
・フォーカスの有無にかかわらず、ダイアログのタイトルバーと
 メインウィンドウのタイトルバーが共に、常に明るい(灰色ではない)

重ね重ねスマソ_| ̄|○

300 :デフォルトの名無しさん:04/08/26 17:45
ファイルを開く、名前をつけて保存、のダイアログが存在するかどうかを認識するのには
どういう方法があるでしょうか?

301 :デフォルトの名無しさん:04/08/26 17:45
>>297
MFCは
WM_MOUSEACTIVATE/ HTSIZEFIRST <= hittest <= HTSIZELAST で MA_NOACTIVATEを返し、
それ以外でDefWindowProcかな。

非アクティブでもタイトルバーの色がアクティブのままだったり、
他に細かい事いろいろやってるけど。

302 :デフォルトの名無しさん:04/08/26 17:51
>>298
それ、結構前にMFCだかVC関連のスレで出てた気がする。
ログにgrep掛けたけど、ちょっと見当たらなかった。

303 :デフォルトの名無しさん:04/08/26 19:04
>>297
よく探せば(海外も含めて)参考になるソースは転がっていると思うよ。
その時間を惜しんでVC++買ってきてサンプルを読むというのも間違ってないと思いますが。

304 :デフォルトの名無しさん:04/08/26 19:22
仮想ドライブ FileDisk (http://www.acc.umu.se/~bosse/) というソフトのGUI化をVB6SP5で目論んでいます。
仮想ドライブの情報を得るために、

Device = CreateFile(VolumeName, _
GENERIC_READ, _
FILE_SHARE_READ Or FILE_SHARE_WRITE, _
0, _
OPEN_EXISTING, _
FILE_FLAG_NO_BUFFERING, _
0)

でデバイスハンドルをを取得

Const IOCTL_FILE_DISK_QUERY_FILE = &H802
Dim rc
rc = DeviceIoControl(Device, _
IOCTL_FILE_DISK_QUERY_FILE, _
Null, _
0, _
OpenFileInformation, _
Len(OpenFileInformation), _
BytesReturned, _
0)

で、構造体変数OpenFileInformationにドライブ情報が収納されて戻ってくるはずなのですが
DeviceIoControlがエラー6(ハンドルが無効です。)を返してしてしまいます。
FileDiskのC言語のソースをVBに書き直しただけのつもりなのですが
何故、うまく動かないのでしょうか?

305 :デフォルトの名無しさん:04/08/26 19:26
ちなみにVBに翻訳したい関数は↓です。

----
int FileDiskStatus(char DriveLetter)
{
char VolumeName[] = "\\\\.\\ :";
HANDLE Device;
POPEN_FILE_INFORMATION OpenFileInformation;
DWORD BytesReturned;

VolumeName[4] = DriveLetter;

Device = CreateFile(
VolumeName,
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_FLAG_NO_BUFFERING,
NULL
);

if (Device == INVALID_HANDLE_VALUE)
{
PrintLastError(&VolumeName[4]);
return -1;
}



306 :デフォルトの名無しさん:04/08/26 19:27
OpenFileInformation = malloc(sizeof(OPEN_FILE_INFORMATION) + MAX_PATH);

if (!DeviceIoControl(
Device,
IOCTL_FILE_DISK_QUERY_FILE,
NULL,
0,
OpenFileInformation,
sizeof(OPEN_FILE_INFORMATION) + MAX_PATH,
&BytesReturned,
NULL
))
{
PrintLastError(&VolumeName[4]);
return -1;
}


307 :デフォルトの名無しさん:04/08/26 19:27
if (BytesReturned < sizeof(OPEN_FILE_INFORMATION))
{
SetLastError(ERROR_INSUFFICIENT_BUFFER);
PrintLastError(&VolumeName[4]);
return -1;
}

printf("%c: %.*s Size: %I64u bytes%s\n",
DriveLetter,
OpenFileInformation->FileNameLength,
OpenFileInformation->FileName,
OpenFileInformation->FileSize,
OpenFileInformation->ReadOnly ? ", ReadOnly" : ""
);

return 0;
}

----

308 :デフォルトの名無しさん:04/08/26 20:21
ほげほげ

309 :275:04/08/26 20:40
>287,292

PathRemoveFileSpec()で無事取得できました。ありがとうございました。

310 :デフォルトの名無しさん:04/08/26 21:59
>>304-306
CでうまくいくのならそこをDLLにしてVBから呼び出すようにしたら?ちっとも解決にはなっていないけど。

311 :デフォルトの名無しさん:04/08/26 22:23
>>304
よくわからんけど、
>char VolumeName[] = "\\\\.\\ :";
↑このへんと
>VolumeName[4] = DriveLetter;
↑このへんはちゃんと理解してますよね。
つまり、"\\.\C:" みたいな文字列が、VolumeName に入ってますよね?

312 :デフォルトの名無しさん:04/08/27 01:17
>>311

>char VolumeName[] = "\\\\.\\ :";
>VolumeName[4] = DriveLetter;
↑がなんで4(5文字目)なのか解かっていませんが、自分のVBコードでは
VolumeName="\\.\" & DriveLetter
にしています。

そしてCreateFile関数で得られたDeviceにはINVALID_HANDLE_VALUEでない、
デバイスハンドルが取得されるところまでは成功しています。
が、その次のDeviceIoControl関数でエラー6(ハンドルが無効です。)となってしまうのです。
VBでデバイスコントールは難しいのでしょうか。

>>310
初心者な上に、VCも持っていないので、、


ちなみに>>305-307の関数をVBに↓のように書き直しました。


313 :デフォルトの名無しさん:04/08/27 01:20

Public Function FileDiskStatus(ByVal DriveLetter As String) As Integer

  Dim VolumeName As String
  Dim Device As Long
  Dim OpenFileInformation As POPEN_FILE_INFORMATION
  Dim BytesReturned As Long

  VolumeName = "\\.\" & UCase(DriveLetter) & ":"

  Device = CreateFile(VolumeName, _
                GENERIC_READ, _
                FILE_SHARE_READ Or FILE_SHARE_WRITE, _
                0, _
                OPEN_EXISTING, _
                FILE_FLAG_NO_BUFFERING, _
                0)

  If Device = INVALID_HANDLE_VALUE Then
    MsgBox GetLastError
    FileDiskStatus = -1: Exit Function
  End If

  With OpenFileInformation
    OpenFileInformation.FileSize.Low = 0
    OpenFileInformation.FileSize.high = 0
    OpenFileInformation.ReadOnly = False
    OpenFileInformation.FileNameLength = UBound(OpenFileInformation.FileName)
  End With



314 :デフォルトの名無しさん:04/08/27 01:21
  Const IOCTL_FILE_DISK_QUERY_FILE = &H802
  Dim rc
  rc = DeviceIoControl(Device, _
                IOCTL_FILE_DISK_QUERY_FILE, _
                Null, _
                0, _
                OpenFileInformation, _
                Len(OpenFileInformation), _
                BytesReturned, _
                0)
  If rc = 0 Then
    MsgBox GetLastError
    FileDiskStatus = -1: Exit Function
  End If

  If BytesReturned < Len(OpenFileInformation) Then
    MsgBox GetLastError
    FileDiskStatus = -1: Exit Function
  End If

  Dim strFileName As String
  strFileName = OpenFileInformation.FileName
  MsgBox (DriveLetter _
        & OpenFileInformation.FileNameLength & " " _
        & strFileName & " " _
        & CStr(OpenFileInformation.FileSize.Low) & " " _
        & CStr(OpenFileInformation.ReadOnly))

  FileDiskStatus = 0

End Function


315 :デフォルトの名無しさん:04/08/27 01:23
POPEN_FILE_INFORMATION 構造体定義

Type LARGE_INTEGER
Low As Long
high As Long
End Type

Type POPEN_FILE_INFORMATION
FileSize As LARGE_INTEGER
ReadOnly As Boolean
FileNameLength As Integer
' FileName As String
FileName(1 To MAX_PATH) As Byte
End Type

-----

316 :デフォルトの名無しさん:04/08/27 10:33
VBのNullはVariantのNullなんだが問題ないんだろうか

317 :デフォルトの名無しさん:04/08/27 13:10
ツリービューがデフォルトで持ってるツールチップの
DelayTimeを変更するのは不可能ですか?

318 :デフォルトの名無しさん:04/08/27 14:57
TreeView_GetToolTips して TTM_SETDELAYTIME かな

319 :デフォルトの名無しさん:04/08/27 15:53
>>318
それやったんですが、無視されてしまうようです。
色やマージンなどは変更できたんですが…

320 :デフォルトの名無しさん:04/08/27 16:49
定義済みコントロールクラスのBUTTONで押されると押されたままになるボタンを作ることはできますか?
オーナー描画ボタンはめんどくさすぎるんで

321 :デフォルトの名無しさん:04/08/27 16:52
>>320
ラジオボタンだか何かのスタイルにそんなの(ボタン風の)が合ったような気がする・・・

322 :デフォルトの名無しさん:04/08/27 16:52
チェックボックス?

323 :デフォルトの名無しさん:04/08/27 16:53
BS_PUSHLIKE

324 :デフォルトの名無しさん:04/08/27 20:31
InvalidateRectやGetUpdateRectにわたす
RECTの幅と高さの計算はそれぞれ、

right - left + 1
bottom - top + 1

でいいでしょうか?
それとも、

right - left
bottom - top

でしょうか。

325 :デフォルトの名無しさん:04/08/27 20:38


326 :デフォルトの名無しさん:04/08/27 20:39
>>325
ありがとうございます!

327 :304:04/08/28 04:50
>>316
Nullの代わりに0、""などを入れてみたところ今度はエラー1が出ました。
なんとなく次の段階に進めそうです。

と思ったのですが、FileDiskのGUIが見つかったので今回のプロジェクト?は中止します。
皆さん、ありがとうございました。

328 :デフォルトの名無しさん:04/08/28 07:02
最後までやれよ・・・

329 :デフォルトの名無しさん:04/08/28 07:43
>>327
vbNullString使え。

330 :デフォルトの名無しさん:04/08/28 09:35
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInst,
LPSTR lpCmdLine,
int nCmdShow )
これの右側部分の意味っていうか、なぜhinstanceとか入れなきゃならないんですか?
これは任意の名前でもいいんですか?


331 :デフォルトの名無しさん:04/08/28 09:56
>>330
まずC/C++の入門書読んで来い。このスレでする話じゃない。

332 :デフォルトの名無しさん:04/08/28 10:06
これだからシロートさんは困る。
省略するな。
WinMain(HINSTANCE handle_for_Instance_of_this_Process, HINSTANCE handle_for_Instance_of_Previous_Process, LPSTR long_pointer_for_Command_Line_String)

333 :デフォルトの名無しさん:04/08/28 10:09
>332
引数が一つ省略されてるのは仕様ですか?

334 :デフォルトの名無しさん:04/08/28 10:22
s/)/, int state_for_how_the_window_is_to_be_Shown)/

WinMainのプロトタイプを何文字で書くかで力量が量られる。
100文字未満 :草履持ち
100〜199文字:見習い
200〜299文字:丁稚
300〜499文字:番頭
500文字以上 :旦那

335 :デフォルトの名無しさん:04/08/28 10:37
まぁ、WinMainの第二引数に名前つける奴は素人な訳だが。

336 :デフォルトの名無しさん:04/08/28 10:38

50文字未満:神

WinMain(HINSTANCE a,HINSTANCE b,LPSTR c,int d)

337 :デフォルトの名無しさん:04/08/28 10:39
HINSTANCE hInstance
HINSTANCE形の変数hInstanceてことですよね。
これは任意で名前変えても良いんですか?

338 :デフォルトの名無しさん:04/08/28 10:42
>>337レス嫁

handle_for_Instance_of_this_Process

b

になら変えることが許されている。

339 :デフォルトの名無しさん:04/08/28 10:42
憲法の解釈によっては問題ない。

340 :デフォルトの名無しさん:04/08/28 10:43
WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {}
使わないからこれでいいんだよ

341 :デフォルトの名無しさん:04/08/28 10:45
void WinMain(void);

342 :デフォルトの名無しさん:04/08/28 10:47
>>338
だから任意で変えてもかまわないんですよね

343 :337:04/08/28 10:51
hInstance を b にかえてみたら、

error : parameter "hInstance" not declared

やっぱり他の名前に変えたらだめなんじゃないですか!!
しろうとに嘘教えてそんなに楽しいですか?
ここはひどいインターネットですね。

344 :デフォルトの名無しさん:04/08/28 10:53
>>343
おい、俺のフリするなや

345 :337 ◆ZIIQIs.HCM :04/08/28 11:00
ニセモノが居るのでトリップつけてみました。

346 :デフォルトの名無しさん:04/08/28 11:02
お前も質問者と一緒にどっか行け

347 :デフォルトの名無しさん:04/08/28 11:03
void WinMainCRTStartup(void)
で。

348 :337 ◆DeUsmjHgh2 :04/08/28 11:04
はー、トリップ付けたからって偽者が本物になるわけないでしょうに

349 :337 ◆PIbfznOsNc :04/08/28 11:09
みんないいかげんにしてください。

350 :337 ◆DeUsmjHgh2 :04/08/28 11:11
俺だけ下げてないから本物ってわかりますって

351 :337 ◇DeUsmjHgh2:04/08/28 11:16
答えてくれるまで上げます。

352 :337 ◆DeUsmjHgh2 :04/08/28 11:17
・・・もういいよ。お前ら人が悪いな。

353 :デフォルトの名無しさん:04/08/28 11:19
>>331で終わってるんだよ。

354 :デフォルトの名無しさん:04/08/28 11:29
いや、収穫もあったぞ。

WinMainのプロトタイプを何文字で書くかで力量が量られる。
100文字未満 :草履持ち
100〜199文字:見習い
200〜299文字:丁稚
300〜499文字:番頭
500文字以上 :旦那

俺は見習いか・・・意外と当たるな。

355 :デフォルトの名無しさん:04/08/28 12:17
つーかそんなのコピペで済ましてますがw

356 :デフォルトの名無しさん:04/08/28 13:20
SetWindowsHookEx の使い方を教えてください。

WH_CALLWNDPROC とか、WH_GETMESSAGE
とか、フックの種類がいくつかあるようですが、
どういう場合にどのフックを使えばいいのか
ヘルプを読んでもよくわかりません。

こういうときにこのフックとか解説している
サイトがあれば教えてください。

357 :デフォルトの名無しさん:04/08/28 13:23
このへんとか
ttp://www.h3.dion.ne.jp/~toomo/html/fuck.html

358 :デフォルトの名無しさん:04/08/28 13:28
変数名は大事だよ〜
特に1つのプロジェクトを複数人で組むときとか大事だよ〜

359 :337 ◆DeUsmjHgh2 :04/08/28 13:31
そういえば皆さんはプログラム作るときに、コピーしまくってますよね?

360 :デフォルトの名無しさん:04/08/28 13:55
マウスホイールの値を取得できるAPIはありませんか?

361 :デフォルトの名無しさん:04/08/28 14:00
>>357
fuckて。明らかに英語間違ってるような。エロサイトかと思った。
腕時計を見るように腕を傾けるのはよくわかった。ありがとう。

362 :デフォルトの名無しさん:04/08/28 14:01
GetWheel

363 :デフォルトの名無しさん:04/08/28 14:13
>>357
rinku.htmlを見たとき以来の笑撃だ

364 :デフォルトの名無しさん:04/08/28 14:16
マウスホイールの値とは?

365 :デフォルトの名無しさん:04/08/28 14:27
>>357
( ゜д゜)・・・

366 :デフォルトの名無しさん:04/08/28 14:31
fuck打ちまくり

367 :デフォルトの名無しさん:04/08/28 14:32
356 名前:デフォルトの名無しさん[sage] 投稿日:04/08/28 13:20
SetWindowsFuckEx の使い方を教えてください。

WH_CALLWNDPROC とか、WH_GETMESSAGE
とか、Fuckの種類がいくつかあるようですが、
どういう場合にどのFuckを使えばいいのか
ヘルプを読んでもよくわかりません。

こういうときにこのFuckとか解説している
サイトがあれば教えてください。

368 :360:04/08/28 15:23
>>362
検索しても見つかりませんでしたが…。

>>364
ホイールをどれだけ回転させたかの値です。
WM_MOUSEWHEELメッセージのwParamの上位ワードのような。

369 :356:04/08/28 16:29
>>357
フックの勉強にはなりましたが、
WH_CALLWNDPROC とか、 WH_GETMESSAGE とかに
ついての解説は残念ながらないようです。

それらについて解析したページお願いします。

370 :デフォルトの名無しさん:04/08/28 16:33
msdn見ろカス

371 :デフォルトの名無しさん:04/08/28 17:07
システムイメージリストのイメージとオリジナルのイメージを
ひとつのリストビューで使いたいのですが、
システムイメージリストにオリジナルのイメージを追加するのが良いのか、
システムイメージリストをコピーして使うのが良いのか、どちらでしょうか?

Win2kとかだと、システムイメージリストもアプリケーションローカルのようなので、
好きなように編集してよさそうなのですが、2kとXPしか環境が無いので
どういった作法がいいのか分かりません。

372 :デフォルトの名無しさん:04/08/28 17:46
>>370
知らなけりゃ、だまっていいよ。

373 :デフォルトの名無しさん:04/08/28 18:03
ぐぐるだけで日本語のサイトが見つかるだろう>>356
http://www.kab-studio.biz/Programing/Codian/

374 :デフォルトの名無しさん:04/08/28 18:48
SelectClipRgnした後、リージョンを削除するにはNULLを指定すればいいみたいだけど
選択前のリージョンに戻したい場合はどうすればいいのか分からないです。
SelectObjectの戻り値もオブジェクトではなく、ステータスだし・・・

375 :デフォルトの名無しさん:04/08/28 18:52
windowの背景色をmenuの背景色と同じにするにはどうしたらいいですか?

376 :デフォルトの名無しさん:04/08/28 18:55
hbrBackground = GetSysColorBrush(COLOR_MENU);

377 :デフォルトの名無しさん:04/08/28 18:58
hbrBackground = (HBRUSH)COLOR_MENU;

378 :デフォルトの名無しさん:04/08/28 18:59
>>373
レスありがとうございます。

しかし、WH_CALLWNDPROC  の説明として「すべてのメッセージ」と書いてありますが、
WM_KEYDOWN は通過しないようです。
一方、WH_GETMESSAGE も「すべてのメッセージ」と書いてありますが、
WM_ACTIVATE は通過しないようです。

WM_XXXXX をフックしたいときは、WH_XXXXXみたいな対応が
わかれば助かるんですが。

それと、WH_GETMESSAGE でも、WH_KEYBOARD でも WM_KEYDOWN をフックできますが、
それならどちらを使っても同じなのか、それともそれぞれにどのような
メリット・デメリットがあるのかなどの解説は、ぐぐっても msdn でも見つけられませんでした。
(探し方が下手なのかもしれませんが)

どなたかご存じないですか?
あるいは、みなさんは、フックするときにどの WH_XXX を使うか、どういう基準で決めてますか?
よろしくお願いします。

379 :デフォルトの名無しさん:04/08/28 19:00
>376
できました
ありがとうございました。

380 :デフォルトの名無しさん:04/08/28 19:01
>>377
+1しないとだめ

381 :デフォルトの名無しさん:04/08/28 19:10
>>378
難しいことは俺もわからんのだが、
WH_CALLWNDPROCとWH_GETMESSAGEの違いは分かってる?
名前の通り、WH_CALLWNDPROCの方はウィンドウプロシージャのフック。
WH_GETMESSAGEはメッセージキューのフック。

フックしたいものが、メッセージキューを通るのか、SendMessageみたいに直接プロシージャを呼び出すのか、
によって決めればいいんじゃないかな。

WM_KEYDOWNとWM_ACTIVATEがどういう風に送られるかは知らないので、自分で調べてください。

382 :デフォルトの名無しさん:04/08/28 19:23
>>380
なんで?

383 :デフォルトの名無しさん:04/08/28 19:32
>382
COLOR_SCROLLBARで何が起きるか考えて試してみな。

384 :デフォルトの名無しさん:04/08/28 20:54
>>208を見たところ、プロセスごとのメモリ情報は>>210, >>212の方法で取得できるようですが、
スレッドごとのスタックサイズを取得する方法はあるのでしょうか?
ありましたら、教えていただきたいです。

385 :デフォルトの名無しさん:04/08/28 21:38
あるスレッドがいまどんだけスタック食ってるかって
どうやったら分かりますかね?

386 :デフォルトの名無しさん:04/08/28 21:51
>>374
SaveDC, RestoreDC

387 :デフォルトの名無しさん:04/08/29 01:47
>>385
開始位置のSPを憶えておいて比較したいところで引き算するしかないね。

388 :デフォルトの名無しさん:04/08/29 02:40
デスクトップマスコットを作っているのですが
リージョンを作成する系統の命令(CreateRectRgnなど)を
連続して呼びだすと、他のアプリの一部が無限にちらついてしまう現象が
起こります。(自作のマスコットアプリにかぎらず)
Exel2003やWord2003などの一部の図形を表示しているとかなりひどいです。
原因や回避方法をご存知のかたおられませんか?


389 :デフォルトの名無しさん:04/08/29 02:59
>>378
WH_CALLWNDPROC は SendMessage() で送られてきたキューを通過しないメッセージ
しか捕まらない。だから WM_KEYDOWN は捕まらない。
反対に、WH_CALLWNDPROC はキューを通過するメッセージしか捕まらない。英語の
ヘルプやMSDNでは、キューを通るメッセージは posted 通らないのは sent と
なっているので区別できる。

>WH_GETMESSAGE でも、WH_KEYBOARD でも WM_KEYDOWN をフックできますが、
>それならどちらを使っても同じなのか

同じって言えばいえるけど、WH_KEYBOARD はキーボードメッセージ専用
なのでオーバヘッドは小さいだろうね。専用なので間に合う場合はそれを
使った方がいい。

390 :デフォルトの名無しさん:04/08/29 03:05
>>388
CreateRectRgnなどのリージョンをつくるAPIは、DCハンドルと関係ないでしょう。
ちらつく理由がないのでは? もしかして、つくるたびに描画してるかクリッピング
してるんでは?

391 :デフォルトの名無しさん:04/08/29 05:03
UpdateLayeredWindowを使って半透明Windowを作っているのですが、
α値を持つ画像を表示すると
(下のWindowの色)*(1−α)+(半透明Windowの色)*α
ではなく
(下のWindowの色)*(1−α)+(半透明Windowの色)
となってしまうのは仕様でしょうか?
α値を持つ画像のR・G・Bに前もって自分でα値を掛けておかなくては駄目なのでしょうか。

392 :デフォルトの名無しさん:04/08/29 06:19
ダメじゃありません

393 :デフォルトの名無しさん:04/08/29 07:36
むぅ。何がいけないですか。
BLENDFUNCTION?BITMAPINFO?

394 :デフォルトの名無しさん:04/08/29 08:12
そんだけで分かったらエスパーだ


395 :デフォルトの名無しさん:04/08/29 08:15
ttp://azumaya.s53.xrea.com/index.php?page=doc/win32api/layeredwindow
ここに書いてあるとおりにやったのですが…。

396 :デフォルトの名無しさん:04/08/29 09:27
…なんでDIBSection相手にGet/SetDIBitsしてるんだ?

>>391
後者のほうが描画時の演算コスト低いだろ? そういうことで納得しとけ。

397 :デフォルトの名無しさん:04/08/29 09:49
Get/SetDIBitsは意味なさそうな感じだったのでやめておきました。
やっぱり前もってαを掛けておかないと駄目ですか…。

398 :デフォルトの名無しさん:04/08/29 10:02
DLL側から、それを呼び出しているEXE側の使用しているメモリ範囲を
取得するようなAPIはないでしょうか?

やりたいことは、呼び出し元プログラムの使用しているコード領域と
データ領域から特定のバイト列を検索したいのですが範囲がわからないと
どこまで読み取ればいいのか決められません


399 :デフォルトの名無しさん:04/08/29 10:06
>>398
VirtualQueryを駆使すればできそう

400 :デフォルトの名無しさん:04/08/29 11:12
>>389
>キューを通るメッセージは posted 通らないのは sent と
>なっているので区別できる。
ここで見分ければいいんですね。勉強になりました。

ひとつのフックですませる方法はなさそうなので、
WH_CALLWNDPROC と WH_GETMESSAGE 両方フックすることにします。

>同じって言えばいえるけど、WH_KEYBOARD はキーボードメッセージ専用
>なのでオーバヘッドは小さいだろうね。
違いがオーバーヘッドだけなら、WH_GETMESSAGE でフックしておいて
パフォーマンスに問題がでたときだけ WH_KEYBOARD に変えるような
使い方にしたいと思います。

仕様の違いではまったりするのはイヤなんで・・・・。

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


401 :デフォルトの名無しさん:04/08/29 12:14
>>384
GetThreadContextでスタックポインタを拾って
VirtualQueryExでスタックポインタを含むメモリ領域のサイズを拾う
実際に試してないのでうまくいかなくても知らんが

402 :デフォルトの名無しさん:04/08/29 12:19
INIファイルのセクション名を変更することってできますか?
MSDNを読んでみてもkeyに対する値の変更や削除については発見
できたのですがセクション名の操作に関しては発見できませんでし
た。


403 :デフォルトの名無しさん:04/08/29 12:50
>>387
>>401
ソレしかないですかね。。。
ただ、ソースに手を出せないライブラリがスタック食ってるっぽいので
直接は無理そうです
VirtualQueryExで辿ってみます・・・

404 :デフォルトの名無しさん:04/08/29 12:57
>>402
GetPrivateProfileSection(A, buffer)
WritePrivateProfileSection(B, buffer)
WritePrivateProfileSection(A, "")
ではどうだろう、と思ったが元のセクション名が残っちゃいそうだな。
テキストファイル操作で書き換えるのが早いんでないの。

405 :デフォルトの名無しさん:04/08/29 13:01
>>404
WritePrivateProfileSection(A,NULL,filename)
で完全に削除できなかったっけ?

406 :402:04/08/29 13:03
>>404-405
レスありがとうございます。
完全に削除する場合は>>405さんの言うようにすればいいのですが、
特定のセクション名だけを変更したかったので無理みたいですね。
テキストファイル操作のほうが早いみたいなのでそうしてみます。
ありがとうございました。

407 :405:04/08/29 13:52
>>406
いや、特定のセクションだけ削除できるんだけど…。

セクションじゃなくてキーの名称を変更したいのかな?

408 :388:04/08/29 14:37
>>390
どうやらさらに調べると
CreateRectRgnではなくて
ウィンドウの形状を定義するSetWindowRgnを繰り返しよぶと、
Exeelなどで相性が悪いようです。

うーん、何でだろうなあ


409 :デフォルトの名無しさん:04/08/29 14:38
>>408
形状をいじりたいだけなら、LayeredWindowにしてはどうですか?
これならパフォーマンスあまり落ちませんよ

410 :デフォルトの名無しさん:04/08/29 15:44
>ウィンドウの形状を定義するSetWindowRgnを繰り返しよぶと

そりゃ、描画に影響するクリッピングを繰り返すわけだから当然。なぜ、まとめて一回に
しないのか不思議。

411 :388:04/08/29 16:06

>>409
ありがとうございます、しらべてみます



>>410
アニメーションさせたいからです


412 :デフォルトの名無しさん:04/08/29 16:20
便乗して質問したいのですが、
レイヤードウィンドウを使う仕様にした場合でも、
win98やMEで動作させる方法はあるんですよね?

友達の家のPCで動かしたいんですが、
user32.dll?がなかったので動きませんでした。
調べても説明が端折られてて理解できなかったので、
1から学びたいのですが。

413 :デフォルトの名無しさん:04/08/29 16:24
> アニメーションさせたいからです

アニメーションするのにクリッピング? 透過描画はできないの?

414 :デフォルトの名無しさん:04/08/29 18:44
プリンタのスプーラの状態を監視するプログラムを作りたいのですが
どういったAPIを使えばいいのでしょうか?

作りたいプログラムはAというプログラムで、別にBとCというプログラムが
存在し、例えばBというプログラムが印刷をプリンタに依頼したら、
Aプログラムがリアルタイムにそのイベントを察知し、なおかつ印刷を
Bが依頼したという事をわかるようにしたいのですが・・・

抽象的な質問でスマソ

415 :387:04/08/29 21:13
>>403
>ソレしかないですかね。。。
単純にSPだけ見たいのなら
int dat;
_asm mov dat, esp
でできるよ。VC6+x86系

>ただ、ソースに手を出せないライブラリがスタック食ってるっぽいので
>直接は無理そうです
デバッガで追うしかないな。


416 :デフォルトの名無しさん:04/08/29 23:29
>>412
http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowfunctions/createwindowex.asp
>WS_EX_LAYERED
>Windows 2000/XP: Creates a layered window. Note that this cannot be used for child windows.
> Also, this cannot be used if the window has a class style of either CS_OWNDC or CS_CLASSDC.

417 :デフォルトの名無しさん:04/08/30 00:16
普通のウィンドウを子ウィンドウとして作成すると
ウィンドウプロシージャにWM_CREATEメッセージが送られてしまいます。
これを何とか送られないようにする方法はありませんか?

418 :デフォルトの名無しさん:04/08/30 00:25
作成しないか、WM_NCCREATEでFALSEを帰す

419 :デフォルトの名無しさん:04/08/30 00:42
>>415
というかGetThreadContextというキーワードはすでに与えたんだがなあ

420 :デフォルトの名無しさん:04/08/30 01:14
>>419
ソースのないライブラリの奥底で呼ぶことはできんでしょ。

421 :デフォルトの名無しさん:04/08/30 06:50
>>420
それはインラインアセンブラでesp見るのも同じでしょ

422 :デフォルトの名無しさん:04/08/30 12:45
InvalidateRectでたとえばA(0,0)-(20,15)、B(100,0)-(20,115)の二つの領域をアップデートしたいのですが、

InvalidateRect(hwnd, A, TRUE);
InvalidateRect(hwnd, B, FALSE);

とすると、両方とも背景が消去されてちらついてしまいます。
それぞれのInvalidateRectにUpdateWindowを挟むと
WM_PAINTを二回呼び出す事になって無駄が多すぎます。

何か良い手はないでしょうか

423 :デフォルトの名無しさん:04/08/30 13:06
WM_ERASEBKGNDをどうにかする。

424 :デフォルトの名無しさん:04/08/30 17:59
>>422
そこでInvalidateRgn()の登場ですよ

425 :デフォルトの名無しさん:04/08/31 07:01
タスクバーのように、デスクトップの作業領域を少し狭めたいと思っています。
RECT r = DefaultWorkArea;
// r設定
SystemParametersInfo(SPI_SETWORKAREA, 0, &r, SPIF_SENDCHANGE);
とかやってみたのですが、少し足りない感じです。たとえば、最大化していて
スクリーンセーバーになり、セキュリティの関係でログオン画面に戻る設定に
してあると(今使ってるのはXP)、再びログオンしたときに最大化していた
ウィンドウがめり込んでいます。
何が足りないのでしょう。

426 :デフォルトの名無しさん:04/08/31 07:25
AppBarかDeskBandにしとけば?

427 :デフォルトの名無しさん:04/08/31 07:40
そもそもタスクバーとかは特別なウィンドウなんですか。
じゃあしょうがないのかなー。
今やってるのはランチャーの改造です。
具体的にはNCW。やっぱソース公開していただくとありがたいですね。

428 :デフォルトの名無しさん:04/08/31 11:41
>>426が言うように SHAppBarMessage の説明みて AppBar にするのが吉。

429 :デフォルトの名無しさん:04/08/31 19:02
ini関連のAPIについての質問です。
GetPrivateProfile〜やWritePrivateProfile〜は、WinNT系OSでは
レジストリにマッピングされることがあるそうですが、実際上
どのくらいの頻度でそのような設定になっているのでしょうか?

430 :デフォルトの名無しさん:04/08/31 19:29
頻度ってなんじゃ?
3回に1回はiniに書き込まれたりするのか?

431 :デフォルトの名無しさん:04/08/31 20:06
何かすごく勘違いしている模様だ

432 :デフォルトの名無しさん:04/08/31 20:10
WindowsAPIを使う上でWindows特有の型がたくさんあるわけですが
文字列ひとつとってもPTSTR、PCTSTR、LPCSTR、LPSTRなどなど
この辺の変数を使うときに、結構適当な扱いをしても動いてしまうため
もしかすると間違ったまま使っているかもしれません

型定義について詳しく正確に書かれているWEBや本はないでしょうか?
探した範囲では、どの資料も正確さに欠けていて
いまいち期待通りのものがありませんでした

一度きちんと勉強したいので・・・


433 :429:04/08/31 20:17
申し訳ありません。言葉がなっておりませんでした。先ほどの質問の
意図するところは、「ini関連のAPIにおいて、レジストリにマッピング
される条件はどのようなものか確認したい」ということです。Platform
SDKのヘルプを見る限りでは、私は「独自にiniファイルを作った場合
にはレジストリには書き込まない」という解釈を行ったのですが、
それでよろしいでしょうか。

434 :デフォルトの名無しさん:04/08/31 20:18
>>432
ヘッダを読めば?

435 :デフォルトの名無しさん:04/08/31 20:41
>>422
というか、レジストリにマッピングするためにはそのように設定しなきゃ
ならない。そう設定しない限りはマッピングされない。


436 :デフォルトの名無しさん:04/08/31 21:25
>>432
MSDNに全部書いてある。


437 :デフォルトの名無しさん:04/08/31 22:34
俺、TCHAR * と const TCHAR * しか使ってないや…

438 :デフォルトの名無しさん:04/08/31 22:34
LPSTR Pointer to a null-terminated string of 8-bit Windows (ANSI) characters.
LPWSTR Pointer to a null-terminated string of 16-bit Unicode characters.
LPTSTR An LPWSTR ifUNICODE is defined, an LPSTR otherwise.

LPCSTR Pointer to a constant null-terminated string of 8-bit Windows (ANSI) characters.
LPCWSTR Pointer to a constant null-terminated string of 16-bit Unicode characters.
LPCTSTR An LPCWSTR ifUNICODE is defined, an LPCSTR otherwise.

439 :デフォルトの名無しさん:04/08/31 22:38
↑LPを脳内でルプって呼んでたけどやっぱエルなんだ。>>432のばか

440 :デフォルトの名無しさん:04/08/31 22:54
InitCommonControlsExにICC_STANDARD_CLASSES渡したら
失敗する・・・。
というか、このフラグに何の意味あるのか分からんが。

441 :デフォルトの名無しさん:04/08/31 23:18
>>440
Win98だけど別に失敗はしないよ。

> ICC_STANDARD_CLASSES
> Load one of the intrinsic User32 control classes.
> The user controls include button, edit, static, listbox, combobox, and scrollbar.
確かにわざわざ指定する意味はないように思えるね。

442 :デフォルトの名無しさん:04/08/31 23:37
そうですか、動きますか
うちはXPなんですが
manifestでコモンコントロールを6.0.0.0に指定してるのが
いけないんだろうか
ググってもそれらしい情報ないし、
それともうちの環境が変なだけなのかもしれない

443 :デフォルトの名無しさん:04/09/01 09:17
RichEditコントロールで保持しているRTFフォーマットのサイズを取得したいのですが、、
現状ではコールバックではデータをファイルに書き込まず、
コールバックに渡されるサイズを合計して合計を求めていますが効率がいいとは言えません。
もっと他にサイズを求める手段はありますか?

RTFデータをファイルに単体のRTFファイルとして書き込むのではなく、
メモリーに出力する為の確保するメモリ量を知りたいんです。


444 :デフォルトの名無しさん:04/09/01 09:25
コントロールパネルに表示されるアイテムのコメントや、
ごみ箱内のファイルの「元の場所」や「削除した日」を取得するAPIってありますか?

445 :デフォルトの名無しさん:04/09/01 10:04
質問です。

SendMessage(hWnd, WM_GETTEXT, 256, lpszTmp);
とやって、他アプリケーションのエディットコントロール内の文字列を取得してみようと試みました。
メモ帳やEdMax(フリーメーラー)のものは簡単に取得できたのですが、
IEやOutLookのエディットコントロールから取得しようとすると""が返って来てしまいます。

例えばIEでGoogleで検索文字列を入れる部分などです。
IEなどのMS製品は、何か特殊なことがされていて、取得できないのでしょうか?

446 :デフォルトの名無しさん:04/09/01 10:14
>>445
そもそも、IEの入力フォームがウィンドウかどうかって問題があるが・・・

spy++で試したが、どうもウィンドウじゃなさげ

447 :デフォルトの名無しさん:04/09/01 10:15
>>444
IShellFolder2::GetDetailsOf ?

448 :デフォルトの名無しさん:04/09/01 10:22
>>445
わかってるかとは思うが他のアプリに素のSendMessageは
巻き込まれキケンのおそれ。質問に関係ないけど一応。

449 :デフォルトの名無しさん:04/09/01 10:29
>>445
CB_GETEDITSEL
EM_GETTEXTEX
あたりは試した?試して報告してみて。

450 :デフォルトの名無しさん:04/09/01 10:30
>>446
エディットコントロールって言ってるんだから、アドレスバーとかの話じゃないの?
アドレスバーだったら、コンボボックスだから、さらにその中のエディットコントロールを
取得しないとダメだったきがする。

451 :446:04/09/01 10:34
>>450
>例えばIEでGoogleで検索文字列を入れる部分などです。
って、あったのでフォームかな?、と

よく考えれば、Googleツールバーてのもあったな
漏れは使ってないけど・・・

452 :デフォルトの名無しさん:04/09/01 10:40
test

453 :デフォルトの名無しさん:04/09/01 10:45
test

454 :444:04/09/01 11:00
>>447
ありがとうございます。期待どおりの結果を取得できました。

455 :デフォルトの名無しさん:04/09/01 11:04
ビットマップについて質問です。

BITMAPINFOの説明なのですが、biCompressionがBI_RGBの場合、
bmiColorsはNULLであると言う説明がいまいちわかりません。
bmiColors[0]の各要素が0である事を指すのか、それともbmiColors自体が存在しないで
メモリイメージはBITMAPINFOHEADERと同一のものに鳴るのか、どちらなのでしょうか?

456 :デフォルトの名無しさん:04/09/01 11:08
やや、ありがとうございます

>>446
なんと、ウインドウではないのですか?
hWndはとれて、SendMessageでWM_CHARなどを送ると反応するので、Windowだと思いますが

>>449
他アプリに勝手に干渉するあたり、危険は承知です

>>449
今から試してみます

>>450-451
やや、失礼しました。フォームのことです。

457 :デフォルトの名無しさん:04/09/01 11:20
>>456
君はプログラマの素養がないので、今すぐあきらめた方がいいな。

458 :デフォルトの名無しさん:04/09/01 11:24
>>457
ヤメレ、無駄に煽るのは。

459 :デフォルトの名無しさん:04/09/01 11:29
>>446での指摘の通り、どうも普通のウインドウではなさげです。
>>449での指摘の通り、通常のウィンドウとは違く、リッチテキストかもしれません。
リッチかな?という方向で調査してみようと思います。

特になければしばらく調査ですのでカキコしないと思いますが、
何か情報ありましたらよろしくお願いいたします。ここ自体は見ていますので。


460 :デフォルトの名無しさん:04/09/01 11:39
>>459
リッチテキストですらないけどな。
たとえばゲームの中のメニューの内容を外部のアプリケーションから取得できるか?

IEのウインドウからDOMを取得して構造解析するしかない。

461 :446:04/09/01 12:25
>>459
フォームに値を設定・取得することなら
IEコンポーネント使えばいける

IEコンポーネントスレなくなっちゃってるんで、
過去ログだが、この辺読むと少しは分かるかも

http://pc5.2ch.net/tech/kako/982/982930049.html

462 :デフォルトの名無しさん:04/09/01 12:39
>>455
なんかまるっきり間違ってるが、どこの何を参考にした?

463 :デフォルトの名無しさん:04/09/01 12:57
>>462
どこが間違っているのかわっぱり見当つきません。
よろしければ教えてもらえませんか?

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_1rw2.asp
biBitCount
16 If the biCompression member of the BITMAPINFOHEADER is BI_RGB, the bmiColors member of BITMAPINFO is NULL.
24 The bitmap has a maximum of 2^24 colors, and the bmiColors member of BITMAPINFO is NULL.
32 If the biCompression member of the BITMAPINFOHEADER is BI_RGB, the bmiColors member of BITMAPINFO is NULL.

です。

非パレットベースのビットマップファイルの場合はRGBQUADに相当するデータが存在しないのはわかるのですが
DIB関数に渡すときはどう指定するべきなのかが分からないんです。

464 :デフォルトの名無しさん:04/09/01 14:03
>>463
一般にbmiColorsが必要ない場合にはBITMAPINFOHEADERを確保して、それへのポインタをBITMAPINFO*にキャストする。

ただし、biBitCountが16以上で、biCompressionがBI_RGBであってもbiClrUsedが0でないの場合にはbmiColorsが使用される。

465 :デフォルトの名無しさん:04/09/02 01:20
MFCを使わないで分割ウィンドウを作るにはどうしたらいいのでしょうか?
MFCを使えばCSplitterWndで出来るようなのですが使わない場合については
わかりません。
やり方のわかる方、説明お願いします。


466 :デフォルトの名無しさん:04/09/02 01:53
>>456
SendMessageTimeoutとかモアベターよぐらいの意味>危険

467 :デフォルトの名無しさん:04/09/02 01:59
>>465
ttp://zidney.define.jp/programing/
ttp://www.kumei.ne.jp/c_lang/index_sdk3.html


468 :デフォルトの名無しさん:04/09/02 02:31
PostMessage()でいいやん?

469 :デフォルトの名無しさん:04/09/02 03:02
>>468 ハァ?

って言えばいいのかな。

470 :465:04/09/02 07:51
>>467
ありがとうございます。
教えてもらったページを参考にやってみたいと思います。


471 :デフォルトの名無しさん:04/09/02 13:53
タスクバーもどきを作りたいのですが、
他プロセスのウインドウのアイコンの取得方法がわかりません。
検索キーワードとかでもいいのでヒントだけでもお願いします。

472 :デフォルトの名無しさん:04/09/02 16:01
WindowProc(メッセージ処理コールバック関数)に渡されるメッセージID(uMsg)をメッセージ文字列に変換する関数はありますか?
例えば、WM_CREATEなら"WM_CREATE"にするような。
イベントの発生状況を知りたいのだけれど、数値IDだと読み解くのがめんどくさい。

473 :デフォルトの名無しさん:04/09/02 16:04
>>472
API としては存在しないと思うので、
http://cvs.sourceforge.net/viewcvs.py/peace/peace/dll/ui.so/dumpmessage.c?rev=1.4&view=markup
からコピペで。


474 :デフォルトの名無しさん:04/09/02 16:13
>>473
うおっ、速攻ありがとう。
やはり無いのか。。。。それ使います。サンクス!

475 :デフォルトの名無しさん:04/09/02 16:20
セーフモードで起動したときも、
自作プログラムを自動実行させられる手段ってないのでしょうか?

476 :デフォルトの名無しさん:04/09/02 16:32
>>475
ウイルスでも作るつもりか糞野郎

477 :デフォルトの名無しさん:04/09/02 16:43
簡単に釣られすぎ。

478 :デフォルトの名無しさん:04/09/02 16:59
>>471
思い切り勘だけで答えると
1.プロセスからモジュール取得(EnumProcessModuleとか?)

2.モジュールからアイコン取得(SHGetFileInfoとかLoadIconとか?)
という手順かなあ?
外してたらごめんな

479 :デフォルトの名無しさん:04/09/02 17:06
>475
何しぇるために必要なのかにゃ?

480 :デフォルトの名無しさん:04/09/02 17:13
DrawCaptionつー、わりとまんまなAPIがあったりするわけだが。使ったことないから詳細は知らんが。

481 :475:04/09/02 17:15
普段、特殊な認証をして社内のリソースに繋いでいるんですが、
マシンのメンテの時にそれをいちいち手動でやらなきゃいけないので。
マシンの数が多いんですよ。

方法がないんだったらしようがないんですが。

482 :デフォルトの名無しさん:04/09/02 17:16
意味がわからん。

483 :デフォルトの名無しさん:04/09/02 17:26
セーフモードにしてメンテする理由がわからん

484 :デフォルトの名無しさん:04/09/02 17:27
>>475
漏れはこれ、ないって認識なんだがそれであってる?他の人。
(あっても内容を答える必要はないと思うが。)

485 :デフォルトの名無しさん:04/09/02 17:40
ウィルス駆除とかじゃないの?

486 :デフォルトの名無しさん:04/09/02 17:46
>>484
2個ほど思いついたけど。
Tで設定するのとSの設定変えるのと。

487 :486:04/09/02 17:48
本当に出来るかは試したことないからわからないです

488 :デフォルトの名無しさん:04/09/02 18:18
>>478
それだと目的のウインドウで使われているアイコンと関係ないアイコンしか取れないですよね
DLL Injection使うしかないんでしょうか

489 :デフォルトの名無しさん:04/09/02 18:33
>>488
普通に WM_GETICON じゃダメなんですか?

490 :デフォルトの名無しさん:04/09/02 19:39
EXCELでAPI使いたいんですが、
APIビューアがないんです。
どこにあるんでしょうか?


491 :デフォルトの名無しさん:04/09/02 20:59
SetWindowRgnでキャラクタの形をしたウインドウを作りました。
そこに時刻を表示して、今では時計の役割をしています。
非常に愛着があって、いつも画面の右上に置いているのですが少し問題が
あります。
パソコンを起動するたびに、このEXEを実行する必要があるのです。

この問題を解決する方法はないでしょうか。
表示位置はINIファイルに記憶しているので大丈夫です。

492 :デフォルトの名無しさん:04/09/02 21:04
スタートアップ

493 :デフォルトの名無しさん:04/09/02 21:09
>>490
探してみれ。そして見つかった場所をここに書き込め。

494 :デフォルトの名無しさん:04/09/02 21:10
IEってどういった描画の構造をとっているんでしょうか?
BeginPaintとEndPaintをフックしてWM_PAINTを投げてみたのですが、
全く描画されないばかりかフックした関数が呼ばれません。
メモ帳などではきちんとフックに成功してるんですが・・・

495 :デフォルトの名無しさん:04/09/02 21:26
普段 SendMessage の WM_CHAR を使ってキーイベントを送っていたのですが、
とあるアプリケーションがどうやら DirectInput でキーを拾っているようで、
SendMessage では反応してくれません。
こういう場合、どういう API でキーを送ればいいでしょうか?

496 :デフォルトの名無しさん:04/09/02 21:32
keybd_eventは反応したっけ

497 :デフォルトの名無しさん:04/09/02 21:44
CreateDIBSectionで作った画面が何故か真っ黒なんだけどどこでも指定したつもりはないんだけど
どうゆうことでしょう?

498 :デフォルトの名無しさん:04/09/02 21:47
age

499 :デフォルトの名無しさん:04/09/02 22:03
>>496
keybd_even も反応しないみたいです。

500 :デフォルトの名無しさん:04/09/02 22:08
>>494
IE のブラウザ部分は全てオフスクリーンに描画して画面へ転送ってな感じでやってるみたいです。
(除く windowless に対応していない ActiveX の部分)

ページの中身の絵が欲しいのなら、WebBrowser コントロールで表示して GetDocument した
IHTMLDocument (?) あたりで OleDraw すると描けたような記憶があります。
また、時間と興味があるなら、IHTMLPainter インタフェイス辺りから調べていくのもアリかもしれません。

でも BeginPaint も呼んでいないってのは面白いですね。

501 :デフォルトの名無しさん:04/09/02 22:12
>>497
どうなってれば納得できます?

で、黒ってデータ(数値)としてはどうなってると思います?

502 :デフォルトの名無しさん:04/09/02 22:19
>>497
Windows 9X、Millenium ではゴミデータが入ってたような気がする。
NT 系の OS ではセキュリティ上の配慮のため、確保されたメモリは既にクリアされてる。

503 :デフォルトの名無しさん:04/09/02 22:22
>>499
>keybd_even も反応しないみたいです。

反応するよ。
仮想キーコードじゃなくてスキャンコードを送信すればいい。
dinput.hに書いてある、仮想キーマクロ DIK_????? を参考にしてみれ。
ちなみにキーボードデバイスでサポートしてないキー入力送信は無理。
英語キーボードの「半角/全角」キーに相当するアンサン・グラブ(DIK_)は、
日本語キーボード環境だとうまくDirectInputに送信できない。

「A」キーのキー入力を送信する例:
#include <dinput.h>
WORD key = DIK_A;
keybd_event(0, key, 0, 0);
keybd_event(0, key, KEYEVENTF_KEYUP, 0);

504 :デフォルトの名無しさん:04/09/02 22:36
>>501,502
画面全体が真っ白になって欲しいです。
メモリはクリアされていて黒ってことはデータ的には0が入っているってことですかな?

具体的に白くするにはどうすればいいんだろ。

505 :デフォルトの名無しさん:04/09/02 22:39
>>504

24ビットDIBSectionなら

FillMemory(lpPixel, iWidth * iHeight * 3, 0xff);

とか(lpPixelがピクセル列のバッファの先頭アドレスね)。


506 :デフォルトの名無しさん:04/09/02 22:52
>>505
あー。なるほど。32で作ってましたけど出来ました。thx!

507 :デフォルトの名無しさん:04/09/02 22:57
>>503
おーなるほど。これで上手くいきました。
あとは文字列からスキャンコードへの変換ルーチン書けば行けそうです。
ありがとうございました。

508 :デフォルトの名無しさん:04/09/02 23:07
つーか、WM_PAINTを横取りしようと思うと無効領域も手当てせんといかんやろ。

509 :デフォルトの名無しさん:04/09/03 00:33
>>508
乗っ取ったFakeBeginPaintで領域を制限しなければ良いと思うんだけど、、、

HDC FakeDC = ...;
HDC WINAPI FakeBeginPaint(HWND hwnd, PAINTSTRUCT* ps)
{
 ::ZeroMemory(ps, sizeof PAINTSTRUCT);
 ::GetClientRect(hwnd, &ps->rcPaint);
 return ps->hdc = FakeDC;
}


510 :デフォルトの名無しさん:04/09/03 01:06
なんだかこちらのスレに誘導されたので、失礼します。
http://pc5.2ch.net/test/read.cgi/tech/1093996761/41-42

なんだかこっちでもスレ違いな気がして気が引けます…

511 :デフォルトの名無しさん:04/09/03 01:26
スレは違わないと思う。

512 :デフォルトの名無しさん:04/09/03 03:44
プログラムになにか法則みたいなものありますか?

これを書いたらこれを書けみたいな



513 :デフォルトの名無しさん:04/09/03 04:11
(を書いたら)を書け。
[を書いたら]を書け。

514 :デフォルトの名無しさん:04/09/03 08:03
ぬるぽを書いたらぬるぽを書け。

515 :デフォルトの名無しさん:04/09/03 09:10
>>514
ガッ

516 :デフォルトの名無しさん:04/09/03 09:22
右の頬をかいたら左の頬をかけ。

517 :デフォルトの名無しさん:04/09/03 09:24
「たらちねの」の次には「母」と書け

518 :デフォルトの名無しさん:04/09/03 09:45
「真剣」と書いたらマジと読め

519 :デフォルトの名無しさん:04/09/03 09:53
拝啓と書いたら敬具と書け

520 :デフォルトの名無しさん:04/09/03 10:26
肉を煮込んだら灰汁を取り除け

521 :デフォルトの名無しさん:04/09/03 10:51
鰹節をかいたら鍋を火にかけ

522 :デフォルトの名無しさん:04/09/03 11:13
「姉さん」と書いたら「事件です」と書け

523 :デフォルトの名無しさん:04/09/03 11:22
流れをぶったぎって失礼します。
RegisterClassにわたすクラス名は
ユニークでなければいけませんか?

524 :523:04/09/03 11:26
しっかり書いてありました。
すみません、すみません。

525 :デフォルトの名無しさん:04/09/03 11:32
恥をかいたら頭を掻け

526 :デフォルトの名無しさん:04/09/03 12:32
BitBltとかStretchBltで、転送元、先のHBITMAPが同じでも大丈夫なんでしょうか。
画面のスクロールの処理の時に、そうなってしまうのですが。

527 :デフォルトの名無しさん:04/09/03 12:38
>>526
スクロールの方向によってはえらいことになる。


528 :526:04/09/03 12:45
>>527
詳しくお願いします。
方向ということは、もしかしたら、端を飛び越したときとかですかね。

529 :デフォルトの名無しさん:04/09/03 12:49
なぜ転送先にHBITMAPが?

530 :526:04/09/03 12:51
>>529
言葉が足りませんでした。SelectObjectしたHDCです。

531 :526:04/09/03 13:00
>>529>>530
あっ、そういう意味ではないですね。
裏ビットマップに書きたいのでHBITMAPと言いました。

スクロール前の裏ビットマップの、スクロールしても残る位置を、
同じ裏ビットマップに描いて、残りを部分は新たに描くという感じです。

532 :デフォルトの名無しさん:04/09/03 13:01
>>528
527じゃないが

int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
for(int i = 0; i < 9; ++i)
a[i + 1] = a[i];

多分こんなようなことになると思う。

533 :デフォルトの名無しさん:04/09/03 13:07
そういうことなら、「重なる部分は自分で考慮しないと何が起こるかわからん」が答えでないかと。
重ならない領域の転送なら、なんも問題無いよ。

534 :デフォルトの名無しさん:04/09/03 13:13
んなもんBitBlt側で考慮してくれて、重なろうが問題なさそうだけど。
MoveMemoryみたく。

535 :526:04/09/03 13:15
>>532
詳しく説明していただき、ありがとうございました。

>>533
自分もそんな感じに考えていました。
変更前の物を転送した後に、変更されるならいいのですが、
逆だとどうなるのかなと。実験してみます。

536 :526:04/09/03 13:16
>>534
そうだといいのですが。実験してみます。

537 :デフォルトの名無しさん:04/09/03 13:19
スクロール操作だとわかるならScrollDCすればいいんじゃないんですか?

538 :526:04/09/03 13:34
おなじHBITMAPだと絵が変更されていませんでした。戻り値は正常でした。
ただ、別のプログラム中に、強引に作ったので、
ちゃんとすればできるかもしれません。

>>537
ありがとうございます。調べてみます。

539 :デフォルトの名無しさん:04/09/03 13:35
質問です。
デスクトップカレンダーのように、常に背景に表示されているソフトを作りたいと考えています。
「常に最背面に表示」はできるようになったのですが、
「デスクトップの表示」ボタンを押すと隠れてしまいます。
何かいい方法はないでしょうか。

540 :デフォルトの名無しさん:04/09/03 13:39
MFCで作ったアプリって、別段ライブラリを一緒に配布したりしなくても動きますか?

541 :526:04/09/03 13:42
>>537
RECTが分からないので勉強してみます。

542 :デフォルトの名無しさん:04/09/03 13:49
>>540
faq

static link

543 :デフォルトの名無しさん:04/09/03 13:52
>>539
壁紙をカレンダーに摩り替える。

544 :(・∀・)ニヤニヤ:04/09/03 13:54
>>539
WM_SIZEで最小化されたことを検知して、
自分で元に戻してやればいいんじゃねーの?

545 :デフォルトの名無しさん:04/09/03 13:56
>>542
そのものに組み込めと言うことですか・・・
MFCってMSのライブラリのくせに、標準じゃないんでしょうか・・・

546 :デフォルトの名無しさん:04/09/03 13:58
イヤだったら付けずに出して、「動かない」と文句言ってきた客には
「あなたの環境は標準的ではありません」と突っ返せばよし。

547 :デフォルトの名無しさん:04/09/03 13:59
>>545
スレ違いだ

MFCスレに行きやがれ

548 :デフォルトの名無しさん:04/09/03 14:06
>>545
パソコンは起動時にWINDOWS.EXEを実行して起動されます。MFCはこの中にはいっています。
それでも動かないのならあなたは不正なVisualStudioを使っていることになります。
恐らくコピー版を使っていると思われるのでMicrosoftに通告しときます。ご愁傷様でした。

549 :デフォルトの名無しさん:04/09/03 14:06
すんません
お騒がせしました

550 :539:04/09/03 14:16
>> 543
新しい壁紙にすると、カレンダーをD&Dで移動させるときに難しそうなので避けてました。

>>544
「デスクトップの表示」ボタンを押したときには、WM_SIZEのメッセージはこないみたいです。



551 :デフォルトの名無しさん:04/09/03 14:22
そういえば、自分のパソコンに始めから付いていたDrag'n Drop CDも、
デスクトップの表示ボタンを押すと消える。
別の何かを開くと、復活するけど。
同じような現象なのかな。

552 :539:04/09/03 14:32
>> 551
同じ現象だと思います。
例えばSamurizeなんかは理想の挙動になっているのですが・・・

553 :デフォルトの名無しさん:04/09/03 14:41
>>552
spy++でどんなメッセージが来てるか調べれば?

554 :539:04/09/03 14:48
>>553
はい。調べました。
「デスクトップの表示」ボタンを押してもメッセージは送られていないようです。

555 :デフォルトの名無しさん:04/09/03 14:56
>>554
本当に調べた?
思いっきりWM_SIZE送られてるんだけど。

556 :デフォルトの名無しさん:04/09/03 14:57
WM_SIZE(SIZE_MINIMIZEDとSIZE_RESTORED)がキッチリ来るな。
何を調べたのかと(ry

557 :539:04/09/03 15:30
>>555
>>556
すいません。確認してみたら、普通のアプリケーションだったらメッセージがくるようですね。
調査不測でした。

調べてみたところ、私のプログラムでは親ウィンドウを作成する際に、WS_EX_TOOLWINDOWを指定していたため、
子ウィンドウにWM_SIZEがこなかったようです。
(WS_EX_TOOLWINDOWを指定したのは、親ウィンドウをタスクバーに表示させない為です)

ここら辺を直せばメッセージをキャッチできそうですね。
お手数おかけしました。

558 :デフォルトの名無しさん:04/09/03 15:47
mallocと書いても、freeと書かなくてもよい

559 :デフォルトの名無しさん:04/09/03 16:18
windows.exeって何

560 :デフォルトの名無しさん:04/09/03 20:35
>>559
windows.comのこと?

561 :デフォルトの名無しさん:04/09/03 20:36
windows.mpg

562 :560:04/09/03 20:38
win.comだったorz
MFCって別の(ry

一応、張っておきますね
■MFC相談室 mfc11.dll■
ttp://pc5.2ch.net/test/read.cgi/tech/1088084875/

563 :デフォルトの名無しさん:04/09/04 00:19
int型の変数をTextOutで描画しようとするとエラーになってしまうのですが、
intを描画するにはどうすればいいですか?

564 :デフォルトの名無しさん:04/09/04 00:34
>563
wsprintf

565 :デフォルトの名無しさん:04/09/04 01:16
>564
sptintfとの違いはあるのでしょうか?

それと、MFC使うよりもWin32APIで作った方がプログラム実行が僅かに
速いって本当なんでしょうか?

566 :デフォルトの名無しさん:04/09/04 01:21
wsprintfはfloat使えないぞ!気をつけろ!

> プログラム実行

何のプログラムだ?

567 :デフォルトの名無しさん:04/09/04 01:45
本日のマツケンショーのプログラムでは最後にマツケンサンバが入っています。

568 :デフォルトの名無しさん:04/09/04 01:57
画面を描画するのに、
CreateCompatibleBitmapやCreateCompatibleDC
で裏画面を作成し描画しているのですが、
画面全体を新たに再描画(真っ白に)する場合、
それまで使っていた裏画面を破棄して新しくメモリを作成する方法と、
画面を背景の色で塗りつぶす(FillRectとかそんな感じで)方法があると思うのですが、
どちらが速いのでしょう??
環境はWinXP+VC6.0+APIです。


569 :デフォルトの名無しさん:04/09/04 01:58
>>565
MFC固有のdllの初回読み込み(OS起動以後)に時間がかかるってだけでしょ。
2回目以降の起動ではほとんど関係ないかと。
実行パフォーマンスを理由にしてMFCを使わないというのは稀。
2次配布問題やファイルサイズ・カスタマイズ効率の面からMFCを使わないというのはあるけど。

570 :デフォルトの名無しさん:04/09/04 02:03
ウィンドウプロシージャべた書きでいけるような極単純なものならMFC使わないほうがほんの少し効率がいいんじゃないか?
大して意味はないレベルにせよMFCのウィンドウ−C++オブジェクトマッピングはコスト0じゃない。

571 :デフォルトの名無しさん:04/09/04 02:09
定番の言い方だと、体感できるほどの差ではない、かな。

572 :568:04/09/04 03:59
>>571
どちらでも大差無いって感じですかね。


573 :デフォルトの名無しさん:04/09/04 04:25
MFCはサンクじゃなくてマップを使ってるから
検索の分遅いんじゃないか?

574 :デフォルトの名無しさん:04/09/04 05:07
>>568
後者・・・じゃないかなぁ。
せっかくだから、測定してみるといいんじゃない?


575 :デフォルトの名無しさん:04/09/04 05:26
それ以前にCreateCompatibleBitmapで作成したてのビットマップって何色かで塗りつぶされてる保証なんかあったか?
どのみち作成後に塗りつぶすなら再作成の意味は無い気がするんだが。

576 :デフォルトの名無しさん:04/09/04 06:03
>>575
NT系ならセキュリティ上の理由から塗りつぶされてると思うが
期待しちゃいけない気がするな

577 :568:04/09/04 17:00
そうですね,確かにCreateCompatibleBitmapの後に塗りつぶしてましたorz
FillRectで塗りつぶす方法で良さそうですね.

あと話が変わるのですが,
複数のウインドウプロシージャで変数を共有したいのですが,
どうすればよいでしょう?
変数のポインタを渡せば良さそうなのですが,
どこで渡せばいいのやら・・・

578 :デフォルトの名無しさん:04/09/04 17:23
>どこで
好きなところで。

グローバルにしてもいいし、
上位のオブジェクト(たとえばアプリケーションクラスのインスタンス)とかに持たせて、
その上位オブジェクト経由でアクセスするとか。

どちらも嫌な場合は、CreateWindowの最後の引数とか。

579 :デフォルトの名無しさん:04/09/04 17:30
> 複数のウインドウプロシージャで

複数のウィンドウクラス間で、ということ?

580 :568:04/09/04 17:42
>>578
今はグローバルで宣言していますが,変数が多くなってきたので
クラスか構造体のポインタを他のプロシージャに渡せればいいなと思いました.
とりあえず,CreateWindowの最後の引数に渡す方法をやってみます.


581 :デフォルトの名無しさん:04/09/04 18:12
>>577
速さを気にするんだったらブラシ用意してFillRectより、CDC::FillSolidRectみたいに
SetBkColor→ExtTextOutの方が速いはず。

582 :デフォルトの名無しさん:04/09/04 18:47
>>581
あれ、背景色を元に戻してないよな。
いいのかMicrosoftがそんなことで…

583 :デフォルトの名無しさん:04/09/04 19:04
まぁ、塗りつぶしに使いたい色=背景色にしたい色って状況のほうが多いだろう、と。
でも、一言注意書いといて欲しいよな。

584 :デフォルトの名無しさん:04/09/04 19:16
少なくとも 2001/10以降のMSDNには
 >メ モ FillSolidRect を呼び出すと、以前に SetBkColor を使って設定した背景色が、
 >clr で指定した色に設定されます。
と書いてあるケドナー

585 :デフォルトの名無しさん:04/09/04 19:33
MSDNはネットで見ろってことなんだろ。

586 :デフォルトの名無しさん:04/09/04 21:52
よろしくお願いします。
プログラム実行中に Windows が休止状態に入った場合、その状態から
復帰した後に特別な作業を行いたいんですが、これを感知する方法が
あれば教えてください。
動作させたい OS は Windows 2000 SP4 です。

587 :デフォルトの名無しさん:04/09/04 21:55
wm_powerbroadcastとかなんとか

588 :デフォルトの名無しさん:04/09/04 23:17
他のアプリケーションにメッセージを送るにはどうすればいいですか?

589 :デフォルトの名無しさん:04/09/04 23:20
メッセージを送ればいい。

590 :デフォルトの名無しさん:04/09/04 23:36
メッセージを送りたいアプリのHWNDを取得して
SendMessage() でいいんでしょうか・・・?

取り合えずHWND取得からやってみます。
ありがとでした。

591 :デフォルトの名無しさん:04/09/04 23:40
ただしポインタが絡むものは普通に送っても無駄だからな。

592 :デフォルトの名無しさん:04/09/05 17:13
システムイメージリストについて教えてください。
これはアプリケーションが破棄してはいけないと言われますが、
(9x系だけかな?)それって全部のプロセスで中身が共通だからですよね?

と言う事は、アプリケーションから勝手にアイコンを登録したりすると
再起動するまで残りつづけるって事なんですか?
2000では破棄しても問題ないし、アイコンを好きなだけ追加しても
プロセスを起動しなおすと中身が初期化されています。

それでもやっぱりいじらない方がいいと思うのですが、
システムイメージリストとアプリケーション独自のアイコンを
ひとつのツリービューやツールバーで利用したい場合、
どうするのがいいのですか?

593 :デフォルトの名無しさん:04/09/05 23:13
質問です。
トップレベルのモードレスダイアログを同時に2つ作成しようとしています。
メッセージループには2つの IsDialogMessage() を組み込んでいるものとします。
このとき、片方のダイアログの上で MessageBox() 等でモーダルダイアログを表示すると、
独自のメッセージループに突入してしまうため、もう片方のモードレスダイアログでは
TABキーによるフォーカスの移動ができなくなってしまいますよね。
スレッドを分ければ解決するのですが、できればマルチスレッドにはしたくないのです。
シングルスレッドでこの問題を回避するいい方法があればご教示ください。

594 :デフォルトの名無しさん:04/09/05 23:44
>>592
システムイメージリストから必要なアイコンをコピーして使えばいいだけでは?

595 : ◆Z0vd5w812U :04/09/06 00:00
>>593
両方ともモードレスにして、モーダル風にふるまわせれば?

596 :デフォルトの名無しさん:04/09/06 02:01
>>593
>もう片方のモードレスダイアログでは

モーダルダイアログを表示したら、モードレスダイアログは inactive なんじゃ・・・

597 :デフォルトの名無しさん:04/09/06 02:29
>>593
自前でTABキー等を処理する。

598 :ほんたま:04/09/06 06:13
おみゃ〜らよ、APIをパブリック名でDLL内から文字列検索すると、
9割方のAPIはヒットする。
だが残る1割のAPIは文字列検索してもヒットしないぞ。
ちゃんとそのDLL内に記述されているのにだ。
これがどういうことかわかるかな?

599 :デフォルトの名無しさん:04/09/06 06:16
そんなこともわからんのか

600 :デフォルトの名無しさん:04/09/06 06:31
>>598
自分じわかるかな?

601 :デフォルトの名無しさん:04/09/06 10:46
>>595
うーん、確かにそういう手もありそうですが…結構面倒になりそうですね。

>>596
最初はアクティブではありませんが、表示されたモーダルダイアログは
もう片方のモードレスダイアログとは被所有関係にないため、
表示中でもアクティブにすることは可能なわけです。

>>597
自前で処理するのは最後の手段かなと思っていたのですが…考えてみます。

レスをいただいた皆さん、どうもありがとうございました。

602 :593:04/09/06 10:49
>>601>>593 の書き込みでした。

603 :デフォルトの名無しさん:04/09/06 11:21
>>601
WH_KEYBOARD のローカルフックで TABキーだけ一括処理する。

604 :デフォルトの名無しさん:04/09/06 12:44
Windowsのロックが解除されたことを知るにはどうしたらよいのでしょうか。
LockWorkStationでロックをして
ロックが解除されたら別の処理に移るようにしたいのですが・・・。

605 :593&601:04/09/06 12:56
>>603
どうもありがとうございます。
自分がローカルフックを使おうとしなかった理由は、
グローバル変数を導入することを避けたい気持ちもあったからです。
でもシングルスレッド限定だとフックを使うのが一番よさそうですね…。

606 :デフォルトの名無しさん:04/09/06 13:12
>>604
OpenInputDesktopでwinlogonデスクトップがアクティブかどうか
調べるとか

607 :デフォルトの名無しさん:04/09/06 13:44
>>605
グローバル変数なんか必要ないけど? 

608 :605:04/09/06 14:01
>>607
え…そうなんですか?
モードレスダイアログのハンドルをフックプロシージャに渡すのに必要な気がしますし、
少なくとも SetWindowsHookEx() の戻り値であるハンドルを
フックプロシージャ内の CallNextHookEx() に渡すためには
グローバル変数の導入は避けられないような気がしていたのですが…。

609 :デフォルトの名無しさん:04/09/06 15:35
あるプロセスがAdministrators権限で動いているとして、子プロセスを別ユーザーで実行したいのですが
その別ユーザーのパスワードを知らない状況でそれは可能でしょうか。
UNIXのsuみたいに、権限をもっているユーザならパスワードがいらない方法を探しています。
お知恵を拝借されてください。

610 :デフォルトの名無しさん:04/09/06 15:39
CreateProcessAsUser
のMSDN解説をよく嫁

俺は読んだが分からなかった。スマソ

611 :586:04/09/06 18:14
>>587
遅くなりましたが今日対象のパソコンで試したところ
WM_POWERBROADCAST で通知を受け取ることができました。
ありがとうございました。

612 :デフォルトの名無しさん:04/09/06 18:17
Administrators権限ではそもそも必要な特権がないので
CreateProcessAsUserは無理
2000以降ならCreateProcessWithLogonWでできるけど
これもパスワードが必要

613 :デフォルトの名無しさん:04/09/07 01:04
>>607
グローバル変数を使わない方法、私も興味があります。ぜひ教えてください。

614 :デフォルトの名無しさん:04/09/07 01:35
>>613
プロセス間通信で共有してもいいし、
今回のケースはローカルフックなんだからハッシュとかに突っ込んでも良い。
んでもって、CallNextHookExは第一引数を無視する。

615 :デフォルトの名無しさん:04/09/07 02:29
>>614
調べてみたら、確かにCallNextHookExは第1引数を無視するようですね。
新たな収穫でした。サンクス!!

616 :デフォルトの名無しさん:04/09/07 03:09
SetDlgItemTextで自作ダイアログのEDITTEXTに改行されたテキストを送っても
改行されないで表示されてしまいます

スタイルの設定は
ES_READONLY | ES_MULTILINE | ES_AUTOVSCROLL
にしてあって、ES_READONLYをES_WANTRETURNにして
手入力すれば改行されるんですが、何が問題なのでしょうか

あと改行に成功してもたぶん1行目の行頭から表示されると思うんですが
最終行を一番下に表示する方法は何かあるのでしょうか
(見た目はチャットウィンドウっぽいものです 機能は全然違いますが・・・)

617 :616:04/09/07 03:56
すみません、検索の仕方間違えてたようです・・・
\r\nじゃないと改行できないんですね
最初の質問は取り下げさせていただきます

2つ目の質問も
まずEM_SETSELにMAKELONG(0xFFFF, 0xFFFF)渡して
直後にVK_HOMEも送るという方法で回避できましたが、
こんなまどろっこしい方法しかないんでしょうか

618 :デフォルトの名無しさん:04/09/07 08:29
>>617
EM_SETSELで最後を選択して、EM_REPLACESELかな?

619 :デフォルトの名無しさん:04/09/07 13:20
>>617
良くwカランけど、その2つのコンボって単純に EM_SETSEL に 0, 0 でいいんじゃない?


620 :デフォルトの名無しさん:04/09/07 13:41
>>618
何を置換するんですか・・・?NULLを渡したらアクセス違反で落ちました

>>619
それだと1行目の行頭にキャレットが行ってしまいます

やりたいことは、3行表示できるエディットに5行送り込んだとして、
_____
| I1行目
| 2行目
| 3行目        ←こうではなくて(Iはキャレットのつもり)
 ̄ ̄ ̄ ̄ ̄
_____
| 3行目
| 4行目
| I5行目        ←こういう状態にしておきたいんです
 ̄ ̄ ̄ ̄ ̄

621 :616:04/09/07 14:00
>>618
あーわかりました
EM_SETSEL,MAKELONG(0xFFFF,0xFFFF)でEDITの最後に移動して
EM_REPLACESEL,0,<追加する文字列\r\n>の後VK_HOMEで
望む挙動を実装できました ありがとうございます

622 :デフォルトの名無しさん:04/09/07 15:08
EM_SCROLLCARET


623 :デフォルトの名無しさん:04/09/07 17:49
Win32でCreateWindowにてComboBoxを作成して
それをサブクラス化したのですが
置き換えたコールバックプロシージャに
WM_KEYDOWNが送られてきません。
これはなぜでしょうか?そういう仕様?
キー入力を取得したいので解決法を教えて頂けませんか?

*Edit,Button,ListView,TreeViewなどはちゃんとWM_KEYDOWNが送られてきています。

よろしくお願いします。


624 :623:04/09/07 17:57
上記にからんだ事なのですが
リソースエディタを使わずに動的にダイアログボックス上のリソースを作成した場合に
Tabキーを押したときに次のリソースにフォーカスが移動という機能を
自分で実装しなければならないために上記のような手段にでました。

親ウィンドウに子リソースのキー入力状況などは通知されないのでしょうか?
WM_NOTIFYなどでNM_KEYDOWNなどはありますが、
あくまでもコモンコントロールであって
Editなどがあてはまらず一貫した実装に出来ません。
一番手っ取り早いのは親にTabキーが押されたことを通知する機能が実装されていれば
よいのですが・・
見た限りないようなので、サブクラス化して子からWM_KEYDOWNのときに
SendMessage(hParent,WM_KEYDOWN, wParam, lParam);
とするぐらいしか方法は思いつきませんでした。

どうしたらよいのでしょうか?

625 :デフォルトの名無しさん:04/09/07 18:16
ドロップダウンリストにすりゃ送られてくるだろ。
コンボボックスで送られてこないのは、インプットフォーカスがあるのが
コンボボックスそのものではなくて中にあるエディットだから。

で、ダイアログの機能を実現したいなら
IsDialogMessageとかモードレスダイアログで検索しなさい。

626 :デフォルトの名無しさん:04/09/07 18:42
624 CreateWindowでWS_TABSTOP立ってないのでは?

627 :623:04/09/07 18:51
>>626
セットしてます

628 :デフォルトの名無しさん:04/09/07 22:59
ランチャなんかでよくあるような、
起動するとポップアップメニューが出て、項目を選択すると
それに応じた作業をこなした上で終了する、というツールを作りたいんです。
ポップアップメニューだけを表示させるにはどうしたらいいのでしょうか?

今は試しに何もしないウィンドウをCreateWindowしておいて
そのWM_CREATEのところでCreatePopupMenuしてメニューを作成して
TrackPopupMenuした上でPostQuitMessageしてみてるんですが、
当然一瞬何もしないウィンドウが表示されてから終了します。
ウィンドウをSW_SHOWしないでおくと、メニューがカーソルと重なっただけで消えてしまって
メニューを選択できません。
何か上手い方法はないものでしょうか?

629 :デフォルトの名無しさん:04/09/07 23:12
>>628
冷やかしは(・∀・)カエレ!!

630 :628:04/09/07 23:20
>>629
…一応マジなわけですが。

631 :デフォルトの名無しさん:04/09/08 00:10
>>628
もう寝るので質問だけ。
PostQuitMessageしている理由は何ですか?
しなければいいのでは?と思うので…

632 :デフォルトの名無しさん:04/09/08 00:13
>>631
メニューを選択して、それに応じた作業をこなし次第終了させたいからです。

633 :デフォルトの名無しさん:04/09/08 00:54
>>628
0x0か1x1のサイズで作れば見えないんじゃない?

634 :デフォルトの名無しさん:04/09/08 03:44
C,C++の宿題スレから誘導で来ました。
DLL側のcppファイルに
declspec(dllexport) int flag;
を宣言して、
EXE側のヘッダファイルに
declspec(dllimport) int flag;
を宣言して、cppにインクルードしました。
EXE、DLLの両方で共通のフラグを使おうと思ったのですが、
デバッガでトレースすると、EXE側で1に設定したflagが
DLL側の関数に入るとflagの値が0になってしまいました。
フラグのメモリアドレスを見ると、DLLとEXEで異なっていて
別領域が取られているようです。EXE、DLLの両方で共通の
同じフラグを使用するには、どのようにexport,importをすれば
よいのでしょうか?長くなってすいません。

635 :デフォルトの名無しさん:04/09/08 04:00
>>634
フラグ用のインターフェース関数を用意して
exeとdllでのフラグのやり取りはその関数経由で行えば良いのでは?

636 :デフォルトの名無しさん:04/09/08 04:15
>>634 こんな感じで。
[exe]
#include "dll.h"
int main(void)
{
printf("%d\n", dll_get_flag());
dll_set_flag(1);
return 0;
}

[dll]
int flag;
dll_get_flag(void){ return flag; }
dll_set_flag(int f){ flag = f; }

637 :デフォルトの名無しさん:04/09/08 04:23
>>634の通りやって、ちゃんと意図どおりになったど。

638 :デフォルトの名無しさん:04/09/08 04:25
>>635-636
ありがとうございます。libファイルを使って静的リンクさせる場合は
[dll]の関数の頭にdeclspec(dllexport)を宣言すればよいのでしょうか?

639 :609:04/09/08 13:04
>>610
>>612
ありがとうございます。
なるほど。
ということは、Windowsではパスワード無しでsudoみたいなことをする方法はないって事なんでしょうか?
その辺を調べる方法はないものでしょうかねぇ

#Cygwinにsuってないんだっけ?あるとすれば、その辺のソースをみればいい?


640 :デフォルトの名無しさん:04/09/08 13:14
>>639
suだってsudoだってパスワードは必要だろうが。

641 :639:04/09/08 13:20
上には書いてあるんですが、もちろんどのユーザーからでもということではなくて、
特権をもっている場合でいいんです。
UNIXだったら、rootからsuするのにパスワードいりませんよね?(UNIXというか僕はLinuxしかしらないのですが(汗))
そこから連想して、WindowsだったらAdministratorでできないかなと想像してます。
その辺、できるのかできないのか、できるとしたらどうすればいいのか。
ちょっとでもヒントになりそうなことがあったら、ぜひお教えください。
重ねてお願いします。

642 :デフォルトの名無しさん:04/09/08 14:39
>>641
WindowsはUNIXではなくAdministratorはrootではありません。
Administrator権限を持つユーザーでしかないです。


643 :デフォルトの名無しさん:04/09/08 15:33
質問です。
メニューから項目を選んでからクライアントエリアをクリックすると
座標値が得られ、それをメッセージボックスで表示させたいんですけど、

メニューの項目を選んだ時点で(クライアントエリアをクリックしてないのに)メッセージボックスが表示されてしまうんです。(座標値は0,0)
こういう場合どういうふうに組んだらいいんでしょうか?

644 :デフォルトの名無しさん:04/09/08 15:39
今現在どういう変てこな造りになっているのかわからんとねー

645 :643:04/09/08 15:52
プログラムは、
case WM_COMMAND:
hMenu = GetMenu(hWnd);
hdc = GetDC(hWnd);
switch (LOWORD(wp)) {
case ZAHYOU:{
  case WM_LBUTTONDOWN:

  pt.x=LOWORD(lp);
  pt.y=HIWORD(lp);
  wsprintf(szBuff,"座標値%d,%d",pt.x,pt.y);
  MessageBox(hWnd,szBuff,"タイトル",MB_OK);
 }
こんな感じなんですが、わかりますでしょうか・・?;}

646 :デフォルトの名無しさん:04/09/08 16:06
break;
死ね。

647 :デフォルトの名無しさん:04/09/08 16:22
デバイスコンテキストで文字を表示する際に文字のフォントサイズを小さく表示するにはどうすれば
いいのですか?

648 :デフォルトの名無しさん:04/09/08 16:36
>>645
わかんにゃい
何をやっているのかさっぱり

649 :デフォルトの名無しさん:04/09/08 16:44
>>647
CreateFontして、SelectObject

650 :デフォルトの名無しさん:04/09/08 19:48
>>649
レスありがとうございます
CreateFontして、SelectObjectを調べてみます

651 :デフォルトの名無しさん:04/09/08 21:54
>>643=645
かなり深刻に勘違いしていますので、
C (C++) と Win32 APIの入門書等を見て勉強したほうがよいです。

652 :デフォルトの名無しさん:04/09/08 22:41
>645
こんな感じのコードでいいのかな?

// これをどっかに宣言
static bool fViewZahyou = false;

case WM_COMMAND: {
 switch (LOWORD(wp)) {
  case ZAHYOU: {
   // 次のクリックでは座標を得る処理をする、という意味で
   fViewZahyou = true;
   break;
  }
 }
 break;
}

case WM_LBUTTONUP: {
 if (fViewZahyou) {
  pt.x=LOWORD(lp);
  pt.y=HIWORD(lp);
  wsprintf(szBuff,"座標値%d,%d",pt.x,pt.y);
  MessageBox(hWnd,szBuff,"タイトル",MB_OK);
  fViewZahyou = false;
 }
 break;
}

>651 の言う通り、まず C/C++ の文法をしっかり勉強するように。

653 :デフォルトの名無しさん:04/09/09 01:11
Windows XP SP2 Platform SDK でまつた。
ttp://www.microsoft.com/msdownload/platformsdk/sdkupdate/default.htm

654 :デフォルトの名無しさん:04/09/09 01:23
結局ATLのサンクはどうなったのかと。

655 :デフォルトの名無しさん:04/09/09 01:54
>>654
http://pc5.2ch.net/test/read.cgi/jisaku/1094220209/11-23 あたり参照

656 :デフォルトの名無しさん:04/09/09 02:00
やっと新SDK出たか

657 :デフォルトの名無しさん:04/09/09 09:01
壁紙をクライアントウィンドウに表示したいので
外部画像ファイル(bmpやjpg)をクライアントウィンドウの背景に設定したいのですが
どのようにすればいいでしょうか?

画像 背景などで検索してもリソースから入手するものばかりです。

壁紙の位置を知る方法はレジストリの
マイ コンピュータ\HKEY_CURRENT_USER\Control Panel\Desktop\OriginalWallpaper
から取得する事はわかりましたが
その画像をクライアントウィンドウの背景にする方法がわかりません。

どうか教えてください

658 :デフォルトの名無しさん:04/09/09 09:45
WinXPで他のウィンドウのIMEのモードを変えたいのですが、
GetForegroundWindowで取ってきたHWNDをImmGetContextに
入れてもNULLしか返ってきません。自分のウィンドウがたまたま
最前列だった場合は、自分のIME制御はできたのですが、何が足
りないのでしょうか。


659 :デフォルトの名無しさん:04/09/09 10:03
>>657
>>2

660 :デフォルトの名無しさん:04/09/09 11:04
>>658
NT系だと他のスレッドのIME監視するの面倒じゃなかったっけ.


661 :デフォルトの名無しさん:04/09/09 11:26
>>659
どれでしょうか?

662 :657:04/09/09 11:27
聞くだけでは失礼だと思ったので
一応>>2のリンク先を見たところ
二つがリンク切れ(一個は表示できない?)でした。

もう二つを見てみましたが
思わしきリンクが見つかりません。
どこのどれを見ればいいか、もしくは検索のヒントを教えてください

663 :デフォルトの名無しさん:04/09/09 11:33
>>662
猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/index.html

Win32 API入門
http://black.sakura.ne.jp/~third/system/winapi/win.html

664 :657:04/09/09 11:38
>>663
上下で分かれてて、下の一番上がWin32〜となってたので
下がWin32API用のリンクかと勘違いしてました
上も入ってるんですね。

ちなみに下のリンクは全部みましたが
思わしき内容がありませんでした。

せっかく張っていただいたWin32 API入門では
残念ながらリソースからBMPファイルを読み込む内容しか書かれていませんでした。

今から猫でもわかるプログラミングの方を読んでみます。

665 :デフォルトの名無しさん:04/09/09 11:43
>>664
ttp://www.wotsit.org/download.asp?f=bmp
ttp://www.wotsit.org/download.asp?f=lzwexp
ttp://www.wotsit.org/download.asp?f=itu-1150
ttp://www.wotsit.org/download.asp?f=png

あとはSetDIBitsToDevice/CreateDIBSection/BitBlt/StretchBltあたりだ

いまさら教えても文句はいうけどお礼は言わないよということか>メアド欄
相当に失礼な奴だな。

666 :657:04/09/09 11:46
>>665
何か勘違いをしているようですが
教えてくれている方に向かって文句を言うほどバカではありません。
口は悪いですがリンク先を教えてもらったりしてるだけで心の中ではありがたく思ってます。
更に使用関数の名前まで教えていただき感謝のきわみです。
ありがとうございます

667 :663:04/09/09 12:03
>>664
http://black.sakura.ne.jp/~third/system/winapi/win.html
・DIB ファイルヘッダ
・DIB 情報ヘッダ
・DIB ピクセルビット
・Windows DIB
・DIB の表示

http://www.kumei.ne.jp/c_lang/index.html
の方は170〜172章

WIN32APIと呼べるかどうか分からんが、
336章にJPEGなども表示できる方法がある(環境限定)

COMだが、JPEGに関してはOleLoadPictureなども使える

668 :デフォルトの名無しさん:04/09/09 12:27
>>664
蛇足。心の中でどう思ってようが構わないが表に出すな。
付け加えれば教えてもらってるのに素直にお礼言わないってどういうこった。
頭膿んでるんじゃねぇか?


669 :デフォルトの名無しさん:04/09/09 13:22
>>657
>>661
>>662
>>664
>>666


670 :デフォルトの名無しさん:04/09/09 13:41
あの質問を相手にするほうもどうかと思うが。

671 :657:04/09/09 14:12
>>667さんが>>663さんということは>>665さんは>>663さんじゃないのか…
>667さん、ありがとうございます
とりあえず色々試行錯誤してみます

672 :デフォルトの名無しさん:04/09/09 14:24
ではここで新しいPlatformSDKの主な変更点をどうぞ
 ↓

673 :デフォルトの名無しさん:04/09/09 14:34
>>672
「新しい Platform SDK」っていう表現は微妙。
単独では使えないし。

674 :デフォルトの名無しさん:04/09/09 14:47
バージョンアップしたのがTable/MDAC/MSIだけじゃ
あんまり俺には関係ないな。


675 :デフォルトの名無しさん:04/09/09 16:13
>>673
どういう表現ならいいんだ?

676 :デフォルトの名無しさん:04/09/09 16:25
ナウい Platform SDK

677 :デフォルトの名無しさん:04/09/09 16:25
差分とかじゃないの?

678 :デフォルトの名無しさん:04/09/09 16:28
差分てことは新しいってことじゃないのか

679 :デフォルトの名無しさん:04/09/09 16:59
新しいってことは差分てことじゃないのか

680 :デフォルトの名無しさん:04/09/09 17:01
じゃあ「新しい Platform SDK」という表現でいいな。
改めてどうぞ
 ↓

681 :デフォルトの名無しさん:04/09/09 17:11
XP SP2に対応しました。

以上

682 :デフォルトの名無しさん:04/09/09 17:12
ポカーン・・・

683 :デフォルトの名無しさん:04/09/09 17:13
またこっそり新しいAPI入れてるんでしょ?そうなんでしょ?

684 :デフォルトの名無しさん:04/09/09 17:13
古くする差分だったらどうするニダ

685 :デフォルトの名無しさん:04/09/09 17:15
>>684
新しいSDK=新しくするSDKって意味じゃないべ。
新しく出たSDKって意味だべ。

686 :デフォルトの名無しさん:04/09/09 17:18
>>683
頭おかしいのか?

687 :デフォルトの名無しさん:04/09/09 17:19
追加API一覧とかつけてほしいよ

688 :デフォルトの名無しさん:04/09/09 17:54
どっかにあったぞ

689 :デフォルトの名無しさん:04/09/09 17:59
マジでか

690 :デフォルトの名無しさん:04/09/09 18:12
ウソでした

691 :デフォルトの名無しさん:04/09/09 18:22
ホントだって。
http://msdn.microsoft.com/library/en-us/winprog/winprog/functions_by_release.asp
http://msdn.microsoft.com/library/en-us/win9x/append_4cs3.asp
あーでもXPSP2はまだ入ってないな

692 :デフォルトの名無しさん:04/09/09 18:22
自己解決しました

693 :デフォルトの名無しさん:04/09/09 18:30
spy++を使わずに届いたメッセージをフックしてくれるソフトってありますか?
どうも探しても見つかりません。

694 :デフォルトの名無しさん:04/09/09 18:31
メッセージをフックした上でメッセージを表示してくれるプログラムです

695 :デフォルトの名無しさん:04/09/09 18:34
>>691
おまえ神だろ

696 :デフォルトの名無しさん:04/09/09 18:35
なんでspy++じゃだめなの

697 :デフォルトの名無しさん:04/09/09 19:11
>>693
http://www.windows-spy.com/
とかは?

698 :デフォルトの名無しさん:04/09/09 19:23
C+Win32APIでウィンドウズアプリケーションを作っているのですが、
最大化できなくする方法(最大化ボタンを無くす)を教えてください。
WNDCLASS.styleにCS_*だと思うのですが、見つかりませんでした。

699 :デフォルトの名無しさん:04/09/09 19:25
WS_MAXIMIZEBOX

700 :698:04/09/09 19:40
>>699
できました。ありがとうございました。

701 :デフォルトの名無しさん:04/09/09 21:06
>>696
VC++持ってないので…

>>697
ありがとうございます

702 :デフォルトの名無しさん:04/09/09 23:09
ステータスバー上にマウスがきたら、マウスアイコンを変更させようとお
もって、WM_MOUSEMOVEが特定の位置にきたらseticonを使用して変えよう
としたのですがうまくいきません。
ステータスバーをcreatewindowexでつくったので、その前にWNDCLASSEX
にステータスバーを処理するためのメッセージ処理関数を登録して
RegisterClassExを実行しました。RegisterClassExの戻り値は0なので
うまくいくはずはないのでしょうが、そもそもこのような手順であってい
るのでしょうか?

703 :デフォルトの名無しさん:04/09/09 23:47
>702
ステータスバーというと msctls_statusbar32 の事かな。
もしくは STATUSCLASSNAME か。ってか、同じだけど。
で、メッセージ処理関数を置き換えるという発想は正解。
でも方法は間違い。次のようにする事。

// msctls_statusbar32 オリジナルのプロシージャを退避させておく変数
static WNDPROC original_procedure = 0;
static LRESULT CALLBACK my_statusbar_procedure (HWND .. /* 略 */ ..) {
 /* ここでやりたい事をすればよい */

 /* 重要。自分で処理しないメッセージは必ず元のプロシージャに任せる事! */
 return CallWindowProc (original_procedure, hwnd, msg, wParam, lParam);
}

HWND create_my_statusbar() {
 HWND statusbar = CreateWindowEx ( /*略。普通にステータスバーを作る */ );

 /* こうやってメッセージ処理関数を置き換える */
 original_procedure = (WNDPROC)SetWindowLong (
       statusbar, GWL_WNDPROC, (LONG)my_statusbar_procedure,);

 return statusbar;
}

704 :デフォルトの名無しさん:04/09/10 00:29
>>697
それ、Win9x系では死ぬほど重いんだよな…。

705 :702:04/09/10 00:31
>>703
うまくいきました〜
トンクス!

706 :デフォルトの名無しさん:04/09/10 04:17
WirteFileの非同期書き込みって処理がすぐ帰って来るだけで
スレッドセーフなわけではないですよね?

707 :デフォルトの名無しさん:04/09/10 11:50
>>706
WriteFile はどう呼び出してもスレッドセーフだよ。
呼び出し側のコンテキストもOS内のステータスも壊れないし、
書いただけちゃんと書かれる。

書き込みを同期化してくれるわけではないけど(先方がデータグラム型ソケットの場合を除く)。

708 :デフォルトの名無しさん:04/09/10 12:33
SetTimer、KillTimerがありますが、
それのタイマーを0にするAPIがあるなら教えてください。

709 :デフォルトの名無しさん:04/09/10 12:36
>>708
ないと思う。

0にしてどうするの?というか、なぜ0にしたいの?

710 :708:04/09/10 12:44
>>709
例えば、ゲームのカーソルを0.5秒単位に点滅させる処理で、
0.5秒毎にWM_TIMERが発生しますが、
ユーザーが十字キーを動かしたときに、時間を0に戻して、
次からの点滅のタイミングを同じにしたいのです。
KillTimerした後、すぐSetTimerすればそれができると思うのですが、
APIがあればそちらの方がいいかなと。

711 :デフォルトの名無しさん:04/09/10 13:11
>>710
ウィンドウに関連付けてるなら、出来そう

以下、MSDNより抜粋
>hWnd パラメータで NULL 以外の値を指定し、
>hWnd パラメータで指定したウィンドウに、
>nIDEvent と同じ値のタイマが既に割り当てられている場合、
>新しいタイマは既存のタイマを置き換えます。

>SetTimer 関数がタイマを置き換えた場合、
>そのタイマはリセットされます。
>したがって、現在のタイムアウト時間が経過すると
>1 つのメッセージが送信されますが、
>それまでのタイムアウト時間は無視されます。

712 :708:04/09/10 13:26
>>711
詳しくありがとうございます。
KillしてすぐSetする方法でやってみたいと思います。

713 :デフォルトの名無しさん:04/09/10 13:41
POPサーバーにアクセスするAPIを教えてくださ

714 :デフォルトの名無しさん:04/09/10 13:48
>>712
711を読む限りkillしないてもいいんでない?

715 :デフォルトの名無しさん:04/09/10 13:59
>>713
gethostbyname(), socket(), connect(), send(), recv(), close()
MAPI を提供するメーラがあって、そのアカウントが使いたいなら MAPI 経由でもいいかも。

716 :デフォルトの名無しさん:04/09/10 14:15
標準スタイルのボタンやチェックボックスはDrawFrameControlで描画できますが、
同様にタブを自前で描画する方法はありませんか?


717 :デフォルトの名無しさん:04/09/10 14:15
>>715
あ、それ系のAPIでやるんですか、ありがとー

718 :デフォルトの名無しさん:04/09/10 14:29:32
>>716
uxtheme
嫌ならボタンの上半分とかでそれらしく描画するしかないな

719 :708:04/09/10 15:49:06
>>714
それでもいけました。ありがとうございました。

720 :デフォルトの名無しさん:04/09/10 18:55:29
WM_PAINTがキューにもう一つあるなら、
その回は描画しても無駄なのでスキップする

という処理をしたいのですが上手くいきません
どのようにすれば良いのでしょうか?今はこうやって失敗してます。

case WM_PAINT:{
 MSG m;
 if( PeekMessage( &m, hWnd, WM_PAINT, WM_PAINT, PM_NOREMOVE ) ) return 0;

 //以下描画処理
}

721 :デフォルトの名無しさん:04/09/10 18:57:17
WM_PAINTはキューにひとつしかないけど何がしたいの?

722 :デフォルトの名無しさん:04/09/10 18:59:24
システムが勝手に1つにまとめてくれるわけだな

723 :デフォルトの名無しさん:04/09/10 19:06:15
つーか、ウィンドウの無効領域を自動的にまとめて、暇そうなときにWM_PAINTを発行するんじゃなかったか?

724 :デフォルトの名無しさん:04/09/10 19:08:42
>>721-722
レスありがとうございます。まとめてくれるんですね。道理で上手くいかないわけだ。

ヘルプ見ても該当の記述が見つからないので、重ねてすいません。
WM_MOUSEMOVEとかならば、この方法で良いのでしょうか?

725 :デフォルトの名無しさん:04/09/10 19:21:49
APIとSDKはどう違うんですか?

726 :デフォルトの名無しさん:04/09/10 19:48:18
猫でウインドウに関連付けられているメニューは、ウインドウ破棄と同時に捨てられるみたいな事が書いてあるのですが、

HMENU menu1=CreateMenu();
HWND hwnd1=CreateWindowEx(..., menu1, ...);

HMENU menu2=CreateMenu();
HWND hwnd2=CreateWindowEx(..., menu2, ...);

と二つのオーバーラップウインドウを作った場合、どうも最後に作られたメニューは破棄されるけど
それ以前に作ったメニュー(この場合はmenu1)は破棄されないようなのです。
以下3, 4...と作っていくと、menu2のDestroyMenuが成功するようになります。

何か大きなミスをしているような気がするのですが、ウインドウメニューと破棄の関係について
正確に掛かれているページってどこかに無いでしょうか?

727 :デフォルトの名無しさん:04/09/10 19:50:57
そのウィンドウに関連付けられたメニューだけが破棄されるのは
分かってるか?

728 :デフォルトの名無しさん:04/09/10 20:05:35
ウインドウが閉じた(WM_DESTROYが送られた後)タイミングで破棄されるから
明示的に閉じたウインドウ以外は、破棄される前にDestroyMenuが呼ばれてるのかな
だからDestroyMenuが成功してるんだと思う。

729 :デフォルトの名無しさん:04/09/10 21:33:57
タブコントロールにスライダーコントロールが乗っかっているWINアプリがあるのですが、
このスライダーコントロールを別のWINアプリを作りたいなあと思っています。
このときにスライダーコントロールのハンドルをどうやったら取得できるのでしょうか?

730 :デフォルトの名無しさん:04/09/10 21:47:18
>>729
自分の書いた文章読んで意味わかるか?

731 :デフォルトの名無しさん:04/09/10 21:55:48
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
上ので、WndProcはどこで呼び出しているのでしょう。

732 :デフォルトの名無しさん:04/09/10 21:57:17
ですぱっち

733 :731:04/09/10 21:59:48
>>732
ありがとうございました。

734 :デフォルトの名無しさん:04/09/10 22:27:50
>>729
なんかなぞなぞみたいでつ

735 :デフォルトの名無しさん:04/09/10 22:50:10
>>729
スルーですね。

736 :デフォルトの名無しさん:04/09/10 23:16:55
SetWindowsHookExを使って"コピーされた"ってのを知りたいんですけど
WH_CALLWNDPROCRETを使ってWM_COPYを見ていればいいんですか?

737 :デフォルトの名無しさん:04/09/10 23:22:34
だめ

738 :デフォルトの名無しさん:04/09/10 23:34:33
C+ウィンアプリは、イベントがあるまでOS?で待ちながら、
イベントが発生すると、GetMessageでそれを得て、
TranslateMessageで使いやすく翻訳し、
DispatchMessageでWndProcを呼び出し実行する、
という感じでいいのでしょうか。

また、TranslateMessageとDispatchMessageの引数が、
constポインタなのはなぜでしょう。

TranslateMessageはGetMessageで得たものをポインタで渡し、
中で書き換えるとイメージしたのですが、
constだと書き換えられないような気がするのですが。

また、DispatchMessageは実行するだけだから、
書き換える必要が無く、ポインタで渡す必要が無いと思うのですが。

739 :デフォルトの名無しさん:04/09/10 23:42:04
TranslateMessageはメッセージを書き換えないで、
WM_(SYS)KEYDOWNからWM_(SYS)CHARを生成したりしてキューにポストする。
書き換えちゃったらKEYDOWN系がこなくなる。

740 :デフォルトの名無しさん:04/09/10 23:44:47
ポインタなのは構造体コピーより速いから。じゃねーかな。

741 :738:04/09/10 23:50:43
ありがとうございます。

>>739
そういえば、キーを押した時、2回メッセージが来ているような
気がする事があったのですが、もしかしたらそれかもしれません。

>>740
なるほど。
自分は、引数がNULLでも動く関数の時は、constポインタにする事が
ありますが、そういう利点もあったのですか。

742 :デフォルトの名無しさん:04/09/10 23:52:05
>>738
> TranslateMessageで使いやすく翻訳し、
TranslateMessageはただWM_KEYDOWN/UPなどからWM_CHARなどのメッセージを作り出しているだけだから、それじゃ間違い。
WM_CHARなどのメッセージが要らなければ、TranslateMessageを呼ぶ必要も無い。

> TranslateMessageはGetMessageで得たものをポインタで渡し、中で書き換えるとイメージしたのですが、
そうじゃない、PostMessage(それかWin内部でごにょごにょ)で送り出すので書き換える必要は無い。

> 書き換える必要が無く、ポインタで渡す必要が無いと思うのですが。
構造体を直接関数の引数にすると、いちいちコピーする時間が掛かる。
なので代わりにポインタ(あるいは参照)にするのごく一般的に行われる。(sizeof (MSG)は28だがsizeof (MSG*)なら4)
その場合、通常の値渡しのように関数に渡した変数の中身が変わらないことを表明するためにconstポインタ(あるいはconst参照)にするのは常識。

743 :738:04/09/10 23:59:26
>>742
さらに詳しくありがとうございます。
すごく勉強になりました。

744 :デフォルトの名無しさん:04/09/11 09:57:30
次スレはスレタイにWin64の文字も入れてください

745 :デフォルトの名無しさん:04/09/11 10:56:10
Win64は別スレにした方がよくね?

746 :デフォルトの名無しさん:04/09/11 11:05:55
んだ

747 :デフォルトの名無しさん:04/09/11 11:11:14
>>745
話題が分散するだけで、あんまり意味ないような感じがするけどどうでしょ。
しかも物凄く過疎な予感もするし。16->32みたいにそんなに違うわけでもないし。

748 :デフォルトの名無しさん:04/09/11 13:20:57
質問する前に、「Win64についてですが・・・」とでも
書き添えてくれるのならいいけど、ここじゃルール守るヤツの方が
少数だからなぁ。

749 :デフォルトの名無しさん:04/09/11 13:21:40
一緒が良いよ。

750 :デフォルトの名無しさん:04/09/11 13:49:51
当面は【Win64可】をスレタイに入れればいいんじゃない。

751 :デフォルトの名無しさん:04/09/11 14:29:10
別でいいよ。

752 :デフォルトの名無しさん:04/09/11 14:31:49
実際にWin64の質問が増えてからでいいって。
今までほとんど無いんだから今のところ現状維持で。

753 :デフォルトの名無しさん:04/09/11 14:41:47
ただ単に「WindowsAPI質問箱」にするだけじゃ駄目なん?

754 :デフォルトの名無しさん:04/09/11 14:49:50
それじゃWinFXも入る予感

755 :デフォルトの名無しさん:04/09/11 14:58:02
俺の持ってるWindowsプログラミングに関する唯一の本は
パラメータの型としてSIZE_Tとなってるところが、全てDWORDです。
そろそろ新しい版を買えことかな。AdvancedWindows3edです。

756 :デフォルトの名無しさん:04/09/11 14:58:57
( ´_ゝ`)フーン

757 :デフォルトの名無しさん:04/09/11 15:25:01
マウスボタンをLR同時押しするとWM_*BUTTON〜メッセージが来ないマウスと、
両方通知されるマウスがある。
ハード依存なのか、それともドライバなのかなぁ。
何か情報ないでしょうか?

758 :デフォルトの名無しさん:04/09/11 15:26:28
どっちもありうる

759 :757:04/09/11 15:42:00
ドライバだった。
同時押し時にホイールとして機能するようになってたよorz

760 :デフォルトの名無しさん:04/09/11 18:29:07
Cのウィンアプリで、コールバックを使わずに組むのはダメなのでしょうか。
以下のプログラムのような感じなのですが。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1086258254&res=6

うまく言えないのですが、タイトルの時は、タイトルの処理だけに当たり
フィールドの時は、フィールドの処理だけとしたいのです。
普通のやり方だと、グローバル変数、static変数を
使わなければいけない所もでてきてしまいます。
手続き型っぽくしたいのです。

761 :デフォルトの名無しさん:04/09/11 18:46:09
ウィンアプリはイベントドンブリが基本だから、
注文したカツどんがすぐ出てくるとは限らないぞ

762 :デフォルトの名無しさん:04/09/11 19:18:46
>>760
ゲーム進行用のスレッドを作ってそこであれこれやるのじゃだめか?

763 :760:04/09/11 19:35:53
>>761
詳しくお願いします。

>>762
スレッドが難しくて分からないです。
眼で追いやすい手続きっぽいのがいいです。

764 :デフォルトの名無しさん:04/09/11 19:48:04
>>755
DEPなんて影も形もなかったころから将来PAGE_EXECUTEをサポートする
プロセッサが現れるかもしれないからちゃんとVirtualProtectしておけと
書いてありましたね。

765 :デフォルトの名無しさん:04/09/11 20:30:50
LR同時押しは依存症

766 :デフォルトの名無しさん:04/09/11 20:44:48
>>764
あれはいい本だ。ところで
ttp://www.wintellect.com/about/instructors/richter/prog_apps.aspx
に第4版の訂正が載っていて、
「DLL の注入と API フック」の章では
オリジナルでは単に WriteProcessMemory だけだったが、
VirtualProtect で PAGE_EXECUTE_READWRITE を設定しろと書いてある。

この訂正の理由が DEP 関係なら理解できるんだけど
> The sample fails to hooks some applications.
「一部のアプリで失敗する」っていう理由がよく分からない。
同じ環境でも成功するアプリと失敗するアプリがあるの? なんで?

767 :デフォルトの名無しさん:04/09/11 22:52:46
WS_EX_CLIENTEDGEのスタイルを指定したときの内側の枠の幅はどうやれば取得できるのでしょうか?
EDITとかに好みのフォントを設定した後、最適な高さにリサイズしたいのですが、
GetTextMetricsではフォントグリフの高さしか取得できず、ウインドウをその高さにリサイズすると
当然文字が欠けてしまいます。

768 :デフォルトの名無しさん:04/09/11 22:57:15
化けるわけないじゃん

769 :デフォルトの名無しさん:04/09/11 23:34:48
>>767
GetWindowRect()
GetClientRect()
ClientToScreen()
これらを使えばスタイルが変わってもプロシージャの使いまわしが化膿。

770 :デフォルトの名無しさん:04/09/12 00:19:59
透過転送を使いたいがためだけにイメージリストを使うのってアリですか?

771 :デフォルトの名無しさん:04/09/12 03:14:14
SendInput関数・INPUT構造体について質問です。
これを使用したいのですが、なぜかコンパイルエラーに
なってしまいます。ヘッダにしっかりと定義の記述があるのですが、
「error C2065: INPUT' : 定義されていない識別子です。」
のようなエラーになってしまいます。user32.libなども、
読み込む設定になっています。

どうすればよいでしょうか?

環境
winxp vc6.0 sp6

772 :デフォルトの名無しさん:04/09/12 03:40:19
>>771
#if (_WIN32_WINNT > 0x0400)

773 :デフォルトの名無しさん:04/09/12 03:41:29
>>771
_WIN32_WINNT

774 :773:04/09/12 03:42:03
すまん、かぶった

775 :デフォルトの名無しさん:04/09/12 03:55:54
_WIN32_WINNT 0x0500 と定義してあります。
それでも、ダメなようです。

変数の.を打ち込んだときに、リストは出てきます。
(インテリジェンス機能?)

それでも、コンパイルが通らないんです…。

776 :デフォルトの名無しさん:04/09/12 04:04:43
>>775
ヘッダのインクルードより前に#defineしてるか?

777 :760:04/09/12 08:49:46
>>760の書き方はなぜいけないかまだ分かりません。

HandleTitleの所のメッセージチェックの所に、
DispatchMessage(&msg);を書いて、
WndProcにif(game == Title)を条件に、
そのメッセージチェックを書けば同じ処理になると思うのですが。

DispatchMessageが、ただWndProcに行くだけと考えているので
そう書いたのですが、他にも何か処理をしているのでしょうか。

778 :デフォルトの名無しさん:04/09/12 08:58:47
モードレスダイアログをたくさん開いているとき、
IsDialogMessage(hwnd)をダイアログの数だけ実行するのですか?
それともNULLとかを指定すれば自動ですべてのウインドウに適用されるのでしょうか?

779 :デフォルトの名無しさん:04/09/12 12:29:53
>>777
世の中にはメッセージキューにたまらないで直接WndProcへ行くメッセージもあるからな。
(つまりGetMessageからじゃ取り出せない)

780 :デフォルトの名無しさん:04/09/12 12:43:51
>779 に先に簡潔に書かれちゃったけど,どうせ書いたから書き込んじゃえw

>777
きみはゲームで使うウィンドウを作るために RegisterClass(Ex) でウィンドウクラスを登録するだろうから
どうしても WndProc コールバック関数を書く必要がある。

それに上等なゲームなら欠かせないいくつかのメッセージは SendMessage() で送られて来る。
それらはメッセージキューにポストされるものではなく,つまり GetMessage()〜DispatchMessage() を
通過せず直接コールバックを呼ぶもののはず (だよね?少なくとも,今の時点では致命的な間違いではないはず)。
例えば WM_MOUSEACTIVATE,WM_CAPTURECHANGED,WM_ERASEBKGND,それに WM_(QUERY)ENDSESSION。
(他にも SendMessage で送られて来るものは多数)
マルチタスク環境にてユーザに親切なゲームを作りたいなら,これらのメッセージも的確に処理するべき。

781 :デフォルトの名無しさん:04/09/12 13:06:07
>760==777
ゲームで使う色々な変数だが,グローバル変数を使うのがいやなら
構造体にまとめて SetWindowLong() で GWL_USERDATA にでも入れておけばいい。
WndProc の中で GetWindowLong() で取り出すんだ。

入れるタイミングは,そうだね,WM_NCCREATE でどうだ。
 if (msg == WM_NCCREATE) {
  SetWindowLong(hwnd, GWL_USERDATA, (LONG)new GameData());
  return 0;
 }

破棄するのは WM_DESTROY でもいいだろう。
 if (msg == WM_DESTROY) {
  GameData *gameData = (GameData *)GetWindowLong(hwnd, GWL_USERDATA);
  delete gameData;
  SetWindowLong(hwnd, GWL_USERDATA, 0); // 安全のためにな
  PostQuitMessage(0);
  return 0;
 }

GameData が,必ず適切に処分しないといけない特殊なリソースを使っているならば
WM_ENDSESSION でも delete gameData; を忘れてはいけない。
少なくとも WM_DESTROY は送られて来ないからね。
 (確か WM_CLOSE すらも送られて来なかったような。。。)

782 :デフォルトの名無しさん:04/09/12 13:38:37
>>776
神!!!!!!!!

…というより、こんな基本的なことを忘れていたモレは
いったいなんなんだろうかと小一時間。

マジで反省してきます。スレ汚しすいません。

783 :760:04/09/12 13:52:37
ありがとうございます。

>>779
そうだったのですか。それだと、あのやり方だとダメですね。

>>780
同じく、あの方法だと、より詳しく知っていないと危険ですね。

所で思ったのですが、myProg.lpfnWndProcをTitleの時ならTitleWndProc、
Fieldの時ならFieldWndProcと、ゲームルーチン切り替え時に一緒に変えれば、
コールバック先を変える事が出来るのでしょうか。
それなら、TitleWndProcにタイトルの事だけ書くことが出来、
自分の考えに近いものが出来そうなのですが。

>>781
知らないやり方でした。勉強してみます。

ただ、うまく組めば、キャラクターのHPとかのデータを、
ローカル==autoで置いて置けるので、何か悔しかったもので。

アイテムのデータとかは、グローバル、staticになるので、
その方法が使えそうです。

784 :デフォルトの名無しさん:04/09/12 14:26:53
MCIを使ってオーディオプレーヤーを作成してますが、
ミュートのプログラムの作り方がよくわかりません。
教えてください

785 :デフォルトの名無しさん:04/09/12 14:36:27
よく考えるとスレタイの「API質問箱」ってわかりにくいタイトルだよな.
テンプレに「Win32APIとはなんぞや」ぐらい書いてあった方が良いかもね.
このページへの直リンでもいいけど.
http://black.sakura.ne.jp/~third/system/winapi/win1.html



786 :デフォルトの名無しさん:04/09/12 14:41:31
宣伝はやめてください。

787 :デフォルトの名無しさん:04/09/12 14:53:56
>>786
リンク張らなければいいだけでしょ


788 :デフォルトの名無しさん:04/09/12 14:56:29
今、785にリンク貼ったこと自体が宣伝ですね。

789 :デフォルトの名無しさん:04/09/12 14:57:21
Win32APIが何かわからん奴はそもそもここに来ないだろ。

790 :デフォルトの名無しさん:04/09/12 15:00:05
>>783
> 所で思ったのですが、myProg.lpfnWndProcをTitleの時ならTitleWndProc、
> Fieldの時ならFieldWndProcと、ゲームルーチン切り替え時に一緒に変えれば、
> コールバック先を変える事が出来るのでしょうか。

SetWindowLongPtr(hwnd, GWLP_WNDPROC, FieldWndProc);でできる。

791 :760:04/09/12 15:24:57
>>790
ありがとうございます。やってみます。

792 :デフォルトの名無しさん:04/09/12 17:39:54
>>786
いやなら見なきゃいいだけでしょ。

793 :デフォルトの名無しさん:04/09/12 18:43:13
Web上のテキストファイルをファイルに保存したいのですが、
URLからメモリに取り込むところがわかりません。
CreateFileもURLでは無理みたいなので、どうしたらいいでしょうか。

794 :デフォルトの名無しさん:04/09/12 18:46:04
FileMappingを使ってプロセス間通信を行いたいのですが、
テンポラリファイルを作らないでファイルマッピングを行う場合最大サイズを指定しなければなりません。
状況によってこのサイズが極端に変わるのですが、
目いっぱい大きくとって4Gとか指定してもいいのでしょうか。

795 :デフォルトの名無しさん:04/09/12 19:11:12
>>793
ttp://nienie.com/~masapico/api_sample_inet04_c.html

796 :デフォルトの名無しさん:04/09/12 19:12:42
>>792
宣伝必死ですね

797 :デフォルトの名無しさん:04/09/12 23:30:39
リッチエディットコントロールについて質問です。
「文字列」という単語をマウスで前方からゆっくり選択していくと「文」「字列」という風に、
1文字づつ選択されずに一気に2文字や3文字が選択される事がよくあります。
これはリッチエディットのバグ(仕様)なんでしょうか?
それとも何か設定を与えると回避できるものなんでしょうか?
ワードパッドでも確認できます。

798 :デフォルトの名無しさん:04/09/12 23:36:50
クソ仕様

799 :デフォルトの名無しさん:04/09/12 23:43:32
>>797
IEでもなるよね。イライラする。

800 :797:04/09/12 23:48:02
最悪ですね。
エディットコントロールを拡張するか自作するか。
いや、今日はもう寝よう…。

801 :デフォルトの名無しさん:04/09/12 23:49:55
ワードパッドでは「単語を自動選択」のチェックで動作を変更できるから
方法はありそうな気がする

802 :797:04/09/12 23:55:46
>>801
そういやMFCのサンプルでワードパッドのソースコードありましたね。
ちとダイヴしてきます。

803 :デフォルトの名無しさん:04/09/13 00:31:30
ツリービューに LVS_EX_CHECKBOXES オプションを付けてチェックボックスを表示させたのですが
チェックボックスがチェック/解除されたタイミングを知るにはどうすればいいのでしょうか?
WM_NOTIFYにそれらしいメッセージは飛んできませんでした。
WM_NOTIFYのNM_CLICK等を拾って自分で変更があったかを確認してやるしかないのでしょうか?

804 :797:04/09/13 00:56:20
原因がつかめました。
ECO_AUTOWORDSELECTION
リッチエディットにこのオプションフラグが設定されているとテキスト選択に不具合が出るようです。

フラグが立っているようならばフラグを下げてやればいいですね。
SetOptions(ECOOP_AND, ~(DWORD)ECO_AUTOWORDSELECTION);

>>801
ヒントありがとうございました。

805 :デフォルトの名無しさん:04/09/13 01:00:38
>>803
http://www.codeproject.com/listctrl/listcheckbox.asp
WM_NOTIFYでLVN_ITEMCHANGEDが通知されるのを捕まえる

806 :803:04/09/13 01:55:53
>>805
感謝感謝!!

807 :デフォルトの名無しさん:04/09/13 09:32:00
MCIを使ってオーディオプレーヤーを作成してますが、
ミュートのプログラムの作り方がよくわかりません。


808 :デフォルトの名無しさん:04/09/13 09:33:40
そうですか

809 :デフォルトの名無しさん:04/09/13 09:39:35
ワロタ

810 :デフォルトの名無しさん:04/09/13 10:04:35
スタートメニューの終了オプションや、他のアプリケーションが
スタンバイ移行の要求をした場合に、それを止める方法は無いの
でしょうか?

電源プロパティのアイドルタイマーによるスタンバイ移行は、
SetThreadExecutionStateで止めることができるようですが、
↑のスタンバイ要求は止められないようです。

どなたか教えていただけないでしょうか。

811 :デフォルトの名無しさん:04/09/13 10:37:53
WM_POWERBROADCASTを処理する

812 :デフォルトの名無しさん:04/09/13 10:42:23
>>811
ありがとうございます。WM_POWERBROADCASTに関連したMSDNを
見てきてがんがります。

813 :デフォルトの名無しさん:04/09/13 13:59:03
入力デバイスが接続されたのを関知したいのですが、デバイスインターフェイスGUIDであるところの
GUID_CLASS_INPUTの定義がどこにあるのか判らず、困っています。
誰か教えてください。


814 :デフォルトの名無しさん:04/09/13 14:09:15
GUID_CLASS_INPUTでIncludeディレクトリをぐぐる

815 :デフォルトの名無しさん:04/09/13 14:12:54
>>814
その「ぐぐる」の使い方は始めてみた

816 :デフォルトの名無しさん:04/09/13 14:14:38
grepすると書こうと思ったら反射的に「ぐぐる」になってしまったorz

817 :813:04/09/13 16:28:57
>814
残念ながら見つかりませんでした。
Webでもググってみたんですが情報が全然ありません(辛うじてDDK関連の情報があるのみ)。
悲しいのでしばらく寝込みます。

818 :デフォルトの名無しさん:04/09/13 16:45:21
>>817
うん、DDKに入ってるヘッダ(hidclass.h,poclass.h)に定義されてる

819 :デフォルトの名無しさん:04/09/13 16:49:31
>>813
DDKのhidclass.hにて(゚∀゚)ハケーソ!!


820 :デフォルトの名無しさん:04/09/13 17:53:21
ウィンドウについてるスクロールバーの端っこの部分(三角が書いてあるところ)
っていつ描画されるんですか?

821 :デフォルトの名無しさん:04/09/13 17:57:29
描画すべきとき

822 :デフォルトの名無しさん:04/09/13 18:01:42
もしくは、スクロールバーの端の部分を再描画する方法・APIを教えてください。
SetScrollInfoだと端っこは再描画してくれません。

823 :デフォルトの名無しさん:04/09/13 18:14:53
>>822
ぜんぜん検証してないテケトーな意見だが、
ウィンドウごと再描画すればいいんじゃね?

824 :813:04/09/13 19:11:15
>818,819
ありがとうございます。しかしDDKってWebで配布してないんですよね…
ググったときにヘッダファイルが引っ掛かっていたので、それを使ってみることにします。

825 :デフォルトの名無しさん:04/09/14 00:12:47
CreateThreadで作ったスレッド内ではCランライム関数を使ってはいけないそうですが、
newや__try __catchやSTLも使えないんでしょうか。
だめな場合wsprintfの1024バイトの壁を破る簡単な方法ってありませんか。
_beginthreadexにするのは他人が作ってる部分なので無理なんです。

826 :デフォルトの名無しさん:04/09/14 07:56:01
>825
s(n)printfするためだけにもう一個自分で_beginthread(ex)してスレッド作れば?

827 :デフォルトの名無しさん:04/09/14 09:37:22
>>825
>だめな場合wsprintfの1024バイトの壁を破る簡単な方法ってありませんか。

1行ごとに処理するとかなんとかして、そこを改善した方がヨサゲ・・・

828 :デフォルトの名無しさん:04/09/14 10:17:49
>>825
CreateThread()を使ってるアフォに_beginthreadex()を使うよう説得する。
CreateThread()と_beginthreadex()は引数の並びが同じなので、変更は楽。
(ただし、スレッドに渡す関数の型が違うのでキャストする必要がある。)
この仕様変更を受け入れるよう、きつく催促することをお薦めする。

829 :デフォルトの名無しさん:04/09/14 10:28:53
>>825
どうあってもだめな場合は、Shlwapi.hの関数群を使う。
MSDNをStrCpy StrCat などでググってみれ。

ん?それ以前に、wnsprintf()は本当にstdio.hのを使ってるのか?
同じ名前の関数が、Shlwapi.hもあるぞ。確認しる。
これらはIEのコンポーネントの一部だ。

830 :デフォルトの名無しさん:04/09/14 12:17:23
>>825
スタティック変数が他スレッドからの呼び出しで破壊される等の深刻な問題ではなく、
リソースリークを起こすだけなので気にしないで使っちゃうってのもまぁありかも。

リソースが深刻なほど少ない環境や、長期間連続稼動させてる環境で使用される
のなら考え物ですが。

831 :デフォルトの名無しさん:04/09/14 12:48:26
頭のゆるい人があらわれた!

832 :デフォルトの名無しさん:04/09/14 19:38:51
('A`)ヒロシです…

MCIを使ってオーディオプレーヤーを作成してますが、
ミュートのプログラムの作り方がよくわかりません。

('A`)ヒロシです…

833 :デフォルトの名無しさん:04/09/14 19:59:37
>>832
もうそのネタ飽きた

834 :デフォルトの名無しさん:04/09/14 20:34:55
MCIでのミュートはボリュームを下げろ。

835 :デフォルトの名無しさん:04/09/14 20:58:24
>>825
CreateThread でつくったスレッドで使っちゃいけないのは、
Cライブラリ関数の中でも、
内部的にグローバル変数を使用している一部だけ。
sprintf は問題なし。new や try〜catch も使っていい。
それに、たとえ問題になる関数を使っても >>830 の通りなので、
常駐アプリでもない限り構わないんじゃない?

836 :デフォルトの名無しさん:04/09/14 21:07:46
>>835
スレッド毎に独立した errno を TLS に割り当てる必要があるから、
実質ほぼ全ての C ライブラリ関数がダメだったと思う。
もちろん処理系次第だけど。

837 :835:04/09/14 22:22:05
>>836
errno か、確かに言われてみれば…。
なるほど、835は取り下げます。
でもさすがに try〜catch は問題ないよね?

838 :デフォルトの名無しさん:04/09/14 22:41:24
ダメだって書いてあるんだからtry catchは使うべきではないだろ
__try __exept __finallyで代用するのがいいんじゃないの?

839 :760:04/09/14 22:49:13
>>760です。
C+ウィンアプリを、static、グローバル変数を使わず、
手続き型っぽく作りたいと言っていたものです。
以下のプログラムはどうでしょうか。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1086258254&res=7

>>760のでは、>>779-781で、送られてこないメッセージがある等の
ご指摘を受けたのですが、そういう致命的なエラーはあるでしょうか。

>>783>>790のコールバック先を切り替える方法では
うまく出来なく、新しい方法を考えていました。

840 :デフォルトの名無しさん:04/09/14 22:49:56
OLE DragDropで、アプリケーション内でのドロップと
外部アプリケーションへのドロップで動作を変えたいのですが
この場合って適当なクリップボードフォーマットをでっち上げるのと、
フラグかなんかで場合分けするの、どっちがいいんでしょうか?

841 :825:04/09/15 01:37:28
皆さんレスありがとうございます。

最初は少しぐらいリークしてもいいかと思ったんですが、呼び出し毎に
新スレッド生成・終了して蓄積されていくのでちゃんと対応することにしました。
スレッド生成元を変えてもらうのは不可能なのが困りものです。

一番変更が少なそうに思いますので、sprintf系については教えていただいた
Shlwapiのを使うことにしてみます。MSDNをちょっと読んだ感じではサービスでも
使えそうですし。

842 :825:04/09/15 01:46:59
>>841 のつづきです。

__try, __except の使用はOKなのでしょうか?
libcmt.libとかをつけないとリンク時にエラーが出るので、もしかしたら
Cランタイムの一部なのかと不安だったのですが、機能的にはふつうの
ランタイム関数とは趣が異なるので大丈夫なんでしょうか。

C++のtry, catchはlibcmt.libなしでもリンクは通ったのですが、
なんか不安なのでnewやSTLも合わせて使用をやめておきます。

843 :デフォルトの名無しさん:04/09/15 03:53:21
>839 いろいろ考えるなあきみは (;´Д`) 発想の方向はちょっと間違えているけど、
きみのような人は嫌いじゃない。

たとえば WM_PAINT の時、DefWindowProc で何をやられているか、怖いな。
そのコードだと、WM_PAINT も一度 DefWindowProc を抜けた後に
きみ自身の WM_PAINT 処理を行う事になるよね。
しかし、1度の WM_PAINT で 2 度以上 BeginPaint() をしてはいけない。
さもないと思うようには描画されない。もれは経験済みだw
# いや、DefWindowProc が何をやっているか知らないから、何ともいえないけど。

そもそも、きみのコードはすでに手続き型ではなく
普通の (でも下手に喘いでいる分、滑稽な) イベントドリブンに見える。
そんなきみに漏れが一番すすめるソリューションは、大まかにこんな感じのなんだ。

LRESULT CALLBACK
WndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
 if (g_scene == BATTLE) HandleBattle(hwnd, msg, wParam, lParam);
 else if (g_scene == SELECT_ITEM) SelectItem(hwnd, msg, wParam, lParam);

 return DefWindowProc(hwnd, msg, wParam, lParam);
}

HandleBattle や SelectItem の中身は >839 のコードからメッセージポンプを外したもの。
あ、HandleBattle から SelectItem を呼び出すんじゃないよ。
代わりに g_scene = SELECT_ITEM; と書く。

844 :デフォルトの名無しさん:04/09/15 08:11:16
自前のウインドウクラスライブラリで、ダイアログを実装しようとしているのですがうまくいきません。
下のようにすると、ダイアログを閉じたときに、
なぜか親ウインドウが他の関係ないウインドウ(エクスプローラから起動したらエクスプローラウインドウの下、VisualStudioでデバッグするとVisualStudioウインドウの下)に隠れてしまいます。
TopMost属性をもたせてから解除する方法を試しましたが、一瞬ちらつきます。APIのDialogBoxより不自然です。
どうすればいいのでしょうか。


int WND::ShowDialog()
{
EnableWindow(m_hParent,false);
bool m_EndDialog=true;

MSG msg;
while (GetMessage(&msg, NULL, 0, 0) && m_EndDialog == true)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
Hide();
EnableWindow(m_hParent,true);
return DialogResult;
}

845 :760:04/09/15 08:52:46
>>840
ありがとうございます。

>WM_PAINT の時、DefWindowProc で何をやられているか、怖いな。
>1度の WM_PAINT で 2 度以上 BeginPaint() をしてはいけない。
そういえば。逆に、WM_PAINTが来た時、BeginPaint〜EndPaint、
DefWindowProc、両方ともを行なわなかった時も、おかしくなりますよね。

では、以下のはどうでしょうか。
while((getMsgRtn = GetMessage(&msg, NULL, 0, 0)) > 0)
{
  TranslateMessage(&msg);

  if(msg.message == WM_KEYDOWN && ...)
  {
    *item = selectItem;
    break;
  } else if(msg.message == WM_PAINT) {
    ・・・
  } else
    DispatchMessage(&msg);
}

>漏れが一番すすめるソリューションは、大まかにこんな感じのなんだ。
こういうタイプのも考えていました。
ただ、これだと、SelectItemに行くとき、HandleBattleのキャラデータが、
ローカルに置いておくと当然分からないから、グローバルでないといけません。

HandleBattleにキャラデータがあり、SelectItemへ行く時、スタックに積んで、
戻り値(参照渡し)でどのアイテムか戻ってくる形にしたいのです。

846 :760:04/09/15 09:16:08
又は、>>845のDispatchMessageに行かないのがダメなら、
以下のならどうでしょう。DispatchMessage(WndProc)に変数(useMessage)を
渡せないから、g_useMessageとグローバル変数を使ってしまいますが。

while((getMsgRtn = GetMessage(&msg, NULL, 0, 0)) > 0)
{
  g_useMessage = 0; //まだゲームルーチンでメッセージを使っていない
  TranslateMessage(&msg);

  if(msg.message == WM_KEYDOWN && ...) {
    g_useMessage = WM_KEYDOWN;
    *item = selectItem;
    break;
  } else if(msg.message == WM_PAINT) {
    g_useMessage = WM_PAINT;
    ・・・ }

  DispatchMessage(&msg);
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
  if(!g_useMessage) return 0;

  switch(msg)
  {
    case WM_DESTROY: PostQuitMessage(0); break;
    default: return(DefWindowProc(hWnd, msg, wParam, lParam));
  }
  return (0L);
}

847 :デフォルトの名無しさん:04/09/15 09:26:52
>>846
結局普通のWndProcの使い方に近づいていってるなw
なんかゲームのデータ保持しときたいならWindowに持たせときゃいいじゃないか。
邪推だけど、意地でもWindosAPIなんかわかってやるもんかって感じがする。

848 :デフォルトの名無しさん:04/09/15 09:54:12
最初から読んでないけど、シーン管理クラス作ってループ回すのとどう違うんですか。

849 :760:04/09/15 10:19:29
>>847
>結局普通のWndProcの使い方に近づいていってるなw
始めのやり方から妥協してきているんですかね。

>ゲームのデータ保持しときたいならWindowに持たせときゃいいじゃないか。
>>781のやり方に近いですかね。
ただ、Cのコンソールプログラムを長くやってきたせいか、変数のスコープとかに
すごくこだわっていて、使う事がない場所からは、見えないようにしたいのです。

>意地でもWindosAPIなんかわかってやるもんかって感じがする。
確かにそうですね。必要最低限なもの以外(メッセージの部分など)は、
長くやってきたコンソールっぽく書きたいというのがありました。

ただ、逆に言うと、猫、創作プログラミングの町などの一般的な書き方は、
C言語(標準C)のセオリーから大きく離れすぎていると思います。

850 :デフォルトの名無しさん:04/09/15 10:27:23
>離れすぎていると思います。

どうしてそう思うか説明できますか?
それが出来ないのなら多分あなたの感覚の方がおかしいです。

851 :760:04/09/15 10:34:04
>>848
C++は殆ど分かりません。ローベルさんの所で少しかじったぐらいです。
ただ、ググってソースを見てみた所、何となくその意味は分かりました。

うまく言えませんが、自分がコンソール風で行こうとしているのに対し、
猫とかの一般の書き方をしつつ、スコープ等も考慮するという感じでしょうか。

852 :760:04/09/15 10:44:50
>>850
セオリーと大きく書きすぎたほどの事ではないかも知れませんが、
やはりstatic、グローバル変数です。標準Cでは使う事が殆ど無いですから。
一般の書き方だと、使わないと組めないと思いました。
>>845のやり方が大丈夫なら、ひとつも使わずに組めると思います。

853 :デフォルトの名無しさん:04/09/15 10:51:36
わからんな。
いや、わかるか。
こんなことする暇がないからC++ができたんだな。
納得したぞ。

854 :デフォルトの名無しさん:04/09/15 10:56:47
>>852
グローバル・スタティック変数なんて、
Windowsのプログラム書いてても滅多に使わないけどな・・・

普通は構造体を確保して、
そのポインタをSetWindowLongでウィンドウに関連付けるとかじゃね?

>猫、創作プログラミングの町などの一般的な書き方
サンプルはわかりやすくするために、
これらの手順を省いてるだけだと思われ

855 :デフォルトの名無しさん:04/09/15 10:59:19
>>854
C++ならそうかもしれんが、
Cだと('A`)マンドクセからけっこう使っちゃいそう。
っていうか実際使う。

856 :760:04/09/15 11:05:33
>>845のやり方が正しいかまだ分かりませんが、何かためしに作ってみます。
そんな致命的なエラーが出るとは思わないので。

>>853
WinSDKプログラムは、C++で作る事を前提に作られているんですかね。

>>854
>サンプルはわかりやすくするために、
>これらの手順を省いてるだけだと思われ
それもあると思います。

>>855
その通りです。

857 :デフォルトの名無しさん:04/09/15 11:10:22
エクスプローラのReBarの枠やフォルダツリービューの枠のように
WS_EX_CLIENTEDGEよりもずっと薄いエッジを持ったウインドウを作るにはどうすればいいのですか

858 :844:04/09/15 11:36:04
サムワンヘルプミー

859 :デフォルトの名無しさん:04/09/15 11:37:12
ノーバディヘルプユー

860 :デフォルトの名無しさん:04/09/15 11:53:13
普通にDialogBox使えよ

861 :デフォルトの名無しさん:04/09/15 12:49:38
>>860
リソースエディタで作ったウインドウではないので、DialogBoxでは駄目なんです。
.NETのクラスライブラリのような感じなんです。

862 :デフォルトの名無しさん:04/09/15 12:59:22
Hide()は何やってるの?

863 :デフォルトの名無しさん:04/09/15 12:59:57
>>857
ナントカSTYLE_FLAT

864 :デフォルトの名無しさん:04/09/15 13:08:11
>>862
ShowWindow(m_hwnd,SW_HIDE);
こうです。m_hwndはダイアログウインドウのハンドルです。

865 :デフォルトの名無しさん:04/09/15 13:16:02
>>861
だったらDialogBoxIndirect使え。
.NETのクラスライブラリみたいなやつとかどうでもいいことは言うくせに
肝心の関連しそうな周辺コードを一切出さないのは何のつもりだ?

866 :デフォルトの名無しさん:04/09/15 13:36:59
不謹慎かもしれませんが、教えてください。

もし仮に年号が新たに変わった場合、
GetDateFormatでその新しい年号を取得するためには、
どのようにすれば良いでしょうか?

867 :デフォルトの名無しさん:04/09/15 13:43:23
>>866
WindowsUpdateするしか無いんじゃないの?

868 :デフォルトの名無しさん:04/09/15 13:55:29
>>844
Hide() するまえに親を Enable するとどうなります?

869 :デフォルトの名無しさん:04/09/15 14:01:00
>>864
SetWindowPos(m_hwnd, NULL, 0, 0, 0, 0,
SWP_HIDEWINDOW | SWP_NOACTIVATE |
SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER);

870 :デフォルトの名無しさん:04/09/15 14:06:29
>>865
すみません本当にすみません
>>868
ご助言ありがとうございました
>>869
そうやるとできました。本当にどうもありがとうございました。

871 : ◆FIcNi4f8js :04/09/15 14:09:04
>>859
三人称単数現在のsは?

872 :デフォルトの名無しさん:04/09/15 15:23:12
すいません、
CreateWindowExでWS_EX_CLIENTEDGE付きのスタティックコントロールを作って
みたのですが、この境界線の幅というのは、どうやって変えれば良いのでしょう
か?
具体的には、もっと細い境界線にしたいのですが、宜しくお願い致します。

873 :デフォルトの名無しさん:04/09/15 16:12:33
回答を無視して繰り返し質問する奴には教えない

874 :デフォルトの名無しさん:04/09/15 16:38:24
>>871
その言い方、あなたは抄録か忠一ですね

875 :872:04/09/15 16:53:40
>>873
数スレ前まで遡ってみましたが、回答らしきものが見当たらなかったので質問
したのですが…


876 :デフォルトの名無しさん:04/09/15 18:36:14
>>875
>>863のことじゃない?


877 :デフォルトの名無しさん:04/09/15 19:06:26
マウスの移動範囲を制限できるAPIがあったと思うのですが
名前が思い出せません。どなたかご存知内でしょうか?

878 :デフォルトの名無しさん:04/09/15 19:13:51
ClipCursor

879 :デフォルトの名無しさん:04/09/15 19:47:26
>>877
http://www.google.co.jp/search?q=%E3%83%9E%E3%82%A6%E3%82%B9+%E7%A7%BB%E5%8B%95%E7%AF%84%E5%9B%B2+%E5%88%B6%E9%99%90&hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&sourceid=mozilla-search

880 :デフォルトの名無しさん:04/09/15 21:56:02
内容的には結局C#じゃなくてWinAPIなので、ここで質問させてもらいますね。

C#から任意のプログラムを最小化したりタスクバーから消したいのですが、
SendMessage(hWnd, Msg, wParam, lParam);をC#で書き直して
こんな感じでmyProcの内容を最小化させることが出来ました。
WindowsAPI.SendMessage(myProc.MainWindowHandle, WindowsAPI.WM_SYSCOMMAND,WindowsAPI.SC_MINIMIZE, -1);

myProcのアイコンをタスクバーからも消したいんですが、そのための関数はどんなものがありますか?
CreateWindowExというのを見つけましたが、これはWindowを作るときのものだから、僕の目的では使えませんよね。

881 :デフォルトの名無しさん:04/09/15 22:01:01
TerminateProcess

882 :872:04/09/15 22:12:17
>>876
ええっ

ぐぐることも出来無いようなレスが回答だったんですか…

本当に分からなくて困ってるんですが、もうすこしヒントを頂けませんか?

883 :デフォルトの名無しさん:04/09/15 22:19:26
VC++三日目の初心者です、APIとMFCの違いも感覚でしか理解していません
いくらでもたたいてくれて結構です
画像を加工して保存がしたいのですが
HDCで保持するのとDIBデータを扱う2つがあるのですが
この2つについての、違いをご教授願いたいのです。


884 :デフォルトの名無しさん:04/09/15 22:26:04
>>883
DIB も DDB も HDC で管理する点では同じだ。
読み込みは LoadImage でできるが、書き込みは自分で関数書くことになる。
詳しく説明しようとすると、ここにまんまソース晒すことになるんでやめとくが、
キーワード出しとくから、がんばってみな。

BMP形式のファイルは先頭から
BITMAPFILEHEADER 構造体
BITMAPINFOHEADER 構造体
色値の配列(型は色数によって異なる)
という形式になっている。

ファイルの取り扱いはAPIならCreateFile、MFCならSerializeかCFileだ。

885 :デフォルトの名無しさん:04/09/15 22:44:22
>>880を要約すると

CreateWindowExにWS_EX_TOOLWINDOWを渡すのは、
外部から操作するのには使えなさそうだから、別の方法を教えてください

ということです。お願いします。

886 :デフォルトの名無しさん:04/09/15 22:48:14
HideWindow?

887 :デフォルトの名無しさん:04/09/15 23:17:10
>>885
SetWindowLongで出来るのかどうかオレにはわからない。
あとはアレだな、最小化アイコン専用のウィンドウを
つくって、本物ウィンドウと連携させるとか。

888 :デフォルトの名無しさん:04/09/15 23:52:15
プロセスを終了することなく親ウィンドウを閉じて作り直すこのって
どうゆう手順になりますか?

889 :デフォルトの名無しさん:04/09/15 23:55:54
>>888
あなたの定義で、親ウインドウとは?

890 :デフォルトの名無しさん:04/09/15 23:58:36
>>888
そういうことが出来る造りにしておく。
他プロセスのウィンドウの話なら、基本的に無理。

891 :デフォルトの名無しさん:04/09/16 00:02:45
>>889
最初に開いたウィンドウのことです。

>>890
自プロセスでやるならどういった準備が必要になるのでしょうか?

892 :デフォルトの名無しさん:04/09/16 00:08:15
>>891
つまり、あなたのアプリではあらゆるウインドウが全て
WM_DESTROY に対して PostQuitMessage を発行するわけか

893 :デフォルトの名無しさん:04/09/16 02:01:13
>>882
Googleだけが調べる方法じゃないでしょ。

WS_EX_CLIENTEDGEが定義されているヘッダファイルから、なんとかFLATを
GREPするとか。

894 :デフォルトの名無しさん:04/09/16 02:33:22
アプリの多重起動を防ぐ為にCreateMutexするところまではわかったんですが
Mutexの名前をシステム内で一意にする方法はありますか?

適当な名前を引数にすると他のアプリと衝突しそうな気がするんですが・・

895 :デフォルトの名無しさん:04/09/16 02:49:01
GUID使うとかは?

896 :デフォルトの名無しさん:04/09/16 02:59:41
>>895
みんながそうしているならそれでいいんだがね

897 :デフォルトの名無しさん:04/09/16 07:18:11
exeへのフルパス

898 :デフォルトの名無しさん:04/09/16 08:35:07
リストビューについてなんですが、
もしかして隠しカラムを設定できますか?
MSDN見ても書いてないから無理なのかなぁ

LVCOLUMNのcxに0設定して擬似的にするしかありませんね?

899 :デフォルトの名無しさん:04/09/16 08:42:06
むかつく

900 :デフォルトの名無しさん:04/09/16 08:44:35
>>897
>>896

901 :デフォルトの名無しさん:04/09/16 09:01:36
空から星が落ちてきて直撃しそうで怖いんですがどうしましょう?

っていう質問と似てるな。

902 :デフォルトの名無しさん:04/09/16 09:05:46
゚・(つд`)・゚・

903 :デフォルトの名無しさん:04/09/16 09:20:21
とりあえず日本語(全角文字)使っとけ、くそども。
「ぬるぽ....」でもなんでもOK。バックスラッシュ以外はすべてOK。
Windowsは内部的には文字列リソースをUnicodeで持つので、
海外のアプリと衝突することはかなり回避できるはずだ。

904 :デフォルトの名無しさん:04/09/16 09:28:51
>Windowsは内部的には文字列リソースをUnicodeで持つので、

これと

>海外のアプリと衝突することはかなり回避できるはずだ。

これは何の関係があるの?


905 :デフォルトの名無しさん:04/09/16 09:29:46
というかほんとに適当に16文字くらい使えば衝突しないと思うけど。
何を指定したって確率の問題じゃないですかー。

906 :デフォルトの名無しさん:04/09/16 09:32:28
完全に回避することができない。たんなる確率の問題だから、星の直撃の心配
と同じ。偶然の一致を避けるような工夫をできるだけするしかない。ながーい文字列
とか、exe のフルパスもかなりいい感じだと思うけどな

907 :デフォルトの名無しさん:04/09/16 09:43:18
でも、exeのフルパスだとコピーされたら多重起動ができる。
抜け道が簡単に出来ちゃうからダメだと思うよ。
大型アプリなら問題ないかもしれないけど…

908 :デフォルトの名無しさん:04/09/16 09:48:11
>>907
セキュリティーに関連するような大事なハンドルを
デフォルトSID(=NULL)で作成する時点で駄目駄目でしょ。
親プロセスが全ての重要ハンドルを作成し、
明確に子プロセス以外アクセスできないようにするのが普通だと思う。

909 :デフォルトの名無しさん:04/09/16 10:09:09
>>908
Mutex作る時に使うオブジェクトの名前が違う事になるから、
違うハンドルを作ってしまうって事では?
これについてはセキュリティ関係ないのでは…?

910 :デフォルトの名無しさん:04/09/16 10:19:20
>でも、exeのフルパスだとコピーされたら多重起動ができる。

そうだね。VBのだとそういう振る舞いをするんだそうだ。

lihvwdghwelkihvwrhweruhakjabhojwejjw

こういう文字列を使った場合、偶然に一致するアプリがあるかも、って心配は
まぁ、したけりゃしてもいいけどな。

911 :デフォルトの名無しさん:04/09/16 11:13:42
>>896 >>900
こっちがユニークなら、皆どうだろうと関係ないんじゃない?

912 :デフォルトの名無しさん:04/09/16 11:16:02
ユニークかどうかはほかが同じことしてないかどうかに関係する

913 :デフォルトの名無しさん:04/09/16 12:23:41
悪意を持って多重起動の判断を混乱させようとしているのでない限り
「GUIDに見える(けどuuidgenで生成したものではない)文字列」とか
「他のexeのフルパスに見える文字列」
をわざわざ使うとは思えないんだけど

914 :デフォルトの名無しさん:04/09/16 13:02:06
悪意か善意かは問題ではない。ある演算なり、一定の規則(フルパスやGUIDもこれに入る)
を採用して文字列を取得した場合と、まったくでたらめな文字列の場合、一致する確率が
どっちが低いか、を考えるべき。exe のフルパスの場合は、異なるアプリ間で偶然一致する
のは考えづらいけど、他のディレクトリにコピーされた同じexeが二重起動される。これは
かなり現実的な問題ではある。

915 :デフォルトの名無しさん:04/09/16 13:06:38
そもそもなんで多重起動を抑止したいのかって理由にもよるだろ。

916 :デフォルトの名無しさん:04/09/16 13:08:15
二重起動を抑止したい理由と、名前付き Mutex の名前がユニークかどうかは関係ない

917 :デフォルトの名無しさん:04/09/16 13:09:28
>>892
PostQuitMessageをスローしないだけで済むのですね(^^;
どうもでした。

918 :デフォルトの名無しさん:04/09/16 14:25:19
>>914
本当にまったくでたらめじゃ確かに一致しない確率は最高だろうけど
自分の別インスタンスとも一致しないから多重起動の判定に使えない。
最低でも多重起動のチェックができる程度の何らかの規則は
導入しなくてはならない。問題はその規則が(他の規則を採用している
かもしれない文字列も含めて)偶然一致する可能性をどれだけ
減らせるか。

919 :デフォルトの名無しさん:04/09/16 14:39:55
>自分の別インスタンスとも一致しないから多重起動の判定に使えない。

何いってるの?

920 :デフォルトの名無しさん:04/09/16 14:41:21
>>918

すこしは頭使えよ

921 :デフォルトの名無しさん:04/09/16 14:42:24
>>918はGUIDを毎回生成するとでも勘違いしてるんじゃないのか

922 :922:04/09/16 15:04:56
IHTMLDocument等のHTMLに関わる
インターフェイスを使用しています。
現段階では、ActiveXのWebBrowserから
IHTMLDocumentを取得しているのですが、
ブラウザを介さず、
URLまたはHTMLテキストから
直接IHTMLDocumentを
取得したいのですが、
そのあたりの方法があれば教えて下さい。

923 :デフォルトの名無しさん:04/09/16 15:08:44
簡単なのは WinInet のAPI使うのだな。ググルといっぱいサンプルが見つかるはず。

924 :デフォルトの名無しさん:04/09/16 15:09:35
>直接IHTMLDocumentを取得したいのですが、

あっ、勘違い、すまん

925 :デフォルトの名無しさん:04/09/16 15:13:23
SetTimerで、引数のID所で0、又は既に使われているIDを指定すると、
戻り値で空いているIDが返ってきて、それを使うという事を出来るのでしょうか。

926 :デフォルトの名無しさん:04/09/16 15:15:58
どこをどう読めばそうゆう解釈が

927 :925:04/09/16 15:20:07
>>926
ありがとうございます。やっぱできないのですね。
その方法が使えれば、IDをEnumなどに定義しておかなくても、
ちょこっと使いたいときに楽かなと思いまして。

928 :デフォルトの名無しさん:04/09/16 16:18:12
>>893
うそ教えるな。問題のスタイルはCCS_*だから、標準的なスタイルには用意されてなくて
自前で描画するしかない。

929 :デフォルトの名無しさん:04/09/16 16:34:31
>>922
mfc スレでちょっと前に (レス720前後) 同じ質問にと答えた記憶あるんだけど、
あれじゃあうまくいかなかった?


930 :デフォルトの名無しさん:04/09/16 19:26:24
ローカルにあるプロセス間で通信をするのに今はソケットを使っているのですが
帯域がボトルネックになっているので改善方法を探しています。

名前つきパイプやメモリマップドファイルを使うことでパフォーマンスの向上は
のぞめますか?ストリームのようにデータを転送するのでメモリマップドファイル
にする場合は何かの方法で同期を取る必要があると思います。

931 :デフォルトの名無しさん:04/09/16 19:39:57
そのままにしておいた方が、ポテンシャル高くて後々おいしいような。

932 :デフォルトの名無しさん:04/09/16 19:49:54
ボトルネックになってるんだったらしゃーないような。
でも、プロセス巻通信がそんなに頻繁に起こるならいっそプロセス統合した方がよくないか?

933 :デフォルトの名無しさん:04/09/16 21:58:05
.NET Framework 1.1を使うアプリを公開したいのですが、
.NETのCLRがインストールされているか調べるにはどうしたらいいですか?

934 :デフォルトの名無しさん:04/09/16 22:10:45
>>933
漏れは VS .Net のウィザードで作ったインストーラプロジェクトの
インストーラでチェックしてるけど、API でチェックしたいってこと?

935 :933:04/09/16 22:51:59
>>934
そうです。

936 :デフォルトの名無しさん:04/09/16 23:42:33
レジストリを見るんじゃないの

937 :デフォルトの名無しさん:04/09/17 13:01:15
VC++6.0を使っています。
iphlpapi.hをインクルードしたいのですが
このファイルが無いようです。
どこから拾ってくればよいでしょうか?

938 :デフォルトの名無しさん:04/09/17 13:07:23
>>937
>>2

939 :デフォルトの名無しさん:04/09/17 16:20:34
>>934
レジストリ見るプログラムは何で作るの?
CLRに対応してるか確認するプログラムは
CLRを使う.NETじゃ書けないってことなのかな.
.NETって面倒だね.

940 :デフォルトの名無しさん:04/09/17 16:40:17
…( ゚Д゚)ポカーン

941 :デフォルトの名無しさん:04/09/17 17:18:58
駐在型ソフトだと、タスクバーから表示を消して、タスクトレイにアイコンを表示していますよね?
これをするにはどうしたら良いですか?

942 :デフォルトの名無しさん:04/09/17 17:24:33
駐在型?

943 :デフォルトの名無しさん:04/09/17 17:26:32
ウインドウを消してタスクトレイにアイコンを登録する。

944 :デフォルトの名無しさん:04/09/17 19:08:21
そのウィンドウの消し方教えてくださいよー ヽ(`Д´)ノ ウワワーン

945 :デフォルトの名無しさん:04/09/17 19:09:38
DestroyWindow

946 :デフォルトの名無しさん:04/09/17 19:17:25
ShowWindow

947 :デフォルトの名無しさん:04/09/17 20:39:07
ウインドウ非表示の方法ぐらい
知っててくださいよー ヽ(`Д´)ノ ウワワーン

948 :デフォルトの名無しさん:04/09/17 21:10:47
スタートボタンで終了したり、ShowWindow でウィンドウを消したりさせるマイクロソフトが悪い

949 :デフォルトの名無しさん:04/09/17 21:18:22
馬鹿は何でもMSのせいにするからなぁ w

950 :デフォルトの名無しさん:04/09/17 21:25:11
なんでもすぐ人のせいにするのは無能の典型

951 :デフォルトの名無しさん:04/09/17 21:43:15
>>950
勧告陣に言ってくださいw
次スレ〜たてて

952 :テンプレ1:04/09/18 04:00:01
- 過去スレ
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
(★は「いやー ごめんなさい。」に巻き込まれた模様

953 :デフォルトの名無しさん:04/09/18 11:31:50
難民のあれか・・・。
どこかにミラーが残ってないかな?

954 :デフォルトの名無しさん:04/09/18 14:14:10
part15のログなら1000まで持ってるが

955 :デフォルトの名無しさん:04/09/18 14:25:23
part16のログなら1000まで持ってるが

956 :デフォルトの名無しさん:04/09/18 14:28:06
( ´_ゝ`)フーン

957 :デフォルトの名無しさん:04/09/18 14:32:39
part22のログなら1002まで持ってるが

958 :デフォルトの名無しさん:04/09/18 14:38:02
ウィンドウのどの位置にマウスポインタがあるか調べる方法を教えてください。
調べると、GetCursorPosをして、ClientToScreenで変換するとあったのですが、
ウィンドウの位置でなく、ディスプレイの位置のなのか、正しく調べられません。


959 :デフォルトの名無しさん:04/09/18 14:51:08
>>958
そこはClientToScreenじゃなくてScreenToClientじゃないか。

960 :958:04/09/18 14:55:48
>>959
ホントだ。逆の方を使っていました。
ありがとうございました。

961 :デフォルトの名無しさん:04/09/18 15:07:52
自分がつくったステータスバー(CreateStatusBarで作成)は、マウスを
うえにのせてもなにもメッセージをうけとったり、送信したりしないのに、
そのへんのアプリケーションのステータスバーはwm_nchittestを送信した
あとにいろいろやっています。それもどのアプリも大体共通した動作。
(メッセージのやりとりはspy++で見ました)

自分がつくったステータスバーにおいてもこれを実現するためには何を
すればいいのでしょうか?

962 :933:04/09/18 16:12:05
933です。
%windir%\system32\mscoree.dllのバージョンが1.1以上だったら
.NET Framework1.1がインストールされているされていると考えてよいのでしょうか。
Win32APIな話題からそれていますが、ほかの環境ではどうなのか知りたいのでお願いします。(当方WinXPSP2)

963 :デフォルトの名無しさん:04/09/18 16:21:39
>>961
サブクラス化しなさいよ

964 :デフォルトの名無しさん:04/09/18 16:43:36
パート15と16持ってる人いる?
うpってもらえれば、>>1のテンプレに追加して書いたり

965 :デフォルトの名無しさん:04/09/18 16:46:23
そのファイルだけコピーされてたらどうすんの?

966 :デフォルトの名無しさん:04/09/18 16:47:19
>>964
両方あるけど、Janeのログだから手を加えないとだめだよね?

967 :デフォルトの名無しさん:04/09/18 16:50:52
>>964
うぷろだにうぷっただけじゃすぐ消えちゃうよ

968 :964:04/09/18 16:54:10
2ch系のどっかのサイトが、基本的に消さないとかいう方針のうpロダがあったんだけど…
たしか、FLASH系サイトをまとめてるやつ

>>966
HTML化したほうがよさげ。
ttp://tatsu01.at.infoseek.co.jp/

969 :デフォルトの名無しさん:04/09/18 17:05:08
ほい。
ttp://up.isp.2ch.net/up/87d091951909.zip

当然すぐ繋がらなくなるから、誰か転載よろしく。

970 :964:04/09/18 17:42:02
15
ttp://saba.haiiro.info/uploader/file/0587.html
16
ttp://saba.haiiro.info/uploader/file/0588.html

使おうと思ってた、with2chはお休み中だった(つд`)

971 :ほんたま:04/09/18 19:33:36
WideCharToMultiByteを使って、unicodeをsift-jisに変えると、漢字などはちゃんと変換されるんですが、半角英数を変換すると文字化けするんですが…?
みなみなさまがた〜教えてくだされ〜♪

972 :デフォルトの名無しさん:04/09/18 19:39:20
沢村の新コテか

973 :デフォルトの名無しさん:04/09/18 19:50:31
文字化けするんですが…?

ってのはどこが質問なのかな
まあ、普通はそんなことにならないので答えようも無いが。

974 :ろろ:04/09/18 20:34:31
>>971さん
WideCharToMultiByte のオプションがまずいのではないかな?
どんなふうに呼び出しているの?

975 :デフォルトの名無しさん:04/09/19 01:28:31
プッシュボタンコントロールの外観を、
テキストではなくBMPにすることはできますでしょうか?

976 :デフォルトの名無しさん:04/09/19 01:59:23
出来ます。

977 :デフォルトの名無しさん:04/09/19 02:05:03
>>976
ありがとうございました。頑張ってみます。

978 :ほんたま:04/09/19 02:11:11
>>975
おみゃ〜よ、オナードローボタンにすればいいよ。
つくりかたは「猫でも…」に書いてあるよ。自分じわかる?
>>974
WideCharToMultiByte(CP_ACP,0,(unsigned short *)pctext,tempsize2,temptext,tpsize2-1,NULL,NULL);
というふうに呼び出しています。
pctextとtemptextはchar型の文字列です。
まずファイルのunicode文字をpctextに1字1字バイナリコピーします。
半角英数の「OK」なら「4F 00 6B 00」というのがその値です。
この時点で、pctextの内容を画面に表示してみると、unicode文字なのにすでに「ok」と表示されます。
でもこれを上のapiを使ってsift-jisに変換してからtemptextを表示すると、何故か「?」と文字化けして表示されるのです。
漢字や半角カタカナを変換する場合はまったく問題ないのですが…?

979 :デフォルトの名無しさん:04/09/19 02:18:52
S-JISのコードページはCP_ACP?

980 :デフォルトの名無しさん:04/09/19 02:18:55
そうですか。

981 :デフォルトの名無しさん:04/09/19 02:38:11
自己解決しました。

982 :ほんたま:04/09/19 02:38:58
「ok大下容子」という文字列の場合、
変換前のunicode文字列を表示すると「ok'Y・Nケ[P[」になり、
変換後のsift-jisを表示すると「?大下容子」になります。
つまり半角英数は変換前のほうがちゃんと表示され、漢字は変換後にちゃんと表示されます…?
みなみなさまがた〜教えて〜♪

983 :デフォルトの名無しさん:04/09/19 02:53:41
だから、普通はそんなことにならないから。
というわけで、終了

984 :デフォルトの名無しさん:04/09/19 02:55:56
>>978
tmpsize2, tpsize2 とかの実際の値はどーなってる?
WideCharToMutiByte() の返り値は?

日本語 Windows なら CP_ACP で問題はないです。


985 :ほんたま:04/09/19 02:59:54
勘違いでした。
エヘ♥

986 :デフォルトの名無しさん:04/09/19 03:04:15
他のアプリのボタンを押したいのですが
ツールバーの中にあるボタンのウィンドウハンドルはどうやったら取得できますか?

987 :デフォルトの名無しさん:04/09/19 03:05:05
wchar_t unitext[] = L"ok大下容子";
std::vector<char> tmp;
tmp.resize(::WideCharToMultiByte(CP_ACP, 0, unitext, -1, NULL, 0, NULL, NULL));
::WideCharToMultiByte(CP_ACP, 0, unitext, -1, &tmp[0], tmp.size(), NULL, NULL);

もんだいねぇけど。

988 :デフォルトの名無しさん:04/09/19 03:05:35
>>986
ありません

989 :デフォルトの名無しさん:04/09/19 03:09:49
ないですか
座標で押すのかな
位置が変わったりしないんだろうか


990 :デフォルトの名無しさん:04/09/19 03:13:11
あります

991 :デフォルトの名無しさん:04/09/19 03:19:08
>>989
座標からアイテムの情報が分かるから、
それを拾ってツールバーの親にメッセージを投げてやればいい。

992 :デフォルトの名無しさん:04/09/19 03:23:44
thx
そのやりかたであたってみます


993 :デフォルトの名無しさん:04/09/19 03:29:55
どうやってテキストを表示していますか?UTF-16LEだと最初の1オクテットには
oとkが含まれているので0x00を無視するような方法で出力してればokって文字列が
最初に見える。
そうじゃないのに「ok'Y・Nケ[P[」っていうのが見えるならファイル読み込みの部分
で「4F 00 6B 00」を「4F 6B」にしちゃってる。

994 :デフォルトの名無しさん:04/09/19 03:37:32
wifstreamを使ってないとか
ifstreamでバイナリモードにせずに読んでるとか
そんなとこじゃないの


995 :デフォルトの名無しさん:04/09/19 03:46:45
しかし沢村は相変わらずのズレっぷりだな

996 :デフォルトの名無しさん:04/09/19 04:00:35
次スレまだ〜?

997 :デフォルトの名無しさん:04/09/19 04:02:04
まだ

998 :デフォルトの名無しさん:04/09/19 04:02:20
埋めちゃうよ?

999 :デフォルトの名無しさん:04/09/19 04:09:06
だめ

1000 :デフォルトの名無しさん:04/09/19 04:09:35
1000

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

251 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)