スレ立てるまでもない、 Win32 Application *Programmer* Interface についての質問はこちらへどうぞ。 やさしいお兄さんたちが答えてくれるかも。 でも、質問する前に検索ぐらいしる!!
過去スレ7の894-参照
ネタスレかw
>>6 Programmerになるべき根拠がぜんぜん見出せなかったんだが。
>>7 の言うとおりネタスレなのか?
だったらそっち使えばいいのに。
次スレ無いと思った奴がここ立てちゃったんだろ。
で、どこが本家なの?
私はまじめにスレたてたつもりです。 何がどうなっているとネタスレなんですか? 誰か特定の人物がやっていることで IP抜いて別人と判明したらネタスレなんですか? だったら、今すぐ削除依頼出してきます。
すでに次スレとして機能していた
>>13 のスレがあるのにどうしてわざわざ立てるんですか?
>>16 わかりました
>>13 に対して重複スレだったんですね。
削除依頼を出す場合の理由として取り上げることにします。
ですが、今しばらく他の方のご意見を拝聴します。
ここはそんなに圧縮厳しくないんだから削除依頼までしなくても
次スレとして再利用すれば?
もちろんわざわざ保守まですることはない。
>>13 を使い終わった
ときに落ちてたら立て直せばすむこと。
わざわざ削除依頼するほどでもないだろ。 ほっとけ。
猫でもわかるプログラミングって役に立つの? なんだか作者のオナーニみたいに見えるんだけどさ。
>>20 何も知らない人の手がかりにはなるから、初心者を誘導して説明を省くのに使える。
何か不満があるのなら自分で書いてみたらどうだ?
猫でもわかるの本は他の入門書と比べてあまり価値はないけどな
漏れはWinプログラミングは猫(+APIブック)で覚えました。 コピペでビルド・実行できるのでめんどくさがりの漏れには役に立ったよ。
俺も猫だな。 本買うのは面倒だし、(やたら高いしw) bccでコピペだけでは動かないから、 いい勉強にもなった。
Win32API で、使用可能なフォント一覧を取得するには どのようにすればよいのでしょうか。 先達のお知恵を拝借したく。
>>25 EnumFontsとかEnumFontFamiliesEx。
27 :
デフォルトの名無しさん :03/02/12 17:13
nt系と 95系を判別する関数があったら教えてください。
28 :
デフォルトの名無しさん :03/02/12 17:18
Win32APIでFtpFindFirstFileってありますよね。 これを使用してやるみたいに、httpのフォルダ内のファイルを列挙する方法 ってあるんでしょうか? どなたか教えてください。 このスレが見つけられず、別のスレにも同じ質問をしていますが、 ご勘弁を。
GetVersionEx で解決。失礼しました。
>>28 不可能ではないか?
>>28 一般的な方法は無い。サーバの設定でそのdirectoryのlistingが
許されている場合は、単純にGETして返された中身をパースする
ことはできるだろう。
WebDAV使う、とか。
>>28 APIでは用意されていない。
自力で何とかするしかない。
API以前の話で、自力で何とかなるような物でも無いわけだが。
そりゃそうだ サーバが対応してなきゃな。
シリアル経由でデバイスが読み取った結果を<LF>************<CR>(*は任意の半角英数字文字列)を送ってくるプログラムを組みたいんですけど、どうしたらいいのでしょう? 今回はじめてWin32API触るので、よくわからないんです・・・(泣
>>35 APIで触らなくても、それぞれの言語にあるファイル入出力でやればいいと思うよ
APIでやってもそう変らないけど
スレッド立ててそれなりに組んだつもりなんですけど、どうも何回か読みに行くと止まってしまって・・・。 ちなみに、OSはWindows2000、VC6.0です。
排他処理してないとか
39 :
デフォルトの名無しさん :03/02/12 23:34
ダイアログボックスのタイトルバーを消すにはどうしたらいいですか?
>> 38 排他処理…ですか。具体的に言うとどんなかんじでしょう?
42 :
デフォルトの名無しさん :03/02/12 23:55
>>40 タイトルバーの文字ではなく、タイトルバーそのものを消したいのですが。
44 :
デフォルトの名無しさん :03/02/13 00:00
>>36 そりゃねーだろ
一般にファイル入出力、例えばstdio.hは
通信パラメータを抽象化してないぜ
>>35 SetCommStateあたり調べてみな
45 :
デフォルトの名無しさん :03/02/13 00:01
>>44 一応こんな感じでやってたんですが・・・何かマズいところってあります?
DCB dcb;
GetCommState(comHandle, &dcb);
dcb.BaudRate = 1200;
dcb.ByteSize = 8;
dcb.StopBits = ONESTOPBIT;
dcb.Parity = NOPARITY;
dcb.fBinary = TRUE;
dcb.fTXContinueOnXoff = FALSE;
dcb.fOutX = FALSE;
dcb.fInX = FALSE;
SetCommState(comHandle, &dcb);
COMMTIMEOUTS timeouts;
timeouts.ReadIntervalTimeout = MAXDWORD;
timeouts.ReadTotalTimeoutMultiplier = 0;
timeouts.ReadTotalTimeoutConstant = 0;
timeouts.WriteTotalTimeoutMultiplier = 100;
timeouts.WriteTotalTimeoutConstant = 100;
SetCommTimeouts(comHandle, &timeouts);
47 :
デフォルトの名無しさん :03/02/13 00:27
まず、マシンに聞いてみれ
48 :
デフォルトの名無しさん :03/02/13 00:33
エクスプローラのように、ファイル名とそのファイルに 対応したアイコンを表示させたいと思っているのですが、 アイコンはどうやって取得すればいいのでしょうか?
51 :
デフォルトの名無しさん :03/02/13 03:56
何処に書いたか分からなくなってしまったのでもう一度質問させてくさい。 mallocとGlobalAllocの違いはなんですか?
メモリを管理する場所が違うのでは。 mallocはライブラリが管理、GlobalAllocはWindowsが管理。 違ったっけ。
GlobalAllocよりHeapAllocを使えってSDKに書いてあったよな。 なんかGlobalAllocはちょっと遅いとか拡張性が低いとかで・・
>>51 レイヤが違う。GlobalAllocの方が低レベルで、mallocはその上に成り立っている
(かもしれない)ってこった。
>53 よく耳にする話だね。 GlobalAllocは移動可能だからじゃないかな。
どんな風に使い分けていますか?
既に別スレにも書いてしまったのですが、こちらが本スレ(?)だったそうで(汗 今 TrackPopupMenu[Ex] を使ってショートカットメニューを表示しているのですが 画面中央付近に少し長めのメニューを表示すると一部が画面から飛び出してしまいます。 こういった時にメニューが画面におさまるよう移動してやるにはどうすればよいのでしょうか。 あるいはメニューを表示する前にメニューの描画サイズを得る方法はあるのでしょうか。 ご存じの方いらっしゃいましたらよろしくお願いします。
普段はmalloc HGLOBALを要求するAPIを使う時だけGlobalAlloc
長いメニューがそもそも問題のような…… ブレーク設定しないのかな
なるほど。回答下さった皆さんどえうも有り難うございました。
61 :
デフォルトの名無しさん :03/02/13 10:14
エクスプローラで表示している「ファイルの種類」を 取得するにはどうすればいいのでしょうか? 宜しくお願いします。
62 :
名無し@沢村 :03/02/13 13:04
63 :
デフォルトの名無しさん :03/02/13 13:22
お願いします VBにて、他アプリケーションをコントロールするプログラムを作っていますが コンボボックスから任意のアイテムを選択するところで、つまづいています 任意のアイテムを選択表示することは、センドメッセージでできました。 SendMessage(ByVal Handle_No, ByVal CB_SETCURSEL, ByVal Item_No, ByVal 0) ただ、アイテムが変更された時にに、動くべきプログラムの処理がされません。 恐らく、アイテムが変更されたという別のメッセージを発行しなければいけないと、 思うのですが。。 どうすれば良いのか、教えてください。 よろしくお願いします
CBN_* のどれかでできないかな?
CBN_SELCHANGE というコードでやってみましたが、 うまくいきませんでした WM_COMMAND でのメッセージの送信方法が間違っているのか CBN_SELCHANGE コードでは無理なのか調査してます 何か、情報がありましたらお願いします
68 :
デフォルトの名無しさん :03/02/13 18:53
あ、すみません。 SHGetFileInfoでネットワークのアイコンと名前って取得できるのでしょうか? 取得できる場合は引数になにを与えればいいのでしょうか? よろしくお願いします。
SHGetFileInfoでは未確認ですが ネットワークコンピュータ ::{208D2C60-3AEA-1069-A2D7-08002B30309D}
71 :
デフォルトの名無しさん :03/02/13 20:30
コンボボックスについて質問させてください♪ ドロップダウンリストにしているのですが、 ▼を押したときにきれいに表示されません。 すごく細かったりします。 キーボードの上下キーで選ぶことはできるので、 表示の設定がまずいのだと思いますが、 どこをいじればいいのやらわからないです。 初歩的で申し訳ないですが、よろしくお願いします。 VC++のリソースエディタ使ってます。
>>71 デザイン時に▼部分を押すとドロップダウンの長さが変えられる。
ありがとうございました〜! できました。
74 :
デフォルトの名無しさん :03/02/14 00:15
テキストボックスについてです。 テキストボックスに直接int型の変数を表示させたいのですが、どうしたらいいのでしょうか? SetDlgItemTextだとchar型しか受け付けてくれなくて・・・(泣 お願いします。
SetDlgItemInt
76 :
デフォルトの名無しさん :03/02/14 00:17
あと、スレッドについてもお願いします。 スレッドで同期をとるにはどうしたらいいでしょう?for文やwhile文を使うとCPUを占拠しちゃって・・・ お願いします。
せまふぉ、みゅーてっくすについて小一時間調べろ。
( ´∀`)<せまぽ
∧_∧ ( ´∀`)< ぬるぽ
∧_∧ ( ´∀`)< お○んぽ
81 :
デフォルトの名無しさん :03/02/14 01:05
>>74 表示する前に何でも sprintf を使って 文字列に変換した方がよくないかな。
これならどんなデータでも表示できる。
82 :
デフォルトの名無しさん :03/02/14 01:22
ファイルに書き込むときに改行のみ書き込みたいときってどうしたらいいのでしょう?
84 :
デフォルトの名無しさん :03/02/14 01:53
>>83 スミマセン、APIでやってます。
あと、時間の書き込み方法もお願いします。
85 :
デフォルトの名無しさん :03/02/14 02:02
なんとか解決できました。 ありがとうございます!
ダブルクリックした場所がテキスト入力可能な場所 (メモ帳とかIEのアドレスバーなど)か判断するAPIって ありますか?
87 :
デフォルトの名無しさん :03/02/14 02:48
IEのツールバーを作りたいと思っているのですが、 参考になるドキュメントなどを教えてください。 なにかキーワードでも構いません。Googleりますから。
>>88 有難う御座います。
いろいろとリソースが見つかりました。
>>80 'さ'?
>>86 多分、ない。
ウインドウクラスから判断するとかどうだろう?
どんな用途に使いたいの?
91 :
デフォルトの名無しさん :03/02/14 10:05
DNSから任意のサーバのMXフィールドを取得するAPIとかって存在しますか?
92 :
デフォルトの名無しさん :03/02/14 10:32
SHGetSpecialFolderPath(Handle,szPath,CSIDL_NETWORK,FALSE); これでネットワークのパスを取得するとszPathにNULLが帰ってくるのですが 何か制限があるのでしょうか? 環境はWin98SEです
93 :
デフォルトの名無しさん :03/02/14 10:47
Explorerで、アイコンをマウスドラッグで選択するときにでてくる選択枠とか、 ウインドウリサイズのときに出てくる枠というのは、専用のAPIがあるのですか? rectangle()でやってたりするんでしょうか?
>>93 専用のAPIがありますが、むしろrectangle()がいったいなんなのかすげぇ気になるんだが。
96 :
デフォルトの名無しさん :03/02/14 11:35
>>92 CSIDL_NETWORK はnamespace hierarchyにだけ存在して目に見えるファイルシステム
ではないためSHGetSpecialFolderPathのような物理的なファイルパスを求め
るようなものではエラーになる。デスクトップ上のパス(ショートカット)を求めるのなら
CSIDL_NETHOOD でしょう。ITEMIDLISTを求めるAPIではエラーにはならないよ。
>>91 調べてないけど DnsQuery とかでできないかな?
100ゲト
質問です 1:windowsプログラムはなぜ2つの関数に分けられているのか? 2:メッセージを用いたプログラムとOSのやりとりを採用しているのはなぜか? 3:WinMain関数においてWNDCLASS構造体をwindowsへ 登録する処理が含まれるが、なぜそのような処理が必要なのか? この三つがよくわからんので 教えてください
102 :
デフォルトの名無しさん :03/02/14 13:55
>>101 1.んな?初期化とそのウインドウ用のイベントハンドラ群(御幣あり)
2.そうしたかった。としか。
3.クラスとインスタンスの関係だと思われ。
Microsoftにたずねろ。
>>101 1.EntryとWndProcを同じ関数にすることは不可能ではない
2.当時(今も?)、GUIと相性がよいと考えられていた
3.クラス登録は必須ではない
>>96 FocusRectとかFrameRect(FrameRgn)とかSetPixelとか
106 :
デフォルトの名無しさん :03/02/14 15:05
GetClientRectでは、ツールバーやステータスバーの領域も含まれるようですが、 これらを除いた描画領域の大きさを取得するにはどうしたら良いのでしょうか?
このスレにいる人間はいかほど?
109 :
デフォルトの名無しさん :03/02/14 16:51
つーか、含まれるか? どんなウィンドウだ? それ。
110 :
デフォルトの名無しさん :03/02/14 20:21
自分で考えろよ、馬鹿。 俺はお前の相談屋じゃねーんだぞ。
110先生 スレの存在意義を問う!
>>51 出遅れたがひとことふたこと書かせてもらうぞ。
あんたがどこに書いたか知ってるような気がするな。
忘れたというんじゃそっちをフォローすることもできまいが少しは
申し訳ないと思ってるんだろうな?
本題はこれから。
プログラムを作る上でめちゃくちゃ重要なことだからよっく読めよ。
その「何処に書いたか分からなくなってしまう」ような作業習慣を改めろ!
やったことは全部メモしておけ!
目の前にコンピュータとテキストエディタがあるだろうが!
以上だ。
そりゃ無駄だ。 奴らはそのメモしたものがどこにあるかすら思い出せないんだから。
114 :
デフォルトの名無しさん :03/02/14 21:21
>>101 いい質問だ
反問ですまんが
1:なぜ関数は1つでなければならないのか?
2:アプリとOSがやりとりする手段は他に何があるか?
3:標準入出力にどんな特性が必要かを、誰が決めるべきか?
これらに対する、おまえさん自身の答えが
ヒントを豊富に含んでいるであろうと予言する
115 :
デフォルトの名無しさん :03/02/14 21:27
>>106 そのツールバー 《とやら》 をSpy++でつぶさに観察せよ
因みにGetSystemMetrics()ではなくGetRgnBox()を使う性格の問題であろう
というのが漏れの感想だ
116 :
デフォルトの名無しさん :03/02/14 21:29
>>93 MFCのCRectTracker::TrackRubberBand()あたりではないか?
あの関数は中でPatBlt()等を使った力業をやっているだけだったような...
このスレで答えられるのはここまでだ
>>108 まずくないです。ただ、問題があるとすれば、ちょっと面倒かもしれません。
>>109 SPY++を見たところ、どのWindowのクライアント領域にもやはり、ツールバー
などが含まれてるようですが・・・
>>117 (クライアント領域) - (ツールバーのGetWindowRect)
とかしか方法はないですよ。
119 :
デフォルトの名無しさん :03/02/15 05:59
質問があるのですが、ウィンドウプロシージャをクラス内に隠蔽した場合、 サブクラス化を行う際に必要となるウィンドウプロシージャのアドレスを得るためには クラスの(テンポラリーではない)インスタンスを生成する必要があるというのは あまりにも当たり前のことなのでしょうか。プロシージャの差し替えだけのために インスタンスを生成することに違和感を感じるのですが・・・。 ////////////////////////////////// class subclass { static LRESULT WndProcMap(...); // プロシージャを選択的に実行 virtual LRESULT WndProc(...) = 0; // 実際のプロシージャは継承先で定義 void change(subclass* sc); // プロシージャをscのものに差し換える }; class window : public subclass; // 基本となるプロシージャを含むクラス class proc0 : public subclass; // 差し換えたいプロシージャその0を含むクラス class proc1 : public subclass; // 差し換えたいプロシージャその1を含むクラス window wnd; /* Case 1 */ wnd.change(&proc0()); // こうできれば気持ちいいけど一時オブジェクトproc0()のアドレスを渡すのでもちろんエラー /* Case 2 */ proc proc0; wnd.change(&proc0()); // インスタンスを作ればOK //////////////////////////////////
class A_base { static A_base* _a; public: virtual void aa() = 0; static void out(){ if( A_base::_a ) A_base::_a->aa(); } void change( A_base* p ){ A_base::_a = p; } }; A_base* A_base::_a= 0; class A : public A_base{ public: A(){ change( this ); } virtual void aa(){ std::cout << "A" << std::endl; } }; class B : public A_base{ public: B(){ change( this ); } virtual void aa(){ std::cout << "B" << std::endl; } }; extern "C" int _tmain( int argc, TCHAR* argv[] ) { A a; a.change( ( A_base* )&B() ); a.out(); a.change( ( A_base* )&A() ); a.out(); return 0; } こんな感じか? 参考にならない? だったら無視してくれ。
上の class A は A a1, a2; って書いても同じ物をさしそうだな。 とりあえず役には立たなそうだ。
122 :
デフォルトの名無しさん :03/02/15 11:50
初心者です、教えてください。 INPOCOMANCONTROLSEX構造体っていうのが本に載ってたのですが、 ヘルプで検索しても出てきません。 どんな構造体なんでしょう?
インポコーマンコントロールセックス?
>>122 ネタですか?
INITCOMMONCONTROLSEXの間違いだろうか、と心の中で思ってみる
項目が多すぎて表示しきれないMENUの スクロール方法を変えるにはどうすればよいのでしょうか?
127 :
デフォルトの名無しさん :03/02/15 17:31
起動したexeの絶対パスを取得するようなAPIはありますか? カレントディレクトリ = 起動したexeの絶対パス とは限らないですよね?
128 :
名無し@沢村 :03/02/15 17:38
>>127 GetModuleFileName()
>>127 ガイシュツだと思うけどGetModuleFileName
コンソールプログラムで、終了時にきちんと終了処理を行いたいのですが、 コマンドプロンプトの×ボタンで終了させられた場合、try{}cathc(...){}でも__try{}__finally{}でも ひっかからないので、正常に終了処理が行えません。 終了イベントをトラップするにはどうしたらよいのでしょうか?
>>130 SetConsoleCtrlHandlerはどうでしょう
>>131 SetConsoleHandlerは別スレッドでハンドラがよばれるんでハンドラからthrowしても
メインルーチンのほうではcatchできないんですよ。
>>120 どうもです。つまりプロシージャを指すメンバ変数をstaticにすることで
インスタンスなしに直接アクセスできるということですね。
それだとインスタンスごとにプロシージャを差し換えることができなくなりそうですが・・・。
なんだかプロシージャをクラスでラップすることの意義がわからなくなってきました。
巨大なファイルをストリーミング処理するプログラムを書いています。(〜数GB) 読み込みにはReadFileExを利用し、読み込みバッファは5MByte程度です。 処理開始から暫く経つとスワップが行われるのか、他アプリへの切り替えにHDDアクセスが必要になります。 windowsのディスクキャッシュのアルゴリズムの問題と聞いたのですが、回避する方法はありませんでしょうか。 基本的に一度読み込んだデータにアクセスし直すことは無いので、 HDDへのキャッシュされないアクセス法があればいいのですが。
データを保存しないのなら HDD は関係ないとかいう説は
FILE_FLAG_NO_BUFFERING
素早い御教授ありがとうございました。早速試してみます。
レスは試した後でするもんだ
139 :
デフォルトの名無しさん :03/02/16 16:55
質問です。 Windows98以降でのDirectShowで、Indeo5のCodecの有無の判定は、 HKEY_CURRENT_USER\Software\Microsoft\ActiveMovie\devenum\{33D9A760-90C8-11D0-BD43-00A0C911CE86}\iv55 が開けるかどうかで行うことでよいですか?
あ、レジストリキーの最後が変でした。 iv55じゃなくてiv50です
この質問このスレでいいのかな? WINDOWS KEYなど一部のKEYを手前で止めたいのですが DLLで普通にフックかけても素通りされてしまいます NT系OSならばSetWindowsHookEx と WH_KEYBOARD_LL で 捕まえて止めることができましたが 98系OSで同じことをやるAPIはないですか? 無理? 調べたところSystemParametersInfoでスクリンセーバ中にして強引に止めるという ものしか発見できませんでした
CallNextHookEx() を呼ばずにリターンしてみる
リッチテキストコントロールに表示される文字の文字間隔と行間隔を変更する方法をご存じの方いらっしゃいませんか?
>>144 オーナードローとか言ったらど突き倒されるんだろうなと少し思った。
146 :
デフォルトの名無しさん :03/02/17 00:54
windowsに標準で付いているサウンドレコーダーのように マイクから音声を取り込んでる最中にその音量を表示したいのですが、 どのようにしたらいいか分かりません。 waveIn系のAPIを使って調べるしかないのでしょうか? それとも他に使えるAPIなどあるのでしょうか? どなたか分かる方よろしくお願いします。 言語はC/C++かVBです。
表示前にツールチップのサイズを得るにはどうすればよいんですか?
>>146 方向性はそれで良い。検索でソースとか見つければいいかと。
あとはDirectSoundとか・・
>>143 レスありがとうございます
ダメみたいです
>>144 EM_SETPARAFORMATとか言ったら押し倒されるんだろうなと少し思った。
151 :
デフォルトの名無しさん :03/02/17 11:02
特別なフォルダを取得するAPIを教えて下さい
>>151 SHGetSpecialFolderPath
SHGetSpecialFolderLocation
この辺のことか?
>>152 ああ、それです、SpecialFolderって部分はわかってたのですが
フルスペルがわからなかったもので。
ありがとうございます!
154 :
デフォルトの名無しさん :03/02/17 11:48
マウスの移動方向をAPIで取得する方法無いんでしょうか? (DirectInput使う方法なら見つけたけど…) 前回座標との差分だと、画面端からさらにそっちに動かしたのが判らないし(汗
画面端まで来たら反対側にワープ。 計算どうやるの?とかいうなよ。
>>155 画面の一番右端にいるときにマウスを右に移動したのをどうやって判断するの?って
ことだろ。なにわけのわからんこといってんのよ?
spy++使ってデスクトップで試してみたけど、 特別なメッセージは流れてなかったなぁ…
メッセージレベルでは何も流れないだろうね。
諦めて、画面端の場合はその方向にマウスを動かし続けていると見なす、とか。
マウスドライバレベルで座標の変化を記録するしかないんじゃないの?
161 :
デフォルトの名無しさん :03/02/17 14:42
教えてください コンボボックスの表示スピード(下に伸びてくるスピード)を早くしたいのですが可能でしょうか? 可能でしたら、どういうメッセージを送ればよいのでしょうか? よろしくお願いします
162 :
デフォルトの名無しさん :03/02/17 15:43
LineToやTextOutで画面上に色々書いたのをけしたいのですが 現在は他のウィンドウを重ねて動かすという方法なのですが 何か良い消し方ないでしょうか? 描画させる?方法を教えて頂けませんか?
>>162 それがわかればおそらくいい会社に就職できるでしょう.
164 :
デフォルトの名無しさん :03/02/17 16:00
166 :
デフォルトの名無しさん :03/02/17 16:06
デスクトップで最新の情報に更新するみたいな処理だと思うんですが まったくわからずじまいでして、、、 お願いしますー
167 :
デフォルトの名無しさん :03/02/17 16:06
>>162 おっきな四角を作ってそれで塗りつぶす。
>>167 そのおっきな四角を消すのはどうするのでしょう?
170 :
デフォルトの名無しさん :03/02/17 16:11
省略しながら遅かった・・・(・ω・)ショボーン
173 :
デフォルトの名無しさん :03/02/17 16:20
なんかだめぽ。。。 素直に最新の情報に更新をしてます。。、
他アプリにメッセージ送信の仕方教えてください。 Alt + F4メッセージを送りたいのです。 API名だけでのいいんでよろしくです。
>>162 XORで描いた四角の真上にもう一度XORで描くと元に戻るってやつかな?
SetROP2を調べてみたまい。
>174
PostMessage
メッセージはWM_SYSCOMMANDだったっけ?
「送信」とか「送る」とかいうとSendMessageと間違うな。
>>175 微妙に違うと思う。GetClientRect()してFillRect()でいいんちゃうの?
177 :
デフォルトの名無しさん :03/02/17 23:47
>>162 SendMessage(hwnd, WM_ERASEBKGND
>>177 でもそれはちゃんと背景ブラシ設定してるかどうか。。。
ってウインドウを重ねて動かして消えるということは設定できてるってことですね。
多分この場合は、PostMessageの方が適切だね。 SendMessageだと、相手が応答不能な場合にこちらまで応答不能になるから。
181 :
デフォルトの名無しさん :03/02/18 06:15
消した後で何か描画させるつもりならSendじゃないと不安が残るね それからPostではあぼ〜んされてしまうメッセージもときどきある
>>177 >>179 >>180 どーもでした。
SendMessage or PostMessageで普通に送れるんですか。
あとは、ウインドウクラス、ウインドウタイトル、実行ファイル名から
アプリ特定してHWND取得でいけるかなとおもた。
ちなみに偽メッセンジャー起動時にウインドウ開くの邪魔だったから
183 :
デフォルトの名無しさん :03/02/18 07:33
>>162 SelectObject(hdc,GetstockObject(WHITE_BRASH));
Rectangle(hdc,-1,-1,9999,9999);
>155-160 thx。 駄目ですか…。 >159 現状はカーソルが端に来たらちょっと戻すような処理?でごまかしてます。 当然カーソルの動きがぶれます(汗 >160 いや、ハード的にはマウスは座標の概念持ってなくて相対的な動きしか検出出来ないんです。 本来取れるはずの値が取れないのが不自然に思ったもので。
185 :
デフォルトの名無しさん :03/02/18 11:01
ウィンドウハンドルからGetModuleFileNameを使って 起動パスを取得したいのですがGetModuleFileNameの第一引数には どのAPIで取得したハンドルを渡せばいいのでしょうか? 因みに知りたいのは自分の自信のパスではなくてEnumWindowsで 列挙したハンドルのパスです。 よろしくお願いします。
>>185 GetModuleFileNameは自プロセス内のモジュールにしか使えない。
PSAPI(NT)かToolhelp32(9x)使え
>>182 (´-`).。oO( 偽メッセンジャーはメインウィンドウ非表示で起動できるじゃん・・・ )
191 :
デフォルトの名無しさん :03/02/18 13:13
他のアプリのツリービューの背景色(文字色も)を変更することはできますか? SendMessageあたりでいろいろ調べてるんですけど、まだ決め手となるものが ありません。
>>191 てめーのダサいデザインセンスを勝手に適用すんな。
画面のプロパティで設定するからいらん。
193 :
デフォルトの名無しさん :03/02/18 13:33
あれからまた色々やったのですがだめでしたので、またご助言を、、
http://uniety.hp.infoseek.co.jp/mo.exe を実行するとマウスの周りに色がぐちゃぐちゃっとなるのを消したいのです。
自分も相手もDelphiというのを使っておりまして、どうにかしたいのですが
そんなに詳しいわけでもなく知り合いに聞くとAPIとだけ言い残しただけ、、
どなたか助けて下さい。 それともDelphiのスレで聞くのがいいでしょうか
古い人間なので、エディタでもなんでも、背景色は黒でないとダメなのですが、 Windows全体をその設定にしてしまうと、いろいろと不具合が出ます。 Windowsは、黒背景で使うようにはできていません。 ある特定のアプリの一部を変更したいだけです。
背景が黒だと文字が見えないとか言ったりして。プププ
> Windowsは、黒背景で使うようにはできていません。 Windowsはできてるよ できてないのはその糞アプリ
>>190 できました。
毎回毎回閉じてたのがばかみたい。
うざったいの消えていい感じ
199 :
デフォルトの名無しさん :03/02/18 15:21
>>188 ありがとう。
ウィンドウハンドルで識別するためにGetWindowThreadProcessIdでProcessIdを取得して
Process32First等で取得したth32ProcessIDと比較してIDが一致したらって
やったのですが、一致するIDがあなませんですた。比較する対象が違うのでしょうか?
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS を実行した瞬間に存在するプロセスのみが列挙されるはずですが その辺のタイミングは大丈夫ですか?
それを言い出したらウィンドウだって 列挙した瞬間のものしか取り出せないわけだが
>197 一度黒背景設定でやってみてください。もちろん、文字色は明るい色で。 他社のアプリではなく、Windowsそのものの各所で、 見えなくなるところがでてきます。 ていうか、単にAPI調べてるだけなんですけど…。
この板でWindows自体といったらAPIレベルの話しだべ
>>203 Windowsの画面設定にはデフォで背景黒があったはずだが、
それもおかしくなるか?
>>203 ちゃんと隅々まで設定しろよ。めんどくさけりゃ「ハイコントラスト 黒」とかにしたら?
207 :
デフォルトの名無しさん :03/02/18 16:45
WNetOpenEnumでグループ名はゲットできたんですが、 そこから各コンピューター名はどうやってゲットすればいいのでしょうか?
ォィォィ
>>194 落としたらすごい事になったぞ
タスクバーの汚れきえねーよ
209 :
名無し@沢村 :03/02/19 00:27
>>199 ヌヒよ、GetWindowModuleFileName()では駄目なのか?
駄目
212 :
デフォルトの名無しさん :03/02/19 01:18
MDIアプリケーション(Photoshopみたいなもの)作ってるんですけど パレットウィンドウやブラシウィンドウのように一つしか無いウィンドウ のハンドルはグローバル変数にしてしまうのが一番スマートな方法なのでしょうか? 画像は複数個読み込むことが出来て、画像ごとにウィンドウを作成します。 そしてアクティブな画像ウィンドウは、パレットウィンドウやブラシウィンドウと SendMessage()で必要な情報をやり取りする、という形なのですが…
213 :
デフォルトの名無しさん :03/02/19 08:26
>>187 thx。
でも画面内にカーソルを置いたまま移動量がほしいので…
移動量だけ欲しいときはいいアイデアだと思いました。
>>194 すごいなこれ…
とりあえず最前面に画面と同じ大きさの窓を開いてすぐ閉じれば消えるかと。
>>212 ハンドル解放後にハンドルに対する処理したら悲惨。
>>211 NTではGetWindowModuleFileNameでも
他プロセスのモジュールのファイル名は取れないぽ
216 :
デフォルトの名無しさん :03/02/19 21:38
>>212 モードレス ダイアログのハンドルは
オーナー ウインドウとメッセージ ループの両方で要るからなあ。
オーナー ウインドウにハンドルを預けておいて
メッセージ ループではSendMessageの戻りでがんがるって手もあるけど、
アプリケーション ユニークなオブジェクトなら
グローバルの方がかえってきれいじゃないか?
といってもHWND変数をextern宣言するのはいやだから
ちゃんと関数で隠蔽して。
217 :
デフォルトの名無しさん :03/02/19 22:03
MAPISendMailについて教えてください。 これの4つ目の引数のflFlagsのフラグの意味がよくわかりません。 MAPI_DIALOG 、MAPI_LOGON_UI 、MAPI_NEW_SESSION の使い分けってどういう風に行うのでしょうか? ご存知の方がいたらご教授お願いします。
219 :
デフォルトの名無しさん :03/02/19 22:41
質問があります WindowsXP上で赤外線通信を行うソフトを作ろうと 思ったのですが、どうやったら良いのでしょうか? WinCEではIrSockを使うらしいことまでは分かったんですが・・・ XPでも同じで良いんでしょうか? それと、WindowsXP標準の赤外線通信ソフトを無効にすることは 出来るのでしょうか? Socket関係はあまり使ったことがなく、困っております 先達のお知恵を・・・
以前>86で質問した者です。 >90 ネットが使えなかったので返事ができませんでした、すいません。 マウスをグローバルフックするDLLを作っり、ダブルクリックした場所が テキスト入力可能な場所ならソフトウェアキーボードを立ち上げるような プログラムを作ろうとしています。 テキスト入力可能か判断する方法が知りたいのですが。 メモ帳などのエディタだけでなくIEのアドレスバーなどでも判断できるようにしたいので ウインドウクラスから判断するのは難しいと思うのですが。
>>218 すいません。もちろんMSDNはちゃんと見ていますが、あの説明だけではとても理解できませんでした。
もしわかるのなら教えてもらえないでしょうか?
>>222 IMEなんて代物は作れませんが、ダブルクリックで立ち上がるソフトウェアキーボードを作る感じです。
フックDLLは既に作ってますが、フォーカスイベントなどを処理すればなんとかなるのかなぁ・・・。
そっか、IMEにしちゃえばいいのか。
>>220 GetCaretPos()を実行して座標が0,0なら入力不可と仮定。
完璧じゃないけど。
>>226 うん、Windowsのエディット関係使ってないやつとか。
いろいろなレスありがとうございます。 IMEで調べるとImmSetOpenStatus関数が使えそうな気がしました。 IMEを開こうとして関数の戻り値が0以外ならテキスト入力可能だと判断できるような気もします。 この場合、無駄にIMEが開いてしまうという副作用もありそうですが・・・。
>>229 ああ、そういうことなんですね、やっと意味がわかりました(汗
IME作るのか、めんどくさそうな予感・・・。サンプルとか落ちてないのかな。
231 :
デフォルトの名無しさん :03/02/20 01:44
lstrcpyとかは、引数にNULLを指定しても エラーダイアログとかワトソン博士とか出て来ないのですが 戻り値でエラーが返るだけなんでしょうか?
既出だとは思いますが、 FillMemory(lpDest, lpSrc, var)の varがBYTE型なのですが、 32ビット固定小数点型をセットできる関数をはないですか? ループでやれば出来るんですが遅いんです…
既出だと思うなら探せよ
>>233 結局どのデータ型も突き詰めればバイトストリームだってことさ。
REP STOS (合ってる?
メモリを32ビット値で埋める? CopyMemoryしたほうがいいんでない?
238 :
デフォルトの名無しさん :03/02/20 14:29
質問です。 HBITMAP CreateDIBSection( HDC hdc, // handle to DC CONST BITMAPINFO *pbmi, // bitmap data UINT iUsage, // data type indicator VOID **ppvBits, // bit values HANDLE hSection, // handle to file mapping object DWORD dwOffset // offset to bitmap bit values ); これで*ppvBitsには確保されたメモリーのアドレスが格納されると思うのですが、 これって使い終わったら自分で解放しなきゃいけないんでしょうか? もし解放しなきゃいけないならfreeですか?それともdelete?
239 :
デフォルトの名無しさん :03/02/20 14:33
メモリの値を16進数で取り出すにはどうしたらいいんでしょうか?
hSectionがNULLの場合は、 オペレーティング システムが デバイスに依存しないビットマップのメモリを割り当てます。 後でDeleteObject関数を呼び出してデバイスに依存しない ビットマップを削除すると、 オペレーティング システムが そのメモリのハンドルをクローズします。 と書いてある
>>239 値そのものは10進だとか16進だとか関係ありません。
取ってきた値を16進で表示したいならprintfでもつかえば?
>>240 サンクス
今度から下の方までよく読みます
>>241 ごめんなさい、よく分からないで質問してました。
WINAPI WinMain でprintfを使うにはどうしたらいいか分かりません。
stdio.hをインクルードすればmain()がないとエラーが返されてしまいます。
どのようにしたらよろしいのでしょうか?
>>243 コンソールアプリケーションにすればいいよ。
>>244 ウインドウとコンソールは一緒に出来ないんですね・・・
ありがとうございました
引数に何も指定しなかったらウインドウで 指定したらコンソールって作れますか? ちらっと変なウインドウとか出さずに。
XPならAttachConsoleでできるかも
>>245 AllocConsole すれば コンソールが出るし
窓とコンソールの両方を出す事も出来る
やってみます、ありがとうございました
AllocConsoleなんかしなくても /subsystem:consoleのアプリから余裕でウィンドウを開けますが
取り合えず、AllocConsoleでやってみたのですが、scanfを使っても勝手にDOS窓が閉じてしまいます。 解決法はないでしょうか?
>>252 コンソールアプリじゃないと、scanfとかは CRTが違うから初期化されてないわけで
後から使う為には自前で初期化しないと・・・・ それは環境依存だね。
DelphiのWriteとかは直接出力可能なんだけどね。
NT系ならstdoutやstdinを関連づけるだけで出来る
自分でも調べてみたんですけど、WIN98とかなんで多分無理そうです。 ほかの方法考えます。 ありがとうございました。また聞きに来るかもしんないです
256 :
デフォルトの名無しさん :03/02/20 20:38
>239 って当初の目的はメモリ内容の16進表示なわけだから、 コンソールにせずwsprintfとTextOutで表示すればいいと思われ。
257 :
デフォルトの名無しさん :03/02/20 21:06
freopen("CONOUT$", "wt", stdout);
258 :
デフォルトの名無しさん :03/02/20 22:09
WC_LISTVIEW や REBARCLASSNAME を CreateWindowEx するとエラーになってしまいます 同じコードで "BUTTON" "EDIT" "LISTBOX" などは作ることができます。 インクルードやリンクのミスは無い筈です。 なにか思い当たる事が御座いましたら、教えてください。 InitCommonControlsEx には sizeof( INITCOMMONCONTROLSEX ) 0x3FFF を入れてます。 #include <commctrl.h> #pragma comment( lib, "comctl32.lib" )
119さんの質問に便乗なのですが、コールバック関数をサブクラス化する場合、 ユーザーデータを渡せないコールバック関数(AbortProcやDrawStateProc)は どのようにしてサブクラス化したら良いのでしょうか? 幸いAbortProc、DrawStateProc共にHDCが渡されるので リスト構造で親クラスを作成し、以下のようにポインタをたどってHDCを探していけば解決できそうなのですが BOOL CALLBACK AbortProc(HDC hdc, int iError) { for(CBase *p = m_lpTop;p->m_lpNext;p = p->m_lpNext) if(p->m_hDC == hDC) p->OnAbortProc(iError); // サブクラス側の関数の呼び出し } ウィンドウプロシージャのように大量に生成されると予測できるものはこれでもよさそうですが、 滅多に使わないプリンタ関係のクラスにここまで大げさなモノはあまり作りたくありません。 どなたか、もっと簡単に実現できる方法をご存知でしたらぜひとも教えてください! お願いします。
>>256 これ知ってるとだいぶ違うから覚えておくといいよね
261 :
名無し@沢村 :03/02/20 22:59
>>239 OutputDebugString()
★あなたのお悩み解決致します!!
●浮気素行調査
彼氏、彼女、妻、夫の浮気を調査致します!!
●盗聴器盗撮機発見
あなたの部屋に誰かが仕掛けているかも!!
●行方調査
行方不明になっている家族の消息を調査致します!!
●電話番号から住所割り出し
一般電話、携帯から住所を割り出し致します!!
●ストーカー対策
社会問題ともなっているストーカーを撃退致します!!
その他人生相談からどんなお悩みでも解決いたします!!
24時間受付 090−8505−3086
URL
http://www.h5.dion.ne.jp/~grobal/ メール
[email protected] グローバル探偵事務局
char aaa[] = "a,b,c,d,e"; char *ooo; ooo = &aaa; ってした時に、a[1]の値だけを*oooかoooを使って取り出すにはどうしたらよろしいのでしょうか? よろしくお願いします。
へー、これがWin32APIの質問ねー、ふーん
ちんこが大きくなるにはどうしたらいいか教えてください!
267 :
デフォルトの名無しさん :03/02/21 01:24
SetFilePointerExがXPで使えない理由を知ってる人手を挙げて
>>263 win32APIとどう関係があるのか?
>>263 いちお、a[1]の ',' は
ooo = aaa;
ooo[1]
で取り出せる。 と、釣られてみた。
さっきの取り消し。
>263 釣られてみるが aaa[1]は取り出せるけどa[1] は知らん
273 :
デフォルトの名無しさん :03/02/21 06:43
リストビューの現在選択されているインデックス番号の取得の仕方が分かりません ListView_GetItemPositionとかで出来ますか?
>>273 ListView_GetNextItem
>>274 >>275 LVNI_ALL | LVNI_SELECTED と共に使用して出来きました。
感謝。
277 :
デフォルトの名無しさん :03/02/21 07:52
>>263 誤>char *ooo;
正>char(*ooo)[10];
それから、このスレで聞くならTCHARくらい使え
279 :
デフォルトの名無しさん :03/02/21 10:44
>>278 本気で言ってるのか?
詳細を書いてないところがマジっぽい
釣り師ならいい腕だ
>>277 すみません、_TCHARはダメですか?
>>280 _TCHARはVC++固有(たいていのWin32処理系には互換のため
存在するけど)だからスレ違い
>>278 はTCHARではなく(*ooo)[10]にハァ?なのかと…
配列へのポインタが分かっとらんということ? やはり釣りじゃ…
(*ooo)[10]の 10 はどこから出てきたのか教えて( ゚д゚)ホスィ・・・・
そっか。"a,b,c,d,e" + '\0' で 10文字って事か。なーんだ。
286 :
デフォルトの名無しさん :03/02/21 15:19
waveIn系のAPIなのですが、ステレオ入力の場合バッファに入力される値はWAVEファイルと同じで左右左右左・・・となるのでしょうか?
Waveファイルと同じです
特定のクライアント領域の大きさのウインドウを作るにはどうしたらよいのでしょうか。 CreateWindowで指定するのはクライアント領域ではなくウインドウの大きさですし、 GetClientRectはあってもSetClientRectはないです・・・
一応AdjustWindowRect(Ex)つーのがある。あんまり役に立たんが。
>>289 複数行のメニューとか作らなければ、それで十分だったんじゃ。
>>290 複数行メニューを作ろうとしなくても、メニューのフォントサイズをユーザーが大きい物に
してるとメニューが複数行になっちゃったりする。
そして複数行になるかどうかは判断できない。
だから役に立たない。
292 :
デフォルトの名無しさん :03/02/21 16:54
関連付けられたファイルを開くAPIですが、 WindowsMeで動くAPIを教えてください。 APIやらVB組み込み関数やら4つ試しましたがいずれも 2000では動きましたがMeでは動きませんでした。
>>292 どのAPIでどんなコードがダメだったの?
ShellExecuteでいけてるみたいだけど
294 :
デフォルトの名無しさん :03/02/21 17:44
>293
' ShellExecute 0, "open", "
http://xxx.xxx..net/picture.asp?FileN= " & Index & ".jpg", vbNullString, App.Path, 1
ごめんなさい。ファイルの起動ではなくてブラウザの起動です。
ちなみに手元の本「VisualBasicTips1000+では、この関数Meは対応してないとかいてある。
あとWebでShellExecuteEXなるものを見つけて、いまためしてるところです。
ファイルは開くのですか・・・。
openはつけない方がよい
★あなたのお悩み解決致します!!
●浮気素行調査
彼氏、彼女、妻、夫の浮気を調査致します!!
●盗聴器盗撮機発見
あなたの部屋に誰かが仕掛けているかも!!
●行方調査
行方不明になっている家族の消息を調査致します!!
●電話番号から住所割り出し
一般電話、携帯から住所を割り出し致します!!
●ストーカー対策
社会問題ともなっているストーカーを撃退致します!!
その他人生相談からどんなお悩みでも解決いたします!!
直通 090−8505−3086
URL
http://www.h5.dion.ne.jp/~grobal/ メール
[email protected] グローバル探偵事務局
EXで動きました。 しかし原因が判明 Meで動作テストさせてるやつが、どうもこちらが最新のプログラムを渡してるのに、 そのプログラムを使わないで勘違いで古いやつをつかって動かないといっているだけだった。 スマソ
>>297 ( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/
(_フ彡 / ←Meで動作テストしてる香具師
299 :
デフォルトの名無しさん :03/02/21 19:40
C++のwindows.hの宣言て #inlcude <windows> using namespace std; ていう風にはできないの?
>>299 無理です。windows.hはstd名前空間に包まれていません。
301 :
bloom :03/02/21 19:49
>>299 以下の内容のテキストファイル "windows" を、インクルードフォルダに作成しろ。
#ifndef _INC_STD_WINDOWS
#define _INC_STD_WINDOWS
namespace std {
#include <windows.h>
}
#endif
なんでわざわざ std にするんだ? ms とかにしたほうがいいとおもうが。
で、それでなんかいいことあるの?
using namespace std; をつけないと、Win32のAPI関数の全てに std::を付けなければならなくなる、それだけ。
>>305 いやお前、ネームスペースのこと理解してるか?
>>306 ん?言いたい事がよくわからんが。ただ、Win32 API関数名を
わざわざstd名前空間内に放り込んで何のメリットがあるのかと。
関数をDLL化して、その関数の中でコールバックは使えますか?
どのコールバックか知らんけど そのDLLがアンロードされないように気をつければいいんでないの
ウィンドウアプリからコマンドプロンプトに値を送って表示させるにはどうすればいいでしょうか? 変数の確認用に使おうかと思いまして。
ダイアログのハンドルからフォント情報を得るにはどうればよいのでしょう。 > STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU > CAPTION "ダイアログ" > FONT 9, "MS Pゴシック" たとえば↑のような場合に "MS Pゴシック", 9 といった情報を知りたいのです。
WM_GETFONT
314 :
デフォルトの名無しさん :03/02/23 12:10
Win32で文字列扱う時はどの型を使うのが一般的なんですか? 文字列型使いたかったらやはりMFCのCStringしかない?
>>311 AllocConsole()、FreeConsole()
316 :
デフォルトの名無しさん :03/02/23 12:15
>>314 LPTSTR
というのは冗談で、アプリ側で好き好きに文字列型を決めていいと思う。
APIを呼び出す部分でwrapすればいいわけで。
318 :
デフォルトの名無しさん :03/02/23 12:36
VC6SDK でWM_TIMERが急に動作しなくなったのですが どうしてですか?
漏れが良くやるのは WM_TIMER から OnTimer() のような関数を 呼び出してるつもりで、実は呼び出し忘れてたとか。
Windows2000だかXPだかでそんな感じのWindowsUpdateがあったわけだが。
322 :
デフォルトの名無しさん :03/02/23 13:06
void Testhoge(void){ char s[5]; int iRet; //ローカルタイムを取得 GetLocalTime(&sm); if(sm.wMonth=2) { strcpy(s,"2月です。"); }else{ strcpy(s,"2月以外"); } iRet = MessageBox(NULL,s,"アドバイス",MB_OK); } こういう関数をメッセージから呼び出すと必ずメッセージボックスのあと エラーになるのですがなぜですか?
char s[5]; で、 strcpy(s,"2月です。"); どういう神経してんだと。
>>322 メッセージボックスを表示しないようにしてもエラーになると思う。
(・∀・)チンポ!!
全角文字は2バイトです。と書いておくか
次は char s[10]; でエラー出すと予想
328 :
デフォルトの名無しさん :03/02/23 15:47
VisualBasicでいうForm1.Visible Hide にあたるAPIはありますか?
329 :
デフォルトの名無しさん :03/02/23 15:47
>>329 char s[11]; としないといけないから。
で、次に2月の2は半角ですよ、とくるわけか。
問題ないから
>>327 じゃエラー出ないだろと。
つーかこういうのつまんねーし、そもそもWin32APIじゃないからやめようや。
はい次↓
↓ ↑ →
ガオガイガー 15話,,40,0,,1
336 :
デフォルトの名無しさん :03/02/23 16:12
VisualBasicでいうForm1.Visible Hide にあたるAPIはありますか?
338 :
デフォルトの名無しさん :03/02/23 16:24
>>337 どうもです。
ついでに表示しない状態で起動するにはどうしたらよいのでしょう?
WM_CREATEに書いたらだめでした。
WM_CREATE は CreateWindow の処理中に送信されるからな。 ここで消しても CreateWindow() の後で ShowWindow()を 呼び出してたらまた表示される。
340 :
名無し@沢村 :03/02/23 17:55
>>338 ヌヒよ、CreateWindow()に渡すウィンドウスタイルからWS_VISIBLEを外せ。
341 :
デフォルトの名無しさん :03/02/23 18:08
底なし沼にいる気分だ・・・ プログラミング始めたばかりの頃の気分と 似てるな、右も左もわからず、おれには 無理と諦めていたあの頃・・・
すみません。マ板と間違えますた。
>>341 結局その泥沼から自分で這い出せた奴のみがプログラマになれるわけで。
> 313 > WM_GETFONT すみません、質問の仕方が悪かったです。 ウィンドウ(今回はダイアログ)に指定されているフォントに対応する LOGFONT を得るにはどうしたらよいでしょうか。 以下のメンバさえ分かれば他はかまいません。 どうかよろしくお願いします。 typedef struct tagLOGFONT { LONG lfHeight; LONG lfWeight; BYTE lfItalic; TCHAR lfFaceName[LF_FACESIZE]; } LOGFONT;
>344 GetObject
346 :
デフォルトの名無しさん :03/02/24 00:23
348 :
デフォルトの名無しさん :03/02/24 01:02
シェルエクステンション詳しい人いらっしゃいますか? 海外のサンプルを試行錯誤しながらいじくり回して やっと少しずつ理解(?)できてきました。 でも、C、VC系って仕事でもほとんどやったことないから 難しい〜〜〜〜。 まだ、わからないところもあやふやなのでまとまったら 質問しまつ。そのときはよろしくです。
呼んだ?
>>310 レス遅くなってすみません。
DLLがアンロードされないようにって言うのは具体的にどのようにすればよろしいのでしょうか?
と言うか、どう言うことかよく分かりません。呼び出したDLLから抜け出さなければよいって事でしょうか?
具体的にって・・・ まずどのコールバックか書くのが先じゃないか?
>>352 すいません。WndProcってやつです
354 :
デフォルトの名無しさん :03/02/24 22:14
WINDOWINFO 構造体や、GetWindowInfo 関数を使うと 『定義されていない識別子です』となり、コンパイルが通りません。 windows.h をインクルードするだけでは使えないのでしょうか?
>>354 windowsx.hをインクルードしろ。
>>355 すみません、やってみましたが無理でした…
>>356 一応MSDNには載ってたんですけど、どうなっているんでしょう。
359 :
デフォルトの名無しさん :03/02/24 22:31
>>357 > Windows NT/2000/XP: Included in Windows NT 4.0 SP3 and later.
> Windows 95/98/Me: Included in Windows 98 and later.
と書いてあるのであれだ、_WIN_VER とか何かそういう
バージョン指定の #define をしなけりゃ使えないはず。
>>358-359 今までそんなこと全然気にせずにやってきたので
何がなんだか分かりませんでした。
ええと、VCにサービスパックか何かを当てる必要があるのでしょうか?
それとも、#defineするだけで良いのですか?VCは6.0なのですが…
>>360 #defineの値が重要だよー。
いくつにするかはヘッダファイルにgrepすればわかるでしょ…。
>>360 今となってはVC++6は「新しい」とは云いかねるものであって、
事実VC++6のSDKヘッダは最新の物よりかなり古い。
もしVC++6のSDKヘッダに含まれていない新しい機能を使いたいのであれば、
MicrosoftのPlatform SDKダウンロードページから、新しいのを落とす必要が或る。
MicrosoftはVC++6のSPに新しいSDKを入れる気はないようだね。
バージョン絡みのマクロだが、大きくは
1) OSのバージョン(WIN_VER)
2) IE(shell)のバージョン(_WIN32_IE)
があるんで注意。勿論、普通はコンパイラに対して-Dオプションで
渡すだけでよい。SDKのinclude/にあるWin32.makあたりも参考にしる。
waveIn系のAPIで音声をマイクから録音するとき、録音している最中に録音している音がスピーカーから出ないようにする方法は無いでしょうか?
いろいろとアドバイスありがとうございます。 とりあえず、ヘッダファイルの中に #define WINVER 0x0500 というのを見つけたので、よく分からないけど プログラムの先頭の部分で#define WINVER 0x0500としたらコンパイルは通りました。 今までこういう勉強をしてこなかったのでわけ分からないですが いろいろ調べて理解できるようになりたいです。
ええと、WINDOWINFOみたいな #define WINVER 0x0500 で使えるようになったものを使うと > Windows NT/2000/XP: Included in Windows NT 4.0 SP3 and later. > Windows 95/98/Me: Included in Windows 98 and later. にあるように、NTのSP3より古いのでは実行できなくなる、って解釈でOKですか?
366 :
デフォルトの名無しさん :03/02/25 02:34
WINAPIでウィンドウを作らずにプログラムを実行するってことは出来るのでしょうか?
できる
じゃあ、DLL化したときにウィンドウを作るってのはできますか?
369 :
デフォルトの名無しさん :03/02/25 03:19
apiの定数とか全て網羅したファイルは何処のありますか? フリーのapiビュアー付属の物にはは、SS_NOTIFYなどが 載ってないみたいでした。
>>368 できるけどそのウィンドウはDLLじゃなくてexeが所有する
リストボックスは WM_CTLCOLORLISTBOXで文字色を変えれたけど、 リストビューコントロールの場合はどのようにするか教えてください。
自己レス SendMessage( hWndLView, LVM_SETTEXTCOLOR, 0, RGB(255,255,250) ); で出来ました。
>>371 int __declspec(dllexport) __stdcall WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
PSTR lpCmdLine , int nCmdShow ) {
HWND hwnd;
MSG msg;
WNDCLASS winc;
winc.style= CS_HREDRAW | CS_VREDRAW;
winc.lpfnWndProc= WndProc;
winc.cbClsExtra= winc.cbWndExtra= 0;
winc.hInstance= hInstance;
winc.hIcon= LoadIcon(NULL , IDI_APPLICATION);
winc.hCursor= LoadCursor(NULL , IDC_ARROW);
winc.hbrBackground= (HBRUSH)GetStockObject(WHITE_BRUSH);
winc.lpszMenuName= NULL;
winc.lpszClassName= TEXT("ahohhh");
if (!RegisterClass(&winc)) return -1;
いきなりこれで-1が返って来てしまうんですが、どうしてかわかりません。
EXEの時には作れてたと思うんですが・・・
そのWinMainはどうやって呼び出してる?
ごめんなさい、呼び出す時に変な変数はいってました。 助言ありがとうございました。
またまた、すみません。 WinMainを呼び出す時に値を渡したいときはどうしたらよろしいのでしょうか? もしくは、値を渡さず呼び出すにはどうしたらいいでしょうか? (HINSTANCE hInstance などに値が入らないようにしたいのです )
>>377 >値を渡さず呼び出すには
無茶いわないの。
ごめんなさい、ここらへんのことあまりよく分かってなくて・・・ ほかの関数からWinMainを呼び出して、HINSTANCE hInstanceの値を使う時ってどうすればいいのですか?
何か化けた・・・ 「何がやりたいんだよ」と書いたんだが
WinMain関数をそのままdllに移してるって事? で、先のWinMainはプログラムエントリではない、と。
>__stdcall WINAPI これって2度同じこと書いてることにならない?
>>382 もう全部書いちゃいますと、VBからCとAPIで作ったDLLを呼び出して、
そのDLLでウィンドウを作る。
作ったウィンドウの中で作業し(コールバック等も使用)値をまたVBに戻す
ってことをしたいと思ってます。
ですので、呼び出す関数はWinMainじゃなくてもいいので、ウィンドウを作成して
hInstance等の値さえ取れればどう言う方法でもかまいません。
>>383 すいません、そこら辺はコピペでやってたのでよく分かりませんでした・・・
385 :
デフォルトの名無しさん :03/02/25 14:08
スレ違いかもしれませんが他によさげなスレがないのでここで質問します。 Shell Namespaceでごみ箱やマイコンピュータのような仮想フォルダ(アイコン)を デスクトップ上に作成しました。 この時、このアイコンに他のファイルをD&Dし そのファイルに対して何かしらの処理を行いと思います。 Shell ExtensionのようにレジストリにDropHandlerを定義し DLLにIPersistFileとIDropTargetをインプリメントすれば可能かと思いましたが アイコン上にドラッグしても何も反応しませんでした。 このイベントを取得するにはどのようにすればいいのでしょうか。 Shell Extensionでは上手くいっているのですが。
すみません、ほんと初心者なもので・・・ DllMainってただの宣言か何かだと思ってました・・・ で、DLLが他のプログラムから呼び出されるとまず最初にDllMainが実行されて、 それから呼び出した関数が実行されるって感じでよろしいのでしょうか? それで、hinstDLLがhInstanceに当たる物って事でよろしいでしょうか?
HINSTANCEの値が欲しいだけ? だったら、GetModuleHandle(NULL)がヨロシ
DLLでウィンドウ作るときってDLLとexeのどっちの hInstance渡すの?
>>389-389 DLLです。
ってことはGetModuleHandle(NULL)をDLL内で指定すればどこでもDLLのhInstanceが得られるってことですね?
391 :
デフォルトの名無しさん :03/02/25 15:32
あれ?DLLでGetModuleHandle(NULL)すると呼び出したEXEのハンドルが返らなかったっけ? あやふや、スマン。
GetModuleHandle(NULL)の返り値は呼び出し側プロセスの作成に使われたファイルのハンドル。 DLLのHINSTANCEが欲しいならDllMainの引数保存しとけ。
ありがとうございます。 その方向で行かせてもらいます。
394 :
デフォルトの名無しさん :03/02/25 17:24
ウィンドウを作らない時のコールバックはどのようにしたらよいのでしょうか? WinMainに返すってことは出来るのでしょうか?
コールバックが何を指してるのか意味不明
396 :
デフォルトの名無しさん :03/02/25 18:15
関数が返す値を整数で2つ以上にすることは出来るでしょうか?
397 :
デフォルトの名無しさん :03/02/25 18:18
398 :
デフォルトの名無しさん :03/02/25 18:19
>>397 ありがとうございます。
>>396 std::pairもしくはboost::tupleを使え。
余裕でキリ番ゲット
もうぜんぜんAPIの質問じゃないな
ものすごく初歩的な質問ですみません。 C、C++をフリーのコンパイラを使って勉強してるんですが Win32APIはVBかVC++環境でしか使えないんでしょうか? Win32API関連の書籍の冒頭部分を読むと大抵の本はそのふたつの環境の ことを前提に書いてあるようなので…。 全部読めばわかったのかもしれないんですけど 2時間ほど本屋でいろいろ読んでたら店じまいになってしまったので ネットで検索したんですが、どこみてもVC++前提なんで… C、C++とフリーコンパイラ環境では無理なんでしょうか? Windowsプログラムつくりたいんですけど フリー環境では無理があるでしょうか?
そのコンパイラ環境とやら次第だな。
LSI C-86 Ver.3.30試食版っていう Cの入門書についてたやつをそのまま使っています。 なにやらgccやbccのほうが人気があるようですが…
>>404 LSI-Cの試食版ではWindows GUIのプログラムは作れないよ。
せめて Borland-C++ 5.5.1 にしとけ。
windows.h をインクルードすれば、Win32API関数は使える。
>>403 ,405
返答ありがとうございます。
助かりました。
Cの入門書をひととおり終えて
今更ながら
「Cってwindows専用の言語でもなんでもないからwindowやwindowsの
オブジェクトを扱う関数なんてどにも載ってなくて当たり前か…」
などと絶望に打ちひしがれていた馬鹿者です。
Borland-C++ 落としてwindos.hを#includeすれば
使えるのなら、Win32API関連の本を買っても無駄な出費には
ならないようですね。
結構高い上にやたら分厚いものなので買うかどうか悩んでました。
何のレスも無い状態で流れてしまったのでもう一度だけ。 Shell Namespaceでごみ箱やマイコンピュータのような仮想フォルダ(アイコン)を デスクトップ上に作成しました。 この時、このアイコンに他のファイルをD&Dし そのファイルに対して何かしらの処理を行いと思います。 Shell ExtensionのようにレジストリにDropHandlerを定義し DLLにIPersistFileとIDropTargetをインプリメントすれば可能かと思いましたが アイコン上にドラッグしても何も反応しませんでした。 このイベントを取得するにはどのようにすればいいのでしょうか。 Shell Extensionでは上手くいっているのですが。
>>407 適当に答えるけど、SHChangeNotifyRegisterで監視するってのはどうよ。
>>408 すみません、MSDNにも載ってなかったので調べるのに時間がかかりました。
しかしこればWindows2000以降でしか使えないようですね。
それにウィンドウにメッセージが送られるみたいですが
Shellなのでウィンドウなど持っていませんし
仮にダミーを作っておく事も出来ますがあまりにスマートでないです。
何かレジストリに登録して何かをインプリメントすればShellから呼ばれるはずです。
レジストリの何処に何を登録して、DLLに何をインプリメントするのか、それが判るといいのですが。
低レベルサウンドAPIを使っているのですが、バッファ再生終了までの期間 mainの処理を待たせたいのですが、この場合どういう方法がありますか? Sleepのような関数があれば良いのですが、ざっと見た所ない様子だったので スレッドを使ってメインルーチンとの同期を取るべきなのでしょうか。 それともWaitSingleObject何とかオブジェクトを使って同期をとるのが 良いのでしょうか?
コールバック関数使用してWOM_DONEとか
>>409 ありがとうございます。
本当に助かります。
ようやく何を勉強すればいいのかが
わかりました。
414 :
デフォルトの名無しさん :03/02/26 06:35
NICのインタフェース名一覧を取得するにはどうしたらよいですか? ※「ローカル エリア接続」みたいなやつ。
415 :
デフォルトの名無しさん :03/02/26 06:46
Win32APIと.NETの関係を教えてください。
>>415 低レベル関数ライブラリと高レベルクラスライブラリ
418 :
デフォルトの名無しさん :03/02/26 06:52
これからWin64APIも出るの??
いや、これからじゃないし。
>407 Shell Commandオブジェクト ってゆうのは? 使ったこと無いけど。
あの分厚いリファレンス本買う金があるなら、 同じくらいの金額でC++Builder Personal買った方が便利な気もするが
422 :
デフォルトの名無しさん :03/02/26 13:27
while(GetMessage(&msg , hwnd , 0 , 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } DLL内で、このループとコールバックを使って制御しようと思ってるのですが ウィンドウの×ボタンを押すと case WM_DESTROY: PostQuitMessage(0); return 0; となりループが終わり閉じるようにしています しかし、これをやるとDLLを呼び出す側の親ウィンドウも閉じてしまいます 解決法はないでしょうか?
424 :
デフォルトの名無しさん :03/02/26 13:52
ウィンドウを破棄する関数ってありますか?
>>422 PostQuitMessageとGetMessageの仕組みを良く理解してみよう
>>427 どう言うことかさっぱりわかりません・・・
PostQuitMessageから受け取ったメッセージをGetMessageはさらにどこかに送ってるとかのことですか?
429 :
デフォルトの名無しさん :03/02/26 15:41
コンパイラそのものというよりリソースエディタと デバッガがないととてもやってらん・・・
>>420 有難うございます。
調べてみましたがそれはダブルクリックをした際の動作の設定みたいです。
いわば関連付けと同じ物のようです。
D&D時の呼び出し方法なのでこれとは残念ながら違いました。
>>428 アプリケーションはWM_QUITで終了するように作られてるわけだよね?
GetMessageはWM_QUITを受け取ると0を返すから、
whileを抜けるようになっているわけだ。
PostQuitMessageを削除すれば望みの動作になるんじゃないかな?
>431 Command=REG_EXPAND_SZ:"rundll32 ..." の部分を Command=REG_EXPAND_SZ:"Hoge.exe %1 ..." のようにすれば、もしかしたらドロップした時に%1には パス名がついて起動されるのかな、と思ったのだけど。
ごめんなさい、すっごく私の書き方が悪かったです。 EXEで一度ウィンドウを開いて、DLLを呼び出してさらにそのDLL内で別のウィンドウをもう一つ開こうとしています。 だから、結局、親ウィンドウと子ウィンドウの2つが開かれるわけです。 で、DLLで開かれた子ウィンドウのほうを閉じると親ウィンドウも閉じてしまうのを直したかったのですが・・・ それと、もう一つ不具合が・・・(T_T) DLL側の子ウィンドウですが、DLLにせずEXEにすると起動して計算しすぐに閉じるようなプログラムにしてあります。 それをそっくりそのままDLLにしたら起動して計算後ウィンドウが消えずに残ってしまっています。 DestroyWindow()を使ってもいいのですが、ウィンドウが残ってるってことは、まだDLL内のプログラムは動いてる(ループしてる?)ってことなんですよね? しかも、調べてみたらreturnの値が返って来てる・・・ どうしたらいいか全然わかりません。 どなたか助言お願いします。
どなたか助けてください。
>>258 WC_LISTVIEW を
TEXT( "SysListView32" ) と TEXT( "SysListView" ) に変えてみたところ、
前者はエラー、後者は通ります
#define _WIN32
#define WINVER 0x0400
#define _WIN32_IE 0x0400
#define _WIN32_WINNT 0x0400
comctl32.lib のバージョンは 5.80 です
訂正: comctl32.dll のバージョンは 5.80 です
>>433 それだと例え出来たとしても普通のexeにドラッグするのと同じようになるかと。
引数制限も出るだろうしシェルの意味が無くなってしまいます。
>>434 良く分かんないけど、dllとexe(子と親)それぞれメッセージループを持ってるってこと?
マルチスレッドならともかく、シングルスレッドでそれをやるのはヘン
>>438 うぁ、もしかして分けわかんないことしてますか?
ほんと初心者で・・・APIとか最近知ったばかりで・・・
私の最終的にやりたいことはDLLの関数を呼び出すと今マイクから入ってきている音量を返すって
ことをやりたいだけなのですが、調べてるうちにどんどんわからなくなってしまいました・・・
もしかして、コールバックとかウィンドウ作ったりしなくても出来ちゃったりします?
放置かよ!
雑談スレから流れてきました DLLについて聞きたいのですが… /* begin */ int x = 3; BOOL WINAPI DllEntryPoint(HINSTANCE hinst, DWORD whyCalled, void* rsv) { return(TRUE); } /* 以下にxを使うような関数が並ぶ */ /* end */ こういうファイルからDLLを作ったとします。 このDLLが、なんらかの実行ファイルから LoadLibrary()されたとします。 外部変数のxは、メモリのどこらへんに あるのでしょうか? メモリにロードされたDLLの中ですか? だとしたら、複数の実行ファイルが 1つのDLLをロードしたら、xについて 競合がおきるのでしょうか? あと、3で初期化するように書いてますが いつ初期化されるのでしょう? また、constで修飾していませんが、 DLL内の関数で、自由にread/writeしたら 呼んだ実行プロセスの方に影響しますか?
> メモリにロードされたDLLの中ですか? はい。 > だとしたら、複数の実行ファイルが > 1つのDLLをロードしたら、xについて > 競合がおきるのでしょうか? 起きません。デフォルトでプロセスごとに別々の 物理メモリが割り当てられます(共有させることも可能) > あと、3で初期化するように書いてますが > いつ初期化されるのでしょう? DLLがプロセスのアドレス空間にマップされた瞬間です。 DLLのイメージに初期値がすでに含まれています。 > また、constで修飾していませんが、 > DLL内の関数で、自由にread/writeしたら > 呼んだ実行プロセスの方に影響しますか? 意味がわかりません。
444 :
デフォルトの名無しさん :03/02/27 04:22
コンソールアプリでメッセージを受ける部分があります while(メッセージ判定){ } でウィンドウに送られてくるようなメッセージ待ちをしているのですが、待ちの 間CPU消費が大きいです。よい方法はありますか?
445 :
名無し@沢村 :03/02/27 04:44
ありがとうヌッヒー沢村。きみわ正義の味方だね。でもあまり役に立たなかった けれど。 僕はWaitForSingleObjectを使えるように努力しようと思うよ。ヌッヒー。
447 :
デフォルトの名無しさん :03/02/27 07:19
>>444 ごく普通にGetMessageではいかんのか?
>429 lccwin32は? リソースエディタだけ使いまわす手もある。
449 :
デフォルトの名無しさん :03/02/27 09:46
lcc-win32でOLELoadPicture()が使えないんですが なんかヘッダがおかしい様で 誰か回避した猛者はいませんか
すみませんでした、もうちょっと自分で勉強してみます。
451 :
デフォルトの名無しさん :03/02/27 12:07
WM_CREATE見たいな自分で作ったメッセージをコールバックのメッセージキューに入れることはできますか?
できます
どこに書こうか迷ったけど、XP用APIが追加されるってことで一応ここに。
Microsoft、Windowsに依存するP2Pアプリの開発促進
http://www.zdnet.co.jp/news/0302/27/ne00_p2p.html > 同社は2月26日、「Windows XP Peer-to-Peer Software Development Kit」の
> ベータ版をリリース。このソフト開発キットの狙いは、ソフトプロバイダーや企業の
> 開発者がWindows XP対応のP2Pアプリケーションを容易に構築できるように
> することにある。
454 :
名無し@沢村 :03/02/27 17:02
>>446 MsgWaitForMultipleObjects()
455 :
デフォルトの名無しさん :03/02/27 17:12
CALLBACK_FUNCTIONやCALLBACK_THREADはCALLBACK_WINDOWでのウィンドウハンドルに当たるところに 何を指定すればいいのでしょうか?
プログラム板の皆さんありがとうございました。 おかげで目的のものが作れる目処が立ちました。 ほんと、ありがとうございました。
>>443 >>起きません。デフォルトでプロセスごとに別々の
>>物理メモリが割り当てられます(共有させることも可能)
この「デフォルトで」というのは
どういうことでしょうか?
別々にさせるか、共有させるか、
指定できるということですか?
>>443 指定できるならば、どうやって?
変数を宣言するときに、なんらかの
修飾をするのでしょうか。
例えば、ちょっと違うけど、
registerとかvolatileのように、
_shareとか?
あるいはコンパイラ(リンカ)で
大域変数を共有させる…みたいな
オプションをつけるのでしょうか?
それともロードするときに大域変数を
共有させるか否かを指定するのでしょうか?
LoadLibrary()には特にオプションを
指定できないようなので、他に
LoadLibraryShare()のような
APIがあるのでしょうか?
>>457 ,458
質問ばかりでなんだかキツイ口調に
なったみたいでごめんなさい
>>442 悪いことはいわんからAdvanced Windowsでも読んで体系的な知識を身に付けろ。
それを理解するのに必要な知識自体がかけてるから。
>>458 VC++なら共有したい変数は #pragma data_seg("hoge") 〜 #pragma data_seg()
で挟め。hogeは8文字以内の任意のデータセグメント名。
ちと訂正。「データセグメント名」ではなくて「セクション名」。
9x系OSで一度に大量のファイルをコピーするとWindowsが異常に重くなってしまいます。 SHFileOperationで一気にコピーする方法とfopen, fread, fwrite で一つづつ複製する方法を試したのですが、どちらも駄目でした。 このような症状を避けるにはどうすればよいのでしょうか。 どうかよろしくお願いします。
465 :
デフォルトの名無しさん :03/02/28 07:59
>>414 ,441
通信技術板住人のほうが詳しいかも。
>463
DOS時代には10〜20ファイルくらい一度にまとめてオープンしてから読み込んだり
書き込んだりしてたツールがいくつかあった。
openとread/writeを交互に行うとディスクのヘッドが管理領域とデーター領域を
往復するので遅い(SHFile〜も同じ仕組み?)
464が言うようにキャッシュの関係もあるかも。
467 :
デフォルトの名無しさん :03/02/28 08:13
>414 GetInterfaceInfo
469 :
デフォルトの名無しさん :03/02/28 13:52
VC++6.0でMDIアプリケーションを作っているのですが Debugビルドをした時は正常に動作するのにReleaseビルドをした時に 一部の動作が期待したものと違ってしまいます。 具体的にはCreateWindow()で作成したスクロールバーやオートチェックボックスの動作が 違います。自作のclassの動きが違っている可能性もあるのですが、ビルドの設定の違いで プログラムの動作が違ってくる原因は何が考えられるでしょうか?
>>469 初期化していない領域を参照したとかデバッグモードのマクロが効いているとか依存するライブラリが違うとかそんなあたり
レスありがとうございます。 初期化していない領域の参照というのが気になりましたので 検索したところ、それらしき情報を見つけることが出来ました。 www.bekkoame.ne.jp/ha/yoshi_s/tips/vcpp.html#debug_release ↑にあるように、変数を初期化するのとしないのとではデバックとリリースで 結果が変わるということが確認できました。というわけで、私のプログラミング作法が ヘタレだった、という説が有力となりました。(戦場では通用しないコードだったようです) これから、変数まわりを一つ一つチェックしてみます(;´д`)
MessageBoxAPIについて教えてください。 MessageBoxを最前面に表示するためにMB_TOPMOSTフラグを立てていました。 しかし、とあるお客様のPCでこのフラグを立てても最背面に表示されてしまいます。 OSはWindows2000Pro+SP3 開発はVC++5.0(Non MFC)です。 自分のPCでは再現できずお客様のところへは簡単には行けません。 そこでMB_SYSTEMMODALフラグに変更したところ最前面へは表示される ようになったのですが、そのメッセージボックスはアクティブな状態で 表示されないようです。 なにかヒントなどあれば教えてください。
>>473 TOPMOSTなウィンドウが他にもあったら、MB_TOPMOST指定しても、
必ずしも最前面にはならない罠。
MB_SYSTEMMODAL + MB_SETFOREGROUND はどう?
>そのメッセージボックスはアクティブな状態で表示されないようです
MB_SETFOREGROUND指定しても、自分がフォアグラウンドになるための条件(MSDNに載っ
てるはず)があるので、必ずしも望みどうりにはならない。(要裏技)
>>474 ありがとうございます。
MB_TOPMOST+MB_SETFOREGROUNDは試してもらったのですが
だめでした。
そもそもMB_SYSTEMMODALってあまり指定しないほうがよいのかなーと
ヘルプを読んでいて思いこんでしまって。
今度、MB_SYSTEMMODAL + MB_SETFOREGROUNDを試してもらおうと
思います。
Spy++ とかで見てもらえば原因が分かるんじゃないすか? だめすか? そうすか。
477 :
デフォルトの名無しさん :03/02/28 23:29
WM_CREATE時に SetWindowLong関数でWS_EX_TOOLWINDOWを指定すると タイトルバーとクライアント領域の間に隙間が出来てしまうのですが 解決する方法はありますか? 隙間の幅は数ピクセルで通常のタイトルバーとの差分ほどです。 その部分はクライアント領域ではないらしく、描画ができません。
自力解決しました。 SetWindowPos関数にSWP_DRAWFRAMEフラグでいけました。 ウィンドウスタイル変更だけでは不完全なんですね…
479 :
デフォルトの名無しさん :03/03/01 02:44
SetClipboardDataでクリップボードへ設定したメモリ領域は 以後クリップボードが制御するので、アプリケーションが 解放してはいけないとか、CloseClipboardの後ならGlobalFreeで 解放して良いとか解説であるのですが、どっちが正しいのでしょう?
______________
/:\.____\
|: ̄\(∩´∀`) \ <
>>479 !こんなのがありました!
|: |: ̄ ̄ U ̄:|
SetClipboardDataの MSDN の記述が、
The application can read the data,
but must not free the handle or leave it locked.
↓
The application can read the data,
but must not free the handle or leave it locked
until the CloseClipboard function is called.
と改訂されているようだ。
>>480 >>481 サンクス。
両方正しいそうですね。でも自分は
あえて辞めておくことにします。CloseClipboardの
後なら解放してイイよ、とは書いてないし・・・
483 :
デフォルトの名無しさん :03/03/01 08:58
CloseClipboard()した後で他のアプリで同じデータを貼り付けられるためには CloseClipboard()後もGlobalFree()は実行してはならないし、 EmptyClipboard()が中でGlobalFree()してるんだよなきっと。 Windowsのソース持ってないからあくまで想像だけど、 そうじゃないと辻褄が合わない。
484 :
デフォルトの名無しさん :03/03/01 10:56
俺はGlobalFreeしてるけど動いてるなあ…。 SetClipboardDataって、確保した領域からクリップボードの内部バッファに 転送する命令だとばかり思ってたし。 でも確かに転送するだけならGMEM_SHAREフラグは要らんわな。 使用中のGMEM_SHAREメモリを開放したら実際の開放は使用が終わるまで 遅延されるとかの安全装置が入ってると見た。
485 :
デフォルトの名無しさん :03/03/01 11:16
動作中の他アプリのフルパスを得たいのですが、Process32First/Nextではファイル名のみしか帰ってきません。 フルパスをなんとかして得る方法は無いものでしょうか‥‥全ディレクトリ検索以外で∧||∧
>>484 ただ単に偶然WindowsのGCが延期されているという考え方も。
GlobalFreeの問題はWin16の頃の名残だっつーの Win32では解放して問題ない。
GetModuleFilenameExとか>485
>>488 そっちでできないとか思ってましたが、EnumProcessModulesの引数間違えてました‥鬱だ氏脳‥‥
な訳で下のコードで動きました
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processId);
EnumProcessModules(hProcess, &hModule, sizeof(hModule), &out);
GetModuleFileNameEx(hProcess, hModule, filename, MAX_PATH);
printf("%s\n", filename);
CloseHandle(hProcess);
エラー処理は省略
490 :
デフォルトの名無しさん :03/03/01 12:46
>>487 実際にCloseClipboard後にGlobalFreeするとさ
自分とこでGlobalAllocしたオブジェクトは使えなくなり
他のアプリでGlobalAllocしたオブジェクトは次も使えるよな
貼り付けを行うところのコードを
そのオブジェクトがどこでアロケートされたのかに対しては
透過的に書けるのが「問題ない」ってことだと思うぜ
つまりCloseClipboard後のGlobalFreeには問題があると言いたい
前にウィンドウのキャプションをクリップボードにコピーするアプリ作ったけど 1度目のコピーの時は問題ないけど2度目コピーしようとすると SetClipboardDataが失敗するって現象が起きて困った事があった。 そう、原因はGlobalFreeをしていたからで、それを止めたら問題なくなった。 そのアプリからの流用だがためしに以下の関数を2度続けて実行してみるとわかる。 BOOL CTestDlg::CopyToClipboard(LPCTSTR lpString) { HGLOBAL hMem = ::GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, strlen(lpString) + 1); if (!hMem) return FALSE; if (::lstrcpy((char*)::GlobalLock(hMem), lpString) && OpenClipboard()) { ::GlobalUnlock(hMem); if (::EmptyClipboard()) { if (::SetClipboardData(CF_TEXT, hMem)) { ::CloseClipboard(); ::GlobalFree(hMem); // コメントアウトすれば正常になる return TRUE; } } ::CloseClipboard(); } ::GlobalFree(hMem); return FALSE; }
CloseClipboardの後に再ロックして領域を上書きしてもクリップボードは元データのまま。 クリップボードは渡したデータのコピーを管理していると見た。
>>491 > 2度続けて実行
> SetClipboardDataが失敗する
って具体的にどうやるとどうなる?
for 文で10回ループさせてみたが何の問題もない
(TRUE を返しテキストも設定されている)ようだが。
ちなみに WinMe で実験。
夜にNT系で再テストしてみるよ。
>>490 OSが内部でコピーを持ってるから問題ないよ
つか、自分とこでGlobalFreeしたデータを読もうとするのは問題外。
再度クリップボードから正常に動く
495 :
デフォルトの名無しさん :03/03/01 17:45
>>494 どういう場合にコピーを作るんだ?
少なくとも490が示したデータの中には
コピーを作らない場合があるようだ
コピーがあればGlobalFreeしても構わないと言うなら
コピーがあるか否かはどうやってチェックするんだ?
磔が2回目かどうかはどうやってチェックするんだ?
透過的な操作という観点からは
CloseClipboard後のGlobalFreeは
問題だらけだよな
追伸 どういう場合にコピーを作ると《保証されている》んだ? 492や493にも同じことを問いたい
497 :
デフォルトの名無しさん :03/03/01 17:59
ウィンドウハンドルから、 そのウィンドウを作成したインスタンスの ハンドルを取得する関数ってないですか? HINSTANCE GetInstHandle(HWND hWnd) なんてやつ。
499 :
デフォルトの名無しさん :03/03/01 18:01
>>498 その文書が《保証している》ケースで
コピーが作られない場合を490は示している
500 :
デフォルトの名無しさん :03/03/01 18:02
>>497 GetWindowLongのGWL_HINSTANCE
>>497 GetWindowLong(GWL_HINSTANCE)
ただし他プロセスのウィンドウには無効
GetWindowModuleFileName() なんてのもあったが使える環境に制限があったような
505 :
デフォルトの名無しさん :03/03/01 18:11
>>505 つまり、499 の発言はまったくの無根拠という事か?
単純に文字列をクリップボードにコピーする関数をループで呼び出すと GlobalFreeする場合は2回じゃないけど、数万回回してると不正落ちするけど、 GlobalFreeせずに無限ループさせても割り当てメモリ量変わらないし、 解放しないのが正しいっぽい。
あー、だけど、データがコピーされないことは無かった。 クリップボードにデータをセットした後、 ハンドルをロックして解放前に0でfillしてたけど、 確実に毎回クリップボードにデータは反映されていた。
509 :
デフォルトの名無しさん :03/03/01 18:48
>>506 おまえヴァカ?
499が何の話をしているのか
読めてねーじゃねーか
>490は示している
SHFileOperationの戻り値を全部知りたいんですけど・・ わからなくて困ってます。 おしえてくさい。
>>509 書き捨てコードを95OSR2/98SE/Me/2kでテストしたら、
まあ、結局
>>490 の先頭三行は事実無根だったわけだが。
クリップボードに他アプリの(以前の)データなんて残らなかった
>>510 おまえヴァカ?
499 が 490 を支持する根拠は何も無いんだろと言ったのに。
根拠があるなら 490 じゃなくても回答可能だろうが。
テスト環境はMe case WM_LBUTTONDOWN: { HANDLE h = LocalAlloc(LMEM_MOVEABLE, 6); // GlobalAlloc(GMEM_MOVEABLE, 6); char* p = (char *)GlobalLock(h); lstrcpy(p, "Hello"); GlobalUnlock(h); OpenClipboard(hWnd); EmptyClipboard(); SetClipboardData(CF_TEXT, h); CloseClipboard(); } break; case WM_RBUTTONDOWN: { OpenClipboard(hWnd); HANDLE h = GetClipboardData(CF_TEXT); CloseClipboard(); char* p = (char *)GlobalLock(h); MessageBox(hWnd, p, "WM_RBUTTONDOWN", MB_OK); GlobalUnlock(h); GlobalFree(h); } break;
訂正: 失礼、テスト環境はXP
支持? 評価していただけだが
>>513 > HANDLE h = LocalAlloc(LMEM_MOVEABLE, 6); // GlobalAlloc(GMEM_MOVEABLE, 6);
何で?
>>516 「評価」 なんてどうとでも取れる言葉を使うな。
あんたの主論は一体何なんだ?
ありゃしまった 漏れは517ではない、513だ 悪りぃ悪りぃ
>>519 490の言うことに賛成でも反対でもない
ただ490が出した情報が事実ならどうだと言ったまで
妙なバイアスを持つのを止めはしないが
つまらんよ
>>518 HLOCAL と HGLOBAL を同一とみなす根拠には足らないと思うけど・・・。
とりあえず490以降のageてて半角カナの人達はsageましょう。 同一人物だろうけど。
悪りぃ、そっちは漏れが古いせいだろう(藁
繰り返しの呼び出しではないが、1 回の呼び出しにおける状況を観察した。 1.GlobalAlloc() でハンドルを得る。これを A とする。 2. SetClipboardData(CF_TEXT, A) 後、ただちに GetClipboardData(CF_TEXT) すると A が返ってくる。 3. その後 A には、GlobalLock() を使っていくらでも変更ができる。 4. CloseClipboard() の前でも後でも、GlobalFree(A) するしないにかかわらず、 次に GetClipboardData(CF_TEXT) で得られるハンドルは A とは異なる。 これを B とする。 5. B の内容も、 2. で SetClipboardData(CF_TEXT, A) した時点のもので、 A とは異なる。 つまり、3. における変更は全て無視されている。 つまり、SetClipboardData(CF_TEXT, A) の時点でどこかにコピーが確保される のは間違いない。 つーか、CloseClipboard() の前で GlobalFree(A) しても動いてしまう。 ちなみに、GlobalAlloc() の代わりに LocalAlloc() を使っても同様だった。
>>493 あー、環境はWin2kでVC++6.0の場合です。
んでボタン押すごとに1度呼び出すようにしてみると分かりやすい。
1度目は成功するが2度目失敗する。
でも3度目はリセットされるのか成功し、4回目はまた失敗する。
その繰り返し。
>>526 ウィンドウアプリだと何かポカする可能性が高いから、コンソールで
試してみてくれ。
そんな症状どうにも再現せん。
>>495 > どういう場合にコピーを作るんだ?
いちいち場合分けする必要なんてないだろ。
つ ね に じゃないの?
大雑把に疑似コードで説明すれば、こういうこと。
HANDLE g_hMem; クリップボードが持っている
SetClipboardData(hMem)
{
g_hMem = GlobalAlloc(GlobalSize(hMem));
memcpy( GlobalLock(g_hMem) , GlobalLock(hMem) );
GlobalUnlock(hMem); GlobalUnlock(g_hMem);
}
>>513 > case WM_RBUTTONDOWN:
> {
> OpenClipboard(hWnd);
> HANDLE h = GetClipboardData(CF_TEXT);
> CloseClipboard();
>
> char* p = (char *)GlobalLock(h);
> MessageBox(hWnd, p, "WM_RBUTTONDOWN", MB_OK);
> GlobalUnlock(h);
>
> GlobalFree(h);
> }
このコード間違ってるよな。
GlobalLock() は CloseClipboard() の前に行う必要があるはず。
>>527 #include <windows.h>
BOOL CopyToClipboard(LPCTSTR lpString)
{
HGLOBAL hMem = ::GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, strlen(lpString) + 1);
if (!hMem)
return FALSE;
if (::lstrcpy((char*)::GlobalLock(hMem), lpString) && OpenClipboard(::GetDesktopWindow()))
{
::GlobalUnlock(hMem);
if (::EmptyClipboard())
{
if (::SetClipboardData(CF_TEXT, hMem))
{
::CloseClipboard();
::GlobalFree(hMem); // コメントアウトすれば正常になる
return TRUE;
}
}
::CloseClipboard();
}
::GlobalFree(hMem);
return FALSE;
}
int main()
{
if (!CopyToClipboard("test")) { ::MessageBox(NULL, "1回目失敗", NULL, MB_OK) };
if (!CopyToClipboard("test")) { ::MessageBox(NULL, "2回目失敗", NULL, MB_OK) };
return 0;
}
これでも2回目失敗と出る。
実験した人は実験した環境もお願い。
>>530 何故かはわからないが、SetClipboardData() が成功したところで、
::CloseClipboard();
::OpenClipboard(NULL);
::CloseClipboard();
とやると失敗しないようになった。
ただ、その場合は直後の GlobalFree() が失敗するので、GlobalFree() を
呼ばないのが正解なのかも知れない。
OpenClipboard(::GetDesktopWindow()) を OpenClipboard(NULL) にしたらどちらも成功した。
終了前に 「クリップボードのデータを他のアプリケーションでも使えるようにしますか?」 って聞いてくるアプリケーションがあるけど あれは『はい』を選ぶとどういう処理をするんだろう。
>>535 普通に何もしなけりゃよいと思うが……
逆に『いいえ』で空にするんでない?
>>535-536 あれは、遅延レンダリングをやってるアプリの場合。
そのアプリを終了したら、データ渡す中の人がいなくなるだろ。
538 :
デフォルトの名無しさん :03/03/02 10:07
SDK で CString だけを使いたいのですが、 どうすればいいですか?
ATL使えばいいんちゃう?
540 :
デフォルトの名無しさん :03/03/02 10:11
ATL 嫌いな人
>>535 >終了前に
>「クリップボードのデータを他のアプリケーションでも使えるようにしますか?」
>って聞いてくるアプリケーションがあるけど
>あれは『はい』を選ぶとどういう処理をするんだろう。
内部の特殊なデータ形式を汎用的なデータ形式(画像ならDIBとか)に
するんじゃない?
>539 VC++ 6.0 なんです。
>>538 VC++よく知らないがMFCのヘッダ入れればいいだけじゃ?
#include <vcl.h>
#include <stdio.h>
void main()
{
AnsiString str;
str = "ぬるぽ";
printf("( ´∀`) %s\n", str.c_str());
}
>bcc32 ansistr.cpp vcl.lib rtl.lib
>ansistr
( ´∀`) ぬるぽ
↑BCBの場合はこんなんでAnsiString使えるが
>>538 std::basic_string<TCHAR> を使う
結局、CloseClipboard()後のGlobalFree()はやってはいけないって事かな。 俺も>530をやってみたらエラーになった。(Win2,VC++6.0,sp5) 上手くいく場合は偶々運が良く通ってるだけのような気がする。 Meの場合メモリ管理がいい加減だから何とかなってるのかもね。
547 :
デフォルトの名無しさん :03/03/02 14:17
Atok15で日本語入力をONにしたときに表示される 「ひらがなで入力します」というツールチップを エディットボックス以外でも表示させたいのですが どうすればよいのでしょうか? 日本語入力がONになるタイミングは IMN_SETOPENSTATUSでわかるんですが、 その後どうしたらよいのかが全然わかりません。
SDKで矢印キーが 押された時のメッセージはどうなりますか? WM_KEYDOWNまではわかったんですが 上下右左の区別がつきません
ShowCaretで解決しました。
区別はついたんですが なぜか「○○が押された」っていうMessageBoxを 出した後OKするとでエラーがでます。 あとはbreakしてreturn(0L)で プロシージャ―終了なんですけど・・・ なんでですか?
>>551 >出した後OKするとでエラーがでます。
どうして「どんな」エラーが出たのかを書かないのかねぇ。
window4(アプリ名)が原因で<不明>にエラーが・・・ っていうエラーです ちなみにMeをつかってます すいません 大事なところ書きませんでした
>>553 で、エラーメッセージを省略。どこまで喧嘩を売れば気が済むのか。
window4 が原因で<不明>にエラーが発生しまし た。window4 は終了します。 閉じる(C) 問題が解決しない場合は、コンピューターを再起動して ください。 というダイアログが二回 <不明>の部分がKERNEL32.DLLにかわって1回です。 これで大丈夫ですか
556 :
デフォルトの名無しさん :03/03/02 19:09
>>548 左矢印を押すと、(char)wParam に VK_LEFT が入るらしい。
557 :
デフォルトの名無しさん :03/03/02 19:11
>>555 それ、WM_KEYDOWNとかいう以前の問題な気もするんだが。
WM_KEYDOWNの処理部分の流れは追ってみた?
いろいろ教えてもらって申し訳ないんですが エラーの原因は配列のメモリが少なすぎたからでした たかがこんなミスに・・・ すいませんでした 全くもってWM_KEYDOWNは関係なかったです これからメモリをケチらないようにします かまってくれてありがとうございました
560 :
デフォルトの名無しさん :03/03/02 19:42
そういえば、Rebarの配色が変わらないという問題は解決したのか?
ファイルにあるBMPを縮小拡大して、またファイルに保存したいんですが、 方法がわからなくて困ってます。 StretchBlt だか StretchDibits だか使えばいいことはわかったんですが、 あれを使ったあと、どうやってDCからデータを取り出せばいいのかわかりません。 最終的にはBMPを縮小拡大して保存したいだけなので、 なにかいい方法があったら教えてください。
>561 表示しないなら、DCを使う必要は無いんじゃないか?
>562 おお、やっぱりあるんですか!? 見つけたAPIがDC使うもんしかなかったもんで。 あるならDC使わないやつ使いたいです
>563 メモリDCから、 どうやればビットマップデータを 取り出すのかわからないのです。 GetObjectかな?あれは違うっぽいし。
>>565 GetDIBitsとかでどこかに書き出してBITMAPFILEHEADER込みでセーブ。
GetDIBitsって縮小拡大もできるんですか? 増色・減色のやつかと思ったけど。 とりあえず、縮小拡大のほかに 減色もやるため、GetDIBits使ってやってますが、 あれで縮小拡大もできるならありがたやです。
DIBSectionにStretchDIBits()すれば、直接ピクセル列を取得できる けど、画面モードによっては画質が劣化する。
MenuHelp() の第7引数 lpwIDs Pointer to an array of values that contains pairs of string resource identifiers and menu handles. について質問です。 MenuHelp() の説明では The function searches the array for the handle to the selected menu and, if found, uses the corresponding resource identifier to load the appropriate Help string. って言っているんですが、番兵もいない配列のポインタだけしか渡していないのに 配列のサイズが分からないはずの MenuHelp() は、どうして配列中に該当する ID がないって分かるんですか?
} bmpInfo = (BITMAPINFO *) malloc (bmpFileHeader.bfOffBits - dwBytes); ReadFile(hFile , bmpInfo , bmpFileHeader.bfOffBits - dwBytes , &dwBytes , NULL); hBitmap = CreateDIBSection( NULL , bmpInfo , DIB_RGB_COLORS , &bPixelBits , NULL , 0 ); ReadFile(hFile ,bPixelBits , bmpFileHeader.bfSize - bmpFileHeader.bfOffBits , &dwBytes , NULL); CloseHandle(hFile); *(lpCmdLine + lstrlen(lpCmdLine) - 4) = 0; wsprintf(strFileName , TEXT("%s_not.bmp") , lpCmdLine); winc.style = CS_HREDRAW | CS_VREDRAW; winc.lpfnWndProc= WndProc; winc.cbClsExtra= winc.cbWndExtra= 0; winc.hInstance= hInstance; winc.hIcon= LoadIcon(NULL , IDI_APPLICATION); winc.hCursor= LoadCursor(NULL , IDC_ARROW); winc.hbrBackground= (HBRUSH)GetStockObject(WHITE_BRUSH); winc.lpszMenuName= NULL;
573 :
デフォルトの名無しさん :03/03/02 23:01
指定した時間になったら自動的にデフラグを 行いたいのですがそういうAPIないでしょうか?
それはタスクスケジューラの仕事でしょう
575 :
デフォルトの名無しさん :03/03/02 23:45
アプリケーションが起動してるかどうか検知するAPIありますか?
>>575 ウインドウが出てるならそのウインドウハンドルとか。
577 :
デフォルトの名無しさん :03/03/03 04:48
ドラッグ&ドロップでファイルパスを取得するみたいに IEなどからURLがドラッグ&ドロップされたのを取得するには どうすれば良いでしょうか?
>>577 ファイル名の変わりにURL飛んできたりしないの?もしくはDDEとかか。
DragQueryFileでは無理っぽ?
IDropTarget実装してRegisterDragDrop
581 :
デフォルトの名無しさん :03/03/03 09:37
ダイアログボックスだけのプログラムで、ボタンをクリックすると 「ファイルを開く」のコモンダイアログが開くようにしたいのですが、 クリックするとなぜかプログラムが終了してしまいます。 原因はどこにあるのでしょうか。
>575 プロセスとウィンドウを列挙して目的のアプリを検索する。 Spy++のソースが参考になると思われ。
>>581 原因はあなたにあると思われます。
情報少なすぎ。
>>580 ありがとうございます。ちょっと複雑そうですがやってみます。
GetOpenFileNameのときのOPENFILENAME構造体のhwndOwnerは hDlg(ダイアログベースなのでこれが唯一のウィンドウハンドル) でいいんですよね? caseの中のここの部分をMessageboxにすると正常にメッセージボックスが 出ますので、case文の間違いではないと思います。
>>585 WM_NOTIFYだかの後にbreak忘れててたまたま動作してたんだけど
XPでビジュアルスタイル有効にしたら動きがおかしくなったことがあった
ちなみに今作っているのは、スケルトンみたいなものなので、 GetOpenFileNameをコールした後、なにもせず return TRUE しています。
>なにもせず return TRUE しています。 疑問はないのか
ZeroMemoryをコールしたらうまくいきました。 これって必須なんですね。コールしなくても問題ないと思ってました。 おさわがせしました。
591 :
デフォルトの名無しさん :03/03/03 17:08
質問です。 他のアプリケーションソフトのボタンを SendMessage の BM_CLICK で擬似クリックすると、 コールした方のプログラムは、ボタンが押された方のプログラム処理が終了するまで 待機してしまいますが、これを避ける方法ってないでしょうか? マウスの座標を指定して擬似クリックをすれば回避できるのはわかっているのですが、 直接ボタンへのメッセージする処理で実現できる方法があれば、教えていただきたいのですが。 よろしくお願いします。
593 :
デフォルトの名無しさん :03/03/03 17:14
595 :
デフォルトの名無しさん :03/03/03 17:39
>>591 SendMessageなんか使うから・・・
反応を待たずにF&FならPostMessageだろ
スマン、レス遅杉で誤爆と同等になった 一滴益
597 :
デフォルトの名無しさん :03/03/03 18:53
SDKでクライアント領域にBMPを表示する時 BMPの一部を透明にして表示できますか? また、できる時はどうするんですか?
>597 BMPを透明にするってどういう事? そのBMPを描画しなきゃいいんじゃないの? さもなきゃ、裏のデスクトップのDC持ってきて、矩形をコピーすりゃ 「透明に見える」んじゃない?
わがまま言ってすまないと 思うんですができるだけ高速なのを教えてください 元のBMPとそのモノクロ使う方法以外にありませんか?
さっきから「SDKで」って言うのがひっかるのは自分だけ? おれが勘違いしてんのかな・・・
最前面に出ているとは限らない他のアプリに、 Ctrl+Sなどのメッセージを送ることを可能でしょうか? 以前流れてしまって・・・よろしければご教授下さい。
単にWinGLとかを使わない方法を 教えて欲しかっただけです。 なにか「SDKで」は誤解を招くような 意味を持っているんですか
SDKで、という言い方した場合は、MFCのようなクラスライブラリなんかを 介せず、直接自分でAPIを叩くことを言うな、普通。 んで多分597が言いたいのはGDIのみで処理するということだろうが、 OpenGLだろうがDirectXだろうがSDKはSDKだ。
>>604 602氏じゃないけど、SDKって言っても色々あるからね。WinG SDKとか。
と、姑息に切っておく。後、WinGLってなんじゃらほ。
>>604 まぁ、SDKで通じないことはないけど
DirectX9 SDKを使いましょうとか言われるかもよ。
とりあえずリージョンやレイヤードウインドウでググれ。
いいアドバイスありがとうございます。 しかし本命のBMPの一部を透明にして表示 は教えてくれないんですか 一つのBMPのみでは一部を透明化し表示できないんですか
あとで気づいたんではなれましたが「SDKで」に関しては 606の方がいったとおりクラスライブラリを 使わないということです。 あとWinGLとは画像の処理を高速でできるライブラリです。 しかしシュアウェアなので使いたくありません。
>>609 そもそも質問の意味が曖昧なんだよなぁ。
透明って事は当然そのBMPの後ろが透けて見えるはずだけど
「後ろ」は一体どこなのか?
デスクトップ?それともクライアント領域?
前者なら既に答えはでてるし、
後者ならOS限定でよければAlphaBlendという手がある。
ところで、WinGLってなんか古〜いイメージがあるけど
今でも使えるレベルのものなの?
>>611 後ろはクライアント領域です。
また概に他のBMPが貼り付け先の下にあるものと考えほしいです。
OS限定というのは具体的に何のOSのことですか
あまりに古いのでは使えないくらいなら大丈夫(Win98からなら)です。
WinGLについてですがMeで使えましたよ。
でももっと速いのはあるとおもいますが
うう、またか、また流れていくのかぁ(´Д⊂
どうか
>>603 にお慈悲を…、要するにShift、Alt、Ctrl付きの
メッセージを送れれば御の字なのです。
>>612 AlphaBlend使わないなら、たぶん楽な方法は無いですよ。
自前で描画用のメモリに、抜き色除いて直接転送するか、
元画像から動的にマスクデータを作るとか。
>>612 透明=何も書かない
SetPixel使って1pixelずつ描け。
んで、透明にしたいところは描くな
>>612 あとあれだ、最初はアイコンから初めてみるとか。
あれは簡単に抜き色設定出来たはず。
今回の603さんの流れは多分僕の責です。 SetPixelはきついですが AlphaBlendについて調べてみます。 ダメならアイコンでやります。 いろいろなレスありがとうございました。
そういやDCにリージョンを適用するとどうなるんだっけ? 597の目的のことができるかな。
SetPixelじゃ遅すぎだろ。
>>613 一般的じゃない事だと全然レスが付かないんだよなぁ。
俺も試したことが無いんで想像でしか言えないが、
1、対象アプリのウインドウのVIQに接続
2、keybd_eventでCtrlとかを押す
3、対象アプリのウインドウにWM_KEYDOWNメッセージ送信
というのはどうだろう?
試してみたら結果を教えて。
画像処理でやるなら、GetDIBits()でDCのピクセル列をDIBピクセル列 として取得しそこにBMPのピクセル列を自分で描画、そして結果をDC に描画、という感じかな。
>>620 でもその場合、複数の色の深度に対応した処理を書かなくちゃいけないよな?
8bit、16bit、24bitとか。
この3つで大丈夫かな?
622 :
デフォルトの名無しさん :03/03/03 23:52
みんな、SDKの時は言語はC使ってる? それともC++?
★あなたのお悩み解決致します!!
●浮気素行調査
彼氏、彼女、妻、夫の浮気を調査致します!!
●盗聴器盗撮機発見
あなたの部屋に誰かが仕掛けているかも!!
●行方調査
行方不明になっている家族の消息を調査致します!!
●電話番号から住所割り出し
一般電話、携帯から住所を割り出し致します!!
●ストーカー対策
社会問題ともなっているストーカーを撃退致します!!
その他人生相談からどんなお悩みでも解決いたします!!
直通 090−8505−3086
URL
http://www.h5.dion.ne.jp/~grobal/ メール
[email protected] グローバル探偵事務局
>>619 遅くなりましてすいません。まずVIQからつまづいてました(笑
virtualized input queueって言うんですねぇ…無知無知…。
AttachThreadInputでくっつけた後、keybd_eventと
SetKeyboardStateの2つを試してみました。が…どうも上手く行きませんで(´Д⊂
しかしMSDN見る限りこれで出来そうですし、
619さんの仮説は間違ってないと思います。後は私のやり方が…。
いずれにせよ強力な手がかりを示唆いただき、本当にありがとうございました。感謝です。
>>616 とんでもない、こちらの質問が特殊なせいですので…。
>>621 んなこたない。
どんな色深度でも32bitで取得するのが一番楽。
CreatePopupMenu() を使って複数のサブメニューを持つ階層メニューを動的に作っています。 この階層メニューを破棄する場合、再帰的に全てのサブメニューを DestroyMenu() する必要があるのでしょうか。 それとも、サブメニューの解放は Windows が行ってくれるのでしょうか? よろしくお願いします。
629 :
デフォルトの名無しさん :03/03/04 07:18
>597 CreateDIBSectionは?
>625 Ctrl+Sとかなら、なんかのショートカットなわけで、それなら SPY++あたりでID調べて、WM_COMMAND直接送るのでは いかんかね?
>>625 AttachThreadInput( targetTID, myTID, TRUE );
SetFocus( targetHwnd ); //重要
keybd_event( VK_CONTROL, 0, 0, 0 );
keybd_event( 'S', 0, 0, 0 );
keybd_event( 'S', 0, KEYEVENTF_KEYUP, 0 );
keybd_event( VK_CONTROL, 0, KEYEVENTF_KEYUP, 0 );
とりあえず、これでできましたよ。
>>630 なるほどーその手がありましたね!
今回はちょっと汎用性を持たせなければなので(送り先が不定なんです)アレなのですが、
次回はその方法で行ってみようと思います。スマートで良いですね。
>>632 ぃやった!見事に送れました。
ふーむ、AttachThreadInputでくっつけるだけじゃダメなんですねぇ…。
後はうまくフォーカスを戻せれば…苦節数週間、おかげでようやく解決できそうです。
こんな質問にお答え頂き申し訳ないです。
お二方とも本当にありがとうございました。
634 :
デフォルトの名無しさん :03/03/05 00:10
あるプロセスからCreateThread()で複数スレッドを呼び出して処理をさせているのですが、同時に呼べるスレッド数の上限は決まっているのでしょうか? 大量のスレッド(1000〜10000個)を呼んでも、平気なのですか。
>>634 普通に考えて65536個ぐらいに限界があると思われ。
637 :
デフォルトの名無しさん :03/03/05 00:50
>>633 AttachThreadInputはいらんだろ。
keybd_eventはフォーカスウィンドウにいくから。
>>634 生成できるスレッド数の最大値…ってのが、
レジストリのどっかにあったと思ったが。
>>637 AttachThreadInputしておかないとフォーカスの設定が出来ない
>>634 デフォルトでスタックは1MB
ユーザーが利用可能なアドレス空間は2GB
さあ計算してみよう。
もちろんスタックだけではなくヒープやモジュールにも
使われるから実際にはそれより少なくなる
>>597 激しく遅レスで、もういないと思うが、
Win32APIで簡単にというなら、
SetLayeredWindowAttributesで良いと思う。
>>641 >>597 はクライアント領域にカラーキーかマスク付き転送したかったのでは?
リージョンを組み合わせるとかTransparentBltとか
643 :
デフォルトの名無しさん :03/03/05 11:26
マウスカーソルが重なった際に表示されるヒントを ツールバーではなく、プッシュボタンに実装する手段はありますか? ヒントというのは例えばブラウザの閉じるボタンにカーソルを合わせたときに 出る「閉じる」のポップアップウィンドウのことです。
>>643 MFCかWTLのCToolTipCtrlクラスを使う。
Win32APIだけでやりたいなら
CToolTipCtrlのソースやMSDNの「ToolTip Controls」を見て勉強する。
>644 ありがとうございます。ソース見て勉強します。
>>642 すまそ、文盲ですた。
荒縄で首吊って逝ってk(ry
晩御飯までには帰ってくるのよ。
||/ /|| /∧||∧ ( / ⌒ヽ | | | ∪ / ノ | || ∪∪ ∧ ∧,〜 ( (⌒ ̄ `ヽ _ \ \ `ー'"´, -'⌒ヽ /∠_,ノ _/_ /( ノ ヽ、_/´ \ 、( 'ノ( く `ヽ、 命を粗末にしてはならん! /` \____>\___ノ / /__〉 `、__>
650 :
デフォルトの名無しさん :03/03/05 19:15
>>648 仕事が手緩い
||/
/||
/∧||∧ ∧ ∧,〜
( / ⌒ヽ ( (⌒ ̄ `ヽ _
| | | \ \ `ー'"´, -'⌒ヽ
∪ / ノ /∠_,ノ _/_
| || /( ノ ヽ、_/´ \
∪∪ 、( 'ノ( く `ヽ、 命を粗末にしてはならん!
/` \____>\___ノ
/ /__〉 `、__>
ならばいっそ || || ∧||∧ ( / ⌒ヽ/ ∧ ∧,〜 | | / ( (⌒ ̄ `ヽ _ / | \ \ `ー'"´, -'⌒ヽ / ∪ / ノ /∠_,ノ _/_ | || /( ノ ヽ、_/´ \ ∪∪ 、( 'ノ( く `ヽ、 命を粗末にしてはならん! /` \____>\___ノ / /__〉 `、__>
>>651 仕事が手緩い
||
||
∧||∧ ∧ ∧,〜
( / ⌒ヽ// ( (⌒ ̄ `ヽ _
| | // | \ \ `ー'"´, -'⌒ヽ
∪ /// ノ /∠_,ノ _/_
| //|| /( ノ ヽ、_/´ \
//∪∪ 、( 'ノ( く `ヽ、 命を粗末にしてはならん!
/` \____>\___ノ
/ /__〉 `、__>
653 :
デフォルトの名無しさん :03/03/05 20:08
654 :
デフォルトの名無しさん :03/03/05 21:45
アプリケーションでマウスホイールの処理をしたいので WM_MOUSEWHEELメッセージを受け取ろうと激しく希望しているのですが spy++で見る限りでは送られて来ないみたいです。 親ウィンドウには送られてきているみたいですが、それをウィンドウプロージャで キャッチすることは出来ません。 GetMessage()では取得できないのでしょうか?
>>654 まずOSと〜環境を〜
spy++から察するに、とりあえずこんなの加えてプロシージャでキャッチしてみるよろし
#define WM_MOUSEWHEEL 0x020A
>>655 レスありがとうございます。
環境はVC++6.0(sp5)でWin2kでやってます。
windows.hのインクルードの前に
#define WINVER 0x0500
#define _WIN32_WINNT 0x0500
としています
#define WM_MOUSEWHEEL 0x020A
もやってみたのですが駄目でした。
子ウィンドウのスクロールバーはマウスホイールで操作可能なことから
メッセージを横取りされているように感じたのですが気のせいでしょうか…
>>656 失礼、なるほど子ウィンドウですか。
今、全く同じ環境で、適当にMDIアプリ作ってみましたが、
一応子ウィンドウ側のプロシージャで問題なくホイールメッセージを受け取れるようです。
うーん、何がまずいんでしょうねぇ…。
>>657 アプリ作っての確認までしていただき本当にありがとうございます。
今、別のPCで試してみたところ、正常にWM_MOUSEWHEELを受け取れました。
マウスが悪かったのか、メインPCで動作している何らかのアプリが邪魔をしているのかは分からないのですが
今度新しいマウスを買うとか、OSを入れなおしてみるとかしてみます。
検索するとWM_MOUSEWHEEL関係の悩みが結構引っかかるのですが
マウスホイールを主力として使うアプリケーションの開発は難しいのでしょうか…
>>658 何か、マウス関係のユーティリティが動いてないか?
いずれにせよ、ホイール無しのポインティングデバイスなんて山ほどある
んだから、頼りきるのはマズイな。
全ての操作をキーボードでもできるようにすればベストだ。
>>659 今、マウス購入時に付いてきたユーティリティーを削除したら
正常にWM_MOUSEWHEELを受け取ることが出来るようになりました。
的確なアドバイスをありがとうございました。
環境によって思うように動かないことがある、というのを痛感しました。
キーボードでの操作の実装もしっかりするように心がけなくてはいけませんね。
>>654 もしWin95まで考慮に入れているならzmouse.hもチェック
意外とWin95も生存しているようだし
>651 >652 笑いまくった いってる言葉と行動がともなってねー
>>660 マウスのドライバやユーティリティによってはいきなりWM_VSCROLLだったり・・・
ホイールが二つ以上あったりホイールじゃない何かだったりと・・・
QueryPerformanceCounterをサポートしていない環境というのはあるんでしょうか?
ハードウェアによってはあるかもね。 返り値で判定できるでしょ。
サポートしていない環境がないなら返り値による判定なんて必要ないだろうな
どうしてそこで「氏ね」という単語が出てくるのか。 668は日本語が不自由と見た。
|| || ∧||∧ ( / ⌒ヽ | | | ∪ / ノ | || ∪∪ 俺が変わりに死ぬよ
||/ /|| /∧||∧ ( / ⌒ヽ | | | ∪ / ノ | || ∪∪ ∧ ∧,〜 ( (⌒ ̄ `ヽ _ \ \ `ー'"´, -'⌒ヽ /∠_,ノ _/_ /( ノ ヽ、_/´ \ 、( 'ノ( く `ヽ、 命を粗末にしてはならん! /` \____>\___ノ / /__〉 `、__>
今更関係ないけど、DirectX8のある機能を使っていると QueryPerformanceCounterが正常動作しないというバグがあったな
>>673 > QueryPerformanceCounter
COMの参照カウンタのことでしょうか?
(ネタじゃないので、マジレスきぼんぬ)
それはともかく QueryPerformanceCounterをサポートしてない環境って何? 486では使えないけどPentium以降はサポートしてるんじゃないの?
くるーそー
WinChipやCylixのCPUでもサポートしてんの?
QueryPerformanceCounterは、rdtscが動かなくても、動いたりする
rdtscに依存していたらSpeedStep等で困りそうだ
あるスレッドが WaitForSingleObject() とかで待機中かどうかを 調べる方法ってありますか?
>>681 WaitFotSingleObjectで待機している場合にシグナル状態になるイベントオブジェクトを
WaitForSingleObjectで待ってみてはどうだろうか(藁
調べたって調べた次の瞬間には待機に入ってるかもしれないし 待機を脱してるかもしれない。無意味。 そういうこと聞く人は同期について根本的に理解してなさそうだから マルチスレッドのアプリケーション書かないでくれ
>>681 同期オブジェクトって、利用方法についてある程度パターンがあるのよ。
それに沿って使ううちは問題ないけど、そこから外れるととたんに苦しくなる。
時間を無駄にしたくないなら、設計をそれに合わせたほうがいいよ。
>>684 さようなら。
>>685 で、具体的な方法は提示できないと。口だけって奴だな。
685ではないが、
>>681 の質問から「具体的な方法」が提示できたら
そいつはエスパーか占い師だ(w
で、
>>681 が単に待ちを中断する方法が欲しいのなら、
WaitForMultipleObjectsを使えばいいだけだよな。
何かを待つときはスレッド間通信用の口を残しておくのがベター。
Win32だと待機リソースに応じて様々な手段が用いられ、汎用の方法は
無いんで状況に応じて色々工夫は必要だろう。
>>687 すまん。俺もそう思う。ついつい暑くなってしまった。申し訳ない。
イヤな方法だが、WaitForSingleObject() の前後でフラグを操作すれば 判別できないでもない。
>>689 (同期がらみの解決方法として)安易にフラグを持ち出すと
>同期について根本的に理解してなさそうだから
って言われちゃうよん。
つか、イヤどころの話じゃないと思う。
まあ端的に云ってしまえばフラグ操作とwait状態への侵入またはそこからの 復帰をatomicに実現できないから駄目。 というか「そういうことをしたくなる」こと自体が設計上の 問題を如実に示している。 という訳で元に戻る。
単に調べるだけなら、WaitForSingleObjectをクリティカルセクションで囲って、 他のスレッドからはTryEnterCriticalSectionで調べるってのは駄目? …いやまあ、俺も用途が思いつかないのには同意だ。
あのー、
>>681 氏はひょっとして
「任意の外部のプロセス/スレッドが待ち状態に陥ってるかどうかを知りたい」
んじゃないのかと思うんですが。
VisualC++のデバッガ上で動かしてるプログラムがブレークに3秒間
応答しないと、デバッガが「デッドロックしている可能性があります」云々
とメッセージを出しますが、それを「可能性」じゃなくて確定する
方法があると確かに便利かもしれませんよね。
デバッグ系のAPIでなんとかならないかな?
> TryEnterCriticalSection Win98系で使えないのでご注意...なんで使えねえんだよ... まあMutexのほうが便利だが > それを「可能性」じゃなくて確定する SuspendThread→GetThreadContext→ResumeThread して、プログラムカウンタの値が変化してないことを確かめる? うーん、うそ臭い
695 :
デフォルトの名無しさん :03/03/08 09:42
EnumProcessModulesについての質問ですが、 対象プロセスの本体(exeファイル)がhModule[0]以外に入る事はあるのでしょうか?
>694 Sleep.... >691 SignalObjectAndWaitわ〜
>SignalObjectAndWait >Windows 95/98:サポートされていません。
ども。おはようです。 681が、スレッドの状態を知りたかったのは、 while( WaitForSingleObject( event, INFINITE ), true ) { // なんか処理 } とかでイベントを待ってるスレッドに PulseEvent() で、イベントを伝えたかったからです。 [1] スレッドの状態が解れば、最悪Busyループを組むことでとにかくイベントは伝えられますよね。 [2] "スレッドが待機中になるまで待つ"システムコールなんかがあると最良かな。 で、 [1]のための方法が"クリティカルセッションで囲んで、TryEnterCr..."で、 [2]のための方法が、SingleObjectAndWait() な訳ですね。 そんで、[1]も[2]も、Win9xではサポートされない、と。 Win2000とかのときだけ、これらの方法を採って、 Win98とかのときは"WaitForSingleObject()の前後でフラグ or Mutex"でお茶を濁す、 って云うのが現実的かなぁ。
つか、PulseEventでイベントを伝えようとすること自体が阿呆なのかな。
なんでスレッドの状態を知りたいの? その必要がないように思えるんだけど・・・ > PulseEventでイベントを伝えようとすること自体が阿呆なのかな Win32にはWindowMessageキューという大変便利なキューがありますよ。
>>692 つーかタイムアウト0のWaitForSingleObjectでOK。
>>694 OPTEX_TryEnterをどうぞ
http://www.microsoft.com/msj/archive/s202b.htm NT 4.0でしか使えないと書いてるがそれはこの記事が1996年9月の
ものだからで、Win98以降ならInterlockedCompareExchangeが
サポートされてるから使えるはず。
CMPXCHGでInterlockedCompareExchangeを自作すれば
Win95でも使えるかも。
>>698 [1]はPulseEventする時点ではもう待機を脱しているかも
しれないから駄目。
> というか「そういうことをしたくなる」こと自体が設計上の
> 問題を如実に示している。
に尽きる。
[2]はPulseできないが、それでいいんならなんでSetEvent
では駄目なの?
そもそもSignalObectAndWaitは 「スレッドが待機中になるまで待つ」APIじゃないし。 そんなAPIがない理由は、戻ってきた次の瞬間には もう相手のスレッドも待機を脱してるかもしれないから。 そんなことをしたくなること自体が(ry ついでにスペルくらいちゃんと読め。SingleObectAndWaitではない。 やっぱりお前はマルチスレッドのアプリを書くべきじゃないと思うんだが。
ついでにPulseEventの解説より引用。 > Note This function is unreliable and should not be used. > It exists mainly for backward compatibility. For more > information, see Remarks.
とか偉そうに書いてたら俺までスペル間違えた∧||∧ SignalObjectAndWait
707 :
デフォルトの名無しさん :03/03/08 20:07
ExitWindowsExecをrundllを使わずに呼ぶ方法ない?
>>708 32ビットアプリから、という趣旨では?
「Win32」 API質問箱だし。
2000やXPではログオフするだけなのにいまさらそんな方法
追求してどうするねん、という気もするが
>>710 ExitWindowsExecは16bitのUSRE.EXEにあるから
サンクを使う必要があるのでは?
USREって…妙なタイプミスをしてしまった ExitWindowsExecならQT_Thunkでどうにかなるかも
サンク 32 16 DLL API 検索キーワードはこのあたりでよい?
>>706 あんまりよくない。
マルチスレッドとか同期とかの話は長引いたり荒れたりするから隔離しないと。
でも漏れ実はサンクなんて使ったことねーよ・・・
いずれにせよ「そういう趣旨で」答えてなんで普通にLoadLibrary って回答になるねん。 確かにWin16側の関数もLoadLibraryって名前だけどサンク経由で 呼ぶのは「普通」じゃないと思う
おとなしくrundll使ったほうが楽なんだだろうが呼び出しに失敗する事が多い…
Win16コンパイラならOpenWatcomに入ってるが ヘッダがないな… まあExitWindowsExecを呼び出す程度なら 自分で書き下せばいいけど
721 :
デフォルトの名無しさん :03/03/09 00:55
ShellNotifyIconでタスクトレイにアイコンを登録する時に Windows2000だと、256色のアイコンが16色になってしまうのですが、 これってなぜですか? XPの写真を見ると256色以上のアイコンが綺麗に描かれているのは、 OSの違いのせいでしょうか? それともプログラミングの問題ですか?
>>721 詳しくはわからなが、漏れの XP ではこんなコードで 256 色になってるので試してみてくれ。
NotifyIconData.hIcon = (HICON)LoadImage(hInstance, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 16, 16, LR_SHARED);
>>721 2000以前のWindowsの仕様でタスクトレイのアイコンは16色にしか
できません。Me以降なら256色にできます。
2000以前で256色にする裏技もあるらしいけどやり方は不明。すまん。
724 :
デフォルトの名無しさん :03/03/09 01:07
>>722 試してみましたが、私の方では駄目でした。
XP、もしくは正常なプログラミング方法では、やはりそういうコードで
256色になるのですね。
>>723 そうでしたか。
どうもありがとうございます。
726 :
デフォルトの名無しさん :03/03/09 02:24
CPU使用率をはかるAPIありますか?
728 :
デフォルトの名無しさん :03/03/09 05:03
APIでツールバーにヒントを加える方法はありますか? 検索したのですが、MFCでのやり方しか見つからないです。
ヒントってツールチップ? それなら、TBSTYLE_TOOLTIPSを指定して、WM_NOTFYのTTN_NEEDTEXTに反応してやる。
>>729 出来ました。ツールチップって言うんですね。
ありがとうございました。
731 :
デフォルトの名無しさん :03/03/09 11:57
//DLL.h #define EXPORT extern "C" __declspec(dllexport) EXPORT void CALLBACK ITEMWEAPON(void); をインクルードしたソースファイルを Borland C++ CompilerでDLLにするときに 「DLL.h 2:宣言が正しく終了していない」がでます。 またソース部の EXPORT void CALLBACK ITEMWEAPON() { //いろいろかいてある } でもEXPORT void CALLBACK ITEMWEAPON()の 部分で「宣言が正しく終了していない」が なんでなんですが
732 :
デフォルトの名無しさん :03/03/09 13:15
>>727 おお。レジストリを使うのか。
サンクス。
なんか自分で解決しました・・ cではできなくc++でできました。 意味ねぇー
extern "C" ってC++用じゃなかったか
735 :
デフォルトの名無しさん :03/03/09 18:20
だれかborland c++ compilerで リソースのDLLを作る時の コマンドラインオプションと コンパイラを教えてくれませんか 調べてもわからないので どうしようもないです。教えてください
brc32 じゃなかったっけか?
>>737 調べてないと思われると叩かれるから
おまじないのように書いてるだけで
実際に調べてるわけないじゃん
いや、ちゃんと調べましたよ ヘルプファイルとMSNサーチで ただヘルプファイルのbrc32の コマンドラインオプションには DLLを作る場合使うというものは書いてなく MSNではBorlandQ&Aがまともなほうで 他のページはBorland c++ compiler 5.5は 無料でいいですよーーーというページばかりで 300近くのサイトに入りまくるのもバカらしくなり ここに書き込みました BorlandQ&Aについては前にリソースの コンパイルで調べようとしたら BCC32の簡単なコマンドラインオプション以外は ヘルプファイルを見ろって感じだったんで はじめからアテにしてませんでした。 ちなみにISDNの3時間/月なんで 時間かけれるわけなんです
縦に読めない
いや、ちゃんと調べましたよヘルプファイルとMSNサーチでただヘルプファイルのbrc32のコマンドラインオプションには DLLを作る場合使うというものは書いてなくMSNではBorlandQ&Aがまともなほうで他のページはBorland c++ compiler 5.5は 無料でいいですよーーーというページばかりで300近くのサイトに入りまくるのもバカらしくなりここに書き込みました BorlandQ&Aについては前にリソースのコンパイルで調べようとしたらBCC32の簡単なコマンドラインオプション以外は ヘルプファイルを見ろって感じだったんではじめからアテにしてませんでした。ちなみにISDNの3時間/月なんで 時間かけれるわけなんです すげぇ、展開すると日本語の文章として崩壊する。
。つけてないからですね。←これ!! で最後は「ないんです」です。意味違ってます。 Borland c++ でリソースのDLLの話は解決しました。 ヘルプファイルには.EXEと書いてあるくせに .DLLでも全く問題ありませんでした。 でもさすがに一切のコードなしの Cソースをコンパイルしたのはびっくりしました。 コードなしのCソースをコンパイルしDLL作成→ rcをコンパイル&リンク でバッチリでした。 brc32じゃ と書いた736さんありがとうございました。 けどボーランドもテキトウだなぁぁ。 (。を意識しました)
プログラミングする前に国語勉(ry
>>けどボーランドもテキトウだなぁぁ。 おまえの「ちゃんと調べた」の方がよっぽどテキ(ry
国・社は点悪いです(特に社)。 英はまあまあ。 理・数は完璧? な純理系ですから。 よく使う言葉は「多分・・」です。 (WINAPI関係ないですね。けど日本人として○○○?って感じです)
いいからすっこめ コミュニケーション能力に問題あり
748 :
735and745 :03/03/09 22:04
学生です。 高校受験終わったんで ゆっくりとプログラミング やってまーーす。 中3です(マジ) 田舎だし、他のやつ受験終わってないし、 家で遊んでます(明後日公立試験)。
やはり年齢的に、スレに全く関係ない自己紹介を 始めても恥ずかしくない年頃なんですね。
>>750 748じゃないが、
Σ(´Д`ズガーン
753 :
デフォルトの名無しさん :03/03/09 22:11
>>748 はあ、受験終わったんですか?
俺も中3だけど受験は3年前におわった。
理系ですが現代文得意で数学苦手です。
両系です
両刀使いです
758 :
735and745 :03/03/09 22:24
>>753 ということは一貫教育?
いいですね。
こっちは試験一週間前、
家でA.M.3時まで勉強。
幸い社会の試験が無い学校で、
英語ばっかやって受かりました。
ちなみに3年前は受験なし。
田舎だからみんな同じ 市立学校。
WINAPI関係ないのに・・・もうやめます。
761 :
735and745 :03/03/09 22:39
762 :
名無し@沢村 :03/03/09 22:41
駄目だ。ネタスレと化してる。
764 :
デフォルトの名無しさん :03/03/09 22:59
どうしてこうなるの!
765 :
デフォルトの名無しさん :03/03/09 23:02
タスクバーのハンドルをFindWindowで取得して MoveWindowでリサイズしようとしても出来ませんでした。 タスクバーのスタートボタンなどはMoveWindowsでウィンドウサイズを 変更できるんです。 なぜタスクバーだけうまくいかないんでしょうか・・・。 どなたかご教授いただけないでしょうか。 HWND hTaskbar = FindWindowEx(NULL, NULL, "Shell_TrayWnd", ""); MoveWindow(hTaskbar, x, y, cx, cy, TRUE);
>>765 WM_MOVEに対してデフォルトでない処理をしていることは容易に想像できる。
767 :
デフォルトの名無しさん :03/03/10 00:32
拡張子を指定しないファイルを開くと出る 「アプリケーションを指定して開く?」ダイアログに出てくる アプリケーションの一覧を取得するにはどうすればいいですか?? 要は、インストールされているアプリを列挙しないのです。 ただし、アプリの追加と削除一覧ではありません。 (↑サービスパックとかも出てきちゃうので) APIは無いのかな〜。 レジストリかな〜。
あれって関連付けされてるEXE一覧じゃね?
>>768 そうなんですけど、
どこを見ればいいんですかね??
レジストリの拡張子を全部見ていったりしたんですけど、
どうも表示されるものが違うんですよね。
>>769 Windowsってアプリケーションを探すのに
拡張子 → ファイルタイプ → アプリケーション
ってなってるから拡張子から直接はムリ。
……という話をどこかで読んだ。
ガゼネタかもしれないけれど。
>>770 実際そうだぞ。
900個の拡張子に同じ設定が900個ってのはアホらしいわけで。
あれって関連付けされてる EXE じゃなくて、スタートメニュー内のショートカット にある EXE と最近 「アプリケーションを指定して開く」 で指定された EXE が出てこないか?
スタートメニューに登録してあるOpenJaneが出てきたことはないわけだが
>>767 HKEY_CLASSES_ROOT\Applications
以下だと思ったけど。
NoOpenWithって書いてあったり、実体のEXEなどが存在しなかったら表示されない。
かなーりうろ覚え。
775 :
デフォルトの名無しさん :03/03/10 15:06
メニューの横にアイコンを表示したいのですが、 どうやれば出来ますか?
オーナードロー
>>776 それはめんどくさすぎ。
チェックマークのビットマップ変えるとかでは駄目か?
778 :
デフォルトの名無しさん :03/03/10 15:55
>>776 オーナードローでできるみたいですね。ありがとうございます。
>>777 アイコンをビットマップに変換するのってどうやるんですか?
>>781 メニュー項目ごとにビットマップを変えたりはできないから
あまり実用的じゃないと思うぞ
SetMenuItemInfoででけへんの?
コントロールの破棄時にWM_PARENTNOTIFYが送られてきません。 SPY++で見てもメッセージが流れていないようです。 どういう条件の時にWM_PARENTNOTIFYが流れますか? 開発はダイアログベースです。
>>784 The WM_PARENTNOTIFY message is sent to the parent of a child window when the child window is created or
destroyed, or when the user clicks a mouse button while the cursor is over the child window. When the child
window is being created, the system sends WM_PARENTNOTIFY just before the CreateWindow or CreateWindowEx
function that creates the window returns. When the child window is being destroyed, the system sends the message
before any processing to destroy the window takes place.
>>785 そのはずなんですが、実際にはそのようになっていないので
何か特別な指定が必要なのかなぁと思って質問しました。
>>786 All child windows, except those that have the WS_EX_NOPARENTNOTIFY extended window style,
send this message to their parent windows. By default, child windows in a dialog box have the
WS_EX_NOPARENTNOTIFY style, unless the CreateWindowEx function is called to create the child
window without this style.
788 :
デフォルトの名無しさん :03/03/11 21:08
Windowsの起動時にプログラムを実行したい場合、レジストリ HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run に実行したいプログラムのファイル名を書きますが、 同様に、終了時にプログラムを実行する方法はないですか。
>>788 起動時にコソーリ立ち上げておいて、
WM_QUERYENDSESSIONをワクワクしながら待つ。
mmioOpenを使ってるのですが、 リソース内のファイルを使うにはどうすればいいのでしょうか? ビットマップは、LoadBitmapやMAKEINTRESOURCEを使って表示できるのですが。 初歩的で申し訳ないです。VC++使ってます。
792 :
デフォルトの名無しさん :03/03/12 03:02
age忘れ。
>>787 結局のところ、ダイアログベースでコントロールにWM_PARENTNOTIFYを送信させるにはどうすればよいのでしょう。
WM_PARENTNOTIFYを送信させたい全コントロールに対してSetWindowLongするしかないのでしょうか?
この方法だとWM_CREATEを送信して欲しい場合に対応できませんが。
>>793 横からですが、
>>787 の通りですよ。
WS_EX_NOPARENTNOTIFYを指定せずに作ったコントロールからは、
きちんとWM_PARENTNOTIFYが送信されますよん。
これだめぽ 10秒間操作不能になります case WM_LBUTTONDOWN time_t t; t=time(NULL); while(time(NULL) < t+10) { //繰り返したい処理 } return 0; どうすればよいでしょうか
while(time(NULL) < t+10) { //繰り返したい処理 他のお仕事もしてきてね }
PeekMessageを調べれば幸せになれるかも。
キーワードどうも。 PeekMessage ループ で検索したら いろいろと出てきて ラッキー♪ while(time(NULL) < t+10) { MSG msg; if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) ) { TranslateMessage(&msg); DispatchMessage(&msg); } //処理 } これで動きました。 感謝!
ふふふ、そのままじゃあ そのループ中にプログラムが終了したらあぽーんじゃねえ?
WM_LBUTTONDOWNが複数発生しときも気になるナ
PM_REMOVEなら if(msg.message == WM_QUIT){ PostQuitMessage(0); return 0; } これをTranslateMessageの前に入れないと GetMessageがFALSE返さない悪感
よくある手としてはループに入る前にダイアログを出して 親ウィンドウへの操作を禁止する
>>794 え〜と、ですから
> By default, child windows in a dialog box have the WS_EX_NOPARENTNOTIFY style
ダイアログのコントロールはデフォルトでWS_EX_NOPARENTNOTIFYが指定されているんですよね?
「WS_EX_NOPARENTNOTIFYを指定せずに作ったコントロールからはWM_PARENTNOTIFYが送信される。
しかし、ダイアログのコントロールはデフォルトでWS_EX_NOPARENTNOTIFYが指定されているのでWM_PARENTNOTIFYが送信されない。
では、ダイアログのコントロールにWM_PARENTNOTIFYを送信させる
(WS_EX_NOPARENTNOTIFYが指定されていないコントロールを作る)
にはどうすればよいのだろう」
というのが困っている点です。
英語が苦手なので、もし間違っていたら訂正お願いします。
だからダイアログの子ウインドウを巡回して、 SetWindowLing(GWL_EXSTYLEを使って WS_EX_NOPARENTNOTIFYを解除して回ったらよろしかろう。
APIを学ぶのに最適な書籍ってあるでしょうか? リファレンス的に使えるものがいいのですが・・・・ 皆さんは何を使ってますか?
>>805 MSDN(English)
最近日本語版がgoogleに引っかからなくて鬱。
でも、よく考えたら昔英語版のリファレンス使ってたじゃんとか思って読んだら読めてウマー
>>805 PlatformSDK Documentation
808 :
CreateFileで(・ω・` )ショボーン :03/03/12 21:26
HDDに高速に、巨大なファイルをシーケンシャルに書込みを行うプログラムを 作っているのですが、どうも書込みが遅くて困っています。 書込み対象のHDDは、RAID0(ストライピング)で構成されています。 HDBENCHなどのベンチマークソフトでは軽く80MB/s位はたたきだすのですが、 自分のプログラムでは30MB/sがいいとこです。 (※40MB/sくらいまでは帯域あげたいのですが。) CreateFile のオプションもいろいろと試してみたのですが、 大きな変化はないようでした。CreateFileは以下のようになっています。 m_hFile = CreateFile( szFileName, GENERIC_WRITE | GENERIC_READ, // 書き込みモード FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_FLAG_WRITE_THROUGH | FILE_FLAG_SEQUENTIAL_SCAN | FILE_FLAG_NO_BUFFERING, NULL ); 以後 WriteFile(m_hFile, foo, size, &m_dwWrite, NULL); で307200バイトずつ書き込んでいます。 何かいい方法はありませんでしょうか?
809 :
デフォルトの名無しさん :03/03/12 21:41
> FILE_FLAG_WRITE_THROUGH ん? 速さを求めてるんだったよな
810 :
CreateFileで(・ω・` )ショボーン :03/03/12 22:10
>>809 FILE_FLAG_WRITE_THROUGH はあってもなくても
結果はそれほど変わりませんでした。
(30MB/sくらいで推移。ちなみにパフォーマンスモニタで計測してます。)
なんでだろ〜?
もっと小さいサイズで書いてみたら?1024bytesとまではいかんが
GENERIC_READを外してみる
HDBENCHでHDDWrite36427の時システムモニタ見たら、 ピーク時で書き込み18.3MB/sだったけど。
814 :
デフォルトの名無しさん :03/03/12 23:41
あるマシンにTELNETで接続し、プロセスを起動させようとして CreateProcessをするexeをリモート側において実験してみたのですが、 起動はすれど、画面に表示されませんでした。 (タスクマネージャ上には存在する) その後STARTUPINFO構造体のパラメータをいじってnotepad等をリモート 側で起動させることに成功したのですが、TELNETセッションを切ると 当然起動したnotepadは終了してしまいます。 そこで質問ですが、このようなときにリモートで起動したプロセスが残ったままに なるような仕組みってのはどうやればいいのかわかりません。 ご回答おねがいします。
COM
816 :
CreateFileで(・ω・` )ショボーン :03/03/13 00:17
>>811 >>812 >>813 ありがとうございます。
GENERIC_READを外すのは試してみましたが、
ほとんど変わりありませんでした。
んで、書き込んだ後すぐ読み出すのでGENERIC_READも渡してます。
やはり、書込みサイズですかね。
試してみます。
>>814 スケジューラサービスに起動してもらう。
818 :
デフォルトの名無しさん :03/03/13 01:30
windowsでmacアドレスを取得したいのですがなんか関数ありますか? pcap使わないと無理なのでしょうか? ioctlに似たioctlsoketは大した事できないし・・・
MessageBox APIの表示スタイルで「MB_YESNO」と「MB_ICONQUESTION」を 同時に使うことはできませんか? できるならやり方を教えてください。お願いします。
821 :
デフォルトの名無しさん :03/03/13 15:03
>>820 ORで繋ぐか足し算するか
コンパイラによって処置方法は変わるができる
>>821 ありがとうございます。あなたのヒントのおかげでできました。
結局「MB_YESNO + MB_ICONQUESTION」としたらうまくいきました。
ありがとうございました。
>>822 ORってビットORのことでしょ(^_^;)
MB_YESNO | MB_ICONQUESTIONでしょ(^_^;)
あ、足し算でもいいか。スマソ
(可能な環境なら)ビット演算の方がいいと思うなぁ...
>>825 キャリーの起こるような値を連結しろとは言われないだろうけれど。
MB_YESNO + MB_ICONQUESTION + MB_ICONQUESTION
気分の問題だな。 OR演算子が記号じゃない言語の場合は +で区切ったほうが視覚的に区切りが見やすいとか
829 :
デフォルトの名無しさん :03/03/13 17:00
VBならいきなし加算後の数字でブチ込むのも可能だしな
>>829 >VBならいきなし加算後の数字でブチ込むのも可能だしな
C言語はリテラルが書けません。そう言いたい。
831 :
デフォルトの名無しさん :03/03/13 18:25
ShellExecute(0,NULL,"c:\\poge\\hoge.exe","test",NULL,0); という風に指定して、"test"はhoge.exeのどこに格納されてるのでしょう? int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) これのlpCmdLineでいいのでしょうか?
exeには格納されてないと思う
If lpFile specifies an executable file, lpParameters is a pointer to a null-terminated string that specifies parameters to be passed to the application. If lpFile specifies a document file, lpParameters should be NULL.
WinMain以外の場所で見たくなったらGetCommandLine();
>>830 意味わかんない。
「加算後の数字でブチ込む」 のは API が呼べる言語ならどれでも可能だと思うが。
>>836 それ以前に定数の替わりにリテラルが使えない言語なんてあるのか?
やってみましたが"test"という文字列を取得できません。。
lpCmdLineの中身を見てから言ったのだろうか
argv みたいに分解されている文字列をお望みなのか?
842 :
デフォルトの名無しさん :03/03/14 00:01
testとなにか空白データとか? if(lpCmdLine=="test"){ iTemp=MessageBox(NULL,"","",MB_OK); } とやるとメッセージボックスがでません。
レスするべきなのか…。
>>842 C または C++ を 1 から勉強し直してこい。
あんたが C/C++ でアプリケーションを書くのはまだ無理だ。
ていうか >if(lpCmdLine=="test"){ 許容されるのね・・・
どうやら真性のようだ
>>845 許容だけはされるよ。
おそらく真にはならないというだけで。
>>845 文法上は正しいw
たとえば下のようにすればメッセージボックスが表示される。
(VC++6.0SP5 @ Win2000 では表示された。)
コンパイラによってちがうかもしれんけど。
char *pTest = "test";
if( pTest == "test" )
{
::AfxMessageBox("キタ━━━━━━\(゚∀゚)/━━━━━━ !!!!!");
}
ポインタ同士を比較した結果は、2つのうち少なくとも片方がNULLの時だけ定義される。 そうじゃない場合の結果は定義されない。(要するにその結果は処理系依存) だからコンパイルエラーにはならない。
タスクマネージャー(タスクバー)に表示されているアプリを列挙したいのですが、 どのように実現すれば良いのでしょうか? 要は、自作タスクバーみたいのを作りたいのであります。 EnumWindowだの何だのやっても、 エクスプローラーはプロセスが1つでもWindowが沢山あったり、 ExcelはMDIでもちょっと不思議な動きだったり・・・ VisualStudioはHWNDが2つあったり・・・ 何かコツでもあるのでしょうか?
>>849 状況はJavaの==の両辺がオブジェクトの時と一緒な訳か。なるほど。
852 :
デフォルトの名無しさん :03/03/14 00:37
>>844 せめてどのへんかを・・・。
lpCmdLineのlpはロングポインタとか??
853 :
デフォルトの名無しさん :03/03/14 00:39
こういうポインタ定義されないの? for (T* p = listtop; p != NULL; p = p->next) { if (p == p_found) { return p; } ~~~ }
>>849 ん?じゃあ↓の結果は処理系依存?
int *p;
if(p==p) printf("同じ\n");
>>848 確か文字列定数はFlyWeightっぽくなるんだよね。
関係演算子によるポインタの比較 同じ型のオブジェクトを指す 2 つのポインタを比較すると、その結果は、それぞれのポインタが指しているオブジェクトが プログラムのアドレス空間内に占める位置で決まります。ポインタは、0 に評価される定数式や、void * 型のポインタと も比較できます。void * 型のポインタと比較されるポインタは、比較される前に暗黙的に void * 型に変換されます。 型の異なる 2 つのポインタを比較できるのは、以下の場合に限られます。 一方が他方から派生したクラス型の場合。 少なくとも一方のポインタが void * 型に明示的に変換 (キャスト) されている場合。他方のポインタは暗黙的に void * 型 に変換されて比較されます。 同じオブジェクトを指す同じ型の 2 つのポインタを比較すると、必ず、等しいと評価されます。オブジェクトの非静的メンバ を指す 2 つのポインタを比較するときは、以下の規則に従います。 クラス型が共用体ではなく、2 つのメンバが access-specifier (public、protected、private) によって分離されていないとき、 後方で宣言されているメンバを指すポインタは、先に宣言されているメンバを指すポインタより大きいと評価されます。access-specifier については、「アクセス指定子」の「構文」を参照してください。 2 つのメンバが access-specifier によって分離されているときの結果は未定義です。 クラス型が共用体のときは、この共用体の異なるデータ メンバへのポインタは等しいと評価されます。 2 つのポインタが、同じ配列内の要素、または配列の最後の要素の 1 つ先の要素を指しているときは、大きい方の添字 を持つオブジェクトを指しているポインタが大きいと評価されます。ポインタ間の比較が有効になるのは、ポインタが同じ配 列内のオブジェクト、または配列の最後の要素の 1 つ先の位置を参照しているときに限られます。
>ポインタ定義されないの? ポインタの比較は定義されないの?
まぁ、C++なら std::string cmdline(lpCmdLine); if (cmdline == "test") { MessageBox(NULL, "キタ━━━━━━\(゚∀゚)/━━━━━━ !!!!!", "", MB_OK); } というようなことはできるわけだが。
つーか、ここは C/C++ のスレか?
をぃをぃ、Cの場合とC++の場合をごっちゃに考えちゃだめだろ。 >ポインタ同士の比較
CとC++ってポインタのもつ意味合いが違うんだ?
あまり気にしたことはなかったけど、C と C++ のポインタの比較では 具体的にはどんな点で違いますか?
ピタパン?
これは失礼しました、、、
誤爆だ許せ。
793 名前:デフォルトの名無しさん 投稿日:2003/03/14(金) 00:05
>>791 APIはC言語から使うことを前提に設計されている。
>>849 両方のポインタが同じ配列の要素を指してる限りはNULLじゃなくても
定義される。
でもここはAPIスレだから正解は
>>857 かも
ぬるぽにスレ違い無し。
876 :
デフォルトの名無しさん :03/03/14 19:35
ぬるぽには板違いもサイト違いも無いので平気だ。
ただ、気違いではあるかも知れない。
CoInitialize の呼び出しはアプリケーションの起動時と "CoInitialize してください" と説明されている関数を使う直前とどちらのタイミングで行う方が良いのでしょうか? また CoUninitialize を呼び出さないとどのような不具合が出るのでしょうか?
>>879 俺も知らないけど、その辺はCOMっていう、一大システムが背後にあるので、
簡単には答えられないんじゃないかな。
COM で QI して得たポインタが サスペンド/ハイバネーションを行なうと、無効になる ことがあります。色々調べたら 6分通信がされなかったらポインタを無効にする仕様だ そうですが、うまい回避策(workaround)を知っていたら教えて下さい。 ちなみに QI したポインタを全部覚えておいて、レジュームメッセージを受けとって、 Release() -> QI しても、先にポインタを使われることがあって、だめみたい。 (´・ω・`)
883 :
デフォルトの名無しさん :03/03/15 08:56
>>883 ごめん、スレ違いだったみたいね。
そっちで聞いてみます。
>>848 コンパイラ以前に、最適化オプションで変わったりするよ。
>>849 えらそーに、間違ったこと書くなよ。
887 :
デフォルトの名無しさん :03/03/15 16:01
>>885 849も痛いが、それを突っ込める香具師の少なさにも驚きだな
オマエモナー
error 849: 日本語の文法エラーです。
891 :
デフォルトの名無しさん :03/03/15 19:11
vc でプログラミングしているのですが、 OSが何語のモデルかを検出するAPIはありますか?
892 :
デフォルトの名無しさん :03/03/15 19:39
>>891 GetThreadLocale
GetSystemDefaultLCID
GetUserDefaultLCID
このへんから辿ってみてちょ
894 :
デフォルトの名無しさん :03/03/15 21:29
うーむ。難しいですね。英語とかひとまとまりになって取得できないものでしょうか?
895 :
デフォルトの名無しさん :03/03/15 21:32
Athlon2200XP・GFTi4200・win2000でやるとFPS60ぐらいで快適に動くゲームを作ったのですが、 ノートPC(Celeron1Ghz・240MBラム・S3 16MB twister)でやるとFPSが1ぐらいになります。 使っているライブラリはwinmm.libとDirectX9系統なんですが。 これは純粋に性能の差ですか?それともXPで使うと重くなるAPIがあるのでしょうか?
3D のハードウェアアクセラレーションの有無じゃないの? つーか、DirectX スレとかに行った方がよろしかろ。
>>890 871で述べられ済みなわけだが
過去ログすら読めませんか
>>894 意味不明。お前さんのWindowsが英語版かどうか
何を持って「ひとまとまり」に判定しろと?
>>896 スマソ
D3Dのサンプル実行してみたら同じく1FPSだったからやっぱアクセラレーションだった。
900 :
デフォルトの名無しさん :03/03/15 22:09
>>898 900!
ブラウザなどでは、日本語を ja と表現したりするでしょ?
CPUの種類とクロック数を取得するにはどうすればいいんでしょうか? Win98,Win2000,XPとOSが変わっても対応したいのですが。
jaではなく、japと表現してたら、どうなったんだろう。
ふぁっきんじゃっぷくらい言えばかやろぅ ってなったかも知れない。
CPUって何があったっけ? クルーソーとかマイナーなやつは良く分からん。
>>904 上位10ぐらいを落としてみましたが全部ソース非公開でした。
いい加減な紹介してくれてあるがとよ、ゴルァ
>>897 ぷっ、
>>871 が正しいと思ってるんだ。
関係演算子と等値演算子の区別がついてないんだな。
>907 下の方を良く見ろうんこ
俺は第三者だが、だったら、最初から下の方だと言えよ。 意地悪すぎだぞ。
914 :
デフォルトの名無しさん :03/03/15 23:28
クロックは出てこないな
CPU FSB 取得 API とかで検索してました。 細かい検索用語の違いは難しいれす。
917 :
デフォルトの名無しさん :03/03/15 23:30
ツールバー作っててつまづいてしまってので、助けてください 文字だけのボタンをつけようとすると、 ┌─────┬─────┬─── │ .│ .│ │字字字字字│字字字字字│ └─────┴─────┴─── こんな感じで空白が出来てしまうのです。 何かスタイルが足りない、とか教えてください。
918 :
デフォルトの名無しさん :03/03/15 23:33
最近のキーボードに付いているマルチメディアキーってあるじゃないですか。 MSのキーボードについてくるユーティリティの様にそれらのキーの機能をカスタマイズ するツールを書こうとしています。 上のようなツールを入れなくてもWindows2000ではデフォルトでホームに戻る/ボリュームなど の機能が有効になっています。 そこで質問なのですが、マルチメディアキーを押したときWindowsがデフォルトで行う処理 を抑止する方法って何か無いでしょうか? WH_KEYBOARD及びWH_GETMESSAGEでグローバルフックを仕掛け、CallNexthookを 呼ばないと言う方法ではデフォルト処理が入ってしまいました(aなど普通のキーはちゃ んと入力されなくなりました。)
その計測方法ってあまり賢くなさそうなんだよなぁ BIOSで出てくる結果を得たい場合ってどうするんだろ 603.81MHzじゃなくて、600MHz 1396.04MHzじゃなくて、1400MHzと。
四捨五入もできないバカですか?
>>920 はヴァカだが低倍率でFSBを1MHz単位で変えられたら困るんじゃない?
>>921 どこで四捨五入するのかちょっと考えてみるだけで問題点が分かるよ。
んー、自分で紹介してなんだけど、
>>919 の関数をPentium3-M 1.13GHzで試したら
1128MHz 2秒ループ
1057MHz 1秒
270MHz 5秒
とばらばらになった。なんや2秒がいいのかな。よくわからん。
最後の270MHzはひどいな。
>>908 > 関係演算子と等値演算子の区別がついてないんだな。
ハァ?
>>849 のどこに等値演算子と書いてるんだ
そもそもポインタが比較できるかどうかが問題なのに
そんな些細な揚げ足取りしかできないんだね
ちなみに等値演算子の場合
> 等値演算子では、同じ型のメンバへのポインタを比較できます。
> このような比較では、「メンバへのポインタの変換」で解説した
> メンバへのポインタの変換が行われますメンバへのポインタは、
> 0 に評価される定数式とも比較できます。
928 :
デフォルトの名無しさん :03/03/16 00:44
プログラムは自分で自分をデリートできますか? APIありますか?
できない。
>>927 > ハァ?
>>849 のどこに等値演算子と書いてるんだ
別に書いてないけど、
>>849 は「等値演算子」だろうが「比較演算子」だろうが、間違ってることには変わりない。
で、
>>871 の方は、「ポインタに対する比較演算」について言っているなら、内容はおかしくない。
でも、
>>842 からの流れで「ポインタの比較」と言うなら、「等値演算子」について言ってると考えるのが普通。
それを いきなり「比較演算」について語ってるから、おかしいと指摘しただけ。
>>928 DelayedDeleteLockedFile
931 (゚д゚)ウマ-
>> 930
>>842 からの流れで「ポインタの比較」と言うなら、「等値演算子」について言ってると考えるのが普通。
……ぜんぜん普通じゃないと思うが。
普通「ポインタの比較」と言えば「比較演算」のこと。
しかも、わざわざ御丁寧に「関係演算子によるポインタの比較」とまで書かれている。
「等値演算子」に限った話はされていないよ。
934 :
デフォルトの名無しさん :03/03/16 01:24
>>931 googleかけても引っかかりません??
FILE_FLAG_DELETE_ON_CLOSE使え
>>931 MSDNの検索でも出てこない
>>935 残念ながら自分の削除には使えない。
NT4あたりではできたらしいが9xや2000ではだめ。
937 :
デフォルトの名無しさん :03/03/16 01:53
エクスプローラなどからファイルをドラッグ&ドロップされたとき、 左ボタンでD&Dされたのか、それとも右ボタンだったのかを 知りたいのですが、どうすればいいのでしょうか?
>>933 必死になってるのは、わかるけど
>>842 からのプログラム中に一回でも比較演算子が出てきてねーだろ。
まあ、「「等値演算子」に限った話はされていないよ。 」という主張に沿って、
>>857 ,
>>871 は正しいと認めるのは吝かじゃねーけど、
>>849 が間違ってるのは明白だろ。
>>937 WM_DROPFILESではできない。
OLE D&Dならできる。
>>934 >>936 えっ? 無いですか? とりあえずMSDNから一部コピペ
BOOL DelayedDeleteLockedFile (
LPCTSTR lpFileName // ファイル名
);
対応情報
Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダー:Winbase.h 内で宣言、Windows.h をインクルード
インポートライブラリ:Kernel32.lib を使用
Unicode:Windows NT/2000 は Unicode 版と ANSI 版を実装
>> 938
>
>>857 ,
>>871 は正しいと認めるのは吝かじゃねーけど、
>>849 が間違ってるのは明白だろ。
はぁ? 何を今更。最初からそういう話をしてるんでしょうが。
849 が間違っているから、849 に対して 857, 871 のポストがある。
そして、それが分かっていないようだから 897 で
> 871で述べられ済みなわけだが
> 過去ログすら読めませんか
となるわけだよ。
>
>>842 からのプログラム中に一回でも比較演算子が出てきてねーだろ。
投稿の大部分は自然言語だ、プログラミング言語ばかりでなく自然言語も読め。
「比較」とか「ポインタの比較」と言っている投稿は多数あるが
逆に「等値」は 908 になるまで一度も出てこないよ。
ごめん、、、ウチのMSDNにはないや 良ければurl出してもらえませんか? もしくは戻り値の解説も張って頂けると嬉しいのですが。
941 (゚д゚)ウマ-
>>890 判ってるよ、おまえ自体が人間社会において未定義って事だ!
未定義キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
946 :
デフォルトの名無しさん :03/03/16 03:21
タブコントロールでダブルクリックでも通知メッセージWM_NOTIFYが親に 送られるようにするにはどうすれば良いでしょうか?普通のクリックでは ちゃんと送られて来ています。
>>942 ネットには見つからなかったのでMSDNのアドレスをどうぞ。
インストール先(C:\MSDNは)環境に合わせて変更する必要がありそう。
mk:@MSITStore:C:\MSDN\MSDN\jpwinpf.chm::/html/_win32_delayeddeletelockedfile.htm
戻り値
関数が成功すると、0 以外の値が返ります。
関数が失敗すると、0 が返ります。拡張エラー情報を取得するには、GetLastError 関数を使います。
>>939 ありがとうございます。OLEを調べてみます。
950 :
デフォルトの名無しさん :03/03/16 06:44
951 :
デフォルトの名無しさん :03/03/16 12:55
エディットコントロール使ってメモ帳みたいのを 作ってるんですが、32KB制限の対策法って どういうのがあるんですか?
952 :
デフォルトの名無しさん :03/03/16 12:55
究極の借金返済方法みつけちゃった♪
私は220万円の借金をわずか3ヶ月で完済しちゃいました〜!
借金のある人、今の生活よりグレードアップさせたい人、
パートに出られない主婦の人、失業中で今すぐ収入の欲しい人などに
かなりおすすめです!
他の人と同じじゃ稼げません。大金を簡単に稼ぐ方法教えちゃいます!!
http://chu3.k-server.org
>>951 EM_LIMITTEXT だったかで制限変えられなかったかな。
EM_SETLIMITTEXT だった。ってそういうことじゃなくて 32KBを超えたら EN_MAXTEXT を捕捉してエラーメッセージを 表示するとかそういう話なんかな。
>>954 もっと巨大なテキストを扱えるように
したいんで、EM_LIMITTEXTをさっそく
試してみます。
昨夜黙殺されたんですが誰か分からないでしょうか? 最近のキーボードに付いているマルチメディアキーってあるじゃないですか。 MSのキーボードについてくるユーティリティの様にそれらのキーの機能をカスタマイズ するツールを書こうとしています。 上のようなツールを入れなくてもWindows2000ではデフォルトでホームに戻る/ボリュームなど の機能が有効になっています。 そこで質問なのですが、マルチメディアキーを押したときWindowsがデフォルトで行う処理 を抑止する方法って何か無いでしょうか? WH_KEYBOARD及びWH_GETMESSAGEでグローバルフックを仕掛け、CallNexthookを 呼ばないと言う方法ではデフォルト処理が入ってしまいました(aなど普通のキーはちゃ んと入力されなくなりました。)
>>957 それはshellなフックで拾えるみたいなので今から試してみます。
ところで、HSHELL_APPCOMMANDって何番か分かりますか?
Delphi6のSDKは古くてまだ定義されてないみたいです。
>>958 #define HSHELL_APPCOMMAND 12
12番
エデットコントロールのUNDOを2回以上させたい、無理だろうか?
>>962 仕様です。自分でがんがって無限UNDOでも実装させてください。
967 :
1 ◆3a4vmAmkAc :03/03/16 16:57
そろそろ次スレ立てとくか
>>902 外務省の役人(だったっけな? うろ覚え)が、国名の3文字コードが
JAPになるのを嫌ってJPNにしたという逸話を聞いた覚えがある。
# スレ違いスマソ
>>968 Yellow MonKey
YMKとか言うのはどうだろう?
970 :
デフォルトの名無しさん :03/03/16 18:47
本格的なエディタ作るとなると やはり自分でウィンドウ作るしか ないんかな。
>>970 リッチエディットじゃ物足りなくなったん?
>>972 俺はエディタ作者じゃないのだけども、たとえばどんな所で
物足りなさを感じますか?
>>966 > 俺もUNCOを二回以上させたい。無理でしょうか?
浣腸したらいかがでしょうか?
>>973 ルーラを表示したい場合、検索文字列を点滅させたい場合、etcetc。
いちいちサブクラス化して無理する位なら全部書いた方が最終的には綺麗に仕上がる。
>>941 > 投稿の大部分は自然言語だ、プログラミング言語ばかりでなく自然言語も読め。
お前は、
char *p;
char *q;
...
if(p == q){ // p と q を比較する。
と書いてあったら、大小比較じゃんとか思うのか ? (藁
ごねるのは、いいけどみっともないぞ。
> 「比較」とか「ポインタの比較」と言っている投稿は多数あるが
> 逆に「等値」は 908 になるまで一度も出てこないよ。
>>976 だからさあ、
>if(p == q){ // p と q を比較する。
>と書いてあったら、大小比較じゃんとか思うのか ? (藁
「書いてあったら」なんて仮定の話をしてもしょうがないだろう。
「そんなことはどこにも書かれていない」んだからな(笑
自分の脳内でなく過去ログを読め。
ところで話の流れは読めているか?
>>845- でしているのは「ポインタの比較」についての文法的な話であって
「if(p == q)」についての話なんてしていないぞ。
「==」はあくまで比較演算子の一つにすぎない。
それを理解してから過去ログを読み直せ。
897, 927 にも同じこと言われてるだろうが。
オマエラメールでやりとりしろよ
とっくにその話は終わってるよ。
>>977 ププッ、「比較演算子」だってさ。
こんなこと書いてるから、混乱しちゃってるんだろうね。
こういった類いの自作自演荒らしって厄介だよな。
982 :
1 ◆3a4vmAmkAc :03/03/16 21:26
966の案でいくか?
>978-981 オマエガナー
>>980 君は「比較演算子」と言われて何に混乱してるんだい?
比較演算子 := 不等号演算子 | 等非等演算子
等非等演算子 := 等価演算子 | 非等価演算子
>>982 なんでBuild9まで来て新参すれに吸収されるのか、と小一時間(略
新スレ立てて来るよ。しばしお待ちを。
987 :
1 ◆3a4vmAmkAc :03/03/16 21:39
みんな質問箱シリーズの統廃合を願っているなら抵抗はしない。 質問箱の継続に向けて積極的な表明がなければ私は新スレは立てない。 1001まであと僅かなので、おそらく私は新スレを立てることにはならない。 現実を私情をすてて見つめている。
もうすぐ1000なので新スレたてます。 Win32API 質問箱 Build10
989 :
1 ◆3a4vmAmkAc :03/03/16 21:43
>>988 んにゃ。
かぶったね。新スレはそっちにまかせた。立ててくんろ。
あぼーん
>>985 等非等演算子 ?
Google でググって一件しか見つからないような用語で話されても困るんだけど。
2ch と言えど、自分の脳内じゃないんだからさ。
>>992 おまえらコテハンでやってくれ。
NGワード設定するから。
フックについて質問です。 フックしたメッセージのパラメータを変更して目的地に渡すにはどのような手段があるでしょうか? WH_CALLWNDPROCでフックを仕掛けて、 x = (CWPStruct *)(lparam); if(x->message == WM_MOVE) { x->lParam = 15; } Result = CallNextHookEx(hook,code,wparam,lparam); return Result; ではメッセージは書き換わりませんでした。
996 :
1 ◆3a4vmAmkAc :03/03/16 22:12
乙カレー
オツカレチャーソ
998 :
デフォルトの名無しさん :03/03/16 22:23
M$厨がんばれ(藁
999 :
デフォルトの名無しさん :03/03/16 22:24
1000
1000 :
デフォルトの名無しさん :03/03/16 22:25
10000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。