1 :
東トルキスタンと言ってみるテスト :
2005/10/10(月) 22:35:30
0x24じゃないの?
突然ですみません。 DirectX以外の方法で、ほぼ正確に1/60毎にコールバック関数を呼ぶAPIはありますか? いろいろ試してみたのですが、マルチメディアタイマーを使用すると、1/60秒から少しずれてしまい(整数msの分解能のため) 1/60秒での処理ができません。 これだとfpsに直すと62fps(16msの場合)になりますよね? これをほぼ正確に60fpsにしたい場合、何か方法はないでしょうか
>>10 QueryPerformanceCounter
WaitVBlank
前回との差分をとって16msと17msをいったりきたり
SendInputでキーストロークを送るプログラムを書いてみたのですが、 いくつかのゲームでは、なぜかキーストロークを送ることができません。 どうすればいいのでしょうか?
17 :
デフォルトの名無しさん :2005/10/11(火) 05:00:01
非クライアント領域の無効領域ってどうやったら取得できるのでしょうか?
18 :
デフォルトの名無しさん :2005/10/11(火) 09:45:24
Windowsのスクリーン上マウスポイントX,Yから そこの色情報を取り出すAPIとかないでしょうか?
デスクトップのDC使ってGetPixelすれば?
>>19 別WindowHandleのマウスポイントの色もとりたいのです。
後、窓枠とかの色も取得したいので、出力されている色すべて取れないでしょうか?
いやだからデスクトップの……
>>21 hWnd=0でいけるのですねすいません。
ありがとうございます。
RegisterHotkeyを使って、何らかの入力があったらウィンドウをアクティブにし、 Unregistしてから色々な処理をした後に非アクティブ化してから 再びRegistして入力を待つ…といった事をやっています。 が、2回目のRegisterHotkey後にキーボードを叩いても反応がありません。 確認したのは ・2回目のRegistは成功した(返り値確認) ・2回目のRegist以降はWM_HOTKEYメッセージすら届いていない という事なんですが、RegisterHotkeyが成功してるのに メッセージが通知されないというので悩んでます。 思い当たる原因など何かないでしょうか。
そこまでやるならリストビュー的なコントロールを1から自製したほうが早くね?
26 :
24 :2005/10/11(火) 16:58:31
>>25 様、レスありがとうございます。
完全自前も少しは考えたのですが・・・
SYSLISTVIEW32 が実装している領域計算などの機能はかなり多く
(言い換えれば自作するにはかなりの機能をエミュレートする必要がある)、
さらにもともとコモンコントロールに対し実装していたコードからの
移植性も高いということで上記の方法を採用しました。
27 :
デフォルトの名無しさん :2005/10/11(火) 17:08:50
若干すれ違いかもですが、教えてください。 regsvr32でcomの登録についてなんですが、 regsrv32 hoge.dll 自分のマシンでは、これで登録できるんですが、ほかのマシンにもっていくとエラーが発生し登録出来ません、 「hoge.dll」で使用してるコンポーネントやDLLが不足している為だと思うんですが、 具体的に、どのコンポーネント/DLLで失敗してるか見つける方法はありませんでしょうか? よろしくお願いします。
ビルドがXPでエラーの出たターゲット環境が2kとかで、 でもってビルドオプションにATL_MIN_CRTが定義されて無かったりとか。 エラーメッセージも環境も何も書いてないので、わかりまへん。 さらにスレ違いだとおもいます。
29 :
24 :2005/10/11(火) 17:45:52
>>27 さん
もしも開発環境がインストールされていれば、
dumpbin または Dependency Walker で依存している DLL が確認することが
可能かと思われます。
参考になりますでしょうか。
SetWindowText()を用いてエディットコントロール内の文字列を 変更しようとしているのですが、 [ ほげ ] ↓ SetWindowText(Edit , TEXT("はげ")) ; ↓ [ ほげはげ ] のように、それまで入っていた文字に追加される形になってしまいます。 猫等のサイトで色々と調べてみると、 特にエディットコントロール内の文字列を 削除する手続き等は取っていないようにしか見えないのですが、 こういった文字列を削除する関数やメッセージはありますか? ちなみにSETSEL→CLEARでも消えてくれません…
追加じゃなくて上書きだから消す必要ない
普通は追加の仕方がわからなくて悩むんだがな。
HTREEITEM構造体を関数の引数にすると 構文エラーが出てしまいます。 どうしてなんでしょうか。
たぶん構文エラーじゃないかな?
>>33 ちゃんとしたコンパイラを使ってるんなら構文エラーなんだろうなw
真剣に質問したいのならもう少し詳しく(関数名やエラー内容など)書いた方が‥‥釣りだと思われますよ?
とりあえず、その関数付近のソースを書いてみたら?
>>36 釣りのつもりはないのですが...。
void name(HTREEITEM hTree);
といった関数を宣言してもエラーになります。
TC_ITEMとかでもなりました。
エラー内容がわからんのでなんともいえんが‥‥ ツリービューもコモンコントロールだからcommctrl.hをインクルードしてcomctl32.libを プロジェクトに加えないといけないよ?
だから出たエラーをコピペくらいしろってんだ 俺らはエスパーじゃねぇんだよ
じゃあ頑張ってエスパーになってください。
>>40 人間に自分の考えを伝えられないのに、
機械に伝える事なんて出来ない。
43 :
33 :2005/10/11(火) 22:35:25
どうやらヘッダーの書き方がおかしかったみたいです。
>>38-39 すみませんでした。
ある処理をwhileの無限ループで行っています。 この無限ループの処理自体はアプリ終了まで続けたいのですが、このまま終了してしまうとこの部分でメモリリークが起きてしまいます。 そこで、アプリ終了時にwhile文を抜ける方法(メッセージなど)があったら教えていただきたいです。
>>44 マルチスレッド? シングルスレッド?
シングルスレッドだとwhileを抜けない限りは強制終了しかないわけなんだが…
おーいエスパー。お呼びだぞ
>>44 終了すれば全部解放されるからループ内でメモリ使用量が
どんどん増えたりしてなければ気にすることはない
エスパーなんて居ない!
50 :
44 :2005/10/12(水) 00:04:03
>>48 どうもありがとうございます。
しかし、
while(1){
}
とやっただけでもデバッガがメモリリークを検出してしまいます。
これは問題ないのでしょうか?
>>50 =
>>44 > デバッガがメモリリークを検出してしまいます
それ、何てデバッガ?
デバッガについては明らかにスレ違い。
53 :
44 :2005/10/12(水) 00:15:52
>>50 何を持ってメモリリークと言ってるんだ?
そもそも、メモリリークの意味判ってるのか?
呼んだ?
呼んでないけど、とりあえず脱いでください。
FindFirstChangeNotificationとGetFileTimeを使って指定したディレクトリ下の ファイル(サブディレクトリの中のファイルも含む)の新規作成や上書き保存を 検出するソフトを作ろうとしているのですが, ファイル数やディレクトリの深さが 大きくなるほど時間がかかってしまいます. 見つけたディレクトリにかったぱしからFindFirstChangeNotificationを仕掛けるという方法も考えたのですが ちょっとかっこよくない気がします フィルタドライバ的なものでしかできないのでしょうか?(もちろんドライバを書く技量は持ってません...) 一発で更新されたファイル名のパスを教えてくれるAPIはありませんか?
はい。 いいえ。
ReadDirectoryChangesW ディレクトリで発生した変更を記述した情報を返します
>>44 メモリリークはおいといて・・・
アプリ終了時にループを打ち切るようにすればいいじゃないか。
その無限ループの中で、
アプリ終了したいよフラグを定期的にチェックして、
フラグが立っていたら、ループを抜けて、後片づけをして、
アプリ終了してもいいよフラグを立てる。
メインスレッドでは、
アプリ終了したいよフラグを立てて、
アプリ終了してもいいよフラグが立つのを待ってから終了する。
ただし、
アプリ終了してもいいよフラグについては、
単にvolatileなbool変数でやると、ダサすぎるので、
適切なロックオブジェクトを使ったほうがいいでしょう。
9x24だろと1を罵りたい
9x?
彼は九の段のことを言ってるんだよ
VC6sp5/WindowxXPsp2環境で作成しています。 SwitchToThread()関数を使おうとしていますが使えません(外部参照が未解決になる)。 winbase.hはincludeしていますし、kernel32.libもリンクしました。 何がまずいのでしょうか。初歩的なことを見落としているように思うのですが・・・
>>68 コンパイルオプションの問題、又はWINVERの定義の問題。
WINVERの他にも似たようなマクロが有ったような気がするけど思い出せない。
>>68 MSDNにはこんなことが書いてある。
Windows NT: バージョン 4.0 以降を使います。
Windows: サポートされていません。
というわけでWindows.hのインクルードの前に#define _WIN32_WINNT 0x400とでも書く必要がある。
(Windows.hの中でWinbase.hはインクルードされるのでWinbase.hは自分でインクルードする必要はない)
もちろんこんなことをすると9xを捨てることになる。
捨てたくなければ今回はSleep(0);が代わりになる。
71 :
68 :2005/10/13(木) 00:19:06
>>70 さん
_WIN32_WINNTを定義してませんでした。
Windows.hじゃなくてWinbase.hをincludeしてました。
いま手元に環境がないので明日にでも試してみます。ありがとうございました。
GetKeyState(), GetAsyncKeyState()が、なぜかPAUSEキーのときだけ妙な動作をします。 //検証用コード for (;;) { if (GetAsyncKeyState(VK_PAUSE) & (1 << (sizeof(SHORT) * 8 -1))) _putts(_T("PAUSE!")) ; } PAUSEキーをいくら押し下げようとも、連打しようとも、まったく反応がありません。 しかし、PAUSEキーを押した後に、何か別のキーを押すと、一回だけPAUSE!と表示されます。 キーボードが壊れているのかと思い、いくつかのキーボードで試しましたが、まったく同じ結果になります。 PAUSE以外のキーに変えると、押し下げた瞬間に大量にPAUSE!と表示されるんですが……。 WindowsはPAUSEキーだけ、なにか特別な処理でもしているのでしょうか?
そもそもPauseキーが何なのかと。
何て。 Pauseキーだろ?
75 :
73 :2005/10/13(木) 03:54:01
Pauseキーを押したら、何か他のキーを押すまでPauseする というのは機能であり仕様なんだってば。
デスクトップにあるショートカットのリンク先の所に オプション /A と /B で hoge.exe を起動する為に c:\hoge.exe /A /B としてあるのですが、 エクスプローラーからファイルをこのショートカットに ドラッグ&ドロップした時に、 c:\hoge.exe /A /B FileName の様に hoge を起動したいのですが、 c:\hoge.exe FileName としかならなくて困ってます。 どうにかなりませんか?
>>76 特に何もしなくてもオプションは無視されないんだが
環境は?
78 :
76 :2005/10/13(木) 06:51:20
>>72 無限ループにfor(;;)なんてキモ過ぎ
>>78 スレ違いじゃないのか……。
強引にAPIに持って行くと、
話を聞くとそれはおそらく、Win95の場合、そうなるようなので、
解決策としては専用のランチャーを作るべきだ。
それをするには、具体的にはたとえばCreateProcess()を云々……
質問です。 とあるアプリケーションが system(); などで別のアプリケーションを呼び出すということは多々あるかと思います。 この呼び出しをフックして、どういう呼び出しをしているのか知りたいのですがキーフックのようにAPIは用意されていますでしょうか? 具体的に申し上げますと、 携帯アプリ開発エミュレータで「プロジェクト管理アプリ」が「実行アプリ」を呼んでいます。 ですがこの「プロジェクト管理アプリ」が遅いのなんの…。 実行アプリだけ呼び出してやりたいのですが、一体どんな引数などを渡しているのか分からないのです。
APIフックは可能だけど、その程度ならOllydbgあたりでプロジェクト管理アプリを開いて CreateProcessなりsystemなりのAPIにブレークポイントを仕掛け、引数を見た方が早いと思う。
>>82 なるほど。確かにその通りですね。
試してみます。
ありがとうございました。
もっさりしてるのはJavaだからしょうがないよ あきらめるしかない
ゴバクか?
>>82 プロジェクト管理アプリをOllydbgでトレースしようとしたら固まってしまいました。
javaアプリなので、javaにいわゆるトレース対策がされていたのだと思います。
結局APIフックを作ってしまいました(;´Д`)
87 :
sage :2005/10/13(木) 17:06:25
お、初心者の俺には役に立ちそうなサンプル集だ。 おぶりが~ど!
WSHのPopupメソッドみたいに、指定した秒数で 自動的に閉じるメッセージボックスを表示するAPIって無いですか?
API一発ではできませんので自分でタイマー回してEndDialogで閉じる
91 :
76 :2005/10/14(金) 06:48:12
>>80 プログラムでなんとか出来ないかと思ってここで質問しました。
パラメータがファイル名のみの時は別処理にします。
ありがとうございました。
92 :
デフォルトの名無しさん :2005/10/14(金) 10:28:24
WindowFromPointで取ってきたHWNDから GetWindowTextしてWindowの文字を取ってくる。 後(再起動)ほど FindWindowで先ほどのWindow文字を入れたら 返りが0になるのですが、FindWindowでHWNDを取得するためにはどの文字を取ればよいのでしょうか?
それはウィンドウがないか文字列が変わっただけじゃまいか?
94 :
93 :2005/10/14(金) 11:15:40
追記: それかボタンコントロールとかのキャプションを取得してるとかだな 親ウィンドウたどってGetWindowTextするといい
>>92 WindowFromPointで取得したウィンドウが子ウィンドウとか?
>>92 です。すいません。
FindWindowにtextを入れる場所をまちがっていました。
FindWindow(a, NULL);×
>>92 再起動前の取得文字列をどう保存して、再起動後にどう復元してる?
保存・復元の方法がおかしくて、Findしてる文字列が間違ってる可能性も考えられるぞ。
そのオチを見抜けなかった俺らはマダマダだなw
101 :
デフォルトの名無しさん :2005/10/14(金) 13:18:09
誘導元のスレ見るのめんどいから、 何がしたいのかはっきり書いてくれんかね。 何がしたいのか、それじゃよくわからんが。 システム全体のマウスメッセージをフックしたいだけ? それならフックDLL作って、 DLLからフックしたメッセージを利用するアプリケーションに 何らかの方法で通知すればいいとおもうけど。 あと、マウスメッセージなんかはかなりの頻度で飛んでくるはずだから、 DLL内でフックしたメッセージを利用する処理をダラダラ書くと、 良いこと無いと思うけど。
説明不足ですみません。 マウスの動きをマクロ化したいのですが、 できれば、指定したアプリケーションにマウスの動きを通知するだけで、 実際のマウスカーソルとは独立させて動かすことはできるのでしょうか、 寝マクロ君やUWSC的な動きをさせたいと思っています。 その上で、マウスカーソルとは切り離した動きができないかと思っています。
104 :
デフォルトの名無しさん :2005/10/14(金) 15:05:08
Win32APIって、円とか曲線て引けましたっけ?
質問する前に調べろ
円つーか楕円はEllipseだな。
>>103 マウスメッセージはキャプチャして置いてマクロ化して保存。
↓
マクロ実行で、ターゲットアプリケーションにのみ保存したマウスメッセージを投げる。
キャプチャ時と実行時でのマウス座標をどうするかとか、
考慮しなきゃいけない部分がありそうだけど、
上記のまま十分実装出来そうな気はするけど。
110 :
デフォルトの名無しさん :2005/10/14(金) 15:52:50
PostThreadMessage()でスレッドにメッセージを送りたいのですが、エラーとなってしまいます。
GetLastError()で調べるとコード1564「メッセージは同期した操作とのみ使用できます」のエラーのようです。
下記URLの通り予めメッセージキューは作成してあります。
メッセージを受け取るスレッドにてPeekMessage()は正常終了しています。
スレッドですからタイミングの問題とかあるんでしょうか。
いろいろ試してみましたがよく分からずお手上げ状態です。
誰か詳しい方いましたらご教示願います。
↓
http://www5a.biglobe.ne.jp/~crab/winsdk/PostThreadMessage.html
111 :
デフォルトの名無しさん :2005/10/14(金) 16:06:40
> 110 忘れてましたが、環境はWin2000(SP4) + Visual Studio 6.0(SP6)です。
>>110 1564なんてエラーコードあったっけな・・・?
手元の環境では、FormatMessageしてもエラーになるんだが
MESSAGE_SYNC_ONLYは1159だね
114 :
デフォルトの名無しさん :2005/10/14(金) 16:21:58
> 112 > 113 失礼しました。1159です。
>>110 >MSDN日本語版では、PostThreadMessage()の使用上の注意として「ポストされるスレッドでメッセージキューが作成されている必要がある」と記載されていますが、
>具体的な作成方法までは記載されいません。
↑この件だけど、AttachThreadInput 側に書いてある… で、
スレッドのメッセージキューは、スレッドが Win32 USER 関数または Win32 GDI 関数の 1 つを初めて呼び出したときにシステムによって作成されます。
なので、PostThreadMessage される側のスレッドエントリの先頭で(PeekMessage のループの前に) 適当なAPI呼べばどうだろう?
>>110 ,
>>112 WM_USERより低いシステムメッセージ投げてない?
WM_CREATEとか投げると、そのエラー出るよ
117 :
116 :2005/10/14(金) 16:52:52
PeekMessage()はWIN32 USER関数に含まれないのか? というかPeekMessageで読み出せるのに、メッセージキューが作られていないってどういう状況だ?
そもそも、何をもってPeekMessageは正常終了と思ってるのかが知りたい まさかPeekMessageの戻り値じゃねぇよな
ぐわ てきとー書いた。スマン。 いくらなんでも PeekMessage() 1発呼んで終わりなスレッド ってことないもんな。
121 :
デフォルトの名無しさん :2005/10/14(金) 18:14:46
> 116 これでいいのでしょうか? ret = PostThreadMessage(threadId[no], WM_USER + no, 0, 0); > 120 スレッドの先頭でPeekMessage()をループさせるようにしました。 116,120のようにしたら、何とかうまく行ったみたいです。 ただ、この様に修正しなくとも時々うまく行く場合もありました。 よく分かりませんが、取り合えずこれで様子を見てみます。 ありがとうございました。
123 :
デフォルトの名無しさん :2005/10/15(土) 08:15:18
Windows SDKについて質問です。 既存のシリアル通信プログラムがあります。 その通信プログラムを変更せずに、 外部から通信をフックしてモニタリングする方法(関数)なんてあるんでしょうか? やっぱり、モニタ機を通信ケーブル間に入れるのが一般ですかね?
>>123 モニタリング機能載せた仮想シリアルポートのドライバ作って通信プログラムを仮想ポートに接続させとくとか
COMポートのフィルタドライバを開発する (ベクターとかにシェアウェアでいくつかあった希ガス) APIレベルで解決するなら、 COMポートの通信に使用しているAPIをフックすれば モニタできる・・・んだろうか?
126 :
デフォルトの名無しさん :2005/10/15(土) 12:15:24
>>124 &
>>125 ををを!
例えばドライバを作るとして・・・・・
・・・・・何のSDKを調べりゃいいんですかね?
やっぱDDK辺りを?
128 :
デフォルトの名無しさん :2005/10/15(土) 15:41:01
WindowFromPoint()で取ってきたHWNDがWindowなのか他のものなのかを 判断する方法ってありますでしょうか? WindowFromPoint()する場合そこがタイトルバーかどうかの 判断方法はどのようにしておこなえばよいのでしょうか? 教えてエロ人!
前半意味が分からん(HWNDがウィンドウじゃなきゃ何なんだ?) 後半WM_NCHITTESTを送信する
RealGetWindowClass
131 :
デフォルトの名無しさん :2005/10/15(土) 15:48:39
>>128 閉じるメッセージを送って閉じなければタイトルバー
閉じればウィンドウ
質問の雰囲気的にはGetWindowLongPtr()でウィンドウスタイルを取得して調べた方がいいのでは。
134 :
デフォルトの名無しさん :2005/10/15(土) 17:49:39
>>127 ありがとうございます。
調べてみます!
>>123 それでもやはり、回線モニタは用意した方がいいぞ。
#仕事なら言うまでもないことだが。
C/C++室から誘導されてやってきました。 デスクトップ上のアクティブウインドウに別のプログラムから キー入力を行うにはどうすればよいのでしょうか。 WIN APIとMFCをごっちゃで使っています。 HWND wh = ::GetForegroundWindow(); ::SendMessage(wh, WM_CHAR, 'a', 0); として、メモ帳をアクティブにしても何も表示されません。
SendInput
まずは、WM_KEYDOWNじゃないか? それ以前に、指定したウィンドウが子ウィンドウにメッセージを転送してくれるとは限らないし、 SendMessage()系統のAPIでメッセージをトップウィンドウに送信しても無駄だと思う。
142 :
デフォルトの名無しさん :2005/10/15(土) 21:23:16
おまえがな
144 :
デフォルトの名無しさん :2005/10/15(土) 21:29:19
仮想シリアルポートのドライバの件、同じような事を考えてたけど kernel32.dll を全部スルーするスケルトンどっかにないかな そしたら、必要な所だけにコード書いて、そいつを実行ファイルと同じフォルダに入れるだけで アレやコレや出来るのにって事。 いや、簡単なのは判ってるけど、ただ面倒なんだよね
>>137 メモ帳の場合は、メモ帳のウィンドウにあるEDITにキーイベントを送らないといけません。
アプリケーションごとにフォーカスがどの子ウィンドウににあるか意識したくないのであれば
keybd_event()使った方がよいでしょう。
> HWND wh = ::GetForegroundWindow();
ここで正しくメモ帳のウィンドウハンドルが取れているかどうかも確認した方が。
147 :
137 :2005/10/15(土) 22:35:44
::keybd_event('A', 0, 0, 0); ::keybd_event('A', 0, KEYEVENTF_KEYUP, 0); で入力できました。答えてくれた方々ありがとうございます。
'A' これ似てるなw
('A')<僕の顔をお食べよ
>>144 探せばいくつも出てくると思うよ。
俺は任意のDLLを媒介するDLLのソースを自動生成するツールを、どっかで見たよ。
エディットウィンドウEWを作成しています。 EWのデフォルトの文字の大きさ、フォントが好きではないので自分で 設定したいと思ったのですが、変更する方法を教えていただけませんか?
それくらいMSDNで探せ
153 :
デフォルトの名無しさん :2005/10/15(土) 23:30:46
>>150 >任意のDLLを媒介するDLL
そうか アセンブラで書いて、必要な関数以外、 中身は JMP 命令 にすればいいんだ!
154 :
デフォルトの名無しさん :2005/10/15(土) 23:36:02
155 :
デフォルトの名無しさん :2005/10/15(土) 23:48:32
正直むかついた。
157 :
デフォルトの名無しさん :2005/10/16(日) 00:54:08
WSAWaitForMultipleEvents()でPostThreadMessage()の メッセージのイベントって拾えるのでしょうか。 要はソケットとメッセージのイベント両方を待ち受けしたいのですが 他にいい方法があれば誰か詳しい方ご教示願います。 他にWaitForMultipleObjects()などもありますが今ひとつ使い方が よく分かりません。よろしくお願いします。
マルチするくらいなんだから、 お前さんもWaitForMultipleObjectsしていなさいな。
>>157 MsgWaitForMultipleObjects()
とかじゃなくてか?
>>144 そんな面倒なことしなくても、DLLがエクスポートしている関数に
フックを仕掛けることができる。
これなら書かなければいけないコードは、フックする関数の分だけでいい。
>>153 そんなアナタにはnaked関数がおすすめ。
質問です。 クラスに WC_TABCONTROL を指定してタブコントロールを作ったんですが、 タブ上で右クリックされたことを検出するにはどうしたらよいでしょうか?
質問です。 ルートのウィンドウにCreateWindwoで貼り付けた"BUTTON"コントロールの、 文字色を設定したい場合はOwnerDrawというやつしか手段はないもんでしょうか? フォントはWM_SETFONTで変わるけど色が…。 そもそもSetWindowTextで文字を出力するのが間違い? でもHDC取得してTextOutじゃ何も表示されないし。 識者の方々、御指南求みます。
164 :
163 :2005/10/16(日) 15:55:41
…訂正。 ×Windwo ○Window うぃんどぅお。_| ̄|○ il||li
>>163 他にも方法はあるが、OwnerDrawでやるのが無難。
166 :
163 :2005/10/16(日) 16:02:25
>>165 識者殿、サンクス。
猫WinとAPIリファレンスで修行中です。
これからOwnerDrawってやつの使い方を探す旅にいってきま。
目指せWinXPの電卓みたいなボタン。
>>166 XPの電卓みたいなボタンでいいならマニフェストを書くだけだぞ。
XP以外のOSでもああいうボタンにしたいならけっこう手間だけど
質問があります。 5ボタンマウスの戻ると進むボタンに対して、アクセラレータキーを割り当てたいのですが、 どのようにすれば割り当てられますか? 環境は、VC.net 2003です。
>>167 XP限定なら、マニフェストでもできるですか。
OwnerDrawを使うと、98だら2000だらでも文字色が変えられるってことですな。
ん~OwnerDrawは、この先どのみち避けて通れない道っぽいので、
今回は習作だし、"けっこうな手間"をかけてみることにしまつ。
Manifestも手段の一つとして覚えておきま。サンクス。
>>163 VC6のMSDN読むとWM_CTLCOLORBTNでできそうに見えるんだけど、
実際はできないんだよなあ。後の版でこっそり訂正入れてやがるの。
171 :
163 :2005/10/16(日) 19:13:17
>>170 できそうに見えたので、散々やってみましたが、
できなかったので聞いてみた次第です。(w
BM_SETTEXTCOLOR とか、あってもよさそなもんですが…。
あ、あのね、あのね、聞きたいことがあるんだけど答えてくれるかなぁ
ダメ絶対
いいえ
うむ
176 :
172 :2005/10/16(日) 23:18:04
げ、現役女子大生なんですけど質問しちゃだめなんでしょうか? 若さが足りません?
>>176 足りない足りない。
もー全然足りないね。
どのくらい足りないかというと15年くらい。
とっくに腐ってるよ。
>>176 俺が在籍してた大学には白髪のおじいさんもいたよ。現役大学生で。
ある意味若いがw
180 :
172 :2005/10/16(日) 23:29:26
>177さん15年ってあなた・・・ 私、今年還暦を迎えたのですがあなたの好みは45~ですか? それなら従姉妹のいいのがいるので紹介しますから 質問に答えてもらえません? 大丈夫です、貞操は守っているそうですから。
質問スレなんだから質問して良いですかなんてくだらない質問しないで即質問していれば良かったのに質問
CreateFileなどで得たHANDLEからファイル名を取得できるAPIはありますか?
いやおまえ、CreateFileしてる時点でファイル名わかってるだろ・・・ まさか別のプログラムにハンドル渡すとかバカなこと考えてるんじゃねぇだろうな・・・
そんなAPIは無いな
DirectInputを使ったアプリケーションに対してマウスイベントを送る方法はないでしょうか? キーボードイベントはスキャンコードを使用して実現できたのですが・・・・
ファイルの先頭にファイル名でも書いとけ
>>184 > 別のプログラムにハンドル渡すとかバカなこと
いちおうWindowsでは可能だし、そのための仕掛けもある。
でも普通はやらない。
stdin/stdoutのリダイレクト元を調べたいとか?
190 :
デフォルトの名無しさん :2005/10/17(月) 20:48:20
192 :
183 :2005/10/17(月) 21:22:48
たんに、OS側でもってると思われるHANDLE->ファイル名の表を アプリ側がもつのが嫌なだけです. NtQueryObjectはドキュメント化されてないAPIのようで ちょっと調べてみます. ありがとうございました
193 :
デフォルトの名無しさん :2005/10/17(月) 21:25:13
Windowに対してマウスの挙動で、ロールオーバー、ロールアウトみたいなイベントを作り出したいんですが、 どこかにサンプルコードとか公開されてませんでしょうか?、情報ありましたらよろしくお願いします。
国が持ってる個人情報を自分で持つのは嫌です…?
データベースの正規化の思想に近いモンなんじゃねえのか?
DuplicateHandleは、どういう用途に使うものなのですか?
管理したくないならファイルハンドルの方を閉じて開きなおせばいいだけ
>>198 ハンドルを他プロセスに渡したいときとか
201 :
198 :2005/10/17(月) 22:46:32
>>192 GetFileInformationByHandleなんかからも想像できると思うが、
HANDLE->ファイル名をOSが持っているとは限らん。
グローバル変数hInstanceじゃなくGetModuleHandle(NULL)の思想に近いモンなんじゃねえのか?
>>202 そーか?
データを二重持ちしないのは正規化の基本だべ
>>205 そもそも、元々存在ものを正規化するとは、どういう了見よ?
と言う話だろ?
207 :
206 :2005/10/18(火) 00:17:58
×存在ものを 〇存在しないものを ヌケタ…orz
>>206 ファイル名、というモノは存在するだろ。
NTFSだと、ファイルハンドル開いてる最中に、削除なり、リネームなりできるので、 そういった場合のHANDLEとファイル名の対応ってのは曖昧になる。 たぶん、OS内ではファイルシステム上での識別子(UNIXでいうi-node番号)と、 HANDLEの対応表はもってるけど、それが、何というファイル名で参照されたのかは、 管理してないんじゃないかと思う。
その考えで行くと、 「それ」がいま、なんと言うファイル名なのか、はわかりそうなものだけど。 そういえば、sysinternalsのProcess Explorerは、 プロセスが開いているファイルハンドルと、ファイルパスを見ることができるけど、 あれはどうやっているんだろう。
>>198 ハンドルには、全てのプロセスで共通に使えるものと
自分のプロセスでしか使えないもの(擬似ハンドル)があるのよ。
擬似ハンドルは実は定数で、どのプロセスで取得しても同じ値が返ってくる。
DuplicateHandleを使うと、擬似ハンドルを本物のハンドルに変換できる。
>>210 「ちょっと前」はわかっても、「いま」は、わからない。
ファイル名の変更をロックでもしない限り、取得した後も変っていないことは誰も保証できない。
そんなこと言い出したらGetModuleFileNameすら信用できないわけだが。 ファイルコピーするときはコピー元とコピー先を完璧にロックしてから 始めなきゃ信頼できないわけだがWindows Server 2003以外には そもそもそのための機構(ボリュームのシャドウコピーとか)すらないし ファイルの保存ダイアログの上書き確認とか、答えてる間に状態が 変わってるとか超ありそうなもんだが誰も気にしてないし。 近似で十分なことなんていくらでもあるもんだよ。 ちなみにProcess Explorerとかで取れるのは「開いたときになんという パスを使ったか」だと思われ(そうじゃないとハードリンクを持ってるファイルとか 決定のしようがないし)
つーかハンドルはあるんだからロックが必要ならロックすれば言いだけの話だし
>>213 GetModuleFileNameはファイル名を求めるためより、
実行ファイルの有るディレクトリのフルパスを求めるのに使われる方が多いからな
EXE実行中のディレクトリは名前変更不可だ
216 :
193 :2005/10/18(火) 10:46:37
FindWindowでウィンドウ名だけ指定したとき、同じウィンドウ名がいくつかあった場合の優先順位ってありますか?
不定じゃない
Cのライブラリみたいにベンダー毎に実装の仕方を任せてるものでも無いのに不定でたまるか
>>217 全ての同じ名前のウィンドウの中で、最も前面にあるウィンドウのハンドルが返る
あと、同じ名前のウィンドウでも、それが子ウィンドウの場合は検索対象にならないのは知ってるよな?
220 :
217 :2005/10/18(火) 11:48:13
全OSでそう動けばいいけど…。
>>219 >>218 は、
ドキュメントに書いてない挙動を前提として
プログラムを書くのは良くないってことかと
実際に、ドキュメントに書いてあるかどうかは知らんけど
MSDN斜め読みしたが、書いてないっぽいから不定として扱うべきだな。
不定行為
イヤン
たまにいるんだよなー 仕様に書いてないから、わからない。 という言うと、 実際に試してみろよ、何でも人に教わろうとするなよ とかいって怒りだす人が。 そんなこと言ってるんじゃないのよー。
何の話だ・・・
スレの質が低下してまいりました。
ごめん、それはたぶん俺のせいだ
つまり未定義命令を使うとHD64180で動かないという話だろ
>>227 DirectXでまでそんなこと言うような奴は、狂ってるんだろうなw
>>215 FATだと(Win9xだと?)変更できるな
WINDOWSディレクトリのリネームすらできるという豪快さ
(もちろんリネームした後はまともに動かなくなるが)
まぁ、今ほとんどNTFSだからな
235 :
215 :2005/10/18(火) 22:21:01
でもな、不思議なことに、実行中のEXE自身は名前変更できるんだよな・・・ MSめ、中途半端なことしやがって・・・
NT4あたりだと確か削除すらできたぞ もちろん終了するまでクラスタは解放されないけど
さらにカレントディレクトリをexeのあるディレクトリ以外にして起動するとリネームできる。 つまりリネームできなくなる原因は「exeがそこで実行されているから」ではなくて 「そこがカレントディレクトリになっているから」(内部的にプロセスはカレントディレクトリ のハンドルを保持している)
つーわけでGetModuleFileNameの結果を当てにしすぎると不幸になるかもしれない
>235 へー。メモリマップドファイルとしてオープンされてるのかと思ってたよ。
>>239 されてるよ。されてるにもかかわらずリネームできるの。
UNIXじゃ常識だけどWindowsの常識ではびっくりだわな。
>>227 OSのバージョンが上がったり、サービスパックや修正パッチがあたると、
途端に動作が破綻する糞コードを書く人がいるよねー。
メッセージの管轄はここじゃないよね?
とりあえず申してみい
ゴメ、やっぱやめておく。
>>235 「フッ、つまらん釣りだな」と思いつつ、試してみた。
XPHomeSP2でも実行中のEXEをリネーム・移動ができた。
・・・正直驚いた。
それなら設定をEXEの中に持ててもいいんじゃまいか・・・
Macのリソースフォークみたいにな。 ストリームで何かできませんか
248 :
デフォルトの名無しさん :2005/10/20(木) 10:56:32
Arcで円を書きたいのですが、何か円弧になっちゃうというか、 始点終点を指定してないつもりが指定になってるようです。 完全な円にしたいのですが、どうすれば宜しいでしょうか?
>>248 始点と終点が同じじゃないと円にならないと思われ。
つーか、指定しないことはできないと思うのだが。
ソース晒して味噌。
マウスカーソルの周辺部分を、拡大して表示するプログラムを作ってみたいと思うのですが、 どういう方法が一番高速なのでしょうか? あと、マウスカーソル部分一点のRGB値を表示するようなプログラムだったら、 単純にGetPixel()でも問題ないのでしょうか?
252 :
251 :2005/10/20(木) 14:12:39
方法とは、マウスカーソル周辺部分を取得する方法です。
>一番高速 あえて回答もらうの否定してるんだろうか
>>252 GetDC(NULL) した DC (←画面を参照できる) から、StretchBlt するとイイヨ。
座標がわかるんだから、それを元にしてやればいいんじゃないのか。 そんなん高速だなんだってレベルなのか? …釣りか。
256 :
14 :2005/10/20(木) 17:37:17
SendInput()で、スキャンコードを使うことで、 DirectInputを使っているプログラムにもキーストロークを送ることができたのですが、 マウスの操作ができません。 DirectInput使用のプログラムへ、マウスモーションやクリックを送るにはどうすればいいのでしょうか?
〃∩ ∧_∧ ⊂⌒( ・ω・) ゲームくらい自分でやれよ `ヽ_っ⌒/⌒c ⌒ ⌒
258 :
デフォルトの名無しさん :2005/10/20(木) 21:15:23
インストーラ探してるんですけど、情報ありましたら教えてください、また、インストーラの比較サイトなどありましたらお願いします。
ありません ありません
ボリュームコントロールのライン入力をミュートにしたり、解除したりしたいのですが、 win32でどのようにやればよいのでしょうか? お願いします。
他のプロセスのコマンドラインを取得したいのですが、どのようにすればよいのでしょうか。 プロセス一覧を取得して、それらを個別にOpenProcessするまではできました。 ReadProcessMemoryでどこかのアドレスから読み取って構造体を当てれば いいのかなとか、もっとスマートに取得する方法があるんじゃないかと思うのですが、 この辺の情報が見つからなくて困っています。
対象プロセス内でGetCommandLine()するのが一番はやいんじゃね?
>>262 未熟で申し訳ありません、イメージがつかめないのですが、
たとえば起動済みのテキストエディタのコマンドラインを知りたいと思ったら
相手のプロセスに乗り込んでいって何かやるということでしょうか?
向こうでGetCommandLine()やってこちらに通知させる?
そんなことが可能なのでしょうか・・・
勘違いしていたらすみません
>>263 ストリームの欠点は、ファイルをNTFSから外に出すと、失われること・・・。
それはいいとして、
EXEのファイル名がわからないのに、どうやってストリームをCreateFileしますか?
デスクトップ上の、マウスカーソルの下のRGB値を表示するプログラムを作ってみたのですが、 GetPixel(GetDC(NULL),...)が重い上に遅くて困っています。 もっと早い方法はありませんか?
>>268 どうでもいいがそのコードだとDC解放できないような希ガス
271 :
268 :2005/10/21(金) 13:24:54
そういえばReleaseDC()してませんでした。
>>270 具体的にMSDNのどこでしょうか?
>>271 GetTickCountでGetPixelにいくらかかってる?
すぐ帰ってくるけどな。
>>272 3Dのゲームのウインドウの上にカーソルを持っていくと
(3Dのゲーム画面のRGB値を取得しようとすると)
そのゲームのFPSが目に見えて落ちるんです。
>>273 DirectX部分のDCとってるのか...?。
ならIDirect3DSurface9とか使え。
いってきます。
277 :
260 :2005/10/21(金) 19:39:24
278 :
デフォルトの名無しさん :2005/10/21(金) 20:46:44
メニューって左から ファイル(F) 編集(E) ・・・ と並んでいますが、 ヘルプ(H)だけ そいつらと離して、常に右端へ配置したいのです。 常に最大最小化閉ボタンの真下あたりに来るように。 どうすればいいですか?
自分で作るしかない
280 :
デフォルトの名無しさん :2005/10/21(金) 20:52:05
ま、まじですか・・・ 何かとっかかりとか教えていただけると嬉しいです・・・ メニューとか右端とかで検索してもどうも引っかからなくて・・・
自分で作るしかない
自分で作るしなかい
手間がかかるのは、Windows標準のインターフェイスから逸脱するって いうことですよ。
284 :
デフォルトの名無しさん :2005/10/21(金) 21:10:25
RS-232C通信についてお聞きします。 今、下のようなコードでCOMポートを開いて通信をしようとしているのですが、WriteFileで送信はできてもReadFileで受信ができません。 しかし、このコードのプログラムを実行する前に一度ハイパーターミナルなどでポートを使用した後だとReadFileで受信ができます。 おそらく初期化の手続きに問題があるとおもうのですが、どこに問題があるのか教えて頂けないでしょうか。よろしくお願いします。 //問題のコード // PORT OPEN InitializeCriticalSection( &com->CritSec); com->Com = CreateFile( port, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL); com->Stat = stat; com->Pc = pc; sprintf( com->Port, "%s", port); // イベントハンドラ設定 com->hReadEvent = CreateEvent( 0, TRUE, FALSE, 0); com->hWriteEvent = CreateEvent( 0, TRUE, FALSE, 0); //下に続く
285 :
続き :2005/10/21(金) 21:11:28
// 非同期通信設定 com->ReadOverLapoed.Offset = 0; com->ReadOverLapoed.OffsetHigh = 0; com->ReadOverLapoed.hEvent = com->hReadEvent; com->WriteOverLapped.Offset = 0; com->WriteOverLapped.OffsetHigh = 0; com->WriteOverLapped.hEvent = com->hWriteEvent; // その他設定 GetCommState( com->Com, &dcb); dcb.fBinary = 1; dcb.BaudRate = 9600; dcb.ByteSize = 8; dcb.Parity = 0; dcb.StopBits = 0; dcb.EofChar = 0x0a; dcb.EvtChar = 0x0a; SetCommState( com->Com, &dcb);
>>278 MF_HELP
>>283 昔はヘルプメニューが右に寄るのって標準的だったんだけどなあ。
>>278 リソースのメニューなら、メニューのプロパティで「ヘルプ」をチェックするか、
リソースファイルでHELPオプション付ける手もある。
IDC_MAINMENU MENU DISCARDABLE
BEGIN
POPUP "&Help", HELP
(以下略)
メニューバーの前面に「?」のビットマップボタンウィンドウを配置するのが一番楽だろう。 フレームウィンドウのリサイズに伴って位置を移動させる必要があるけど。
>>286 Win3.1の頃の標準なんてもはやどうでもいい。
MF_HELPは、DOS 時代の CUI の UI 標準 (OSAだかCSAだか何かアッタんよ) の に準拠したようなヘルプメニューを Windows で実装するためにだけ存在しますた。 普通の MS のプログラムでは Help メニューも右寄せにはなっていなかったはず。
293 :
289 :2005/10/21(金) 21:42:57
>>287 という普通のやり方があることを今知った・・・。
そんなわけで
>>289 はナシということで。
294 :
デフォルトの名無しさん :2005/10/21(金) 21:49:17
メニューの話ついでに質問なんですが、サブメニュー[元に戻す(U) など]じゃなくてルートメニュー[ファイル(F) など]が押された時のイベントってどうやって取るんですか? リソースエディタだと「IDを編集できません」ってなってるので何かいつもとは違うやりかたなんだろうなあと。
295 :
278 :2005/10/21(金) 21:52:42
うおおお、みなさんありがとうございます。
色んな知識が身につきました。
そうですよね、ヘルプが右側にあったのって結構昔ですよね。
>>286 さんの教えてくれたMF_HELPを使おうと思ってModifyMenuとか調べてたら、
>>287 さんの超簡単な方法であっさりできてしまい感激です。
ありがとうございました!
>>284 GetCommTimeouts()の結果を確認せよ。
お勧め設定はBuildCommDCBAndTimeouts()を例えば
BuildCommDCBAndTimeouts("com1: baud=9600 parity=n data=8 stop=1 to=off xon=on "
"odsr=off octs=off dtr=on rts=on idsr=off", & dcb, & timeOut);
のように使う方法。
SetCommStateに失敗してbaud rate とかが設定されてないんだと思う。 何故失敗するかは知らないけど。
300 :
268 :2005/10/22(土) 00:43:22
>>274 DirectXはまったく知らないのですががんばってみます。
GetFrontBufferDataで取得して、
IDirect3DSurface9::GetDC()で、後は好きなようにしていいのかな。
昔の話といえば、よくメニューに 「ファイル(\036F\037フ)」 こんなアクセスキーをつけていたんだが、日本語のアクセスキーが 使えなくなったのっていつからだっけ? Win95?
インターネットエクスプローラの文字検索ウィンドウ(Ctrl+Fで出るやつ)を出すにはどうしたらよいのでしょうか? また、HTMLの画面とかを出さずに単独で出現させることは可能なのでしょうか?
>>301 世界共通バイナリになってから(Win2k/XP)?
3.1の頃からそんなバカなアクセスキーなど見たこと無いわ
>>302 検索ダイアログなら、コモンダイアログでなかったっけ?
>>304 実際にアプリが使ってたかどうかはともかくとしてOSに機能はあったよ
Win/Vが苦労した点の1つもカナアクセスキーのサポートだったし
OSに機能があっても使われてなけりゃ無いのと一緒
古いサンプル探したらこんなのが POPUP "ウィンドウ(\036W\037ウ)" { MENUITEM "カスケード表示(\036C\037カ)\tShift+F5", IDM_CASCADE MENUITEM "タイル表示(\036T\037タ)\tShift+F4", IDM_TILE MENUITEM "アイコン再配置(\036I\037サ)", IDM_ARRANGE } POPUP "ヘルプ(\036H\037ヘ)" { MENUITEM "MDI について(\036A\037ニ)...\tF1", IDM_ABOUT }
>>307 コンパネからUIが消えたのは3.1だったかな
でも質問は「使えなくなったのはいつか」なわけで
MFCのスレッドの中だとsrand関数が無効になるんだけど何でですかね?
そんなapiあったか?
無いな
>>310 MFCスレか初心者スレへ。そのときはただ「無効」と書かず、どうやったらどうなったか書くように。
314 :
デフォルトの名無しさん :2005/10/22(土) 19:24:37
C++相談室でこちらに誘導されたので、同じ質問になりますが、書かせていただきます。 > 簡単なインストーラを作りたいんですが、どなたか教えてください。 > 実際、やることは簡単で、myapp.exeを指定したフォルダにコピーするだけです。 > で、myapp.exeをインストーラと同じフォルダに入れておけば、myapp.exeを > いったん読み込んで、指定したフォルダに書き込むプログラムはすぐできます。 > しかし、そうではなくて、インストーラの中にmyapp.exeのデータを埋め込んで > しまいたいのです。ユーザから見えないように。 > また、インストーラをファイル1つにするために。 > とすると、バイナリのデータファイルの内容を、実行可能ファイル(今の場合、 > インストーラ)にマージさせることなどが可能なのでしょうか? > そうでないなら、ファイル1つのインストーラはどのようにできているのでしょうか。 > どなたか、教えていただけないでしょうか。 で、リソースがヒントと言われたのですが、よくわかりません。 Visual C++のリソースにもバイナリファイルなどなかったような。 ただ、いずれにしても、私はBCCでやっているので、リソースファイルも手書きになりますが。 どなたかお願い致します。
315 :
314 :2005/10/22(土) 19:26:14
教えていただきたいのは、もちろん、できるかどうかというより、 できるなら、その方法を教えていただきたいのです。 連投すみません。よろしくお願い致します。
バイナリのリソースでアイコンやビットマップはよく使うと思うけど
318 :
314 :2005/10/22(土) 19:39:03
>>316 ものすごく速いレスで驚きました。
ありがとうございます。
そのページ勉強してみます。
他のプロセスに属しているリストビューの項目を取得したいのですが、どうすればいいのですか? 普通にLVM_GETITEMメッセージを送ってもアドレス空間が違うので、ポインタが無効になってしまう・・・
320 :
デフォルトの名無しさん :2005/10/22(土) 19:55:51
GetSystemTime等で得た時間をいくつか取っておいて、 時間の差を求めたり、加算したりしたいんですが、 CompareFileTmeという比較APIはあるのに、差を求めるAPIが見付かりませんでした。 時間同士の差を取得したり加算したりする良い方法は無いでしょうか?
>>319 VirtualAllocExとか。9x系では別の手段が必要だけど。
>>320 ミリ秒単位の精度が必要ないなら素直に標準関数を使おう。
#そしてそれはスレ違いなのでここでは説明できない。
>>320 FILETIMEにしてULARGE_INTEGERで計算とか
326 :
デフォルトの名無しさん :2005/10/22(土) 20:25:52
>>321 それができたらここに書込みなんてしませんよ。
>>324 標準関数はdouble型が返ってきて気持ち悪いので嫌です。
327 :
デフォルトの名無しさん :2005/10/22(土) 20:26:38
>>325 それしかなさそうですね。
ありがとうございました。
>>326 >標準関数はdouble型が返ってきて気持ち悪いので嫌です。
いや、time_t同士の引き算で充分だろ。
>>314 charの配列として固定で埋め込んで、
そのデータをファイルとして書き出せばいいじゃないか。
何のためにここで聞いてんだか分からなくなる回答すんなや
>>332 2chで聞くことに意味を求めることが既に間違っている
_, ._ ( ´ _ゝ`)
>>314 どういうのが見えないって意味なのかなー
> インストーラをファイル1つにするために。 こういう意味なんだろ
じゃーそのままリソースで持つだけか
DLL内部から、そのDLLが呼び出された親ウィンドウのハンドルを取得したいのですが、 どういった方法があるのでしょうか? ウィンドウを多重起動するのでFindWindwでは上手く取得できません。
>>340 HWNDを受け取る初期化関数をDLLが公開するのが簡単。
>>340 GetProcessIdとGetWindowProcessThreadIdで照合とか‥
別に方法ありそうだけど
DLL呼び出し側も自作なら共有メモリにメモっとくとかも。
344 :
340 :2005/10/23(日) 12:20:50
>>341 ws2_32.dllをフックしているので、その方法は厳しいかと思います。
>>342 GetProcessIdをVC++.NETで使おうとすると定義されていない~となるので
GetProcessIdをMSDNで調べたら、Requires Windows "Longhorn" or Windows XP SP1.
と書いてありました。うちの環境はWindowsXP SP2なのですがそのAPIはもう使えないのでしょうか?
>>343 残念ながら自作じゃないんです。
345 :
340 :2005/10/23(日) 14:33:17
解決しました。
>>342 さんの書いたことをヒントにいろいろ調べて、
GetCurrentProcessId()とGetWindowThreadProcessId()を使えば出来るということがわかりました。
回答していただいた皆さんありがとうございました。
347 :
340 :2005/10/23(日) 15:08:29
GetParent(HWNd hWnd); これは、子ウィンドウのハンドルを引数に与えないといけないのですが、 子ウィンドウが無いので出来ませんでした。 駄目と思いつつ、hModuleを引数に与えてみましたがやはり無理でした。
そもそも親windowのハンドルがわからないと 絶対に出来ないことなのかと聞いてみたい。 他に代替手段があるかもしれないから、なにが したくて親windowハンドルを取得したくなったのか書いてちょ
おおかたネトゲのサポートツールでも作りたいんだろ。 マクロだとかスクリーンショットだとか。
自作のペン・ブラシは使用後削除するということですが、 CreateSolidBrushは削除とかないですよね? あとリージョンも削除しなくていいんですか?
>>347 「親」ウィンドウを探そうって訳じゃないのだな。
だったら、DLLの関数にメッセージを投げたいウィンドウのハンドルを
パラメータで渡せばいいだけだな。
352 :
デフォルトの名無しさん :2005/10/23(日) 16:29:06
こんにちは、よろしくお願いします。 ファイルを削除しようと思い DeleteFile関数をつかっています。 bool mcc = DeleteFile("ファイル名"); mcc はtrue ですが、削除できていません。 どうしてでしょうか。 後、remove 関数とかも使ってみましたが、 戻り値が0でも削除できていないのです。
353 :
340 :2005/10/23(日) 16:34:02
ウィンドウのボタンを押すなどの操作を自動化したくて、 そうするにはSendMessageを行う際にウィンドウハンドルが必要だったんです。 うちの回線が不安定で時々接続が切れるので、 そうなったら自動で再接続をするってツールが必要なので作りました。 他に方法ってあるんですかねぇ。 p.s. 縦読みすると「ウそうそ」とか書いてありますが本文とは関係ありません。
フレッツは知らないけど、それくらいルーターがやらないの? ツール作る以外に方法はあると思う
フレッシ接続ツールなんか投げ捨ててしまえ。
357 :
340 :2005/10/23(日) 16:48:15
説明不足でした。 接続が切れるのはソフトウェアのほうなんです。 そっちには自動再接続などの設定項目が無かったんで、 自作ツールで強引に繋いでしまおうと思ったんです。
>>358 マジですか!
それは戻り値を取ってDeleteObject()に渡すんでしょうか?
CreateSolidBrushだから削除が必要ないとかじゃあなくて、 システムに渡してしまうから必要ないとかそう言う話ではない? SetWindowRgnとか、WNDCLASS::hbrBackgroundとか。
361 :
350 :2005/10/23(日) 18:13:25
ああ、きっとそうです。 そのへんよく分かってなかったので もう一回勉強しなおしてきます。ありがとうございました!
362 :
デフォルトの名無しさん :2005/10/23(日) 20:52:39
>>362 ファイル名をフルパスにしていなくて、カレントがあさってにあるってオチか?
364 :
デフォルトの名無しさん :2005/10/23(日) 21:06:54
>>363 さんありがとうございます。
いいえ違うんです。
カレントフォルダーを収得して、
フルパスにしてるのです。
> うちの環境はWindowsXP SP2なのですがそのAPIはもう使えないのでしょうか? #define WIN32_WINNT 0x502 が必要なんじゃないの?
じゃあその取得してるカレントフォルダーが、問題のファイルの有るフォルダと違ってんだろ どうでもいいけど、カレントフォルダーを収得とか、日本語おかしいな
367 :
デフォルトの名無しさん :2005/10/23(日) 21:12:19
>>352 です
ただ、そのファイルからデータを収得して、
閉じた。経緯はあるので、多分それが原因のような気がしてきました。
それ以外の何のつながりもないファイルなら、削除できましたので、
368 :
デフォルトの名無しさん :2005/10/23(日) 21:14:15
>>366 さん、そうですね、日本語になっていない。
GetCurrentDirectoryでパスを収得して、ファイル名と引っ付けています。
ますますエスパーが必要になった件
>>368 その収得が、日本語おかしいって言っとんねん
で、ほんとにちゃんと閉じてんの?
CloseHandleしてる?
してるんなら、読み込んだりしたとか関係無い
だめだ、理解できてない
収得 か、暫く気づかんかった
373 :
デフォルトの名無しさん :2005/10/23(日) 23:21:17
>>352 です
取得ですか。
fstream で、データを取り入れているのですが、
closeで閉じていますが、タイミングを外して、削除させることにしました。
皆様ありがとうございました。
なんでfstreamなんだよ・・・
375 :
デフォルトの名無しさん :2005/10/23(日) 23:50:21
>>374 読み込みに使っていますが、だめなのでしょうか。
>>375 少なくともfstreamが握っている間はファイルを削除できないと思われる。
それとも374は単に読み込むだけならifstreamを使えと言いたいだけかもしれないが。
>>340 なんで他のプロセス空間にDLLを忍び込ませる程度の知識があって
そこで悩むのかが俺には分からない。
そもそも普通は順番が逆な気もするが。
(ウィンドウハンドルからターゲットのプロセスを探す)
ウィンドウ作成より先に読み込まれるような方法でDLLを仕込むなら、
WM_CREATEをフックするとかした方がスマートかと。
だが断る
381 :
デフォルトの名無しさん :2005/10/24(月) 11:21:27
>>378-380 皆様いろいろとすみません。
fstream ifstreamもう少し詳しく調べてみること私にとって必須です。
しかし、callback関数の部分で、最後に書き込みもしていましたから、
結局ofstream もつかっていました。
細かくまとめて、ソースコードあげることも考えましたが、
いろいろとご迷惑をおかけすることとなりそうですので、
それでは、皆様ありがとうございました。
382 :
デフォルトの名無しさん :2005/10/24(月) 11:24:41
>>382 ファイル共有はC/C++の仕様ではなくOS依存の仕様なので、
それを使うにはOS依存の非標準関数を呼び出す必要がある。
fstream ff;
int fd = _sopen(,,,);
ff.attach(fd);
384 :
デフォルトの名無しさん :2005/10/24(月) 17:29:24
WebサーバとCGIのように、あるアクションがきっかけで別のアプリを内部的に起動してアプリの間でデータの送受を行いたいんだけど、こういうときにはパイプとかいうのを使うの?
>>384 まあでもパイプ以外にも方法は色々とある。
プロセス間通信でぐぐれば。
ImmSetCompositionString()について質問があります。 ImmSetCompositionString()で編集文字列に"m"をセットした後に 'a'を打鍵によって入力して"ま"としたいのですが、 続けて入力を行っても"mあ"となってしまいます。 キーボードイベントで解決しようと思ったんですが 処理が遅れて、ある程度早い入力を行うと "まっちゃ"となるべきが"あmっちゃ"、"あtmちゃ"となったりしてダメでした。
トップレベルウインドウではない、ある一つのウインドウに対して、あるキーを押した(例えば"1"キーを押した)ということを知らせるにはどのようにすれば良いですか?
RegisterHotkey()じゃダメなん?
390 :
デフォルトの名無しさん :2005/10/24(月) 20:41:50
>>382 です
>>383 さんありがとうございます。
詳しく書いてない私が悪いのですが、
includeしているのは、<fstream>のほうなのです。
ファイル操作について、調べていると、いろいろあって、
何を使っていいのか分からず、fstream をつかいました。
だから、もう少し詳しく調べないといけないのですが・・
がんばっていろいろ勉強します。
ありがとうございました。
リソースでダイアログにリストビューやツリービューを貼り付けた場合 その初期化(項目の追加)をしたい場合はどうしたら良いのでしょうか? ネットだとCreateWindowExで作成しているものしか見つからなくて WM_CREATEがきた時にやっているので方法がわかりません
WM_INITDIALOG
既に起動中のIEにOLE接続するにはどうしたらいいでしょうか?
395 :
デフォルトの名無しさん :2005/10/25(火) 11:14:25
win2kで赤外線ポートをWinSock通さずに触ることって出来ないんだろうか? CreateFileが理想。WinSock邪魔。
COMポートと同じ様に制御できるんでないか?
397 :
395 :2005/10/25(火) 12:01:30
>>396 いやぁ、それがな、IrDAでリザーブしているCOMポートはどうやらIrCOMM用らしいんだ。
IrCOMMはドライバとして組み込まれているんだが、基本的にユーザには隠蔽されているんだよ。
(Win9xでは隠蔽されていなかった気がするけど)
まあ、IrCOMMはIrSocketを使ったエミュレーションサービスだから結局WinSockもどき中間層が入って、
鬱陶しいことこの上ないけどね。
そしてirmonを止めてもDiscoveryは続いているんで、カーネルがデバイスを貸してくれない・・・。
因みに、やりたいことってのは、空間に任意のデータを投げたいだけで、
それが実現できれば何を使ってもとくに気にしない。
どうにかならんかね。
399 :
395 :2005/10/25(火) 12:26:13
ドライバ作るの面倒くさい……。 まあ、irda.sysの下にフィルタドライバでも作って、Read/Write出来るようにしてみるよ。 かなーり実験要素が強いけどな。 ありがとねー。
男なら、APIなんか使わず気合で作れ!
>>394 すいません、言葉足らずでした。
ImmSetCompositionString()を用いて
その後に続く打鍵と組み合わせてローマ字入力を成立させるには
どうすればいいのか、という質問です。
VC++でADODBでOracle9.0.2へつないでるんだが、 ハンドルリーク、メモリリークしてしまう。 これって何処に質問したらいいんだろ?ココでいいのかな? ダメなら誘導してくれまいか。
404 :
402 :2005/10/25(火) 15:29:44
>>402 のコードはこんな感じなんだが、なんかおかしいところある?
::CoInitialize(NULL);
_RecordsetPtr m_pRecordset; // Recordsetオブジェクト
_ConnectionPtr m_pConnect; // Connectionオブジェクト
_CommandPtr m_pCommand; // Commandオブジェクト
// ADOオブジェクトの生成
m_pConnect.CreateInstance(__uuidof(Connection));
m_pCommand.CreateInstance(__uuidof(Command));
m_pRecordset.CreateInstance(__uuidof(Recordset));
// データベースへの接続
if(FAILED( m_pConnect->Open(L"Provider=OraOLEDB.Oracle;Data Source=ORACLE_OLETEST",L"TESTUSER", L"TESTUSER", adOpenUnspecified))) return FALSE;
// SQLの設定
CString strSQL = "SELECT B.NAME A.BIN_DATA from TBL_CMN_MASTER A, TBL_CMN_LAWDATA B where B.ID = 'TEST' AND B.ID = A.ID";
m_pCommand->ActiveConnection = m_pConnect;
m_pCommand->CommandText = _bstr_t((LPSTR)strSQL);
m_pRecordset->PutRefSource(m_pCommand);
// レコードセットの取得
_variant_t vNull; // VARIANT型のNULLとして使う
vNull.vt = VT_ERROR;
vNull.scode = DISP_E_PARAMNOTFOUND;
m_pRecordset->CursorType = adOpenKeyset;
hr = m_pRecordset->Open(vNull, vNull, adOpenKeyset, adLockOptimistic, adCmdUnknown);
if( m_pRecordset->RecordCount == -1 ) return FALSE;
// 先頭レコードへ移動し、フィールドの値を取得
m_pRecordset->MoveFirst();
_variant_t vString = m_pRecordset->GetCollect(_variant_t("NAME"));
m_pConnect->Close();
m_pConnect.Release();
m_pCommand.Release();
if( adStateOpen == m_pRecordset->State ) m_pRecordset->Close();
m_pRecordset.Release();
::CoUninitialize();
>>403 うは、インシデント使えってか。
とりあえず、悪いのがADODBかOracleのOLEDBか俺のコードか切り分けたいんでお願いします。
どうでもいいがReleaseは直接呼ぶ物じゃないと思った。 あとどうやってリークを確認した?
>>404 m_pConnect->Close()後にm_pRecordset->Close()は順番逆のような
Releaseは CoUninitialize の前にやっとくってことで呼んでも構わない。
あたりまえだけど。
>>402 MDAC 2.1 以降では ADO とかってデフォルトでコネクションプーリング
してるという話もあるから、それがメモリリークに見えてるだけでは?
409 :
デフォルトの名無しさん :2005/10/25(火) 23:42:15
コンピュータがロックされているかを知る方法ってありませんか? ユーザがウィンドウズをロックしてたら退席中、という判断をしたいんですが。
>>406 が言いたいのは、たぶん、
人間が手作業でReleaseを呼ぶコードを書くとミスをしてリークするから、
ATLとかがやっているように、軽くクラスでラップして自動的に呼ぶようにすべし、ってことでしょ。
>>408 Releaseを呼ばずにCoUninitializeするのは、とっても行儀が悪いよ。
OSが勝手にReleaseを呼んでくれると思ったら大間違い。
もしアウトプロセスなら、参照カウントが減らないまま残ってしまうよ。
で、いうとおり、各種リソースがプーリングされてたりするので、
リソースのリークは、たくさんループさせて様子をみないと判別が難しい。
>>411 あるんすかー
教えて…いただけません?
>>413 おおなるほど。
サービスアプリケーションにするつもりなんで、visibleかどうかで判断はできないかも。
というか↓を使えばいいのでは!
> use the WTSRegisterSessionNotification function to register to receive
> WM_WTSSESSION_CHANGE messages.
ありがとうございました。なんとかなりそうな気がしてきました。
>>415 わー、ありがとうございます。やってみます。
417 :
402 :2005/10/26(水) 10:01:10
皆さんレスありがとう。
>>406 タスクマネージャのプロセスタブを開いて数十回
>>404 のコードを実行してから10分放置して、
メモリ使用量と、ハンドルの数を確認したら、両方増えていた。
特にハンドルは1回実行すると2個増える。
で、Oracleの掲示板で、接続の度にコネクション作成&使用後に消去を繰り返すと、
メモリリークするっていう書き込みを見つけたので、今朝自作のコネクションプーリングを
組み込んでテストしてみた。
結果、なんとハンドルリークは無くなった。
メモリリークはもうちょっと動かさないとわかんないけど、良くなったけどまだ増えてるような...
>>407 まったくその通りだね。指摘ありがとう!
>>408 404のコードを10秒スリープ付でループで実行して、数時間放って置くとハンドル、メモリとも
ものすごく増えてます。だからリークしてる、と思う。
>>410 えええ!ADODBはデフォルトでプーリングしてますか。
それにさらに自作のプーリングつけるのってなんか間抜けだな...
てことで、ADODB+OracleOLEDB(9.0.2)はコネクション作成&消去を繰り返すとリークすると思う。
それとSQLServerでDB作ってODBC経由で
>>404 のコードをテストしてみたら、リークしませんでした。
418 :
デフォルトの名無しさん :2005/10/26(水) 11:44:22
SetPropはグローバルアトムじゃなく、ローカルアトムでも正常に動くんですね。
>ADODB+OracleOLEDB(9.0.2)はコネクション作成&消去を繰り返すとリークすると思う。 いくらなんでもこの結論はちょっと…… このあたりは確認済なのでしょうか。 - COMオブジェクトを作るだけでDBに接続しない場合 - 別のOLEDBプロバイダを使った場合 JET、SQLServer、etc - CoInitialize~CoUninitializeを繰り返すのではなく、COMの初期化・後片付けは1回だけにして その中を繰り返し実行する(繰り返し呼ぶのが良くない場合を考慮) >それとSQLServerでDB作ってODBC経由 なぜわざわざODBC経由なのでしょうか。こっちもOLEDBプロバイダを使わないと正確な 比較にはならないと思います。
420 :
402 :2005/10/26(水) 17:23:55
>>419 言葉が足らなくて申し訳なかったのですが、
ADODB+OracleODBCも試しましたが同様にリークしました。
SQLServerへのOLEDBでの接続は、やり方がちょっとわからなかったので試してません。
あー、COMオブジェクトの作成だけ繰り返すとかもやりましたがもちろん問題なし。
悪いところがADODBかOracleのOLEDBか俺のコードか切り分けたかったので、
俺的にはとりあえずコードじゃないんじゃないかって感じでもうOKです。
これ以上別のプロバイダを試すのは、時間的に余裕が無いので、
ちょっと結論が飛躍したのは勘弁してください。
ちゅか、俺的決め付けの結論なんか書かなきゃ良かった^^;
421 :
419 :2005/10/26(水) 18:14:56
>>420 ふーん、まあOracleの場合はOLEDBよりoo4oの方がいいという噂も聞いたことがあるので、
OLEDBプロバイダはよろしくないのかもしれませんね。
別DBへの接続文字列に関しては、udlファイルを使うのが楽ではないかと思います。
・中身が空、拡張子がudlのファイル(hoge.udlとか)を適当に作る
・ダブルクリックすると設定画面が出る
・設定する
・udlファイルの中身をのぞく
・(゚Д゚)ウマー
422 :
デフォルトの名無しさん :2005/10/26(水) 20:43:50
あるキーAが押された時、処理Aを実行し、 別のキーBが押された時、処理Bを実行するプログラムで 仮にキーA、キーBをそれぞれZ、Xとした場合 // WM_CHARで if(wParam=='z'){ 処理A; } if(wParam=='x'){ 処理B; } のようにしているのですが、zとxを同時に長押しした場合、 長押ししている間、処理Aと処理Bを共に実行するようにするには どうすれば良いのでしょうか。
同時押しが判定できるのはCtrl Shift Alt とか
>>423 判定はできなくても処理さえ同時に実行できれば良いのですが
何か方法はないものでしょうか
GetAsyncKeyStateを見てるスレッドを二つたてれば?
>>423 それは嘘。
キーのmakeとbreakのメッセージを受け取り、
自前で押下状態かどうかを管理すればいい。
Zをmake
Xをmake
ずっと続く
Xをbreak
Zをbreak
とかいうふうにメッセージが来るからさ。
ShiftとかCtrlじゃない普通のキーはそもそもハードウェアレベルで同時押しが検知できない場合がある、 つーのは前提として知ってるよな?
そんなのはイヤです。
嫌よ嫌よも好きのうち
430 :
デフォルトの名無しさん :2005/10/26(水) 23:22:49
>>428 /::::::::::::::::::::ヽ、 /:::::::::::::::::::::::ヽ
/:::::::::::::::::::::::::::::::ヽ /::::::::::::::::::::::::::::::::::ヽ
/::::::::::::::::::::::::::::::::::::::::::l l::::::::::::::::::::::::::::::::::::::::::l
l::::::::::::::::::::::::::::::::::::::::::::::l l::::::::::::::::::::::::::::::::::::::::::::l
l:::::::::::::::::::::::::::::::::::::::::::::/_,.......-;,==-...ヽ::::::::::::::::::::::::::::::::::::::::l
l:::::::::::::::::::::::::::::::::::::::::/:::::::/ `ヽ::::::::::::::::::::::::::::::::::::::/
ヽ::::::::::::::::::::::::::::::/:::::::::/ / ̄ ヽ/⌒ヽ:::::::::::::::::/
ヽ、:::::::::::::_/::::::::::::/ / ⌒ ヽ¬-'´
 ̄ /:::::::::::::::::l l:|
l::::::::::::::::::l l:l
l::::::::::::::::::l <●> l:l
l::;, -ー 、::l 、<●> .l:l
/ ヽ l::l
l _ ( ○ ,:○),, ∠く
l _ l
ヽ ヽ ./
\ \、 __,-'ニニニヽ /
ヽ 、 . ヾニ二ン" /
ヽ: : : ./
| |
ヽ\ /
l `ー-::、_ ,,.'|
431 :
デフォルトの名無しさん :2005/10/26(水) 23:26:17
>>429 __ ,....-─-、
/::::::::::::::::::::ヽ、 /:::::::::::::::::::::::ヽ
/:::::::::::::::::::::::::::::::ヽ /::::::::::::::::::::::::::::::::::ヽ
/::::::::::::::::::::::::::::::::::::::::::l l::::::::::::::::::::::::::::::::::::::::::l
l::::::::::::::::::::::::::::::::::::::::::::::l l::::::::::::::::::::::::::::::::::::::::::::l
l:::::::::::::::::::::::::::::::::::::::::::::/_,.......-;,==-...ヽ::::::::::::::::::::::::::::::::::::::::l
l:::::::::::::::::::::::::::::::::::::::::/:::::::/ `ヽ::::::::::::::::::::::::::::::::::::::/
ヽ::::::::::::::::::::::::::::::/:::::::::/ / ̄ ヽ/⌒ヽ:::::::::::::::::/
ヽ、:::::::::::::_/::::::::::::/ / ⌒ ヽ¬-'´
 ̄ /:::::::::::::::::l ,,,,,,, ノ ヽ,,,,, l:|
l::::::::::::::::::l '''""" """'' l:l
l::::::::::::::::::l -=・=‐, =・=- l:l
l::;, -ー 、::l "''''" | "''''" l:l
/ ヽ ヽ l::l
l _ ^-^ ∠く
l _ l
ヽ ヽ -====- ./
\ \、 "'''''''" ./
ヽ 、 . /
432 :
デフォルトの名無しさん :2005/10/26(水) 23:28:27
:::;;;;;;,-''''''''-;;;,;;;;;; ;;;;;;;;;;i´ `i;;;;;:::: ;;;;;;;;┌' <●>'ヘ;;: ;;;;;;;;;)ュ, o) ,r(;;; :;;;;;;;;;> ∋/ヾ;;;;;;; ;;;:,チ''゛ :`::::::':': ゙゙Y;;;;:::: ::;;;;y'´ , `{;;;;;::::: ::;;;.(, ″ '(;;;:: ;;;;;:`,ll'-〟 ll |::: ::::| ゙;,_ ,: ゙ i;;;;,,,,,,,,, :::::i :::: .'-、;;;;;;;;;;;::::: ;;;;;;;;ハ i::::: ....::::'' `'<;;;;;:::: ::;;;;;.ハ '(i|||||lllllllliiii=''′ .,};;;;'''' _,,,,,lllllllシ ,,illllllllll″ ,__,,,,,,,,,iiillllllllllllll) .(lllllllllllll、,,,ィ'illlllllllllllli, ゙lllllllllllllllll!゙゙゙゙゙゙ `”゙゙゙゙゙゙llllllllllllllllllllllュ,,j'lllll゙ ヴァカだリャ。 マた来テュのか。
433 :
デフォルトの名無しさん :2005/10/26(水) 23:30:02
天才現るw
434 :
デフォルトの名無しさん :2005/10/27(木) 01:03:17
作品でのエラーチェックはどこまでやるのがいいのでしょうか。 今の所やっているのは、メモリ確保系、Bitblt、SetTimerなど、 やっていないのは、GetDC、ReleaseDCなどです。
可能な全部のAPIでチェックしないとダメだよ
Windows で .NET を使わずに UNIX の strptime(3) のような処理を行う関数っ てありますか?(.NET なら DateTime.Parse でいけそうなんですが...)
VarDateFromStr()
439 :
デフォルトの名無しさん :2005/10/27(木) 10:09:25
何だこれ、ってURL遡れば、SDKサンプルプログラムの「タイトルのボタンを左右逆にする」だと分かるはずだが きっと違うことを聞きたいんだろうな。日本語って難しいね★
これなんだ
CPoint の配列で表される多角形の中に CPoint で表される一点が含まれているかどうか 直接調べる関数はありますか? CRgn に頂点を渡してから PtInRegion で調べる方法もありますが何か無駄な気がします。
時に無駄と思える手順を踏むことも大切なのだよ
445 :
442 :2005/10/27(木) 21:54:47
>>434 俺の場合、たしかに一部の関数は引数がおかしくない限り必ず正しい結果を返すと信じて、エラーチェックをしていない。
ただ、GetDC()など処理の開始として行う関数は必ずエラーチェックを行う。
あるウィンドウに丸や三角を描画しているのですが、 あるボタンを押すと、あるウィンドウ内の図形が全て削除される。 というようなことをしたいのですが、どうしたらよいのでしょうか?
DestroyWindows
>>447 背景色で塗りつぶすではまずいの? UNDO とかしたいのかな。
リンクエラー
451 :
434 :2005/10/28(金) 00:20:13
ありがとうございます。 GetDCなどをチェックせず、Bitbltだけチェックするのは、 GetDCなどでエラーが出れば、Bitbltでもエラーが 出てくれるのではないかという考えからでした。 裏ビットマップに描くとか、Bitblt系の一連の動作は、 前後のメモリ確保、初期化、開放とか量が多いので、 楽をしていました。 ご指摘通りちゃんとチェックしたいと思います。
そうです、背景色で塗りつぶしたいのです。
>>452 じゃあ背景色で塗りつぶしたらいいじゃない。
丸や三角が描画できてるんなら簡単だろ。
454 :
デフォルトの名無しさん :2005/10/28(金) 02:53:53
BMPファイルを操作するAPIなぞは提供されていないでしょうか?
OpenFile
GDI+
どういう操作がしたいんだよ
私も、GDI+がよいと思う。 比較的有名なCodeProjectのCxImageクラスと比較してもGDI+が圧倒的に優位。 ファイルフォーマット変換時の実行速度・圧縮効率もGDI+の方が上。TIFFも標準サポートしている。
459 :
デフォルトの名無しさん :2005/10/28(金) 10:28:53
すいません、GetAsyncKeyStateで5ボタンマウスの左右についてるボタンが押されている状態を取得したいのですが、 いくら調べても5ボタンマウスの左右の押されている状態を取得するサンプルが見当たらないのですが、 どなたか知ってらっしゃる方いらっしゃいましたら教えていただけませんでしょうか
>>459 VK_XBUTTON1, VK_XBUTTON2あたりがそれっぽいけど、
実際5ボタンマウス持ってないからわからん。
8ボタンマウス使っている俺がマジレスすると、俺も分からん
マウスじゃなくてUSBデバイスなのでは?
DirectInputつかえ
465 :
459 :2005/10/28(金) 14:51:36
やっぱりみんなわからないですかー
>>465 わかったら答えてるわヴォケ・゚・(ノД`)・゚・
VK_XBUTTON1 と VK_XBUTTON2 だよ。 mplayer用にボタン4,5を使えるようにするパッチとかで使ってるから たぶん使えるんだろう。
469 :
デフォルトの名無しさん :2005/10/28(金) 19:35:45
とりあえず GetSystemMetrics( SM_CMOUSEBUTTONS ) でマウスボタンの数が取得出来る で、 GetKeyboardState(pbKeyState) のデータをダンプしてみてはどう?
VC++7.0(VS2003)で、Win32アプリケーションでやってます GDI+に関してなんですが Gdiplus::Graphics objGraphics(hdc);//描画オブジェクト Gdiplus::Image objBgImage(_TEXT("bg.png"), FALSE);//BG Gdiplus::Image objFgImage(_TEXT("test.png"), FALSE);//FG Gdiplus::RectF rcSrc(0.0f, 0.0f, 320.0f, 420.0f); Gdiplus::RectF rcDst(160.0f, 60.0f, 320.0f, 420.0f); Gdiplus::ImageAttributes objAttr();//ImageAttributes objGraphics.DrawImage(&objBgImage, 0, 0, objBgImage.GetWidth(), objBgImage.GetHeight()); objGraphics.DrawImage(&objFgImage, rcDst, rcSrc, Gdiplus::UnitPixel, &objAttr); こんな感じで呼び出そうとすると、2つ目のDrawImageが DrawImage(Image*, RectF&, RectF&, Unit, ImageAttributes*)でなくてはいけないのに DrawImage(Image*, REAL, REAL, REAL, REAL)と解釈されて、 RectFからREALへ変換できませんとエラーが出て困っています どうにかして解消できませんでしょうか?
え?
472 :
470 :2005/10/28(金) 22:08:00
何かおかしいですか?
うちのgdiplusgraphics.hには、2つめがRectFなのは DrawImage(Image*, const RectF&, REAL, REAL, REAL, REAL, Unit, ImageAttributes* ~) DrawImage(Image*, const RectF&) しか無いよ。
>何かおかしいですか?
PSDKのドキュメント。
>>473 の様に実際にヘッダに当たって確認すべし。
475 :
407 :2005/10/28(金) 22:39:32
GdiplusGraphics.hの中を見たところ、
>>473 さんと同じものしかありませんでした・・・
早とちりですみません・・・
MSDNのあのテキストはいったい・・・
gdiplusはMSDNの記述があんまりあてにならんし、.Net Frameworkの物とも 微妙に違うし、なかなか苦労しますぜ。
てかスレ違いだけどMSDNはいつになったら日本語版リファレンスを完全に してくれんだ?英語を読むのは苦手だよ・゚・(ノД`)・゚・
そういうこと書くと原書厨が沸きますよ^^
MSDN日本語訳完全版作ったらお金になるかな?
3万円までなら出す
辞書アプリか翻訳アプリをローカルPC上で使えばいいだろ。 日本語訳に期待するのはやめた方がいい。 意味不明な日本語訳がある場合、大抵は元ソースも意味不明だ。 茶を濁すようなピントのボケた文章は、日本語だけでなく英語圏にも存在する。 あきらめろ。
> 意味不明な日本語訳がある場合、大抵は元ソースも意味不明だ。 そうでもない
>>482 君は、数学の教科書が英語で書いてあったら判りにくいけど、
日本語で書いてさえあれば全て理解できるのだね。
凄いね、いつも100点とれるね。
数学なんてパターンおさえれば大抵はとけるから 試験で満点取るのは難しい話でもない。 理論的な部分となると別だが。
>>484 気の毒だが、君が数学と思い込んでいたのは算数であって数学ではない。
大学に上がってつまづく数学科の学生もいるが、
この点が理解できずに脳内で高校数学を算数として最適化したツケが大学生になって露見したのだといえる。
君は、英語ベースの弁護士試験は難しいが、日本語なら簡単なのだと錯覚するタイプの人間だろう。
理解できない理由を言語に求める愚を犯すべきでない。単に、君が馬鹿なだけだ。
>>485 ワラタ
ちなみに躓くは「つまづく」じゃなくて「つまずく」が本則だ。
>>487 483は単に喩えとして出しただけだと思うが。
489 :
デフォルトの名無しさん :2005/10/29(土) 12:32:01
C言語で、ワードサイズをHIGHバイト、ROWバイトに分けるマクロってなかったけ? 忘れて困ってるんだが。。
ROWは知らん
491 :
デフォルトの名無しさん :2005/10/29(土) 12:38:24
揚げ足取らないでよ。。。・゚・(ノД`) LOWね。
>>489 ms-help://MS.PSDK.1033/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowmacros/hibyte.htm
493 :
デフォルトの名無しさん :2005/10/29(土) 12:46:18
>>492 ありがと。おかげで思い出せました。
でもどうして変数をBYTEサイズにしなくちゃいけないんだろう。。暗号は難しい・・。
MSDNライブラリのWin32APIの日本語訳は間違ってることがあるので、原文を読むべし。 たとえばGetDiskFreeSpaceの引数lpRootPathNameの説明。 ■2001年10月やVS.NET2003添付の日本語版 一方、"C:" のようなドライブ指定の最後に円記号を付けることはできません。 ■2001年10月英語版 However, a drive specification such as "C:" must have a trailing backslash. ■VS.NET2003添付の英語版 Furthermore, a drive specification must have a trailing backslash (for example, C:\).
「SDK32:GetDiskFreeSpace と GetDiskFreeSpaceEx について」より > ドライブがドライブ文字で、UNC パスではない場合、 > ドライブ文字とコロンの後にバックスラッシュを不可する。 > これは Windows 95 と 98 の制限である。 これも変だな。不可→付加じゃね?
>>488 つーか何で482のレスが483になるのか意味不明。
どこをどう読んだら英語だと分からないけど日本語なら分かるって意味になるんだか
(むしろ日本語だと分からなくても原文を読むと分かる場合があるという意味で
書いたのに)
>>496 「分からない」とはどういう意味なのか。
実際のAPI挙動と日本語文書が違っていた場合は、
少なくとも日本語文書の意味が分からない状態ではない。
日本語文書を理解したうえで記述の間違いに気づくことができた、
あるいは、英語オリジナルとの相違に気づくことができた状態であり、
断じて「分からない」状態ではない。
現実には、日本語が分かりにくく、英語が分かりやすいという状況は少ない。
多くの場合、明瞭な英語文章は日本語訳されても明瞭さを保つものだ。
混乱の原因の多くは、専門用語をカタカナかアルファベットで表記されるべきものが、
翻訳の過程でまんまと日本語文章に紛れ込んでしまった場合だろう。
しかし、この種の混乱は、第三者が文章を読んだ時に普通に発生してしまうものであり、
英文読解の時だけ専門用語と一般語を混同せずに理解できる、などという高度な芸当は成しがたい。
これは、ネイティブ連中であっても同様だ。
しばしば、MSプログラマは重要な事柄に、見分けの付きにくいアバウトな名称をつける癖がある。
Windows、Office、Word、Money、.NET。・・・枚挙に暇がない。
他にもactiveという単語の解釈の仕方に混乱が生じる。
日本人だけでなくネイティブからも怨嗟の対象となっているのだ。
>>498 翻訳者がアホの場合は考慮していないのか?
>>498 >ソフト1本あたり約2千円がライセンス料として任天堂の懐に転がり込んだ。
>もちろんカセット生産に掛かる料金は別途に請求された。
>
>さらにカセットの生産スケジュールや、発売日の決定権も任天堂が持っていたので
>気に入らないメーカーのソフトは、マスターと前払いさせた製造費用を預かったまま
>生産ラインに乗せずに数ヶ月ほど放置したり、意に沿わないメーカーのソフト発売日
>を他メーカーの売れ戦ソフトと同じ日にしたりと、それは見事な殿様商売ぶりだった。
>
>CD-ROMを採用すると、ソフトの生産をソニーかビクターに完全委託するしか選択肢
>がなくなるため、上記の殿様商売が続けられなくなる。
>
>それこそが、任天堂が意地でもCD-ROMを採用しなかった本当の理由だ。
>だが大容量化の波は止まらず、CD-ROMに対抗できる記録メディアも現れなかった
>ため、N64でもROMカセット方式を引き続き採用せざるを得なくなる。
>
>その間にもPSの快進撃は止まらず、今や任天堂の据え置き型ゲーム機は世界中の
>市場から、忘れられた存在となってしまった。
まで読んだ
まあまあ、おまえら。要するにMSDNの中の人が怠慢だってことで。
日本語を原本にして、後から英語に翻訳すりゃいいのに……。
・・・ウィンドウクラス登録・・・ HWND wapp = ::CreateWindow( clsName,0,WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, 0,0,::GetModuleHandle(0),0); HWND wpop = ::CreateWindow( clsName,0,0/*WS_POPUP*/, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, 0/*wapp*/,0,::GetModuleHandle(0),0); ::SetWindowLong(wpop,GWL_STYLE,WS_POPUP); // API-a ::SetParent(wpop,wapp); // API-b ::SetWindowPos(wpop,0,100,100,300,200,SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOZORDER); ::ShowWindow(wpop,SW_SHOW); ::ShowWindow(wapp,SW_SHOW); ・・・メッセージループ・・・ 2番目のCreateWindowでコメントアウトして0にしている部分を 補う形でSetWindowLongとSetParentを使ってwpopを設定したいのですが、 ポップアップウィンドウにならずにチャイルド (親ウィンドウでクリップされる)ウィンドウになってしまいます。 つまり、このままコンパイルした場合と、2番目のCreateWindowの コメントアウト部分を復帰してAPI-a、API-bを削除した場合とで wpopのスタイルが違ってしまいます。 どこが悪いのでしょうか? というのも、とある都合で先にウィンドウを作って 後からその親ウィンドウと位置、スタイルを設定するという 必要に迫られ、書いてみましたがうまくいきませんでした。 詳しい方ご教授お願いします。
>>503 CreateWindowの引数に親ウィンドウのハンドルを指定できないのか?
>>503 SetWindowPosのヘルプに書いてあるやり方と、指定してるフラグがちがくないか?
506 :
デフォルトの名無しさん :2005/10/30(日) 01:56:16
>>503 SetWindowLong()の部分、それだとウィンドウスタイルがWS_POPUPのみになるよ?
スタイルを変更する場合は
SetWindowLong(wpop, GWL_STYLE, GetWindowLong(wpop, GWL_STYLE) | WS_POPUP) みたいに
現在のスタイルを取得して、それを改変するのが一般的。
>>502 アメリカの会社がそんなことするわけないだろ
使い方が解らなかったら使わなければいいだろ
>>506 それだと、既に設定されてる別のフレームスタイルと競合しねぇ?
510 :
503 :2005/10/30(日) 08:56:35
511 :
デフォルトの名無しさん :2005/10/30(日) 13:22:38
>>512 逆引き(目的から検索)は便利かもしれませんね(ちょっと量が少ないけど)。
ただそれ以外はMSDN Libraryとは比較にならないような……
MSDN Libraryが使いにくいって言っている人は、Web上のMSDN Libraryでも
参照しているんじゃないかと思ってしまう。
Web上のMSDNは糞過ぎ 重い、無駄に重い しかも直訳
訳はWeb版だけひどいわけじゃないだろ
516 :
デフォルトの名無しさん :2005/10/31(月) 09:02:26
デバイスコンテキストに描画された内容を、 回転する方法ありましたっけ?
RotateDC(hDC);
518 :
デフォルトの名無しさん :2005/10/31(月) 19:06:30
こんばんは、 印刷を横向きでしたいのですが。 PAINTSTRUCT ps; PRINTDLG pd; DOCINFO dci; pd.lStructSize=sizeof(pd); pd.hwndOwner=hwnd; pd.hDevMode=NULL; pd.hDevNames=NULL; pd.Flags=PD_RETURNDC|PD_HIDEPRINTTOFILE; pd.nFromPage=1; pd.nToPage=1; pd.nMinPage=1; pd.nMaxPage=1; pd.nCopies=1; memset(&dci,0,sizeof(DOCINFO)); dci.cbSize = sizeof(DOCINFO); dci.lpszDocName = "moji"; if(!PrintDlg(&pd)) return; //以下横に設定しているのですが、ここでは遅すぎるようです。 LPDEVMODE dm = (LPDEVMODE)GlobalLock(pd.hDevMode);// if(dm)// {// dm->dmOrientation = DMORIENT_LANDSCAPE; // ポートレイト GlobalUnlock(pd.hDevMode);// }// デフォルトのプリンタの設定を変更するには、どうすればよいのでしょうか。 よろしくお願いいたします。
DMORIENT_LANDSCAPE ; // ポートレイト ←コメントに嘘を書かない
Win32APIでJPEGを読み込むAPIはあるんでしょうか? BMPはLoadImageで取得できるんですけどそのJPEG版みたいなみたいな奴です。 現在の開発環境は Borland C++ Compiler 5.5.1とメモ帳だけです。 よって、MFCとかは使えません。 誰か、貧乏な私に知恵を授けて下さい...
521 :
デフォルトの名無しさん :2005/10/31(月) 23:52:20
貧乏人はマルチがお好き 413 名前:デフォルトの名無しさん[sage] 投稿日:2005/10/31(月) 23:05:12 無料のbcc55を使っています。ものすごく基本的な質問なんですけど JPEGを読み込みたいんですけど<jpeg.hpp>が見つからないし、それによりTJPEGImageが使えません。 VC++の<gdiplus.h>も無いです。 JPEGを読み込む為には、BCBかVC++を買うしか無いのでしょうか? 貧乏人はおとなしくLoadImageでBMPでも読み込んでろという事でしょうか?
いやみったらしくコピペするくらいなら、 素直に「無い」って教えてやれよ。 GDI+かIEコンポーネントでも使いなさい。
OleLoadPictureならPNG以外は大体読めるが
まあ、いいじゃないか、「へへっ、おら知ってるよ、わかってるよ」
「どお、裏山でしょ?」ってのが
>>521 を筆頭としたお方たちの
唯一の心の拠り所なんだから、例え心貧しい自己満足でも、
少なくとも1人(ご自分ね)は満足して幸せになってるんだから
誰も幸せにならないよりは、多分ましなんだろうと思うよ。
>>520 どうしても只でということなら
>>522 の言う様にGDI+かIEコンポー
ネント、後はどれくらい手間が掛かるかは別としてGnuWin32にも
あるJpegのライブラリをなんとか使えるようにするとか。
susieのプラグインを使えるようにするとか。
もっと柔軟に考えて行けば、道は開けると思うよ。
つ[ImageMagick]
マルチにも優しいお方たちでつね(^ω^)
脳足りんは優しい振りが好きだからね。
winXP 機にキャノンの iP1500 を繋いで、プリンタ設定でなかなか EnumPrinters() が 成功しないで、やっと通ったと思ったら、PrinterProperties() で、ユーティリティの 画面しか出てきません。一応ぐぐったのですが、応えに行きつきません。 PrinterProperties() は不適なのでしょうか。 もしそうなら win98 用はこのままで winXP は PrintDlg() かなあと思案中です。
>>530 悪いが、「何をしたい」のかさっぱりわからん。
533 :
520 :2005/11/01(火) 12:57:02
あっち(初心者BCBスレ)で質問したんですが、どうも無料のBCCとBCBを勘違いしていて、 BCBスレでの質問は適切なスレではないと勝手に判断し、こちらのスレで再質問したのですが、 誘導を待たずに別スレで同様な質問をして、マルチに見えてしまったのなら申し訳ありません。 私の質問の仕方が未熟なせいでスレを荒らしてしまったことに関しては謝ります。 それにも関わらず、回答を沢山頂きありがとうございました。 <olectl.h>中にOleLoadPicture*系のAPIらしきものを発見したのでこいつで頑張ってみます。 どうもありがとうございました。
534 :
530 :2005/11/01(火) 15:38:59
>>532 どうも。
プロパティを出すと、他のアプリでは、基本設定とかページ設定とかのタブで
いろいろ設定できるダイアログが出てきます。「ユーティリティ」とは最後の
タブで出てくる画面です。PropertySheet 仕様のダイアログが出てくるはず
ですが、最後の sheet しか出て来ないということです。
535 :
デフォルトの名無しさん :2005/11/01(火) 16:18:36
デバック環境について質問なんですが、 自分はATLを使ってるんで、IDEでの開発環境ではATLTRACEでログ出力をしてデバックしてるんですが、、 ReleaseビルドでIDE環境が無い状態で(ほかのマシンにインストールした状態)デバックというか、挙動を確認したいのですが、 何かいい方法はありませんでしょうか、Release後のデバックや挙動追跡などテクニックなど伝授してください。
先ずは日本語を勉強するといいと思うよ。
>>530 それってPrintDlg使えばいいだけじゃねーのか
あるプリンタ特定の物出したいなら、DocumentProperties/DM_PROMPT
>>535 バグがありそうな部分でログ吐かせりゃいいんじゃない?
542 :
535 :2005/11/01(火) 19:45:23
ReleaseビルドなのにOutputDebugStringは生きているのか?
APIの動作がリリース/デバッグビルドで変わってたまるか。
ReleaseでDebug動作ができてたまるか。
>>537 PrintDlg() にしました。
win98 で通ってましたから、winXP で初めてプリンタ繋いでびっくりしました。
ReleaseビルドでKernel32.dll!OutPutDebugStringよんでみろよ。
>>543 WindowsからしてみたらEXEがDebugビルドで作られたかどうかなんて区別のしようがない。
デバッグ出力表示アプリ起動させっぱなしにしてると平然とメッセージ吐き出してるアプリちょくちょく見かける
>>548 Releaseビルドでは無に置換されるようなマクロ使ったりしてないのか? って意味でしょ
>「使ったりしてないのか? って意味でしょ 氏んでいいよ、ドアホ
沸点低いな
ム板だからな
>>549 つ ギコナビ
他にも、各種メディアプレイヤーでDRM保護されたメディアを開くとデバッグログを吐く。
背景にビットマップを貼り付け、画面の片隅にマウスカーソルの座標を常に表示する処理を 必要とする画面にエディットコントロールを作成したくて以下のようなコードを書いたのですが マウスを動かすとInvalidateRect()が発生するためエディットボックスが点滅してしまいます。 この点滅を防ぐ方法が何かあれば教えていただけないでしょうか…。 void DrawScreen(HWND hWnd, POINT p_mouse) { /* メモリDCを用いたダブルバッファリングを使用した描画処理 背景の描画とマウスカーソルの座標の表示 */ static HWND hwndEdit = CreateWindow("EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT, 0, 40, 200, 22, hWnd, NULL, hInst, NULL); }
ださ
つーか、Draw()でEditを作ってどうするのかと。毎回破棄してなければ増殖しそうだが。
ああ、やっぱりそうなんですか? とりあえずWM_CREATEにエディット作成は移動してみました。が、依然点滅は直らないです…。 マウスの移動に対してInvalidateRectを呼ぶのをやめてTimerで画面を更新するように変更したら 大分ましにはなったのですが、よくみると点滅してるのがわかります。
ああすみません。自己解決しました。 よく考えたら画面全体を毎回更新する必要はないですね…orz
UpdateWindowというものを知った
>557 static
>>561 (゚д゚;).o(・・・・・・・・・・・・・・・・)
これがゆとり教育の弊害か・・・
・・・を良く使うのは中国から入ってきた文化らしいよ ネトゲやチャットで使ってる奴多いけど何か伝わってると思ってるのかね
何も感じられないならそいつの感性が鈍いだけかな
三点リーダーは英文でも使うぜえ …じゃなくて...だけどな。 三点リーダーを中黒で代用しちゃう奴は(ry
ざわざわ・・・
結局staticでも増殖するものなの?
staticなのは作成されたEDITのハンドルを保持するHWND型変数ですが?
関数の中で static int i = 0; としても初期化されるのは初回だけに見えたから static HWND hwnd = CreateWindow();としてもCreateWindow()が呼ばれるのは 初回だけだと思ってたよ 勘違いに気づかせてくれてどうもありがとう。
ちがうの?
572 :
デフォルトの名無しさん :2005/11/03(木) 18:48:11
ただの趣味グラマだから細かいことは知らんとですorz
自分でやってみりゃわかるんじゃね?
いや、もうやってみた 問題なく動いてるように見えて実は見えないところでなんか変なことになってるのかな、と…
だめだこりゃ
578 :
デフォルトの名無しさん :2005/11/03(木) 19:13:01
だめだね
エディットコントロールじゃなくて普通のウインドウでやってみればすぐわかるだろ
static int x = 100; x++; static HWND hwndedit = CreateWindow(); //x, y座標とheight, widthをxに設定 ↑のコードをDraw()の中に入れてみた。 xの値はDraw()が呼ばれるたびに増えたけどエディットコントロールには変化が無かった。 毎回作成されているなら大きさと位置が変化するはずだよね?
581 :
デフォルトの名無しさん :2005/11/03(木) 19:59:00
>>518 です
>>519 さんありがとうございます。
ヒントを参考にさせていたできましたが、
よくわからずに、DocumentProperties を使いましたが、
変更できません。下記にコードを載せますが、長くて申し訳ありません。
DEVMODE *lpDM,*pDev;//
char szPrnName[256],szTemp[256];//
HANDLE hPrn;//
DWORD dwNeeded;//
HGLOBAL hMem;//
PRINTDLG pd;
DOCINFO dci;
LPSTR lpszDocName = "titile";
pd.lStructSize=sizeof(pd);
pd.hwndOwner=hwnd;
pd.hDevMode=NULL;
pd.hDevNames=NULL;
pd.Flags=PD_RETURNDC|PD_HIDEPRINTTOFILE;
pd.nFromPage=1;
pd.nToPage=1;
pd.nMinPage=1;
pd.nMaxPage=1;
pd.nCopies=1;
memset(&dci,0,sizeof(DOCINFO));
dci.cbSize = sizeof(DOCINFO);
dci.lpszDocName = lpszDocName;
582 :
デフォルトの名無しさん :2005/11/03(木) 19:59:37
>>581 つづき
if(!PrintDlg(&pd)) return;
lpDM = (DEVMODE *)GlobalLock(pd.hDevMode);
if(lpDM == NULL) return;
strcpy(szPrnName,(LPSTR)(lpDM->dmDeviceName));
if(OpenPrinter(szPrnName,&hPrn,NULL)==0){
GlobalUnlock(pd.hDevMode );
GlobalFree(pd.hDevMode);
return;
}
HANDLE hPrn;
//バッファーサイズ取得
dwNeeded = DocumentProperties(hwnd,hPrn,szPrnName,NULL,NULL,0);
hMem = GlobalAlloc(GHND,dwNeeded);
if(hMem == NULL){
ClosePrinter(hPrn);
GlobalUnlock(pd.hDevMode );
GlobalFree(pd.hDevMode );
return;
}
pDev = (DEVMODE *)GlobalLock(hMem);
if(pDev == NULL){
GlobalFree(hMem);
ClosePrinter(hPrn);
GlobalUnlock(pd.hDevMode );
GlobalFree(pd.hDevMode );
return;
}
583 :
デフォルトの名無しさん :2005/11/03(木) 20:00:11
>>582 つづき
if(DocumentProperties(hwnd,hPrn,szPrnName,pDev,NULL,DM_OUT_BUFFER)<0){
GlobalFree(hMem);
ClosePrinter(hPrn);
GlobalUnlock(pd.hDevMode );
GlobalFree(pd.hDevMode );
return;
}
if(pDev->dmFields & DM_ORIENTATION){
pDev->dmOrientation == DMORIENT_LANDSCAPE;
}
//3回目のDocumentPropertiesの呼び出しでの、引数がよく分からなかったのですが、
if(DocumentProperties(hwnd,hPrn,szPrnName,pDev,pDev,DM_OUT_BUFFER | DM_IN_BUFFER)<0){
return;
}
//グラフィック書き出し・・
GlobalUnlock(hMem);//
GlobalUnlock(pd.hDevMode );//
if(GlobalFree(pd.hDevMode ) !=NULL){//
return;//
}//
#include <stdio.h> int foo(){ static int i = printf("hello\n"); return i; } int main(){ printf("%d\n", foo()); printf("%d\n", foo()); printf("%d\n", foo()); } 結果 hello 6 6 6
>>584 iをstaticにする意味を教えてくれ
>>584 >>555-
とは何も関係がないように見えるが…
588 :
デフォルトの名無しさん :2005/11/03(木) 21:38:44
ああ、スマン、わかった。 foo()を3回呼んでるけどhelloは一回しか出力されないってのが言いたかったのか
589 :
デフォルトの名無しさん :2005/11/03(木) 21:48:13
>>585 static にする意味は、iの値を持ってるてるってことですが、
その適用範囲となると、難しいかなと思います。
ここが、win32質問板なので、いいますと
下手に、callback関数で使っていると、大変なことになりました。
訳:「レス番号585ですが、」
自分でしろ
594 :
デフォルトの名無しさん :2005/11/03(木) 22:21:34
人の力を借りなきゃ煽ることもできないなんて!!
Alt+EnterとかCtrl+Aとか 特殊なキーの入力の判定はどうやったらできる?
ふむ、誰も翻訳できんわけだな。 まあどうでもいいことだしな、ほっとくとしよう。
600 :
デフォルトの名無しさん :2005/11/03(木) 22:56:49
excellのセルを作りたいのですが、あれはどのAPIを使っているのでしょうか? LineTo関数や、polyline関数で線を引いているのでしょうか?
読み取りアクセスは同時に複数スレッド可、書き込みアクセスは単一スレッドのみという .NETでのReaderWriterLockと同じことがしたいです。 Win32には用意されていないのでしょうか?
>>602 クリティカルセクションあたりで実装する
605 :
デフォルトの名無しさん :2005/11/03(木) 23:34:55
>>591 「レス番号585の方へ、」じゃないのか?
自作自演だって言いたいの?
609 :
デフォルトの名無しさん :2005/11/04(金) 10:38:55
ウインドウを非表示にしたいんですが、実装方法を相談させてください。 とりあえず、ウインドウの拡張スタイルでWS_EX_TOOLWINDOWとWS_EX_TRANSPARENT立ててみたんですが、 WinXPでは非表示になるものの、Win2Kでは表示されてしまいました。 よろしくお願いします。
>>609 WS_VISIBLEを立てないでウィンドウ作ればいいだけのような・・・
ShowWindowでいいじゃん
つーか普通に作成したら最初は非表示だぜ・・・ WS_VISIBLE指定しない限り・・・
タスクマネージャとかで実行ファイル名の最後の一文字が表示されないのって 原因わかる人います? ~.exになってしまう…
614が何を言いたいのかわかる人います?
リストビューのカラム幅が狭いだけとか言うんじゃないだろうね?
正解
619 :
デフォルトの名無しさん :2005/11/04(金) 14:55:27
IniファイルのSectionにItemが一つも無いことを判断できますか?
>>616 実行ファイルの名前リネームして一文字にしたら表示されたのでそうかも、
と一瞬思ったんですが、色々試してみると長い名前でも表示されてたりするので違うようです。
プロセス名は結構適当に登録されてるのかもしれません。
>>621 GetPrivateProfileSectionすれば?
624 :
デフォルトの名無しさん :2005/11/04(金) 15:59:28
プロパティシートの破壊直前に1回だけ呼びたい処理がある場合の常套手段があれば教えてください。 今は各ページ共通の WM_DESTROY でフラグを設けて1回だけ呼ばれるようにしているのですが、 どうももっとスマートな方法があるような気がするので…。
>>622 等幅フォントじゃないから文字によって長さは変わる。
アプリケーションから、インストールしていないTTFフォントを利用したいのですが、 よいAPIはないでしょうか? それともインストールしなくては、使えないものでしょうか。 SDLttfのように自前で読むしかないですか?
627 :
デフォルトの名無しさん :2005/11/04(金) 18:19:40
あげ
AddFontResource して、使用して、 RemoveFontResource
そうでしたか。一体どのフォントが基準になってるんだろう…
630 :
デフォルトの名無しさん :2005/11/04(金) 22:51:21
CreateWindow()を使ってウインドウを作るときに タイトルバーを入れるとその分サイズが引かれてしまって描写できる範囲のサイズが小さくなってしまうのですが、 タイトルバーの大きさを計算してサイズにプラスして設定する以外にこの問題の解決方法はありませんか?
タイトルバーじゃなくてクライアント領域の大きさで決める
ありません XPとその他のWinじゃ非クライアント領域のサイズが違うから、 定数で計算せずに、CreateWindowした後に外枠のサイズ出してリサイズするのが普通
>>630 一旦不可視で作成して、GetClientRect と GetWindowRect で得られた
矩形の幅と高さの差を元に SetWindowRect で調整するという方法もあるし、
Microsoftを信用して AdjustWindowRect 使うって手もある。
タイトルバーを出さない。
>>630 普通はAdjustWindowRectを使う。
メニューが複数行になる場合は自分で調節が必要。
636 :
630 :2005/11/05(土) 01:06:38
解決しました。ありがとうございます。
637 :
デフォルトの名無しさん :2005/11/05(土) 09:12:17
CreateWindowの第三引数に相当するオプションをウインドウ生成後に変更したいのですがどうすればいいのでしょうか
SetWindowLongを調べれ ウィンドウのスタイルは、極力最初に指定した方がいいんだがな
>>638 >ウィンドウのスタイルは、極力最初に指定した方がいいんだがな
聞いたことないな。何か根拠とかあるの?
特にボーダースタイルな
ちょっと前にこのスレで出てたな、そういう話
そもそも「最初」とは何時から何時までなのか定義するところから始めて貰いたい。 曖昧な表現は一切必要ないし一切認めない。
644 :
デフォルトの名無しさん :2005/11/05(土) 10:11:00
637ですが、エディットに対してES_READONLYを適用させたいのですが、 SetWindowLong(edit,GWL_STYLE,WS_CHILD|WS_VISIBLE|WS_BORDER|ES_LEFT|ES_AUTOHSCROLL|ES_READONLY); だとうまくいきません。どこが悪かったのでしょうか
>>644 スタイルの変更だと言うから何かと思えば、
その手のコントロールの状態変更はほとんどがSendMessageでできるぞ
手始めにSendMessage & EM_SETREADONLYを調べるがよい
646 :
デフォルトの名無しさん :2005/11/05(土) 11:06:01
皆さんありがとうございます 質問ばかりになるのですがEM_SETREADONLYの反対に当たるメッセージは何なのでしょうか
>>646 EM_SETREADONLYを調べろと書いたのにその質問か・・・
EM_SETREADONLYの説明にもろ書いてあるというに・・・
トップレベルウィンドウをEnumWindowsで列挙して 非表示のウィンドウとか所有されているウィンドウとか WM_EX_TOOLWINDOWスタイルが設定されているウィンドウを除外する。 WM_EX_APPWINDOWスタイルが設定されているウィンドウは 所有されていても追加する。 キーワードは与えてやったからあとはぐぐって調べろ
651 :
649 :2005/11/05(土) 14:24:35
なんとか解決しました。 ありがとうございます、とても助かりました。
エディットコントロールやリストボックスの背景を透過させたいのですが可能でしょうか?
653 :
デフォルトの名無しさん :2005/11/05(土) 21:43:40
>>581 です
できました。
CreateDCを使ってなかったことが原因でした。
失礼しました。
外から子ウィンドウのサイズ変更を制御したくて、WH_CBTフックをかけてみました。 ところが、トップレベルウィンドウのサイズ変更はフックできるのですが、子ウィンドウはフックできません。 Spy++で見てみると子ウィンドウにもWM_SIZEは飛んでるのですが。 どうすれば子ウィンドウのフックができるのでしょうか?
クリティカルセクションって名前かっこいいな
>>655 そんなことを言ってくるお前の方がかっこいいよ。
657 :
デフォルトの名無しさん :2005/11/06(日) 13:41:21
質問です。 とある他人様のアプリケーションで、タイマーが使われており、物凄い勢いでWM_TIMERが呼ばれているようなのです。 それが原因で非常に重く(おそらくWM_TIMER無いで描画を行っている)、これを軽減したいと考えました。 はっきりいってそんなに頻繁に描画しなくても問題ないので、WM_TIMERを2回に1回無視するようにフックしようと考え、DLLを作成し SetWindowsHookEx(WH_GETMESSAGE, (略)); を行いWM_TIMERをとるのには成功しました。 ですがWH_GETMESSAGEはWH_MOUSEと違って 「こっちでフック処理したんで、元のアプリケーションではその処理しないでね」のreturn TRUEが通用しないようなのです。 何か良い知恵はございませんでしょうか。
658 :
デフォルトの名無しさん :2005/11/06(日) 14:00:48
描画は何度も呼ばれるもので、その中のコードが分からないけど、 推測で書くけれど、一回SetTimer呼べば、あとはデーモンというかメッセージループでTimerが走り、OnTimerが呼ばれるから、 すなはち、おそらくは、描画ハンドラから呼んでやってると思うけれど、1回だけ呼ばせればいい。 おそらく一般的には、フラグをstaticで作って、例えば、フラグが0ならif内でSetTimerした後、同じif内でフラグを1にして、以後2度とOnDrawからSetTimer呼ばれないようにする、これでもTimer一個が走り続けている。 おそらくは、その状態は、Timerの実体が何個も作られて、違うタイミングでものスゴッ呼ばれている。 もし、他から、Timer呼ばれているなら、引数のTimerIDをそれぞれ変える必要がある。 見当違いだったらすみません。
660 :
訂正 :2005/11/06(日) 14:03:03
OnDraw>描画ハンドラ つい、MFCで書いてしまった。
>>659-660 そりゃ自作の場合の話でねーかい?
どうやってWM_TIMERを奪い取るかという質問だと思うんだが…
お返事ありがとうございます。
>>658 さん
確かに一番手っ取り早いでしょうね。でも今回は無理ということで
>>659 さん
ちょっと私の求めているのとは違うようです。
>>661 さんのおっしゃるとおり、WM_TIMERを独占したいのです
>>662 さん
returnで返す値は0、もしくはCallNextHookExの返り値と決まっているようです。
WH_MOUSEのようにWH_TIMERがあればよかったのですが…。
>>663 662が言ってるのはメッセージをWM_NULLにすり替えろってことだろ
>>657 ぜんぜんアプローチが違うんだけど、
こちらでもう一度SetTimer呼んでタイマー上書きするとか
>>664 さん
摩り替える、というのはどういう意味合いでしょうか。物知らずですいません。
フックしたProcでCallNextHookExする以上、フックされる側には必ずWM_TIMERが届いてしまいます。
WH_MOUSEでのフックではreturn TRUE;することでフックされる側にWM_RBUTTONDOWNなどを届かなくすることができるので、
無効にしつつSendMessageでWM_LBUTTONDOWNを送ってやることで
「右クリックしたのに左クリックの動作」
なんていうメッセージのすり替えもできたのですが…。
>>665 さん
それはとてもおもしろいアプローチです。
早速試してみます。
667 :
デフォルトの名無しさん :2005/11/06(日) 16:15:40
システムトレイに格納するにはどうすれば? ShowWindowでそれらしき定数があると思ってましたがないようですが
システムトイレ まで読んだ
669 :
662 :2005/11/06(日) 16:30:00
>>666 言葉足らずでスマソ。つまり、フックプロシージャの中で、
((LPMSG)lParam)->message = WM_NULL;
などとやってメッセージ番号を上書きするってこと。
WM_NULL のドキュメントも参照。
>>665 さん
なかなか面白いアプローチで、うまくいきました。ありがとうございました。
>>667 Shell_NotifyIcon でググってみてください。
詳しいページが上のほうに出ますよ。
>>669 さん
なんと。それもまた素晴らしいアプローチですね。
MSDNライブラリの方にWM_NULLが無かったため、自分で定義したのかと思ってしまいました。
ぐぐって見たところ、確かにそういうアプローチを発見しました。
しかしなんというか…。危険な技ですね。
WM_CREATEあたりをWM_NULLに摩り替えるようにフックしたら、まったくウインドウが作れないウイルスみたいなものですね…。
>>671 さん
すいません、もろに日本語版(ローカルにインストールするやつ)を見てました。
考えてみればVS6.0買った時一緒にセットしたものですから、だいぶ古いですね。ついつい…。
>>673 ローカル版のMSDNでもちゃんと引っかかるはずだが
手持ちの2003年の奴で試したが引っかかった
質問。 ゲームを作る際、こっちのほうが楽だろうと CreateProcessでゲーム用スレッドを作り、WinMainから始まる方はメッセージ処理だけ行わせるようにしました。 ところがゲーム用スレッドが異常にCPUパワーを食います。 原因はゲーム用スレッドの ThreadMain(){ while(!bEnd) { if(前の処理から16ミリ秒経過していなかったら){ continue; } ゲームメイン } } というポーリングでしょう。 Sleepを入れれば解決しそうですが、Sleep(1)ですら必ずしも1ミリ秒丁度待つとは限らない以上、精度的にダメです。 こういう場合どうするのが常道ですか?
ウィンドウの右上の×ボタンを押したときに終了確認をしたくてWM_CLOSEメッセージが来た際に case WM_CLOSE: if (IDYES == MessageBox(hWnd, "終了?", "終了確認", MB_YESNO | MB_ICONQUESTION)) { SendMessage(hWnd, WM_DESTROY, NULL, NULL); } break; としたのですがこれだとメッセージボックスが出ている間にウィンドウを切り替えると 新しく別の終了確認メッセージボックスが出てきてしまいます。 これを防ぎたいのですが既にメッセージボックスが存在するかどうかを調べることは出来ますか?
>>675 スリープを入れるかウェイタブルタイマ使え。
というか本当にそんな精度が必要なのか?
それならWindowsなんか使わず自前でOSから作れよ。
>>675 while()
{
Sleep(1);
time = timeGetTime();
if (time < time_before + 16)
continue;
time_before = time;
}
>>676 「ウィンドウを切り替えると」の意味がよくわからないけど、
case WM_CLOSE: の直前の break; を忘れているとか。
あと、WM_DESTROY は送信しちゃだめぽ。DestroyWindow() しないと。
>>679 あー、すみません。ウィンドウを切り替えるとってのは
ウィンドウを非アクティブにしてからもう一度アクティブにするとってことです。
WM_DESTROYは送っちゃ駄目なんですね。DestroyWindow()に直しました。
指摘ありがとうございます。
681 :
676 :2005/11/06(日) 17:30:58
あああ、すみません。
>>679 の通りでした。本当に申し訳ありませんorz
解決しました。ありがとうございます。
CreateWindowEx の"Ex"って何の略なんでしょか? exchange, express, extra?
全部はずれ
そうか!extreamに違いない(゚∀゚)!
>>683 thanks!
>>657 そのアプリが重いことがどういう弊害を起こしているのかにもよるが、
そのアプリをCreateProcess()する起動用アプリを作り、そこからSetPriorityClass()
で、そのアプリのプロセスプライオリティを下げたら?
>>681 普通×押した時ならWM_SYSCOMMANDでSC_CLOSEトラップするだろ
688 :
682 :2005/11/06(日) 20:07:48
>>686 あーなるほど。
アホ質問に答えてくれてthanks!
>>657 ,685
そんな動作をするフリーソフトなんかが既にありそうな気がする。
690 :
652 :2005/11/06(日) 22:05:52
返事がない。無理なのか…。
691 :
デフォルトの名無しさん :2005/11/06(日) 22:13:22
692 :
mp3 :2005/11/07(月) 00:38:49
Win32APIのmciコマンドを使ってmp3ファイルを再生しようと思うのですが、 wavファイルと違い、上手くいきません。再生方法の詳細が分かる方はいませ んでしょうか?MCI_OPEN_PARMS構造体のlpstrDeviceTypeの指定など、具体的な 情報が助かります。
693 :
mp3 :2005/11/07(月) 00:39:41
Win32APIのmciコマンドを使ってmp3ファイルを再生しようと思うのですが、 wavファイルと違い、上手くいきません。再生方法の詳細が分かる方はいませ んでしょうか?MCI_OPEN_PARMS構造体のlpstrDeviceTypeの指定など、具体的な 情報が助かります。
694 :
mp3 :2005/11/07(月) 00:45:23
Win32APIのmciコマンドを使ってmp3ファイルを再生しようと思うのですが、 wavファイルと違い、上手くいきません。再生方法の詳細が分かる方はいませ んでしょうか?MCI_OPEN_PARMS構造体のlpstrDeviceTypeの指定など、具体的な 情報が助かります。
そこまで焦らなくても・・・
Winのhookでアプリの起動捕まえて起動したり起動中止したりしたいんですが、どっかにサンプルコードないですか?
今スタティックコントロールを使用していてどうしたらいいか不明な点があるので教えてください。 Win32オンリー非MFCです。 スタティックコントロールに文字列を表示しているのですが CreateWindowする際のウィンドウスタイルで SS_WHITEFRAME SS_BLACKFRAME SS_GRAYFRAME SS_SUNKEN SS_ETCHEDFRAME のいずれかを指定すると文字列が表示されなくなっていまします。 これらを指定した状態で文字列を表示するにはどのようにしたらよいでしょうか?
SS_SUNKENだけは同時指定出来るが? 他のはスタイルというよりスタティックの種類なので、無理。
SS_SUNKEN | WS_VISIBLE | WS_CHILD のみ指定して SetWindowTextしても文字列は出ませんでした・・・。
( ´_ゝ`)フーン
701 :
デフォルトの名無しさん :2005/11/08(火) 01:44:49
HTMLのフレームにあたる概念ってwinapi(というかwindowsアプリ)ではなんていうの?
ウインドウ?
ぺいん?
Tiled Window
トップレベルのモードレスダイアログボックスの作成がなかなか理解できません… リソースにCLASSで自作クラスを設定してそれを登録しているのですが、 このダイアログのプロシージャの戻り値はLRESULT型でしょうかBOOL型なのでしょうか? また、分岐処理の最後にDefDlgProcを置くべきなのでしょうか? その場合、WM_DESTROYを捕まえるんじゃなくて例えばWM_CLOSEでDestroyWindowなのでしょうか? どうも通常のウィンドウプロシージャとこんがらがってしまって…
>>705 プロシージャの戻り値はMSDNにバッチリ記載されとろうが
プロシージャ内の処理の仕方も全部書いてある
でおまいさん、WM_DESTROYでDestroyWindowはダイアログじゃなくともダメよ?
>>705 LRESULT型
DefDlgProc() を置くのが普通
WM_CLOSE 内で DestroyWindow() が普通
708 :
デフォルトの名無しさん :2005/11/08(火) 11:07:37
>>702-704 それに関して解説してるサイト知りませんか?
検索してもあまり出てこなかったので
>>701 MFCのCSplitterWnd相当の機能か?
あれはライブラリレベルで実装されてる機能なんでAPIにはそんなものはない。
710 :
デフォルトの名無しさん :2005/11/08(火) 11:26:17
すいません。分割ウインドウで検索したらたくさん出てきたので>708はスルーしてください
>>705 モードレスダイアログなら、WM_CLOSE で不可視化だけしといて
Destroy しないというやり方もあると思う。
場合によるけど、常にウィンドウ持っておいた方が何かとラクできることもある。
で?
715 :
705 :2005/11/08(火) 14:52:37
レス遅くなりましたが、
>>706 、
>>707 、
>>711 さん
ありがとうございます!
わたくしの脳みそではMSDNの解説に混乱してしまいまして…
ウィンドウ持っておくというのはいいですね、ちょっとやってみます!
716 :
デフォルトの名無しさん :2005/11/08(火) 23:42:41
未使用のIDを自動生成してくれるようなAPIってなんかないですか?
UuidCreate()とかは?
718 :
デフォルトの名無しさん :2005/11/09(水) 00:02:26
>>717 何?その隠し関数。
つーか、英語わかんないんすよ。
つーか、プラットフォームSDK入れろよチンコって言われたですよ。
つーか、具体的にはCreateWindowExのhMenuに突っ込む値がほしいだけなんですよ。
( ゚д゚)ポカーン
API必要無いと思うんだが、APIじゃないと駄目なん?
>>720 だってWindowsの内部で重複しちゃ駄目ならWindowsが管理してそうなもんじゃん。
って単純に考えただけ。
今の俺のアプリはUINTの限界でアボーンw(まあ、そんなことはないだろうけどねw)
> Windowsの内部で重複しちゃ駄目 誰がそんなこと言ってるの?
とりあえず、猫を1から読んでいくことをオススメする。
>>722 ああ、同じ親をもつ子ウィンドウ同士で重複しちゃ駄目なだけって厳密なこといいたいの?
それでも面倒なレベルは変わらないんだけど・・・。
UuidCreate()はあまりにオーバースペックでしょ
>721 40億もウインドウ造るんか……
x64 Editionだと1600京? どう考えても先にリソースとかアプリケーションヒープのほうが不足しそうだが
>>718 メニューのIDは、複数のウィンドウや他のアプリケーションと重複すると、
正常に動作しないので、IDをマイクロソフトが一元管理している。
IDを取得するには、MSDNに入会し、送付されてくるSDKに含まれている
ツールGetMenuId.exeを用いてマイクロソフトにメニューIDの交付を申請する。
MSDN の入会は
http://www.msj.co.jp/msdn/ 参照。
MSDNに加入せずにメニューが使用したい場合は、CreateWindowEx()の
hMenuにはNULLを指定しておき、メニューの描画やマウスクリックの取得、
その他の操作をすべて自前で記述する必要有り。
・・・・(゚д゚;)・・・・
732 :
デフォルトの名無しさん :2005/11/09(水) 13:43:19
IEみたいに上部にアドレスバーを配置するにはどうすればいいのですか
上部にエディットボックス・ラベルを配置して そこにアドレスを書き込むようにすればいい
CreateDIBSectionで BITMAPINFO bi; BITMAPINFOHEADER& bih = bi.bmiHeader; bih.biSize = sizeof(BITMAPINFOHEADER); bih.biWidth = nWidth; bih.biHeight = -1 * nHeight; //トップダウン方式 bih.biPlanes = 1; bih.biBitCount = colorbits; bih.biCompression = BI_RGB; m_hbmp = ::CreateDIBSection(NULL, &bi, DIB_RGB_COLORS, (void**)&m_lpdwpixel, NULL, 0); こんな感じでモノクロのビットマップを作成しようとしてるんですが WINDOWS2000ではきちんと動くのにWINDOWS98では動きません 戻り値のm_hbmpがNULLになってしまいます どうしてでしょうか?
98がトップダウンをサポートしてないなんてことはさすがに無いとは思うが、 とりあえず、その失敗してる時にGetLastErrorとFormatMessageしてみた? それだけでももしかしたら原因わかるかもしらんぞ? あとそれ、biをZeroMemoryかmemsetで0初期化しといた方がいいぜ
737 :
736 :2005/11/09(水) 21:08:46
追記:もしかしたらそのせいかも知らんしな
>>735 ちょっと試してみると、95もできないな。
上下逆しかできない飢餓する。
bih.biHeight = nHeight;を試してみたら?
ボトムアップって言えよ
>>736 0で初期化したらいけました
ありがとうございました^^
ツールバーの縦のサイズを変更するにはどうすればいいですか。
742 :
デフォルトの名無しさん :2005/11/09(水) 23:09:44
windowsのソフトには、インストールが必要なものと、そうでないものがありますが プログラムの追加と削除に入っているものとそうでないものでは、どういう違いがあると思いますか? 管理がし易い以外にどういう理由があるのだしょうか?
板違い
インストールが必要じゃないソフトなんてありませんから
最近初めてやってみたけど、SDKってすごい面倒くさいな
>>745 え?何と比べて?
MFCと比べてるなら大差ないどころかむしろこっちのが楽だと思うが。
それはない
USBに機器が刺されたりした時に画面にダイアログが出てきますが あのイベントを自作のアプリで拾う事は可能でしょうか? その場合、どういう風にやれば良いでしょうか? (もしスレ違いでしたらどこで聞くべきですか?)
>>748 MFCなんて呪いじゃん。
あのウンコなフレームワークのおかげで1つのソースにこんもりウンコテンコ盛り状態になってる現場って多いぞ。
Oh!マンコっ!
そこでWTLですよ
お前ら貧乏なんだな
VSのRAD環境ってどれも重いよね Delphiまんせー
プログラミングばかりして女と交流ない奴いる?
手軽にそれなりのGUIができるからMFCは楽チンだった。 色々なコントロールに対するメッセージを一個一個調べるのが大変。 まだ慣れてないだけかもしれないけど。
COM楽勝な人いる?
>749 WM_DEVICECHANGEでいいのかな?
>>756 それだけじゃん。
まあ、MDI(ってか、複数ドキュメントのアプリの形式ってこれであってるっけ?)のアプリケーション作るときなら楽チンだけど、
実際、MDIって使い道がVCかペイントツールぐらいしかないよねw
大抵のもんはSDI+ツールウィンドウで足りるわけで。
ところでMFCでツールウィンドウでどうやって作ったっけ?
なんか苦労した覚えがある(もう、触ってねーけど)
ていうか、MFCはもともとCOM開発用に作られたものジャン
ダイアログリソースでスタイルをツールウィンドウにすれば?
>>762 おお、そんな感じだった希ガス。
よく考えるとWin32APIでもそうかw
でも、MFCだと苦労した覚えあるなぁ・・・
764 :
デフォルトの名無しさん :2005/11/10(木) 00:02:28
オマエがな
Oh!マンコ!
767 :
デフォルトの名無しさん :2005/11/10(木) 00:05:17
インストールウィザード(セットアップウィザード?)を起動して入れてないとインストールしたとは認めない!
769 :
デフォルトの名無しさん :2005/11/10(木) 00:06:48
batファイルのダブルクリックなんて死にやがれって感じw
770 :
デフォルトの名無しさん :2005/11/10(木) 00:06:51
アフォだ
772 :
767 :2005/11/10(木) 00:07:29
オマンコウィザード
>>775 ありがとう。おかげで俺もうこのスレ、只ただ傍観するだけにしようと決心がつきました。
777 :
デフォルトの名無しさん :2005/11/10(木) 00:16:30
systemフォルダにしこたまdllぶち込んだままアンインストール時には消さないのはもはや礼儀といって過言ではない。 レジストリなんて便所の落書きといっしょだ。 足跡残していって! ブログの掲示板ぐらいのものだと思っていい。
お前らきめぇ きめぇ
毎日プログラミングばかりしてるアホいる?
winAPIいじるだけが、プログラミングじゃないしな
仕事ですから^^
仕事してる人って貧乏なの?
キムタクがWin32APIのプログラミングしてたら、いじめられると思う。
741 :デフォルトの名無しさん :2005/11/09(水) 22:44:54 ツールバーの縦のサイズを変更するにはどうすればいいですか。 無視しないで(^^;)
786 :
デフォルトの名無しさん :2005/11/10(木) 00:24:11
>>784 Win32APIの極意を伝授してやろう。
で き な い こ と は や ら な い
and
む ず か し い こ と は さ け る
OK?
OKじゃありません(^^;)
プログラミングは不細工がするから様になるんだよなw
>777 39。 フィーバーおめ
790 :
788 :2005/11/10(木) 00:27:54
僕不細工なのでイケメンはプログラミングしてもださいって妄想してます
791 :
デフォルトの名無しさん :2005/11/10(木) 00:27:57
>>787 だってさ。
普通にウィンドウのサイズ変える方法でできないから質問してんだろ?
それって、ツールバーつくった奴が変えられないようにわざわざなんかしてやがるんだから、
無理にどうにかしようって発想がおかしいんだよ。
さて、普通にウィンドウのサイズ変える方法でも試してみるか
わくわく「自分から腰振ってやがる・・・楽しませてくれるぜ!!!!ゴロリ!!!」
キムタク似ですが何か?
795 :
デフォルトの名無しさん :2005/11/10(木) 03:00:17
796 :
デフォルトの名無しさん :2005/11/10(木) 04:17:11
APIというよりSDKと開発環境についての質問で恐縮です 最近新しいSDKをインストール、設定をして使い始めたのですが インテリセンスがうまく働かない関数がいくつかあります。 これはマクロとして実装されているということでしょうか? 一例としては、FlashWindow関数では引数リストが表示されますが、 FlashWindowEx関数では表示されません。(使えることは使えますが) 自分で調べてみたところ、 「If you are using Visual C++ 6.0, it is recommended that you upgrade because the import libraries included with this release of the Platform SDK have a different format than that used by Visual C++ 6.0. 」 という記述をReleaseNoteの中に見つけました。 インポートライブラリの役割って何ですか? どうしてインテリセンスが効いたり効かなかったりなんでしょう 環境は Windows XP, Visual C++6.0, Win2003 SP1 Server SDK(一番最近のものをダウンロードしました) です。
そもそもVC6のインテリセンスってあまり賢くなかったような気がする。
>>796 インテリセンスのことは良く分からんが、そのrelease noteの言葉は
文字通りで、VC++6.0はそのリリースのPlatform SDKに対応しとらん
(インポートライブラリの形式が違うから使えない)ということだ。
2003年にリリースされたSDKがVC++6.0で利用可能な最終バージョン
じゃなかったかな。
インポートライブラリってのは、C/C++からDLLを利用するときにリンクする
スタブみたいなもの。スタティックリンクライブラリ同様に(実行時ではなく)
コンパイル/リンク時にリンクを行うが、実体はあくまでDLLの側にあって、
スタブの役割はDLLを実行時に適切にロードして、必要な関数のアドレスを取得し、
実際の処理はDLL側に委譲することにある。
それらの仕事を自前で実装するならインポートライブラリは不要だが、
標準的なシステムDLLに対していちいちそうしたことをやるのは面倒だから、
インポートライブラリを使うのが普通。
( ゚д゚)インポー
つーかVC6で最新のSDKなんか使うなって。
VC6なんか窓から(ry もうすぐVC8 Expが無料で(ry
もうすぐ、というか、もうだな。使ってみてるけど、VC6のがいいや…。
コンパイラだけ取り替えたいなぁ。
>>796 インテリセンスに限れば、ヘッダを読んでるだけだよ。
VC6の場合、ネストされてたりすると限界があるのよ。
試しにヘッダだけプロジェクトに組み込んでみるといいよ。
ってこのスレかよ。
>>741 .rc ファイル
IDR_MAINFRAME TOOLBAR DISCARDABLE 16, 15
の16がボタン一個の幅、15が高さ
>>749 FindWindow()で探す。
>>758 WM_DEVICECHANGEはドライバのインストールが終わったあとくるのでは?(未確認)
805 :
デフォルトの名無しさん :2005/11/10(木) 10:48:18
vcに関してなんですが、適当なスレが見あたらなかったので質問させてください。 コンパイラの「/o?」についてなんですが、/o1 /o2などオプティマイズ掛けるとプログラムが正しく動かなくなってしまうんですが、 何方か情報ありましたらお願いします。
>>805 このような質問に回答するのは非常に難しいと思うぞ
>>805 最適化をかけると動かなくなる場合、
たいていソースにバグがあって、たまたま動いてただけ
>>805 違うバージョンのVCか別のコンパイラで作られたライブラリにリンクしてる
潜在的なバグが表面化しただけの可能性が98%、 コンパイラのバグの可能性が2%ってとこか? 最適化するとデバッガの機能がかなり制限されるから大変だけど、 printfデバッグでも使って頑張れ。 どっちにしろ、このスレは明らかにスレ違いだな。 VSかVC++のスレで聞いたら?たぶん回答は得られないが。
場所が大体絞り込めてるならリスティングファイルでも読んだほうがはやくね?
>>805 適当なスレって何だ?
ココの方が余程不適当なスレですよ?
VCのスレあるのに、自分初心者じゃないから初心者スレには行きたくないか?
コンパイラバグの可能性結構高いな。
最適化でバグが出るなら初期化忘れを疑う
99.999%それだよな。 コンパイル結果のアセンブラ出力も見ずにコンパイラバグ疑うのはキチガイ。
ワトソンの逆アセ止められて不自由してない ?
>>809 この手のバグの場合printfを入れただけで問題が起きなくなることもあって
大変だけどな。まずソースコードを机上でもディスプレイ上でもいいから
じっと眺めてみるのがいいか
>>805 正しく動かないとは?
Exceptionになるのか、機能的に違った動作をするのか?
私も、
>>807 と同意見。
最適化してもステップ動作とかはできるから、どこでおかしくなっているのか
究明すべし。これは最適化してようがしてまいが同じ。
>>805 バッファをauto変数で宣言する場所では、最低限バッファの0バイト目にヌルをセットするべし。
最適化すると、他で使われて遺棄されたバッファがそのままバッファメモリに流用されるので。
BYTE buffer[256] = {0};
もしくは、
BYTE buffer[256];
buffer[0]=0;
そんなんmemset(buffer, 0, 256)すりゃええやん
ていうか、意味不明。
リリースでもデバッグ情報付きでコンパイルして以下略
>818 上は、バッファ全域が0になるわけで、下とは意味が違うのだが。
ま、100%、PGのミスによるバッファオーバラン。
>>805 は、こんなにいっぱい(しかもこのスレでは珍しくまともな)レスが
ついているのに、お礼の一言もないなあ・・・
825 :
デフォルトの名無しさん :2005/11/10(木) 22:09:22
礼はいらん。本当に役立ったのかだけ知りたい。
826 :
デフォルトの名無しさん :2005/11/10(木) 22:23:55
いちいち御礼ってのもうざいから止めるか。 それよか適用結果を貼り付けることを礼儀としようぜ。
勝手に礼儀を作るなよ
828 :
デフォルトの名無しさん :2005/11/10(木) 22:39:26
>>827 ここじゃ大部分の奴等が俺と同じ意見だと思うぜ。
このレスに俺はなんの魅力も感じない。
>遅レスですが、レスありがとうございました。
>その方法でやってみます。
で、音信不通・・・
馬鹿じゃねぇの。
性根から腐ってるとしかいいようがない。
このレスいらねぇから結果を反映させろよって感じ。
829 :
デフォルトの名無しさん :2005/11/10(木) 22:47:05
>>828 俺も同意なんだけどさ、ルール作ったところで守る奴はいないだろ。特に音信不通になるようなタイプの人間は。
>>829 そういう空気があるってところだけでいいんだよ。
そうすりゃたまに誰かがいうでしょ。
直る奴は直る。
これだけでいい。
オマンコAPI
>>831 遅レスですが、レスありがとうございました。
その方法でやってみます。
833 :
デフォルトの名無しさん :2005/11/11(金) 00:38:49
プログラムから、そのプログラムが使用しているメモリ量を取得する方法はありますか? タスクマネージャーに出てくるようなものでお願いします。
>>833 遅レスですが、レスありがとうございました。
その方法でやってみます。
>>836 早レスですが、レスありがとうございます。
その方法でやってみます。
>>833 早漏ですが、レスありがとうございました。
その方法でやってみます。
('A`) 何この流れ
Advanced Windowsっての本屋じゃ一回も見かけたことないんだけぢ 存在するのか?
田舎の駅前の本屋だけど何年も鎮座してる
鈍行列車で5時間かけて、東京まで買いに行った。
>>838 町の本屋より、大学内の本屋の方がいい希ガス
まとめると、オンラインの本屋がベスト。
印刷をしたくて、調べているとPrintDlgに行き当たったんですが、 PRINTDLGの使用後の後処理は hDevMode,hDevNames → GlobalFree hDC → DeleteDC であってますか?
結果をレスしたらウザがるくせに
言っとくが質問を小出しにするのと結果をレスするのは違うぞ
>>842 俺は軽い気持ちでオンラインで買ったら、分厚い本でびびったw
>>838 俺の学校の図書館にある。
分厚いので借りて帰るには少々面倒だが。
>>833 GetProcessMemoryInfo()
そのまんまの名前でんがな・・・・
つーかAPIにそのまんまじゃない名前なんてほとんど無いのにな
結果キボン。てつけたらええんとちゃうのん?ガンガンつけたらええやないの? レスの最後に付けとかはったら、ええんとちゃうのん?
ちゃうのん
852 :
デフォルトの名無しさん :2005/11/11(金) 11:45:35
クソワロタ
VS2003のC++のWin32プロジェクトで、 ふつうにwindows.hインクルードしてウィンドウを表示させただけで、 タスクマネージャで見るとメモリを4532KBも食ってるんだがなんで? ちなみに最小化するとなぜかメモリ使用量が1000KBに減り、元に戻すと1800KBになる。
表示させただけといわれてもな どんなコード書いてるのか知らんし
windows.hインクルードしただけじゃウインドウ出ないと思うんだが
コードさらしてもいい?
むしろ晒せ
ウィンドウの大きさに応じたDCがメモリ上に確保される。 DCの描画状態がシンプルな白地であろうが複雑な画像であろうが同じサイズ確保される。
それじゃあ説明にならん
#include <windows.h> HWND hWnd; HINSTANCE hInst; LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); BOOL CreateMainWindow(); LRESULT CALLBACK WndProc(HWND tWnd,UINT msg,WPARAM wp,LPARAM lp) { switch(msg) { case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(tWnd,msg,wp,lp); } return 0; } 1/3
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst, LPSTR lpszCmdLine,int nCmdShow) { MSG msg; hInst = hInstance; if(!CreateMainWindow()) { MessageBox(NULL,"初期化エラー","testWindow",MB_ICONHAND); return 2; } ShowWindow(hWnd,nCmdShow); UpdateWindow(hWnd); while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int)msg.wParam; } 2/3
BOOL CreateMainWindow() { WNDCLASSEX wc; wc.cbSize = sizeof(WNDCLASSEX); wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.lpszClassName = "testClass"; wc.lpszMenuName = NULL; wc.hInstance = hInst; wc.hIcon = NULL; wc.hIconSm = NULL; wc.hCursor = LoadCursor(NULL,IDC_ARROW); wc.hbrBackground = GetSysColorBrush(COLOR_WINDOW); if(!RegisterClassEx(&wc)) return FALSE; hWnd = CreateWindowEx(0,"testClass","testWindow", WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,240,120,NULL,NULL,hInst,NULL); if(!hWnd) return FALSE; return TRUE; } 3/3 言い忘れたけど855のソースね。
>>855 Windowsなんてそんなもんだよ。困る?
/⌒ヽ / ´_ゝ`)すいません、ちょっと通りますよ・・・ | / | /| | // | | U .U
#define WIN32_LEAN_AND_MEAN #include <windows.h> してみたら?
それは関係ないだろう。
スワップアウトされて小さくなったように見えてるだけでわ。
マルチスレッド(DLL)でビルドしたものは、起動速度・消費メモリともパフォーマンスが向上する。・・はず。
>>855 スワップアウトして見かけのメモリ使用量が減ったのかなとか思ったりするんだが、
本当のところは知らね。って書いてたら既に書かれてたか。
ちなみに、
ImmDisableIME(-1);
ってするとメモリ使用量が大幅に減る。IMEを必要としないプログラム限定の技だが。
ついでにWin95では使えないが・・・もう気にする必要はないか。
プログラマならタスクマネージャで仮想メモリサイズも表示しとこうぜ
ついでにハンドル数もな。 広い世の中には、メモリリークだけじゃなく、ハンドルリークも存在する。
>>870 起動速度は微妙じゃないかな。
バインドで時間食うし。
>>870 いや、それが意外とそうでもないよ。 確認したのはWindows2000での話だけどね。
バインドが問題だというなら、そもそもSHELL32.DLLやらUSER32.DLLをロードする、
あらゆるモジュールに問題が生じるはずだよ。
XPだと別の起動最適化がかかるから、効率がどうなるかわからない。
SetProcessWorkingSetSize()
877 :
875 :2005/11/12(土) 00:52:33
>>875 > そもそもSHELL32.DLLやらUSER32.DLLを
だから微妙と言ったんだけれども。
デカクなったPEの読み込みと大量のバインドのどちらが重くなるかは
大本のプログラムの大きさによると思うよ。
元より外部のライブラリにあまり頼らない設計してたら、どっちにしろ
最終的なサイズは大きくは変わらないからね。
Load-Timeじゃなくて全部Run-Timeでやるんなら起動だけは速いかな。
>>878 なるほど、そういう意味の「微妙」だったか。失礼しました。
ところでみんな自作アプリXPの外観にしてるの?
882 :
デフォルトの名無しさん :2005/11/12(土) 03:36:20
エディットに影をつけるにはどうすればいいのか ボタンをビジュアルスタイルで設定してる概観にするのはどうすればいいのか
マニフェスト書くだけじゃないの?
884 :
デフォルトの名無しさん :2005/11/12(土) 22:42:26
おそらく識者の方から見れば馬鹿なミスだとは思うのですが・・・ どうしても分からなくなったのでどうか教えてください。 以下の関数を使ってファイルから1行読み出しをしているのですが、 なぜか文字化けは入るわ、strcatは無視されるわで散々な結果です。 staticで変数宣言すると直るのですが、その理由も分からず…… どうかよろしくお願いします。 int fileRead(char* fileStr,HANDLE hFile) { char cache=0x00; char fileData[255]; DWORD wReadSize; while(cache == '\n') { ReadFile(hFile , &cache , 1 , &wReadSize , NULL); if(wReadSize == 0) break; strcat(fileData,&cache); } strcpy(fileStr,fileData);
strcatは追記もとの終端をNILで判定するから、 fileDataを初期化しないとイケナイ。
みなかったことにしておこう
その関数の存在意義がわからん
IEコンポーネントを使っています。 DWebBrowserEvent2::DownloadCompleteなのですが、 引数が無いので、どのデータがダウンロード終了したのか特定できません。 DocumentCompleteの場合は、FRAME/IFRAMEやページ本体のダウンロード時にしか発生しません。 ページ内の特定の画像のダウンロード終了を検出するにはどうしたら良いのでしょうか?
オマンコAPI
CreateWindow で作ったウィンドウをユーザがボタンから終了させるのではなく、 アプリが内部でウィンドウを強制終了させたい場合はどういうAPIを使えば よいですか?
DestroyWindow
893 :
デフォルトの名無しさん :2005/11/12(土) 23:59:49
896 :
デフォルトの名無しさん :2005/11/13(日) 00:07:37
>>894 どうやってですか
>>895 はじめgifにしたんですが使い物にならないくらい画質悪くなったんでそのままbmpにしました
windows付属のペイントです
>>891 PostMessage(hWnd, WM_CLOSE, 0, 0);
899 :
デフォルトの名無しさん :2005/11/13(日) 00:18:21
900 :
デフォルトの名無しさん :2005/11/13(日) 00:21:38
わかったからさっさと教えろや(^o^)
902 :
デフォルトの名無しさん :2005/11/13(日) 00:30:11
表示のプロパティで拡張子を表示して、○○.bmp を ○○.jpg に書き換えればいいんだよ
903 :
デフォルトの名無しさん :2005/11/13(日) 00:32:39
bmpくらい我慢しろや(^o^)
904 :
デフォルトの名無しさん :2005/11/13(日) 00:35:10
どうやってはじめgifに変換したのか教えろや(^o^)
頭悪いからgifなんかに変換しちゃうんだろうなw
906 :
デフォルトの名無しさん :2005/11/13(日) 00:37:48
ファイル、名前をつけて保存、ファイルの種類:gif(*.gif) こうしたんだよ(^o^)
907 :
デフォルトの名無しさん :2005/11/13(日) 00:38:17
黙ってろって言ってんのに 本当に頭が悪いやつらだなw
909 :
デフォルトの名無しさん :2005/11/13(日) 00:39:40
回答できる奴と東大・京大・一橋・阪大・東工・国公立医学部以外の奴はさっさと消えろや(^o^)
だって画像みれたもんじゃないぐらい重くて落とせないしw
>>909 そんなにすごいなら自分で解決しなさいなw
913 :
デフォルトの名無しさん :2005/11/13(日) 00:41:37
915 :
デフォルトの名無しさん :2005/11/13(日) 00:42:14
すごいスレっすね(*´∀`*;
ていがくれきばっかりだな(^o^)
>>912 しらねーよ。
場所によんじゃねーの。
もう、かれこれ10分ぐらいリロードしたりしてるけど
いっこうに落ちてこないねw
919 :
デフォルトの名無しさん :2005/11/13(日) 00:43:22
>>914 上のステータスバーはIEのものなのですが、それの製作者も自分で作ったのですか
あとfire foxも同じかんじのステータスバーなのですが
製作者に直接聞いて来いボケ
上と下と どう違うのよ
922 :
デフォルトの名無しさん :2005/11/13(日) 00:46:17
誰かさっさと答えろよ(^o^) ざこい奴らだな
923 :
デフォルトの名無しさん :2005/11/13(日) 00:47:42
画像が重くて落ちてこないよw
925 :
デフォルトの名無しさん :2005/11/13(日) 00:50:49
こんなのもわかんねーのかよ ったくつかえねーやつらだ
>>925 やっと画像が落ちてきたけど違いが全くわかんねw
927 :
デフォルトの名無しさん :2005/11/13(日) 00:54:13
再描画すればいいんじゃね?
929 :
デフォルトの名無しさん :2005/11/13(日) 00:56:28
リサイズして横に伸ばすだけだろ?
931 :
デフォルトの名無しさん :2005/11/13(日) 01:24:02
お前ら理解してねーな 下のステータスバーはフチ付きなんだよ(しかもなんか鮮やか) 上のステータスバーはフチないんだよ(単色っぽい) まったく
932 :
デフォルトの名無しさん :2005/11/13(日) 01:24:44
下のステータスバーはフチ付きなんだよ(単色っぽい) 上のステータスバーはフチないんだよ (なんか鮮やか) のミスです(^o^)
CD-ROMドライブとかが入って無いときにそのドライブにアクセス した時に出る警告ウィンドウをユーザーアプリから消す(又は不可 視化する)って出来ますか?
上のバーの方が短いってことだろ?
違う 下だ
936 :
デフォルトの名無しさん :2005/11/13(日) 01:33:00
>>934-935 違う違う
下の方はねずみ色っぽいフチが付いてるだろ
でも上の方はグラデーションだろ
どっちでもいい(^o^)
>>933 SetErrorMode(SEM_FAILCRITICALERRORS);
遅くなりましたが、
>>885 さんと
>>887 さんどうもありがとうございました。
少し時間を置いたら色々と考え違いが思い当たったので、それを直しつつ
ぼちぼちやっていきます。
スレ汚し失礼しました。
>>884 char cache=0x00;
ここが問題。これを大きさが2以上の配列にしないと駄目。
>>895 jpgは写真には向いてるけど
図形や文字に使うとにじんで汚くなる。
こいうのはgifやpngを使うのが常識
激しく論点のズレてる942にワロタ それにしても、下らんことで次スレが近づいたな
magにするのがいいと思う
magだってgifと同じく8bitカラーまでやん。
それじゃ.celで
いや、ここは.im32だな
マジレスして華麗にスルーされてる941に嫉妬
Windows付属のペイントの減色処理がしょぼすぎなだけなので普通はgifが使える。
>>951 スルーされたかったのに妄想厨に絡まれたんだよヽ(`Д´)ノ
どうせ2chの書き込みは全部漏れの自作自演だよヽ(`Д´)ノ
オマエモカ!
オマエモダ! ( ゚д゚ )
CでWin32APIを使用しWindowアプリケーションを作りたいのですが、 C++の知識は必要でしょうか?
Cで作るのにC++の知識がいるかボケェ
でもCOMまわりはC++できないと辛いお
960 :
957 :2005/11/13(日) 16:22:28
どこもC++については意見が真っ二つですよね・・・
COM使わにゃえぇだけ
作りたいアプリによると思う。
なんでも全部自分でやるならCだけで充分 でも人が作ったものを利用しようと思った時にC++知らないと不便だろ
964 :
957 :2005/11/13(日) 16:49:48
なるほど・・・ 日曜プログラマーの延長線進もうとする自分にとっては 微妙なようで・・・
驚いた、人の作ったC関数ライブラリ使うのにC++知らないと不便なのか
まぁ、先にC++覚えたほうが後々楽できるとは思うがそこは人それぞれだな。 俺はもう素のCなんか書きたかねーが。
そこがプロとアマの違いw
わたしゃ日曜プログラマですが、C++覚えた方が色々と楽な気がする。 Cで書いてた時よりも遙かに楽になった。
C++思考ができれば、な
なぜかGetClipboardDataが失敗するのですが。 GetLastError()は、ERROR_CLIPBOARD_NOT_OPENです。 確かにちゃんとOpneClipboardが成功しているのですが。 EmptyClipboard()やSetClipboardData()はできるようです。
現在時刻をミリ秒かマイクロ秒単位で取得する関数はありますか。
972 :
957 :2005/11/13(日) 19:19:48
進んでみて駄目/必要そうなら++を学習してみます。 本当にありがとうございましたm(_ _)m
timeGetTime, GetTickCount(ms単位) QueryPerformanceCounter (QueryPerformanceFrequency単位) GetSystemTimeAsFileTime(0.1µsec単位) ただし、実際に器の単位で時刻が進むとは限らないはず。
つーか、そもそもPCのRTCにそこまでの精度がないからやるだけ無駄。
ネットワーク共有のフォルダをFindFirstFile、FindNextFileで列挙しましたが、 2000個のフォルダを列挙するのに8秒ほどかかります。 ローカルでやると、100msくらいなのですが、なぜこれほど ネットワーク越しは時間が掛かるのでしょうか?
離れてるから
>>973 へぇ、timeGetTimeって「現在時刻」だったんだ
最初に別の方法で時刻とタイムカウンタの値を取得しておいて、 あとはタイムカウンタの差分を取得しておいた時刻に足せば、 現在時刻になるわけだが。
>>978 それは別の方法の精度が悪ければいくらタイムカウンタの精度が良くても意味がないだろ。
>>978 「現在時刻をミリ秒かマイクロ秒単位で取得する関数」なんですか?w
論点違ってんだよ
現在時刻が1970/1/1からの秒数であるか、1601/1/1からの 0.1µsecであるか、システム起動時からのmsであるかに そんなに大きな違いはない。
結論としては1ms単位での取得は無理。 中身どうなってんのか俺は知らんけど、 そもそもOS側でのタイマの更新がそう頻繁に行われて無いと思われ。 今、タイマ関数を読んでその値が一体何時に取得した値なのか1ms単位ではわからないんではないか?と予想。 経験だとだいたい20ms単位ぐらいなら文句が無い程度には動く。
マルチメディアタイマーを使えばもっと細かい時間が 取得できるとかどっか書いてあったけど?
理論上はな 実際と理論は違うのだよ
>>983 そもそもWindows自体が全てがメッセージで動いてるわけで、
タイマのときだけメッセージ無視して早く動くとも考え難いじゃん。
Windowsってさ、だいたいが、その状態があってそれを取得するのは早いけど
ひとたびハードにアクセスするってーとかなり時間がかかると思うんだがどうだろうか?
だからタイマ取得関数ですぐレスポンスが帰ってくるのはそもそも俺が関数を呼び出す
もっと前に取得しておいたものだと俺は考えるわけだがどうだろうか?
だから時間は関数を呼び出す前からすでにずれていると思うわけよ。
はじめに設定する精度ってのはWindowsがとってくるように
努力しようとする周期(実際にとれているかどうかは問題では無い:まあ、期待値w)であって、
メッセージで動くWindowsにそもそもそんな周期での仕事は無理なんじゃねぇの?
ってのが俺の予想。
窓上でそんな時間取得できるのか? 普段のもっさり感考えるとかなりばらつく気がす
そもそもメッセージはみなのんびりゲットしてる
マルチメディアタイマーは割り込みじゃないのかなー
8254叩いて今の値をとってくるのに、そんなに時間は掛からないとおもうが。
>>989 >記事の行数が増えてしまうので NT(2000) での結果は割愛しましたが、精度は 10mSec でした。(^_^;
これはなぜか?
って考えないのかな?。
つまり、NT系に当たるXPもこんなもんじゃねーの?
>>992 もしメッセージだったら精度は悪くなるだろうね。
実際はメッセージじゃないけど。
回答者は憶測だけで書き込むのはやめろ。 マルチメディアタイマは最優先度のスレッドが生成されそのスレッド内でループする仕様。 Win32APIに割り込みなど存在しない。
>>995 スレッドならメッセージでやりとりするしかねーじゃん。
この時間帯、書込みのレベルが低いな。
>>996 みたいな天然の初心者が多い。
口調が初心者風でないだけにムカつく。
>>993 シングルプロセッサのNT系のクロック割り込みが10ms単位らしいから、
タイマーの精度もそれに依存してるって話では。
タイマーのOS内部での動作としては、クロック割り込みがくるたびに、
システム内のカウンターに割り込み間隔分の値を加算していく。
timeGetTime()とかGetTickCount()とかは基本的にこのカウンタを返してるだけだから、
精度はクロック割り込みの設定に依存する。
(基本的にはどのOSでもこのへんの構造は大差ない)
QueryPerformanceCounter()は、クロック割り込みとは別のハードウェアを使ってるから
(使える環境なら)より精度の高いカウンタとして使える。
マルチメディアタイマーは割り込みじゃなくてコールバック。
詳しくは知らないが、
>>995 みたいなビジーループ回してるんじゃないかな?
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ <こいつら最高にアホ 彡、 |∪| / / __ ヽノ / (___ ̄\ / (_ノノノ│ ∪
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。