8 :
デフォルトの名無しさん :2008/08/02(土) 23:40:34
前スレ
>>993 ですが回答ありがとうございました。
参考になりました。
前
>>998 MSDNライブラリでbeginthreadを引くと_beginthreadexと_endthreadex使えと書いてある罠。
_beginthreadは、スレッド終了時に自分でCloseHandleしちゃうから、 戻り値のハンドルが既に無効になってしまっている可能性があるからねえ。 _beginthreadexなら、終了してもハンドル自体は有効のままだから、 生死の確認等も問題なくできる。
事前にDuplicateHandleしとけばいいじゃん
>>11 _beginthreadから帰ってきた瞬間にもうハンドルが死んでいるかもしれないと書かれている。
あと、_beginthreadexで始めるスレッドのエントリポイントは
CreateThreadと同じくstdcallなんで、キャストの追加だけで移行できるのもメリットと言える。
>>10 >>12 ハンドルが無効ならGetExitCodeThreadがFALSEを返すから生死の確認ぐらいは可能でしょ
それとDLL版のCRTにリンクすればCreateThread/ExitThreadでもリークしない
ハンドルの値が再利用されていないという前提条件は、流石にどうかと思うぞ。
15 :
デフォルトの名無しさん :2008/08/03(日) 10:39:14
CEでも使える?>>_beginthread
ディスクをフォーマットするにはどういう関数を使えば良いんでしょうか?
17 :
デフォルトの名無しさん :2008/08/03(日) 13:25:02
あるメータの製品でCreateProcess()とWindowsのログオフが重なると CreateProcess()が失敗するのはWindowsの仕様と聞いたのですが これは本当ですが?
>>17 「ウィンドウステーションがシャットダウン中のため〜」って出て失敗するやつじゃないの?
そもそもログオフのタイミングでCreateProcessって何がしたいのかねぇ
ATOKなんかも以前のバージョンで、1度もIMEをONにしないまま シャットダウンするとそうなっていたな。
ここの住人にそんな高度なこと判るわけないだろ ここは初心者をバカにして優越感に浸って戯れるスレだ
>>21 > SetWindowLong(HANDLE, GWL_STYLE, WS_POPUP | WS_MINIMIZEBOX | WS_VISIBLE);
> SetMenu(HANDLE, NULL);
> SetWindowPos(HANDLE, HWND_TOP, 0,0,1400,1052, SWP_FRAMECHANGED | SWP_NOCOPYBITS);
こんなソース書いてるようだからWin32の根本から分かってないみたいだね
とりあえず「勉強して一通り理解してから質問しろ」とだけ言っておく
24 :
デフォルトの名無しさん :2008/08/03(日) 23:14:42
知らないならレスしないでください
試せばいいだろ
コンパイルってぷよぷよのことですか><
>23 そんな事言うなら代わりに書いてください、お願いします。 Win32プログラムなんざやったことも無いが他に書く人が居ないのだから仕方ない。
>25 通らない。一応これでコンパイルは通ったけども、効果なし。はて、どうしたものか #include <windows.h> #include <stdio.h> BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { static TCHAR processName[MAX_PATH]; HWND hWnd; hWnd = GetActiveWindow(); switch(ul_reason_for_call) { case DLL_PROCESS_ATTACH: GetModuleFileName(0, processName, MAX_PATH); processName[MAX_PATH-1] = '\0'; OutputDebugString("補助DLLロード確認"); MessageBox(0, processName, "補助DLLロード確認", MB_OK); SetWindowLong(hWnd, GWL_STYLE, WS_POPUP | WS_MINIMIZEBOX | WS_VISIBLE); SetMenu(hWnd, NULL); SetWindowPos(hWnd, HWND_TOP, 0,0,1400,1052, SWP_FRAMECHANGED | SWP_NOCOPYBITS); break; case DLL_PROCESS_DETACH: OutputDebugString("補助DLLアンロード確認"); MessageBox(0, processName, "補助DLLアンロード確認", MB_OK); break; } return TRUE; }
何をしたいのかさっぱりわかんね
リッチエディットコントロールの文字入力に上限はありますか?
>>29 ここは宿題スレじゃない
自分で勉強して書く気が無いなら帰れ
> そんな事言うなら代わりに書いてください、お願いします。 > Win32プログラムなんざやったことも無いが他に書く人が居ないのだから仕方ない。 何このゆとり世代・・・
>33 宿題スレは宿題しか取り扱ってくれないのですがどうしましょう? >34 プログラマでもないならコード書きたくないのは当然だろうに。 頼めるところがあるならとうの昔に頼んでる。 第一対象のソフトが無いなら動作確認も取れないし、作れる人間自体が限られてしまう。
>>35 どこの世界にお前の代わりに無償でコード書く馬鹿がいるんだよ
それともそれ相応の金額を支払ってくれるのか?
能書き垂れるぐらいなら書いてやればいいだろ プログラマなんて底辺の職業に就いてるクズが偉そうに・・・ 何もしないなら迷惑だから黙っとけ
結局このスレにコード書ける人間は居ないみたいだな
煽ってもコードは出てこないぞ
つうか元のツールの製作者に聞けよ 「古いエロゲーをフルスクリーンでやりたいです」と
自分のオナニーの為に他人にコード書かせるのかw
エラー値くらい調べるのは基本だぜ
誰一人まともなアドバイスができてなくてワロタw いつの間にここまでレベル落ちたんだよここ
質問者のレベルに合わせております^^
ケチってないでリクナビで募集でもかけろよ
>39, 47 実際完動するものを作ってくれる人が居るなら少量の謝礼ぐらいは払っても良いとは思ってる。 とは言えその辺で募集できる類の物でもないだろうに。 別に会社組織として動かすわけでもないのだから。 >42 連絡取れるなら苦労しない。掲示板も動いてないし。 ついでに言うなら、元の書き込み見れば判るとおり、フルスクリーン化はエラー対策なのでフルスクリーンにこだわってるわけじゃない。 元のツールが窓化強制(設定はあるけど動いてないみたいだ)で色パレットエミュレート機能だけを利用できないので他のソフトのためにフルスクリーンできるようになるなら越したことは無いけど。
そもそもAPIの話なの?これ…
>>48 だから、お前がエロゲーでオナニーする為になぜ俺達がコード書いてやらなきゃならんのだよ
自分のことなんだから自分で何とかしろよ
>50 だから何とかするために自分でやろうとして聞きにきたら「帰れ」じゃ話にならないわけで。 そもそも対象はエロゲだが目的は単に毛色の変わったローグライクやりたいだけだぞ。
どうゆうことなの・・・
これはもうだめかもわからんね
>>23 こんなソース書いてるようでは何とかできるレベルに程遠い訳だが、それすら理解できてないからなぁ・・・
分からないなら初心者スレで学習してからやればいい コード書きたくないんであればソフトウェア板に「作ってくださいスレ」があるし ここはコード募集スレじゃないから
ゆとり世代の辞書には学習や勉強って言葉は無いからね
58 :
デフォルトの名無しさん :2008/08/04(月) 10:59:49
ここの住人もスルーするということを学習しないよね
ここの住人もゆとり世代だからね
>55-57 そもそも>23の部分は>30で直してるんだけど。 全く学習する気が無い扱いされるのは心外。何とか出来る出来ない、じゃなくて今の所やる人間が自分しか居ないのだから。 まあ、つくってくださいスレ行くからいいけどさ。スレ見る限りじゃあっちのスレの方がこちらの需要に合ってるだろうし。 じゃあお邪魔しましたね。一応スレ混乱を招いたお詫び申し上げておくよ。
スレ違いを開き直りかよ。 もともとフックするためのDLLなのに、その中にコード書いてどうするんだ。
>61 何処がスレ違い。 元々は、 必要な機能があるが、コードを書く人間も居なければ頼めるところもない → 自分でやらざるを得ないのでど素人ながらも何とかそれっぽくして相談に来た のだからスレ違いでも何でもないわけで。 結果としてより需要に合った、「頼める可能性のあるスレ」を紹介されたのでそちらに行く、といってどうして開き直りになるよ。
| ̄``''- 、 | `゙''ー- 、 ________ | ,. -‐ ''´ ̄ ̄`ヽ、_ / |, - '´ ̄ `ヽ、 / / `ヽ、ヽ / _/ ヽヽ/ / / / / / / ヽハ く / /! | 〃 _/__ l| | | | | | | ||ヽ \l// / | /|'´ ∧ || | |ー、|| | | l | ヽ /ハ/ | | ヽ/ ヽ | ヽ | || /|ヽ/! |/ | ヽ / | ||ヽ { ,r===、 \| _!V |// // .! | | || |l |ヽ!'´ ̄`゙ , ==ミ、 /イ川 |─┘ | ハ|| || | """ ┌---┐ ` / // | V !ヽ ト! ヽ、 | ! / //| / ヽ! \ハ` 、 ヽ、__ノ ,.イ/ // | / ┌/)/)/)/)/)/)/)/)/)/)lー/ ` ー‐┬ '´ レ//l/ |/ |(/(/(/(/(/(/(/(/(/(/│|| | \ 〃 r'´ ̄ヽ | |.ト / \ /  ̄`ア | | | ⌒/ 入 〉  ̄二) 知ってるが | | | / // ヽ 〈! ,. -' | | ヽ∠-----', '´ ', | \| | .お前の態度が | |<二Z二 ̄ / ', | | | _r'---| [ ``ヽ、 ', | | | 気にいらない >-、__ [ ヽ ! \.| l. ヽ、 [ ヽ | ヽ| \ r' ヽ、 | ヽ、 |
プログラムを起動してウィンドウが作られた時、マウスカーソルがそのウィンドウの上にあると、砂時計になってしまいます。 一度そのウィンドウからカーソルを出すと、普通のカーソルに戻り、それからそのウィンドウの上にカーソルを持っていっても砂時計にはなりません。 ウィンドウクラスのhCursorにはNULLを入れています。 原因が予想できる方がいたら教えてください。 よろしくお願いします。
LoadCursor(NULL, IDC_ARROW)
67 :
65 :2008/08/04(月) 18:10:25
>>66 直りました。
ありがとうございます。
NULLじゃダメなんですね。
ほんと、このスレは初心者をボコボコに叩いて遊びたいだけの性格悪い奴が多いなー
このスレっていうか、この板
この板っていうか、2ちゃんねる
2ちゃんねるというか世の中
世の中っていうか、世の末
ウインドウの中で右クリックしたら別の矩形ウインドウがポップアッップしてくるようにしたいです。
続き どうすればいいか教えてください。
右クリックしたら別の矩形ウインドウがポップアッップしてくるようにすればいいんじゃね?
WM_RBUTTONDOWNでCreateWindow クリックとして検知するならBUTTONDOWN+BUTTONUPにするかは状況次第
WM_CONTEXTMENUだろjk
WM_CONTEXTMENUって知名度低いよね。 メッセージの名称通り、コンテキストメニューを出すのに良いタイミングで送られてくるのに。
WM_RBUTTON〜だとマウスで右クリした場合にしか対応できない 大概そういう場合はAppキーにも対応する必要のある事が多い というかその手のキーボード操作ができないソフトなんてゴミ
マウスカーソルをドラッグ中だけウインドウの外に出せないようにしたいんだけどどうすればいいのですか?
ClipCursor
BOOL OnDragMauseOutOfWindow(HWND hWnd)
Mause
Mausuでした
スクロールバーの下部分に+とか−とかのボタンがついてるソフトってあるじゃないですか! あれってどうやって実装してるんですか?Win32APIとC言語だけでも実装できるんですか?
ボタン描くAPIある
>>85 SetScrollBarButtons(hwnd, SBB_BOTTOM | SBB_PLUS | SBB_MINUS, TRUE);
誰か分かる人居ないのですか?
DrawFrameControl あるいはuxthemeのテーマ描画API
アプリケーション(.exe)をDLLとして動作させる方法ってありませんか? 中身は一緒だけど単独で動作させたい場合とDLLとして動作させたい場合があるのです。
基本的にDLLとして全部実装して、単独実行用にそのDLLを呼ぶだけのexeを作る
EXEでも関数のエクスポートはできるよ。
95 :
92 :2008/08/05(火) 12:30:15
>>93 それは考えましたが、単独実行用はexe一個にしたかったため別の方法を模索してました。
>>94 そうなんですか?
知りませんでした、色々と試してみます。
ありがとうございました。
スピンコントロールを使ってて、 そのスピンコントロールの親ウィンドウにスクロールバーがあるんですが、 スクロールバーの動きを感知しようとして WM_H(V)SCROLLメッセージを処理したら、 スピンコントロールを動かしても、WM_H(V)SCROLLメッセージが反応します。 WM_H(V)SCROLLメッセージが、 スクロールバーによるメッセージなのか、 スピンコントロールによるメッセージなのか、 区別する方法をご存知の方、教えて下さい。
LPARAMに入るウィンドウハンドルを見なさい
いやです
お断りします
じゃあ俺が見るよ
いや、俺が見る
いやいや、ここは俺が
もうそういうのいいから
Windows Media Player 11のプラグイン作りたいんだが、そういうのはどのSDKが必要なんだ? Platform SDKでいいんかな。
COMポートのGetCommPropertiesを実行したところ、LPCOMMPROP構造体dwMaxBaudがBAUD_USER ユーザー設定可変値 になっているのですが、これはSetCommState()でdcb.BaudRateを設定するときCBR_115200を超えて好きな値を設定できるんですか? CBR_のdefineがないので、230400を直接指定したのですが、SetCommStateでパラメータ異常になってしまいます。 通信速度230400を設定するにはどうすればいいんでしょうか?
エクスプローラのフォルダツリーペインみたいに ツリービューにディレクトリ構造を表示させたいのですが 何かいいサンプルとか無いですか
>>104 Windows Media Player 11 SDK
COMポートは何? UART使ったほんとのCOMポートなら、ハードで上限決まるけど。
マザボについてるCOM1シリアルです。
その制御チップで上限が決まるって話でしょ?
それで上限を知りたくてGetCommPropertiesを実行したところ、LPCOMMPROP構造体dwMaxBaudがBAUD_USER ユーザー設定可変値 になっているのですが、この関数の使い方の解釈は間違ってますか?
エラーが返ってきたらその速度で使えないってことでいいじゃん。
そうか!すごいわかりやすい。それでいいやありがと!
APIの情報(関数名,戻り値の型,引数名,引数の型)の一覧がCSVとか、 プログラムで取り込みやすい形式になっているものがほしいんですが、 どなたかご存じないですか? 最悪,MSDNのWebページをパースするしかないですかね?
ヘッダファイルをパースする方がまだマシじゃね
前はwin32api.csvってのがあったな
doxygenに食わすと判りやすい形でだしてくれる、ってな話を 大昔にradium softwareあたりで読んだけど
>>117 win32api.csvって付かなくなったの?
通常のマウス操作とmouse_event等で擬似的に生成されたマウス操作とを判別するにはどうしたらいいんでしょうか。
不可能
122 :
120 :2008/08/06(水) 09:16:02
おお、ばっさり切られました。 今チート対策研究中なんですが、オートマウス防止って難しいんだなあ。
マウスの軌道でも監視してて不自然な挙動してたら撥ねるとか
>>120 XP以降になるけどRaw Input APIとかってどうなの?
>>122 チートはされても問題ないシステムを作れ。つーか操作系はチートに分類すべきではないし基本的にブロックできない。
nProみたく頭の悪いことをしたら駄目だぞ。
nProtectのようなコードを書いたらプログラマとして終わりだよな。
というかそんなソフトの需要がある現状が問題じゃないのか オンラインゲームでチートする馬鹿がいるからだろ
そりゃ、泥棒がいるから鍵つけなきゃならない世の中がおかしい、と言うようなもんで 正しいけど現実的じゃないような。
OS側で細かく権限制御できないんだからサードパーティでやるしかないだろ
そもそもCreateRemoteThreadとかRead/WriteProcessMemoryなんて チート御用達APIが一般アプリで使い放題というWindowsのセキュリティの甘さが問題
オープンソースのOSで動かすもののほうが、何でもやりたい放題にできるべ。
↑話を理解してない馬鹿
理解できないとそれしか貼り付けられないバカがまた来たか
↑話を理解してない大馬鹿
チョン製だから仕方ない・・・
>>125 そういえば、MAMEがRaw Input APIを使うようになって
JoyToKeyが使えなくなったという話を聞いたことがあるな。
138 :
デフォルトの名無しさん :2008/08/06(水) 17:15:36
アドレスバーみたいにエディットボックスにいくと自動で全選択させるエディットボクスをつくるAPIを教えてくださいm(_ _)m
自分でイベントをハンドルしてEM_SETSELでも送れ
141 :
デフォルトの名無しさん :2008/08/06(水) 18:59:42
レスありがとうございますm(^ ^)m どうやら自分はサブクラス化とかわからないそうなので ボンボボックスを代用したいと思います!
>ボンボボックス 0点
>ボンボボックス ワロスw
ここは面白い発言に笑うことも許されない陰気なインターネットですね
>>138 EN_SETFOCUSがきたらEM_SETSELするだけかと
>>144 あげあしっていうか、ボンボでなけりゃスルーされたとこだけど、なにせボンボだからなぁ
お礼レスなんてスルーでいいだろ
どうでもいいが、テキストの途中を編集しようと位置決めしてクリックしたのに 勝手に全選択されて、もう一度クリックしないといけないUIはイライラする
勝手にイライラしとけば?
151 :
120 :2008/08/06(水) 22:56:43
今回チート対策を調べているのは自分の勉強の側面が強いです。
>>123 それは考えてました。
判定に自分のセンスが試されそうな話ですね。
>>125 ざざっと調べてみましたが、使えそうな匂いがしますね。
これから詳しく調べてみます。
>>126 チートはされても問題ないシステムを作れ、との言葉、心に留めます。
今回はテーマが違うのであれですが。
152 :
デフォルトの名無しさん :2008/08/06(水) 23:32:24
>>20 writefileで何を書き込めば良いんでしょうか?
createfileのときはドライブを開けば良いんですよね?
nProって何やってるわけ?
監視
rootkitみたいなこと
チート対策の勉強といいつつ実はチート方法を勉強したいのだろう
>>153 rootkitのためのネイティブAPIのフックとか時間関係をいじれなくするためのAPIのフックとか、ソフトウェアからのキー入力をはじくためのフィルタドライバじゃね。
結果、サードパーティの特殊なハードが使えんし(6ボタン以上あるマウスとか自由に割り当て可能なキーのあるキーボードとか)
OSのバージョンがあがるたびにブルースクリーンだすような代物。
ダブルバッファリングについて質問です。 子ウインドウ(ボタンやボックスなど)が多数存在する状況で、ウインドウ全体を再描画したいのですが、ちらついてしまいます。 まず子ウインドウの内容も全部まとめて一つのオフスクリーンに描画してからBitbltで画面に表示、ということが出来れば、と考えたのですが、方法が分かりません。 よろしければ方法を教えていただけないでしょうか。もしこの方法で無理なら、ちらつきを抑える代替案を挙げていただけないでしょうか。 よろしくお願いします。
> 6ボタン以上あるマウスとか自由に割り当て可能なキーのあるキーボードとか そもそもこういうの自体OSのバージョン上がった時にドライバ用意できないと動かない可能性高いが
>>158 親にWS_CLIPCHILDRENをつければ、子をオフスクリーンに描く必要はないんでない
3DのRPGを作ろうと思っているのですがC言語とC++を一通り学んだので Win32APIで、ゲームを作る上で必須な項目 ってなんですか? 自分で調べた結果必要だと思った↓ GDI描写、フォントとテキスト、入力処理、ウィンドウ操作、メニュー、ビットマップ、 アニメーション、を勉強しました。 他にこれはやったほうがいいよ、というのがあったら教えてください Win32APIの基礎を覚えたらDirectXの勉強をしようと思います。
このスレで聞かれても、Win32APIを勉強しろとしか答えようがないがw
ものすごく遠い道のりだな 気づいたときにはみんな大人になっていたというオチだ
jpegやpngを表示するにはどうすればいいんですか? ファイルヘッダーを文字で表示することは出来たのですが、ここからどうしていいかが分かりません。 詳しい手順を教えてくれませんか?
Gdiplus::Image img(L"hoge.jpg"); Gdiplus::Graphics g(hdc); g.DrawImage(&img, 0, 0);
166 :
165 :2008/08/07(木) 13:53:19
GDI+を使えばいいんですね。 ありがとうございます。 ただ、上手くいえないんですけど、そういうのって自分で書けないんですか? CreateCompatibleDCとかLoadBitmapの中身が見てみたいんですけど、どこかで見れますか?
自分でjpeg書きたいなら、libjpeg、libpngのソース見たり利用したりすればいいじゃない。
CreateCompatibleDCについてはwineのソースでも読んでみたらいいんじゃねえのか それはそれで楽しいとは思うが実にはならないと思う
169 :
164 :2008/08/07(木) 14:09:49
レスありがとうございます。 紹介してもらったものを見てみましたが、自分には早すぎたみたいです。 何年後かに挑戦します。
日経ソフトウェアで前に紹介されてたな…
171 :
デフォルトの名無しさん :2008/08/07(木) 17:05:02
JPEGのエンコーダ、デコーダ実装で一冊本になってるよ。
なんか本が一冊でてたな C++的には全然イケてないコードだったのは覚えてる
DCTが分かればjpegなんて大したこと無いよ
このスレにWikiなんてあったんだなw
また、からかわれ覚悟で出て来ましたですヨ。 先ず、懸案の VirtualAlloc() などの件は無事終わった。いろいろに感謝。 チラ裏になるが、VirtualFree() の flag の指定が悪く、使った後の解放 が出来てなくて、5MBのJpeg写真を読み込んで、31MBのDIBを吐き出す操作 を27回繰り返すと、「この操作を行うにはメモリが足りません」とか宣 まわった。Jpeg解凍のDLLは、Dos時代から使っているソースから自分でコ ンパイルしたもの。VirtualAlloc()関係のソース例は意外に少ない印象で 一時困ったが、お笑いなのは、自分のプログラム内にもう使用例があって これで解決した次第。因みに、RamDisk操作で //diskio.c Copyright (C) 1999-2003 K.Takata #define AllocDiskIO(siz) VirtualAlloc(NULL, siz, MEM_COMMIT, PAGE_READWRITE) #define FreeDiskIO(buf) VirtualFree(buf, 0, MEM_RELEASE) がソースにあった。k.Takataさんに改めて感謝。
もう出てこなくていいよ・・・
ああ、new/mallocでいいんじゃね?っていう話?
>>175 前スレもそうだが、こいつって質問者を装って自己陶酔しまくった日記書いてるだけなんだよな
こういう自己中な奴ってリアルでも空気読めなくて周囲からウザがられてるんだろうな
>>175 LSI86-C という脳内コンパイラについて教えてください。
virtualFree(前スレVirAlloc相談者);
error C2065: 'virtualFree' : 定義されていない識別子です。
>>181 かまってほしくない人はレスしないでください
#include <windows.h> #define APP_NAME TEXT("Sample_MainWindow") typedef struct _ThreadParam { HWND owner; POINT point; } ThreadParam; DWORD WINAPI ThreadFunc(LPVOID vdParam){ HDC hdc; RECT rect; ThreadParam param; _ThreadParam { の_って付けるとどういう意味があるんですか?
アンダースコア+大文字で始まる識別子は言語によって予約されているので、 構造体タグにそのような名前をつけるのはよくありません。 もしお読みの本かなにかにそのようなコードが載っているのであれば、 今すぐ窓から投げ捨ててください。
いや、誰かが拾って読んでしまうかもしれん。 焼き捨てるべきだ。
「Windowsゲームプログ○ミング」という本なのですが、捨てたほうがいいのですか・・・。 専門学校の教科書なんですけど捨てるのはやばいので金庫に入れておきます。 学校で使うときに出します。
そんな本を教科書に使うってことは、どうせ専門学校だろ。 人生終わったな。 悪いことは言わん。 今すぐやめてコンビニの店員にでもなるんだな。
すいませんもう200万払っちゃったので・・・。 後の祭りですね・・・。 ゲームクリエイター学科なのにゲーム会社に就職は1割以下で ほとんどが工場のベルトコンベアーの保守プログラム関係みたいです(最近知った) 愚痴ってすいません・・。 独学で勉強してがんばります! それでは失礼します。
>>185-188 typedef struct _FILETIME {
DWORD dwLowDateTime;
DWORD dwHighDateTime;
} FILETIME, *PFILETIME, *LPFILETIME;
Win32SDKのヘッダだってそうなってるんだが。
馬鹿じゃねーの?
>>187 一応補足しとくと、
アンダースコア+(アンダースコア or 大文字) で始まる識別子は常に予約されている。
その他のアンダースコアで始まる識別子はファイルスコープで予約されている。
予約済み識別子を使用した場合の動作は未定義。
一般的な流儀として構造体タグは、
typedef struct ThreadParam_ { } ThreadParam; // お尻にアンダースコアつけるとか、
typedef struct tag_ThreadParam { } ThreadParam; // tag_ と書くとか、
typedef struct ThreadParam { } ThreadParam; // 何もつけない。
>>191 ありがとうございます_の謎が少し理解できました
同人ゲーム作りが近道と言ってみるテスト 学校なんて何も教えてくれないよ。就職斡旋するだけだからw
そもそもゲーム業界なんか目差してる時点で人生終わっとる
>>190 処理系のために予約されているのだから処理系付属のライブラリが使用してもなんら問題はない。
>>195 処理系付属のライブラリ=Win32SDKとでも言いたいのか
馬鹿丸出し
本職組み込み、趣味でゲーム作りが最強
処理系だの未定義だの不定だのいう宗教じみた言語厨ってどこにでもいるよな MS自体そんな事なーんも考えてないのにねぇ
WSDKは単体配布だけじゃなくて、VC++付属のやつもあるが。 コンパイラについてくるぐらいだから処理系付属といっても差し支えないだろ。
だいたい処理系は未定義な動作をどういう動作にするか自由に決められるんだから、 処理系を作ったのと同じ組織が書いたコードが動作の未定義な部分を含んでいてもなんら差し支えない。
> コンパイラについてくるぐらいだから処理系付属といっても差し支えないだろ。 こんなアバウトな俺様定義するくせにアンダースコアには拘るのか
訳:かまってほしいな
>>175 >#define FreeDiskIO(buf) VirtualFree(buf, 0, MEM_RELEASE)
あー、そのコードバグってますんで、以下のでよろしく。
#define FreeDiskIO(buf) VirtualFree(buf, 0, MEM_RELEASE | MEM_DECOMMIT)
ここで奴がキモイ自己陶酔日記を引っさげて登場 ↓ ↓ ↓ ↓
CryptCreateHashで作った HCRYPTHASHオブジェクトは使いまわしていいのでしょうか? CryptHashDataとかでハッシュ値生成して使い終わったら 一度CryptDestroyHashで開放すべきですか?
リファレンス嫁よ。ゆとりが
わからないんならレスしないでください
>>207 リファレンス読めば理解できると分かっている
>After one of the functions from this list has been called,
>CryptHashData and CryptHashSessionKey cannot be called.
すみませんこの部分を見落としてました><;
どもです。
ちなみに
>>207 は私じゃないですw
210 :
デフォルトの名無しさん :2008/08/09(土) 00:09:26
ウィンドウを綺麗にC++のクラスで纏めるにはどのAPI使えばいい?wndclassのwndprocにクラスの関数入れたらエラーになるんですが・・・
RegisterClass(Ex) CreateWindow(Ex)
>>210 そんなんじゃC++もたいしたレベルじゃねぇだろお前
ヒント:static
213 :
デフォルトの名無しさん :2008/08/09(土) 00:19:02
URLを指定できるwavファイルを再生するAPIはありますか?
具体的にどういうこと?
215 :
デフォルトの名無しさん :2008/08/09(土) 00:41:48
ダウンロードした音声ファイルをユーザが使用することのないように、 ネット上の音声ファイルをソフト内で再生したいです。
俺なら数分で作れるな
ちなみにVB6を使っています
VB6なんてとっくにサポート切れてるのにまだ使ってる人いるんだね・・・
今すぐC#に切り替えることを勧める。VBなんてもはや廃れつつある言語。
そうですか、たまたまこれしか家にはないんですよね・・・
大丈夫開発環境はただで揃うから
そうなんですか! そういえばVC++6.0もあったのですが(使ってない) やるなら何がいいのでしょう?
簡単にいきたいならC#
たまたまVB6が家にあるってのもおかしな話だな
過去に親が使ってました
>>224 俺の家にはたまたまVC6ProとVS2003ProとVS2005Proがあるけど
結局VC6しか使ってない
リアル小学生な感じがしてきた・・・
VisualStudio6.0があります
もちろんたまたま親が
割れ厨()笑だらけですね
こんなのがプログラミングしようとしててすみません。
昔と違って3万もあればVS2008std買えるからいい時代になったな。SDKはネットで簡単に入手できるし。
233 :
226 :2008/08/09(土) 01:54:53
>>232 VS2003ProとVS2005Proが学生の時にtheSpoke版が4kで買えて衝撃的だったんだが
今はDreamSparkなんてやってるんだよなぁ
もうMSが何をしたいのか分からなくなってきた・・・
市場を独占気味にしたい
Borlandが社名変えたり戻したりしてる間に既に市場独占してただろ
いくら無料で手に入る時代でもやっぱ金かけないとダメでしょ AC版でも学生がン万円出すのはそれなりにしんどいし、 そうして手に入れれば「よし頑張るぞー」って気持ちになれる
逆を言えば物にならなかった時に無駄になるのが嫌で 手を出せなかったという人もいるんだろうけどなー 元々そんな奴は物になんねーよと言う意見は取り合えず置いといて
うん、君はそうしとけばいいよ。
無料配布なんて貧乏人救済システムは要らない ただでさえ無職ニートが多いこんなご時世に「いつかシェアウエアでガッポリ儲けてやる」とか つまらない夢を抱く馬鹿が増えるだけ
増えたところで俺には関係ない その馬鹿と同じ次元に居る奴にはつらいのかもしれんが
馬鹿で悪かったな もう死んでも治りそうに無いよ
馬鹿は馬鹿なりに前向きに生きればいいだろ
もういいから
1>------ ビルド開始: プロジェクト: test, 構成: Debug Win32 ------ 1>リンクしています... 1>7.obj : error LNK2019: 未解決の外部シンボル __imp__timeGetTime@0 が関数 _ThreadFunc@4 で参照されました。 1>C:\Documents and Settings\****\My Documents\Visual Studio 2008\Projects\test\Debug\test.exe : fatal error LNK1120: 外部参照 1 が未解決です。 1>ビルドログは "file://c:\Documents and Settings\****\My Documents\Visual Studio 2008\Projects\test\test\Debug\BuildLog.htm" に保存されました。 1>test - エラー 2、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== このエラーはどうやって直すんですか;;? msimg32.libはリンカから追加しました。
>>245 追加したらできました
ありがとうございます
環境スレ行けよ…
行きたきゃお前が逝けよ
>>247 貴方の気分を害したことを謝罪いたしますと同時に遺憾の意を表します。
誠に申し訳ございませんでした
慇懃無礼だな
__imp__timeGetTime@0 でググれば分かるけどな
テトリスやブロック崩しくらい作れないとWin32APIの基礎を 覚えたとは言えませんか?
うん。
テトリスやブロック崩しはアルゴリズムのほうがメインになるからWin32APIとは関係ない
テトリスやブロック崩しなんて、大半がゲームロジックでほとんどAPI使わないだろ。 ペイントの方が一通りの要素が揃っている。
ペイントなんて、大半がペイントロジックでほとんどAPI使わないだろ。
GDIの基本操作を学ぶには良いんじゃないか? 傾斜・反転・回転以外はほぼGDIに丸投げっぽいし。
>>250 俺のダチが世話になったな
今度群馬こいいい所紹介してやるからよ
260 :
デフォルトの名無しさん :2008/08/09(土) 21:08:00
ID出んから言いたい放題 わろす
261 :
デフォルトの名無しさん :2008/08/09(土) 21:53:00
質問です。既定のブラウザから例として「ぬるぽ ガッ」という検索結果のページをボタン一発で表示させたいのです。 詳しく言うと、 @プログラムのボタンを押す A既定のブラウザで「ぬるぽ ガッ」という検索結果のページがブラウザが起動して結果が表示される といった具合のものを作ろうと思っています。 既定のブラウザの取得方法は、 ://www.atmarkit.co.jp/fdotnet/dotnettips/652getdefaultbrowser/getdefaultbrowser.html でできましたが、その他ができません。 知恵を貸して頂けないでしょうか?
つ【俺の知恵】
うるちえ
267 :
デフォルトの名無しさん :2008/08/09(土) 22:06:16
>>264 参考ページが.NETでしたね。
私の言語はPASCALです。
>>265 function ShellExecute(hWnd: HWND; // 親ウィンドウのハンドル
Operation : PChar // 操作
FileName : PChar // 操作対象のファイル
Parameters: PChar // 操作のパラメータ
Directory : PChar; // 作業ディレクトリ
ShowCmd : Integer)// 表示状態
: HINST;
ここでは操作がopen、ファイルがレジストリから取得したブラウザファイル、どこにそのアドレスを入れるのでしょう?
>>266 クエリストリングのbtnGとか要らないんじゃね?
269 :
デフォルトの名無しさん :2008/08/09(土) 22:07:13
>>266 っと私が打ち込んでいる間に・・・具体的なコードありがとうございます。
さっそく解決してしまいました。
ありがとうございました。
270 :
デフォルトの名無しさん :2008/08/10(日) 09:23:59
.NET に PictureBox というコントロールがあるのですが これを VC++ で表現するならば コントロール上にビットマップイメージを貼ってるだけに相当するんでしょうか? よろしくお願いします
>>270 Win32だとStatic Controlに相当するな。
IDEのダイアログエディタだと「Picture Control」と表記されているが、
これはダイアログリソース上の表現で、結局はStatic Controlが生成される。
>>271 ありがとうございます
Static Control にスタイルが SS_BITMAP って感じですね
SendMessageTimeoutの引数であるpdwResultと SendMessageTimeout関数自体の戻り値に違いは出るのでしょうか? お願いします。
違いは出ます。意味が違いますから。
275 :
273 :2008/08/10(日) 21:24:47
>>274 具体的にどういった違いなのでしょうか?
MSDNなどの資料には同じようなことしか書かれてなくて・・・
参考URLの掲示でもかまわないのでお願いします
>>275 lpdwResultはSendMessageの戻り値相当じゃないか。
MSDNより
lpdwResult
1 個の DWORD 型変数へのポインタを指定します。関数から制御が返ると、この変数に、メッセージの処理結果が格納されます。意味は、送信したメッセージにより異なります。
戻り値
関数が成功すると、0 以外の値が返ります。
関数が失敗した場合や、タイムアウトが発生した場合は、0 が返ります。
>>275 SendMessageTimeout の hwnd に無効なハンドルを入れた場合など
278 :
273 :2008/08/10(日) 21:31:23
>>.276-277 なるほど納得がいきました ありがとうございます
>>275 pdwResultは送ったメッセージに対する戻り値。
メッセージを送った先のプロシージャが返した値。
SendMessageTimeoutの戻り値は、SendMessageTimeoutそのものの結果。
280 :
デフォルトの名無しさん :2008/08/11(月) 11:06:58
RegisterClassExで作ったウィンドウクラスが有効かどうかを判定するAPIを教えてください
つ RegisterClass(Ex) の戻り値 つ GetClassInfo(Ex) で取得
282 :
デフォルトの名無しさん :2008/08/11(月) 13:52:41
直接画面DCには描画せずにバックグランドのDCを介して描画する. 1行または複数行,描画する場合はバックグランドDCに必要な文字を描画してから 画面を無効にしてWM_PAINTでBitBltを使い描画させる. のバックグラウンドDCとは何を指してるのでしょうか? 直接画面DCに描画するのと、バックグラウンドDCを介して描画するのとでは どのような違いがあるのでしょうか?
それを書いた奴に聞けよ
メモリDC
ダブルバッファ とかそういう話か? ちらつき防止でやってるだけ 直接DCに描画だと 消しているトコロ も目に見えちゃうからチラツク
GdiSetBatchLimitを上げればいいんでねーの?
>287 全然違うんじゃね? GDI関数呼び出しをまとめて性能を上げるのと、一連の描きかけの絵を バックバッファに描画しておいて描き終わったら前面をInvalidateRect して(=WM_PAINT発生)からバックバッファから一気に転送(BitBlt) するのでは見え方が違う。 >286 の言ってることが正解。さらに描画を1シーケンスで完了できない場合、 描画中の絵が見えないと言うメリットもある。 性能向上の方式ではないので性能あげたいならInvalidateRectの 範囲を描画更新したい場所に限定する必要があるし、そういうの やりたいならGDIでなくDirectXで物理サーフィス×2面のFlipで やるのが普通。
てか消してるところが見えるって何世代前のPCだよw
最新のPC
>289 最新のPCであっても、GDI関数で描画する時間は人間の一生のような 長い時間ってことが分からない素人かw 消しているトコロがリアルに人間に分からないように処理するには 液晶とグラボの垂直同期周期が60Hzとして、16.6666...msec 以内に 一連の描画処理を完了する必要があるけど? もちろん一度もVSYNC跨がずに、だ。
一連の描画処理が16ms以上かかるってどんだけ重い描画なんだよ
でも、次の画面更新タイミングまでが偶々1msだったら・・・?
そんなの気にしなくていいよ、今時GDIなんてせいぜいコントロールの描画ぐらいしか使わないんだから Windows標準のコントロールだって物によってはダブルバッファリングされてなくてちらつくけど誰もそんなの気にしてないし
>292 かかるでしょ。 ・そのプロセスのプライオリティより高いスレッドやカーネルでの より優先度の高い処理が行われる場合。 ・そのプロセスのプライオリティより低いスレッドが一定周期で ダイナミックブーストされる場合。 ・そのプロセス自身が描画処理中に、HDD等の単一リソースにアクセスした場合。 ・例えば1280x1024x32bit(フルカラー)の描画面(=5MBytes)をグラボに転送するのに、 DMA転送が使えなかった場合。 ・使えたとしても、メモリと他のデバイス間で先にDMA転送の帯域を食いつぶされていた場合。 いくらでもある。292がMS-DOSでシングルタスクのプログラマか、カーネルの設計者と いうなら謝るよ。ここWin32API質問箱なので勘違いしてた。 293は「もちろん一度もVSYNC跨がずに、だ。」を読み取ってくれたね。
もういいよ > 例えば1280x1024x32bit(フルカラー)の描画面(=5MBytes)をグラボに転送するのに 今時こんな描画にGDIなんて使わない アンタだって暗にそう言ってるじゃん > GDIでなくDirectXで物理サーフィス×2面のFlipでやるのが普通。
>>295 こういうKYがいるとテスト工程が無駄に増えるよなw
>>297 そうやってシステム見られない自称SEもいるね。
手戻り工数増えるんだよなw
後になって性能が出ない時に言い訳しないようにね。
文章から加齢臭がものすごいんですが・・・
WPF使えばちらつきなんか無縁
とっととCからWPF使えるようにしろと
つ MC++
303 :
デフォルトの名無しさん :2008/08/12(火) 00:25:46
ListViewのレポート形式で、表示領域が足りなくて 省略されて表示されているとき(例えば、あいう...)に、 その文字の上にカーソルを持っていくとツールチップが 表示されますが、これを無効に設定することはできない のでしょうか?
LVS_EX_INFOTIP,LVS_EX_LABELTIPあたりじゃない?
306 :
デフォルトの名無しさん :2008/08/12(火) 01:26:44
>>305 だと思うのですが、参考になるプログラムが
見つからなくて...
フラグの説明読んで書いてみりゃいいだろ なんで自分から動こうとしないんだよ
LVS_EX_LABELTIP Version 5.80. If a partially hidden label in any list view mode lacks ToolTip text, the list-view control will unfold the label. If this style is not set, the list-view control will unfold partly hidden labels only for the large icon mode. 別に複雑な操作がいる訳でもなし このくらい試してみようぜ
310 :
デフォルトの名無しさん :2008/08/12(火) 10:57:03
CS_OWNDCにしたときに増えるメモリってどれくらい? 猫でもをみたらちょっとだけメモリを消費するって書いてあったけど タスクマネージャを見たけどあんまり変わってないっぽいけど
見たまんまだ 確認したならそれを受け入れろ
640KBで動く時代からあるAPIdsと説明がそういう風になることもあるw
TextOut関数で背景を部分的に変える関数等ありますでしょうか?
たかだが背景色だけ変えるなら SetBkMode で OPAQUE 指定 { SetBkColor して TextOut } を変えたい単位で分割呼び出し 複雑な背景をどうこうしたいなら SetBkMode で TRANSPARENT 指定 先に背景を描画しきって TextOut
315 :
デフォルトの名無しさん :2008/08/12(火) 15:58:29
ShowWindowをAdvancedWindowsのやつでAPIフックしたらアドレス違反になるんだけどなんで?? 全プロセスにDLLにして注入ではなく、自プロセスのフックのみでやってる。適当なexeにDLLにして注入してもやっぱり違反。 他のAPIはフックできてる。環境はBCBなんだけど。
WriteProcessMemoryでやれ。権限もクリアしていて、それでできなきゃアドレス間違っている。メモリ覗いて確認しろ。
>>316 俺VirtualProtectでやってるんだけど
WriteProcessMemoryのほうがいいわけ?
318 :
317 :2008/08/12(火) 20:01:46
>>315 その事象で俺が経験した事といえばスタックオーバーフロー
どうせエラー値確認していないんだろ
アドレス違反で落ちてたらエラー値も何も無いだろ
だから何でVirtualProtectのエラーチェックしないの?ゆとり?
書き込みでAVになるか、書き換えた関数が呼ばれた時例外発生するか質問者ははっきりさせないといかんな。
323 :
317 :2008/08/12(火) 22:09:50
>>321 俺別にエラーチェックしてないとは一言も言ってないんだがwwwww
>>320 の言ってる通りアドレス違反で落ちてるんだから・・・・・
多分だけどやっぱ
>>315 はスタックオーバーフローしてるんじゃない?
GetProcAddressもあわせてAPIフックしてるならその辺を睨んだ方がよさげ
つーかコード掲示するかAdvancedWindowsのページがわからないと
これ以上なんともいえない
呼び出し規約かw
Ollyか何かで追跡してみれば
エディットコントロールの文字列選択の処理ってどうなっているのですか? どうやって選択範囲を計算してるのですか?
GetTextExtentPoint
328 :
315 :2008/08/13(水) 12:55:18
コードも例外発生の場所も書いてなくてスマン。 なのに原因を見抜けるってのはもうすげぇな、感謝!例外は置き換えた関数が呼ばれたときにおきてた。 きちんとstdcallだってのを置き換え関数で宣言したら、うまく動くようになった。 BCBとかdelphiは標準だとcdeclとかfastcallとかだったっけ。 とにかくみんなサンクス!!
>>327 キャレット位置をどうやって計算しているかわかりますか?
一文字ずつ幅を足していく
WM_LBUTTONDOWN クリック位置x.y座標取得 GetTextExtentPoint32関数で得られた文字列のサイズと比較していく、って事ですか?
GetTextExtentExPointを流用してもいいけど
333 :
デフォルトの名無しさん :2008/08/13(水) 20:11:50
あるアプリのタブコントロールを別のプロセスから変化させたいのですが 別プロセスからTCM_SETCURSELをSendMessageすると、タブの位置は 変化するものの、TCN_SELCHANGEなどの通知メッセージがアプリ側で 発生しないので、肝心の内容が置き換わりません。 仕方なく、別プロセスから続けてWM_NOTIFYを発生させる事を考えたのですが、 別プロセスからでは構造体(NMHDR)を渡すようなメッセージは 伝わらない様です。 別プロセスからうまくタブが変化した事を通知する方法はないでしょうか。 該当コード SendMessage(htab, TCM_SETCURSEL, 3, 0); { NMHDR nmhdr; nmhdr.hwndFrom = htab; nmhdr.idFrom = GetDlgCtrlID(htab); nmhdr.code = TCN_SELCHANGE; SendMessage(hmain, WM_NOTIFY, GetDlgCtrlID(htab), (LPARAM)&nmhdr); }
VirtualAllocEx WriteProcessMemory
sendinputを使おうと思って検索したらこんな2種類の書き方が出てきました。 lpKey->type = INPUT_KEYBOARD; inputKey[cnt].type = INPUT_KEYBOARD; この -> と [ ].type はどう違うんですか?
ステータスバーの文字の色を変えるにはどうすればよいですか?
MSDN読め
340 :
デフォルトの名無しさん :2008/08/13(水) 22:14:10
>>334 ありがとうございます。
できました。
かなり泥臭いですね・・
BitBltする大きさが少し違っただけで、いきなり速度が変わるんですが、なんか理由があるんですか。 あとディスプレイを2つつないでる環境でも、速度が結構落ちるんですが。
そりゃそうでしょうね
ヒントでもいいから教えて
おっ 典型的ゆとり発言
知らないならレスしないでください
自己解決しました ありがとうございました
間違ってました やっぱり教えてください
教えてもいいが 気に入らない態度がお前の
知らないならレスしないでください
自己解決しました ありがとうございました
標準入力にデータが存在するかを調べるにはどうすれば良いでしょうか。 _kbhitやPeekConsoleInputを試してみたのですが、リダイレクトされた場合に機能しないようです。 CreateFileでOVERLAPPEDが使えるかとも思ったのですが、Consoleでは無視されると説明されていて 実際試してもうまくいきませんでした。
そういうときには実際に読んでみればいいんだよ。
DialogBoxやCreateDialogから行くcallback関数に変数等を渡す場合 はグローバルで宣言しておくしかないですか?
>>353 DialogBoxParam・CreateDialogParamの初期値で適当な構造体のポインタでも渡しとけ
355 :
デフォルトの名無しさん :2008/08/14(木) 20:00:22
>>352 申し訳ありません、情報が足りませんでした。
入力がない間は他のことをしたいのです。
スレッド分けれ
>>356 元が*nixなコンソールプログラムの処理中に、
出来るだけ手を加えずにほんのちょっと通信したかっただけなんで
スレッド分けとかソケットは遠慮していたのですが、やはりそこまでやらないと駄目ですかね。
シグナルとかあればそれでもいいのですが。
Win32APIをC++でラッパしたフリーのライブラリ でお勧めのものがありましたら教えて下さい.
Boost
WTLを勧める
363 :
359 :2008/08/14(木) 21:57:02
ありがとうございます。 自作ライブラリの参考にしたいので、 単純で解析しやすいのは無いでしょうか? eGUI++は、相当頑張ればなんとか読めそうでしたが、 WTLの方は[!endif]とか変な記号があってわかりませんでした。
へ?俺が見た限り、WTLに[!endif]なんて存在しないけど・・・
>>363 [!endif]はVSのプロジェクトテンプレートだろうがw
367 :
359 :2008/08/15(金) 08:00:34
Win32APIとなんらかのC/C++コンパイラ・リンカ があれば使えるようにできるといいなと思います。 つまり、リソースは使わずに、 マクロも極力避けるという感じで。 STLSoftも良さそうですね。
Perl. system ('notepad.exe','abcde.txt'); ↑これでメモ帳が開けるんだけど、 win32APIの観点から、なにか アドバイスはありませんか?
ありません
何を求めてるのか具体的に書かんと分からんよ アドバイスって何よ 同じ事をしたいだけならShellExecute
Perlは便利というアドバイス
372 :
351 :2008/08/15(金) 22:39:32
自己解決しましたので報告します。
GetStdHandleなどで得たハンドルを直接WaitForSingleObjectに入れることが出来ます。
ただしそのままではKeyDownだけではなくKeyUpでもシグナル状態になってしまうため、
WaitForSingleObject+ReadFileまたはWaitForSingleObject+ReadConsoleの組み合わせだけではブロックします。
FlushFileBufferやCancelIOではキーボードイベントをフラッシュする事が出来ず、
他にフラッシュできそうなAPIを見つけることが出来ませんでしたので今回は採用を諦めます。
どうしても直接入力/リダイレクト両対応でノンブロッキングな標準入力を行いたい方は
シグナル状態になった際にPeekConsoleInputで無関係なシグナルを検出し、
その時だけReadConsoleInputでイベントを取り除いてください。
>>356 さんの言うようにスレッド化するのも手だと思いますが、ブロックするのでスレッドを終了できなくなるはずです。
別にスレッド終了せんでもええやん?
CreateThreadまたは__beginthreadexを使用する時に 指定するスタックサイズは皆さん「0」指定で使ってますか? 通常は「0」で問題は無いのでしょうが もし仮に明示的なスタックサイズを指定している方がいれば その利点などについて詳しく教えてもらえるとうれしいです。
0って言ってもデフォルトサイズを使うって指定しているんだから、サイズによって何が変化するか自分で考えろよゆとり馬鹿
・デフォルトのスタックサイズでは足りない場合に増やす スタックがあふれるようなアルゴリズムが悪いんだが、やむを得ない場合があるかもしれない ・スタックを減らしてアドレス空間を節約する スレッドを大量に作るとき、スレッド1個ごとに何MBも取ってると、アドレス空間の枯渇が早い という利点は思いつくが、今のところ俺は0以外を指定したことはない
STACK_SIZE_PARAM_IS_A_RESERVATION が指定できない2000以前じゃデフォルトより下げても意味なかったし0以外ねーな
64bitコードならともかく、32bitコードじゃスタックサイズを増やすのはまずねーだろ。 アドレス空間足りねーよ。
デフォルトで1MBくらいなんだから、スタックサイズちょっと増やしたくらいでアドレス空間足らなくはならんだろ。
380 :
374 :2008/08/16(土) 12:24:45
>>375-379 回答ありがとうございます。
>>376 の言うとおりスタックを減らしてアドレス空間の
節約をした方がいいのか迷っていたので、
ほかの人の意見を聞いてみようと思って質問しました。
スレッドのスタックサイズに関しては特に意識する必要は無いという事ですね。
質問です。。。 現在keybd_eventを使用して実際のキー操作をシミュレートしようとしているのですが, keybd_event( 'A', 0, 0, 0 ); のようなコードでは,実際にAをずっと押しているときのように,動作しません。 (例えば,テキストエディタをアクティブにしていたらAがいくつも入力される。 どうしたら,実際のキーボードを押しているように動作させることが出来るのでしょうか?
スタック領域って減らせるのか? 最初は4KBぐらいしか確保されてなくて必要に応じて動的拡張されるとかじゃなかったっけ?
GetOpenFileNameのダイアログ使ってるとMAX_PATH超えられないけれど 対策もしくは代替手段て有りますか?
ダイアログを自作する
perlで ShellExecuteで、 notepad.exeを開きたい場合は どう書けばいいの?
`notepad.exe`
>>386 試してみたら、確かにメモ帳が開きましたが、
それってShellExecuteで開いてるの?
>>383 フックプロシージャの中からだとそういう制限は無かった気がする。
違ったらごめん。
>>387 ShellExecuteの中の人は、拡張子exeの関連付けに従ってプロセスを起動する。
何も特別なことはない。
>>387 どういうAPIを使ってるのかは、それが仕様化されてるのでなければ
処理系の実装依存だろうな。
直接ShellExecuteを呼びたいのなら
ActivePerl Win32 API ShellExecute
とかでググれ。
それでわからなければPerlの人に訊け。
今の状況だと、 真っ黒なDOSプロンプトが開いて、 そのDOS窓が残ったままで、 メモ帳も開く、という動作なのですが、 DOS窓が開かないで、 あるいは一瞬だけ開いて、 それでメモ帳が開く、というのを するのに、shellexcuteを使えば いいんでない?と思ったのですが、 違いますか?
コマンドプロンプト経由で起動する事情なんざ、Win32的には知ったこっちゃないな。 Perlが勝手にやってることなんだから、あっちで聞け。
やだね お前が勝手に聞いてろ
perlをWindowアプリとしてリコンパイルすれば解決する
perlネタはもういいよ。
perlがコンソールアプリだからだろ active perl scriptを使えばいい
396 :
383 :2008/08/17(日) 13:34:18
>>388 フックプロシャージャ作って中でCDM_GETFILEPATH使っても
MAX_PATH以下になるようになってるみたいです。
CDM_GETFOLDERPATHやCDM_GETFOLDERIDLISTだと
フォルダまでがMAX_PATHであれば選択ファイル名を追加で
その分超えることは出来るみたいですがOKボタン押させて貰えない。
さらに深いフォルダにはアクセスさせてもらえないし
他の大半のアプリも触れない領域じゃ独自ダイアログにするほどのことでもない気がするので諦めます。
あとD&Dもメッセージが飛んでこないので駄目みたいです。
なんか知らんがUnicodeに汁
400 :
381 :2008/08/17(日) 17:31:50
>>399 Wiiリモコンをパッドにしたいだけなのに。。。
>>400 ヒント
っKEYEVENTF_KEYUP
403 :
383 :2008/08/17(日) 18:08:46
>>397 長いファイル名は必然的にUnicode関数使うし
最近のプログラムなんでUnicodeビルドしてる。
シェル関数(SHGetPathFromIDListなど)がMAX_PATHを超えれないから シェルに依存しているコモンダイアログも必然的にMAX_PATHを超えられないのだろう てかMAX_PATHを超えてしまうほど深い階層にファイル置くなよ
ThickFrame(ウィンドウサイズを変更する枠)で、 「ユーザーがウィンドウサイズを変更している間は、WM_ERASEBKGNDメッセージを無効にする」 という処理を加えたいんですけれど、 処理の開始は、WM_NCLBUTTONDOWNメッセージを捕まえてそれで問題ありませんでした。 処理の終了(サイズ変更の終了)も、同様にWM_NCLBUTTONUPメッセージを捕まえれば良いのかと思ったんですが、 うまくいきませんでした。 この場合の、「ウィンドウサイズ変更が終了した」という情報を、 アプリケーションが取得するにはどうしたら良いでしょうか? 誰かご存知の人は教えてください。
WM_SIZEとかWM_WINDOWPOSCHANGEDとか?
>>402 KEYEVENTF_KEYUPを引数としてキーが上がったということも書いているのですが,
>>400 のやりたいことのように出来ません。。。
初歩的な事で申し訳ないのですが、 実行ファイルのアイコンが指定通りに変わらず困っています。 WINDCLASSEX構造体には以下のように記述しています。 wcex.hIcon=(HICON)LoadImage(hInst,"ファイル名",IMAGE_ICON, 0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE); です。 リソースを使わずicoファイルにパスを通す方法で実現したいのですが、 表示されません。 hIconもNULLではない様なので問題ないと思うのですが・・・。 因みに、タイトルバーに表示される方は上手く表示されています。 ですので、ファイル名の指定でパスがおかしいということはないと 思います。
WNDCLASS(EX)というのは、ウィンドウの設定をするだけ 実行ファイルのアイコンとかは何も変わらない
>>408 exe のリソースに埋め込まれたアイコンの中で
一番番号の若い物が exe のアイコンになります
>>409 そうだったんですか・・・。
前は普通にリソースで入れてたんで、気づきませんでしたが
そこに指定したらアイコンになるもんだと思ってました・・・。
>>410 409の方のを読んで色々と調べていたんですが、
やっぱり、リソースを埋め込むものなんですね。
>一番番号の若い物が exe のアイコンになります
知りませんでした・・勉強になります。
おかげさまで一応解決しました。
常駐型アプリを作ってます タスクバーに表示されず タスクトレイにアイコンを表示させるとこまできましたが、 タスクマネージャ−アプリケーションで見ると タスクの欄にしっかり表示されてしまいます 他のアプリを見るとここには表示されていません タスクマネージャ−アプリケーションに表示されないように 常駐アプリを作るにはどうすればいいですか
ウィンドウが出てるんだろ
ヴィザードで、自動で次のページに移行したいんですけれど、 PSHNOTIFY myLp={NULL,}; myLp.hdr.code = PSN_WIZNEXT; SendMessage(hDlg,WM_NOTIFY,NULL,(LPARAM)&myLp); ↑のコードじゃ駄目なんですかねぇ?? case WM_NOTIFY: LPPSHNOTIFY lppshN = (LPPSHNOTIFY)lp; switch (lppshN->hdr.code){ ... } ↑のコードで、「戻る」「次へ」等のメッセージは取得できるので、 同様のメッセージを送ってみたのですが・・・。 ウィザードで、自動で次のページに移行させる方法 (「次へ」ボタンを押した場合と同じ効果を出す方法) をご存知の方、ご教授下さい。
>>407 入力送信後にSleep(100);とかしたらどうかに?
PC再起動すると動く場合がある
PCを起動すると動く場合がある
/ ̄ ̄ ̄ ̄\ ( 人____) |./ ー◎-◎-) (6 (_ _) ) カタカタカタ | .∴ ノ 3 ノ ______ ゝ ノ .| | ̄ ̄\ \ / \__| | | ̄ ̄| / \___ | | |__| | \ |つ |__|__/ / /  ̄ ̄ | ̄ ̄ ̄ ̄| 〔 ̄ ̄〕 | | ̄
/ ̄ ̄ ̄ ̄\ ( 人____) |./ ー◎-◎-) (6 (_ _) ) カタカタカタ | .∴ ノ 3 ノ ______ ゝ ノ .| | ̄ ̄\ \ / \__| | | ̄ ̄| / \___ | | |__| | \ |つ |__|__/ / /  ̄ ̄ | ̄ ̄ ̄ ̄| 〔 ̄ ̄〕 | | ̄
425 :
デフォルトの名無しさん :2008/08/19(火) 23:53:51
別exeで動いているTimerを停止させるAPIはないでしょうか? またはタイマーIDかタイマー識別子を取得する方法があれば KillTimerできるのでしょうけど・・・
タイマIDはプロセスごとに独立してる
428 :
デフォルトの名無しさん :2008/08/20(水) 00:03:23
char* str = "aあbい"; みたいに1バイト文字とマルチバイト文字が入り交じった文字列を、 1文字ずつのcharの固まりに分解したいんですが、 IsDBCSLeadByte でcharを1つずつ調べていくしかないでしょうか?
>>425 別プロセスから、
タイマ停止させるためのメッセージ投げる。
それ受けたらタイマを止める。
SJISならググって文字コード表見ながら自作 あるいはWideCharToMultiByteして1文字ずつMultiByteToWieeChar
>>428 CharNextExA / CharPrevExA とか?
432 :
デフォルトの名無しさん :2008/08/20(水) 00:35:28
>>430 >>431 どうもありがとうございます。
ググってみたところ、どっちも使えそうです。
>>430 はWideCharToMultiByteとMultiByteToWieeChar 逆ですよね。
事務より簡単で誰でもできる仕事なのに時給は技術者! ITテスターで稼ぐための情報を交換するスレです。 ☆派遣先は大企業じゃないと駄目です。中小だとテスターもプログラムの仕様が わからないといけないとかテストプログラムを書けとか言われちゃいますよ。 大企業ならプログラムを触るだけのテスターでも大丈夫。 ☆派遣先ではテスターはプログラムを触るだけでいい、 そんな空気を作っていきましょう。仕様書読んでください、 とか言われたら「なんでテスターが仕様書読むんですか」って食い下がって。 プログラムの仕様書を読んだり、テストの仕様書を書いたりするのは大変ですよ。 ☆普通にプログラムを触ってテストしてると、何をテストしているのかわからない、 とか言い出す人、いるんですよ。プログラマとかってこういう人多いです。 そういう人は上司にあることないこと告げ口して追い出しちゃいましょ。 人事権のある人とは仲良くしておくことが大切。 ☆納品して何かあったら大変だからとプログラムの仕様書を読んだり、 テスト仕様書を書いちゃうテスターがいますけど、 こっちもやることになるからすごく迷惑。 テスト結果の責任は担当の正社員にありますよね。 納品後のクレームは最終チェックを怠った正社員が悪いんだから 派遣は関係ないです。
cp932->utf16->cp932なんて処理をすると元の文字に戻らなくてはまるかも
wave dash とか?他何があったっけ?
いいかげんシフトJISを捨てようぜ。
>>436 がまずやるべきは2ちゃんねるを捨てるところからだな
>435 すくなくても、WaveDashは戻る。ここがWin32API質問箱である以上は。
↑話を理解してない馬鹿
TextBoxでフォームが非アクティブになってもキーボードフォーカスを 常に持ち続けるにはどうすればいいでしょうか。
とあるVC++のプログラムを引き継いだのですが スレッドの作成にCreateThreadが使用されていました。 スレッドはひとつしか作成されないのですが そういう場合ならCreateThreadでもよいでしょうか? _beginthreadに修正したほうがよいでしょうか?
内容による。 それだけで他人が判断できると思っているのなら、ヘルプの読み込みが全く足りない。
ヘルプを読み込んでみたところ問題ないようです。 ありがとうございました。
CRTを一切使っていないなら(実際には使っても問題の無いCRTもあるが) CreateThreadでもいい。
CRTバリバリ使ってます
DLL版にリンクすれば問題ない
449 :
440 :2008/08/20(水) 13:56:17
すみません。言語別スレに行きます。
>>448 This parameter can only be set to "cookie:", "visited:", or NULL.
452 :
448 :2008/08/20(水) 22:59:26
>>450 ということは基本的に全数で探すしかないってことですか・・・。
それほど時間はかからないみたいなのでとりあえずこのままでいきます。
ありがとうございました。
C++でウインドウをクラスで実装してみてるのですが、コンストラクタ内にウインドウ生成のコードを書いてしまうのはアリでしょうか?教えてください。
サービスプログラムとしてタスクトレイに常駐するプログラムを 作成してるのですが、ユーザーがログインした段階で Windowを作成しないと、コントロールなどの表示が崩れてしまうようです。 ユーザーがログインているかどうかを判定する方法があれば教えてください。 Windows XPです。
>>454 もしかして一つのプログラムで全部やるつもりか?
HKLMのRunキーで起動したタスクトレイのプログラムがサービスと通信する、
というのが普通の作り方だと思うのだが。
>>455 WebやAPI本とかの断片的な知識しかないので
できればその普通のやり方が載っている情報源を知りたいのですが。
MSのセミナーとかですか?
今までWindowsを使ってきた経験からの普通
>>457 やっぱり知ったかでしたか。
関係ない話を始めた段階から読めてました。
460 :
457 :2008/08/21(木) 10:31:51
オレは通りすがりだよ。 ちなみに、サービスはNT4の頃から作ってる。
はいはい。もういいよ。 ちなみに自己解決しました。
サービスが直接ウィンドウ作るのが普通だとしたら、 わざわざ「デスクトップとの対話を許可する」がデフォルトでオフになっているわけがない。
デフォルトって。プログラムからオンにできるわけだが。
サービスそのものは誰もログオンしていなくても動作するもんだから ウィンドウそのものを自分で作るようにはできてない。 無理やり後付けで作るのは勝手だが、普通じゃない。
そもそもレジストリいじるだとか別プロセスにするだとか、 完全に知ったかの妄想なんだよ。
VNCとかはどうなってんの?
なんか知ったかという言葉を使いまくってる真性がいるなw
人格攻撃キター
お前ら前置きに反応しすぎ ユーザーがログインているかどうかを判定する方法があれば教えてください。
ターミナルサーバーとかで、複数同時にログインしてるのも考慮?
GetDesktopWindow()でデスクトップが取れたらでいいんじゃね?
ユーザーセッションの数が1以上、とかでいいのかなあ。 試さないとなんとも言えんな。
>>470 サービスでって前提なかったら、GetUserNameでイイジャンって言われちゃうぜ?w
試してないけど、NetUserEnumで列挙してNetUserGetInfo
USER_INFO_2の最後のログオン/ログオフの時間取得してとかかなぁ
サービス語るならせめてAdvancedWindowsと プログラミングMicrosoft Windows 2000位読め なぜWindowを持つサービスを作るべきでないかは読めば分かるから
知らないならレスしないでください
知ってるよw
じゃあレスしてください
誰もサービスについての質問なんかしてないのに
>>480 > ユーザーがログインているかどうかを判定する方法があれば教えてください。
これが質問内容だろ
「サービスについての質問」ではない
日本語が読めない奴は黙ってろ
サービス以外でユーザーがログインしているかどうかを知る必要はない。 だってログインしているから
クレデンシャルプロバイダやGinaモジュールでも取得したい場合はあるかも?
explorer.exeのプロセスが居たらログオン中でいいんじゃね?
顔真っ赤ですよ
>>482 そのプログラムをタスクスケジューラに登録する場合はどうかな?
>>490 タスクスケジューラは設定されたアカウントでログオンするよ。
>>484 ユーザーのログインシェルがexplorer.exe以外の場合がある、
とか聞いたことある気がするけど、そんなケース無視しても良い気がするし。
>>484 の方法でダメな場合って他に何かあったっけ。
explorer.exeが異常終了したとき
そもそもログインしているユーザの一覧なんて 権限さえあれば取得できないわけがないと思うんだけど。
なんか知らんが、たぶんOSごとに違うと思う
GetCharABCWidths()で取得されるA寸法は、 GetGlyphOutlineで取得されるGLYPHMETRICSのgmGlyphOrigin.xとは違うものなんでしょうか? 説明を読むと同じに見えるけど、違う値が返ってきて混乱してます。
>>497 アンダー・オーバーハングに対応した文字だと違ってくるんじゃないかな。
>>493 異常終了したらwinlogon.exeがexplorer.exeを再起動するぞ。
>>499 タスクマネージャで終了したら再起動しない
たまにその対策をしてない常駐アプリはタスクトレイから消えちゃうんだよな
俺が使ってる常駐アプリの中ではその対策をしてる方が少ないな
>>454 はユーザがログオンしてるかどうか判定したいと言ってるけど、
実際は通知領域の表示ができるかどうかの問題なわけよ。
だから、シェルとしてのexplorer.exeで判定するのが正しい。
あと、起動処理が終わったかどうか調べる必要があるのかもしれない。
WaitForInputIdle?
GetDesktopWindowだとどうなるんだろう。 ログオフ中はきちんとNULLが返るのかな? 適当な値が返ってきたらやだな。
>>503 それならShell_NotifyIconが成功するまで適当な間隔で何度も呼び出せばいいだろ
そもそもXP以降はそうしろとMSのサイトにも載ってるし、ログオンとか関係ない話になる
>>495 俺もなんか知らないけどWMIで取得できそうな気がする。
>>500 それはWindowsが異常終了として扱わない。
explorer.exeが異常終了した場合はwinlogon.exe(MSGINA.DLL)がWlxStartApplicationで検出する。
そこでSHELLとしてのexplorer.exeが再度起動される。
空行ウザイ
↑だからうぜーってば
しばらく放置しないと、感染症になる雰囲気だけど、 ミソギを兼ねて、つまんない質問を。 Debug バージョンで HeapFree() で落ちるのは、スタックなどの管理領域を 壊したからですか。一時メモリで取った領域でないところに書き込んでも、 運よく、そういう領域でないなら落ちませんか。それとも必ず落ちますか。
落ちますん
HeapAlloc/HeapFreeの管理するメモリ領域は 普通はDebugランタイムのチェック対象ではないが DebugランタイムがAPIフックするような開発環境ならその限りではない
運がよければ落ちないかもね しかし運に頼ってプログラミングするのはやめてもらいたい
Windows2000からは、ヒープにチェック機構が追加されたので、 バッファオーバーラン等は、ページ単位より細かくチェックが入るようになり、 HeapFree呼び出し時に例外(ブレークポイント)を発生させるようになった。
516 :
511 :2008/08/25(月) 20:30:59
早速、有難うございました。
>>514 Xp & VC++6.0 では落ちてなかったのに、Vista & VC++2008EE でだめになったからネ。
ネットワーク接続時にタスクトレイに出すことの出来る ローカルエリア接続等で出ている送受信の総量などは APIなどで所得出来るものですか?もし出来る場合どのようなAPIで可能 でしょうか?
休止やスリープから戻ってくるとアプリは起動しているけどパスワード入力画面という状態になってしまいます。 パスワード入力画面の最中は処理を行いたくないのですが、ログイン(?)したかどうかを調べることはできないでしょうか?
WTSナントカ
WM_WTSSESSION_CHANGE
521 :
518 :2008/08/26(火) 00:35:22
ありがとうございます。これで解決できそうです。
ユーザ名やパスワードなどの文字列を暗号化してINIファイルに書き込んだり、 それを取り出して複合したりといった処理を行いたいのですが、 なにかよいAPIやサンプルはありませんでしょうか。
CryptoAPI
APIじゃないかも知れないんですが、 MCEリモコン制御に対応させるためのsdkやらドキュメントの 手がかりってどの辺にありますでしょうか? うまい検索単語が思いつかずに、開発とは関係ないページしか 引っかかりません
527 :
デフォルトの名無しさん :2008/08/26(火) 15:21:40
指定PCにpingして生存確認したいんですが、pingするAPIを教えてくださいよ
ずばりpingするようなAPIはないからググってサンプル見つけるんだ。
529 :
デフォルトの名無しさん :2008/08/26(火) 15:52:08
ああ、いやいや、どっかやりかた載ってるサイトを教えてくださいよ
CreateProcess+ping.exe
531 :
デフォルトの名無しさん :2008/08/26(火) 15:59:05
ああ、ping.exeとかそんなんじゃなくておねがいしますよ
>>527 DWORD PingToComputer(LPCTSTR HostAddress);
API関係ないがな ICMP プロトコル あたりでググればサンプルあるだろう
IcmpSendEcho
IcmpSendEchoってまだ使えるのか・・・?
PFSDK windows server 2003 の IP Helper には IcmpSendEcho 居て XP も可能と書いてある 最新のは知らない
537 :
デフォルトの名無しさん :2008/08/26(火) 16:11:05
なんだよお前らなんでそんなに優しいんだよ?
いつものお前ららしくないぜ?
>>532-536 とりあえずさんくす。
何かその辺を調べてみますわ
winsock2
WM_CREATEの所に { LPCTSTR lpszTxt = TEXT("猫でもわかるWindowsプログラミング"); HDC hdc; hdc = GetDC(hWnd); TextOut(hdc, 10, 10, lpszTxt, lstrlen(lpszTxt)); ReleaseDC(hWnd, hdc); } を張り付けても文字列が表示されないのはなぜでしょうか。
すぐに消えてしまうからです
WM_CREATEは作成中だったような
描画はWM_PAINTで
DLLインジェクションを使ってiexplore.exeに割り込んで
IAT書き換えでWSARecvとrecvをフックしてみたんだけど、
どうやらフック先の関数が呼ばれていないみたいなんだ。
MessageBox表示だけのプログラムに割り込んで
MessageBoxをフックするのは出来たんでインジェ
クション部分に問題はないと思うんだけど…。
なんかアドバイスもらえませんか?
参考にしたサイト
ttp://ruffnex.oc.to/kenji/text/api_hook/
recvだのなんだのしてるのはMSHTMLとか下請けモジュールだろ?
つまり実際にrecvなりなんなりしてるモジュールに対して Hookかけないとダメってことですか。
GetProcAddressで直接呼んでるのかもしれない。 GetProcAddressもフックしてみては。
ヒント: ブラウザの実装コードは何処にある?
正解:地球
ありがとうございます。
>>552 GetProcAddressもフックして試してみます。
>>553 実装コード自体はiexplore.exeはもっていないんですね。
もう少し調べてみようと思います。
フックならジェイソン尾妻に聞くといいよ
557 :
544 :2008/08/27(水) 14:29:36
<<545,<<546,<<547 ありがとうございます。 ウィンドウを生成した後にこのコードを載せたら そのタイミングでは表示できるのに…… すぐに消えるのはなぜでしょうか。 できればもう少し詳しくお願いします。
>>557 WM_CREATE の時点ではまだウィンドウが非表示だから
何描いても無駄。
WM_CREATEの先頭で無理やりShowWindowしたら出たw
普通は WM_PAINT だろ
>>559 そして他のウィンドウを重ねると文字が消えると
>>561 それが、Vistaだとなかなか消えないんだよねえ。
リサイズして描画範囲より小さくしてやるとか、最小ボタン押して戻すとかしないと消せなかった・・・
そりゃ、DWI動いてるからな。
今すぐAeroGlassをオフにして試せ
565 :
544 :2008/08/27(水) 18:15:33
答えてくれた方々ありがとうございます。 このエラーで教えられながらいろいろ調べて こんなに勉強になるとは思いませんでした。 もう一つ気になるエラーがあるのですが、 WM_PAINTの所で hdc = BeginPaint(hWnd, &ps); TextOut(hdc, 20, 20, (LPCTSTR)szStr, (int)strlen(szStr)); EndPaint(hWnd, &ps); hdc = BeginPaint(hWnd, &ps); TextOut(hdc, 90, 90, (LPCTSTR)szStr, (int)strlen(szStr)); EndPaint(hWnd, &ps); とやると初めのTextしか表示されません。これはなぜなのでしょう。
>>565 なんでBeginPaint と EndPaint は1回でおk
EndPaintで無効領域が全部リセットされてるから。 デバイスコンテキストは無効領域の部分しか更新しない。
>>565 BeginPaintとEndPaintは最初と最後に置くだけ。
一回のペアで無効領域(書き換えの必要な範囲)がなくなるから
2回目呼んでも書き換え範囲外になって何もかかない。
invalidateRectで無効にすれば良い訳ですね?
ggrks
DWM、、、ね。ミスったわ。
>>569 そして、またWM_PAINTが飛んできて無限ループするのですね。わかります。
こういう通過儀礼って必要だと思います。 自分で考える力を養うためにしばらくそっとしてあげて!
一方ロシアは
WPFを使った
つまり
\ /_ / ヽ / } レ,' / ̄ ̄ ̄ ̄\ |`l`ヽ /ヽ/ <´`ヽ u ∨ u i レ' / └l> ̄ !i´-) |\ `、 ヽ), />/ / 地 ほ こ !´ヽ、 ヽ ( _ U !、 ヽ。ヽ/,レ,。7´/-┬―┬―┬./ 獄 ん れ _|_/;:;:;7ヽ-ヽ、 '') ""'''`` ‐'"='-'" / ! ! / だ. と か | |;:;:;:{ U u ̄|| u u ,..、_ -> /`i ! ! \ :. う ら | |;:;:;:;i\ iヽ、 i {++-`7, /| i ! ! <_ の が __i ヽ;:;:;ヽ `、 i ヽ、  ̄ ̄/ =、_i_ ! ! / ヽ ヽ;:;:;:\ `ヽ、i /,ゝ_/| i  ̄ヽヽ ! ! ,, -'\ ヽ、\;:;:;:;:`ー、`ー'´ ̄/;:;ノ ノ ヽ| / ,、-''´ \/ ̄ ̄ ̄ ̄  ̄ ̄ ̄ Y´/;:;:;\
SetConsoleTextAttribute関数でRGBを任意指定をしたいんですけど、これってできないんですか?
頑張れば可能じゃないの? 例えばの話だが、 赤にする→文字を書く→緑にする→同じ位置に文字を書く を目にも止まらぬ速さで繰り返せば理論上は黄色に見えるだろ。 ただポケモンショックでぶっ倒れても俺は知らん。
自分のstartupinfoを書き換えるにはどうすればいい?
自分自身の書き換えではないけど… 差し替えた STARTUPINFO で 自アプリを CreateProcess して、自分自身は死ぬ とか?
やだ死にたくない
586 :
デフォルトの名無しさん :2008/08/29(金) 17:58:38
しにたくないよう
マジレスするとGetStartupInfoWはRTL_USER_PROCESS_PARAMETERSの内容を写してるだけ RTL_USER_PROCESS_PARAMETERS* p = (RTL_USER_PROCESS_PARAMETERS*)0x20000; でアドレスが得られるから後は煮るなり焼くなり好きにしろ
そんなの気にしなくていいよ
何という糞プログラムw
STARTUPINFOを書き換えるなんてのがそもそも糞プログラムなんだから 方法がOS依存しようがそんな事どうでもいいだろ
個人的には、GetCommandLine()の書き換えも同じくらい糞だと思うが、 argvの書き換えが認められているから、こっちは許容されている感じがする……。
リストボックスの文字列の高さを決めたいんだけど、 TEXTMETRICのtmHeightじゃ高すぎて(上下の文字列と空間開きすぎ) LOGFONTのlfHeightじゃ低すぎるんだけど(英語OSだとgとかpとかの下が切れた) どうやったらいいのかな?
WNDCLASSとWNDCLASSEXの違いってなんですか?
拡張版か否か
>>581 そんなことでポケモンショックになるならDLPプロジェクタが発売禁止になってるて。
>>594 TEXTMETRIC.tmHeightが開きすぎるように感じるのは、
むしろ日本語フォントが詰めて描画される傾向にあるから。
メイリオの話なら、それはフォント自体の仕様でそれが正常。
LOGFONT.lfHeightが低すぎるのは、
高さを決めたときのフォントと違うフォントで描画している。
とエスパーレスしてみる。
CreateWindowで作ったウインドウの背景色を後から変更するにはどうしたら良い?
>>600 CreateWindowで作ったウインドウの背景色を後から変更したら良い
603 :
600 :2008/08/30(土) 00:27:55
ある拡張子のファイルを開くプログラムに自作のソフトを設定して複数のファイルを同時に開いた時 コマンドで複数の引数を渡されるのではなく、開いた数だけプログラムが起動してしまうんだけど これを何とか一つのプログラムで開けるようにできないですか?
まあ単色塗りつぶしにPatBltとか使うのは無能なんだが。
608 :
600 :2008/08/30(土) 00:36:53
素直にFillRect使っとけ、って感じはするね。 ExtTextOut使えとは流石に言わないけど。
>>599 日本語OSだとMS UI Gothicで
外語OSだとMS Shell Dlgとかいうフォントがきてる
日本語OSだとLogFont.lfHeightはちょうどいい感じ
外語OSのときに狭い。tmHeightは広い。
lfHeightt+2か3くらいで出せるとよさげ。
tmExternalLeadingとかいうのが2できてるけど、
日本語だろうと外語だろうと関係なくきてるから根拠がわからん。
tmInternalは常に0だし(´・ω・‘)
情報が良くわかってなくてスマンコ
>>610 昔はExtTextOut使った方が速かったんだけどね
リッチエディットについて質問させて下さい。 リッチエディットにアイコンまたはビットマップをテキストと混在させて 表示することはできるのでしょうか? また、そのアイコンやビットマップをクリックしたことを検出することは できるのでしょうか。 もし可能でしたら、参考になるサイトや資料へのポインタ等をお教えいただければ ありがたいです。
615 :
604 :2008/08/30(土) 12:11:09
一応できたので報告。 mutexで二重起動を防止しつつ既に起動しているなら FindWindowでそのウィンドウを見つけてCOPYDATAメッセージでコマンド引数を渡し 読み込み、後起動のウィンドウを閉じる。 となりました。ありがとうございました。
// ウィンドウの作成 if(isFullScreen) { // フルスクリーン int sw; int sh; // 画面全体の幅と高さを取得 sw = GetSystemMetrics(SM_CXSCREEN); sh = GetSystemMetrics(SM_CYSCREEN); 画面全体の高さを幅を取得とありますが 今使っているディスプレイのサイズを取得するってことですか?
プライマリモニタ
>>616 シングルモニタの場合には解像度が得られる
マルチモニタ環境の時には思ってるものと違うものが返ってくるかもしれない
ありがとうございます
パフォーマンスカウンタから自分自身のCPU使用率を得たいのですが、 自分自身を表すインデックスを取得するのにうまい方法は無いのでしょうか。 列挙するしか無いんですかね。
あー、自分自身ってのはプロセスのことです。説明不足があったらすみません。
自分自身のプロセスのCPU使用率を取得したい、ということです。
>>622 すみません、ぐぐったのですが、具体的な方法が分かりませんでした、、、
もっともっとぐぐるんだ
>>620 >
ttp://www.codeguru.com/cpp/controls/richedit/article.php/c5383/ ありがとうございました。
同じ疑問を持った方のために要約しておきます。
リッチエディット(というよりもRTF)にテキストとビットマップを混在させるためには
1.MSDNの、"HOWTO: Insert a Bitmap Into an RTF Document Using the RichEdit Control"参照。
2.OLEを利用する。
3.IOleObjectを作成するために、ファイルからだと、OleCreateFromFile()が使える。
4.URLの先では、OleCreateStaticFromData()が用いられている。
もう一つの疑問であった、画像のクリックを判定できるかという問題ですが、
Oleなら当然ダブルクリックで再編集等の処理がかけるはずなので、可能ではないかと思われます。
初歩的な質問ですみませんが、教えてください。 CreateCompatibleDCで取得したデバイスコンテキストを、アプリケーションが動いている間ずっと生かしておきたいのですが、 やはり終了時にはDeleteDCで開放しなくてはならないのでしょうか? 自作関数の中でstaticで宣言しているので、DeleteDCを呼ぶタイミングを作るのがすこし手間だなと感じているのです。
>>626 APIとは無関係に、コンストラクタでDCを作成してデストラクタでDeleteDCするクラスAを作って
それをmain()の頭で作るなりstaticで作るなりすればいいんじゃないのか?
終了時に勝手に開放される
>>627-628 レスありがとうございます。
せっかくcppで書いているので、デストラクタを作ることにします。
>>627 DCの作成に失敗したらどうするんだよ
例外でも投げるのか?
>>630 アプリケーションの作成に必ず必要みたいだからそれでもいいけど
気になるなら、作成してから登録すればいいんじゃないの?
int main(...) {
DCの作成
成功していたら、デストラクタでDCを破棄するオブジェクトをスタック上に作って登録。
}
>>632 >>630 が暗に言っているのは、コンストラクタ中で作成に失敗した結果例外を
投げるとデストラクタが呼び出されなくなることじゃないのか?
それを回避したいなら
>>631 ってことだろ。
ReadConsoleで実際に読み込んだ文字数が多くなっちゃうんだけどなぜ?
636 :
621 :2008/08/31(日) 03:17:31
自前でプロセスを列挙してインデックスを求めて、パフォーマンスカウンタからCPU使用率を得ようと思ったのですが、それすらうまくいきませんでしたorz どうも新しく同名のプロセスが起動したり終了したりするとインデックスが変わってしまうようです。 やっぱり確実な方法はWMIなのでしょうか、、、しかしなかなか情報が出てこない・・・orz
638 :
621 :2008/08/31(日) 03:43:03
>>637 システム全体の使用率ではなく、自分自身のプロセスの使用率を求めたいです、、、
>>634 DCの作成時に例外はでないんだから、その頁に書かれているリークの回避と
631は同じことだろ。明示的なキャッチで破棄するか、unwindにまかせるかの
違いしかないと思うが。
最後まで必要なオブジェクトの寿命が管理できて、例外が送出されても
自然終了してもどちらでも削除忘れがなくて、try/catchの
コストまで場合によってはかからない。より良い気がするんだが。
そもそもコンストラクタから例外を出してもいいか悪いか、という話じゃないだろ。
〜だったら、という話がどうしてそんなところに行き着くんだ?
アンカーが 630への付け間違いなら、仰るとおり。
>>638 GetProcessTimes で時間当たりのCPU時間消費量で求まる。
普通はこの方法だよ。
641 :
デフォルトの名無しさん :2008/08/31(日) 13:13:45
一時ファイルを一時バッファとして使用したいのですが、 CreateFile(m_szTempName, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_RANDOM_ACCESS|FILE_FLAG_DELETE_ON_CLOSE, NULL); でファイルを作成して、 SetFilePointer(m_hFile, 0, NULL, FILE_END); WriteFile(m_hFile, lpBuffer, dwNumberOfBytesToWrite, &dwWriteLen, NULL); FlushFileBuffers(m_hFile); SetEndOfFile(m_hFile); と書き込んで、この位置より前(ldOffset < EOF)を SetFilePointer(m_hFile, (DWORD)(ldOffset & 0xffffffff), (LPLONG)&ldOffset, FILE_BEGIN); ReadFile(m_hFile, lpBuffer, dwNumberOfBytesToRead, &dwReadLen, NULL); で読み込むと、戻り値はすべて成功しますが、ReadFileでdwReadLenが0になり読めません。 なにがダメでしょうか。
642 :
621 :2008/08/31(日) 13:45:09
>>640 分かりました、ちょいと調べたら出来そうな感じです。
ありがとうございました。
>>641 SetFilePointer
つーかエラー値調べろ
644 :
デフォルトの名無しさん :2008/08/31(日) 14:32:49
>>643 SetFilePointerはWriteの前(追加しかしないので終端)と、readの前(開始位置)でしてます。
エラーは出てないですが、FileReadで1バイトも読めません。成功して0バイト(たぶんEOF)になります。
OSは、Vistaですが、Program Filesの下でもないです。
>>641 > SetFilePointer(m_hFile, (DWORD)(ldOffset & 0xffffffff), (LPLONG)&ldOffset, FILE_BEGIN);
ldOffsetは64bit整数か?
リトルエンディアンだと (LPLONG)&ldOffset は上位DWORDを指してる事にはならないぞ。
646 :
641 :2008/08/31(日) 14:47:37
>>645 その通りでした。
戻りが下位ワードしか帰ってないので気づきませんでした。
解決!
SetFilePointerに拘るより、素直にExを使っておく方が良いかもしれんね。 2000以降で既に対応しているし。
>>611 MS Shell Dlgの実体はたしかMS Sans Self。
レジストリに対応付けが書いてある。
MS Shell Dlgは俺も謎だった なんかのエイリアスだとは思ってそのまま使ってたわ
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes 9xだとWindows NT→Windowsなのかな?
この中にJavaScriptのpromptみたいに簡単に文字入力できる仕組み作ってる人居ないですか? そのーソース下され!
JavaScriptにpromptはないけど
ウィンドウオブジェクトにprompt()メソッドがあったような つっても入力ダイアログ表示して戻り値で文字列返すだけだったと思うが この程度だとソースも糞も無い
GetOpenFileName で代用でもしとけ
いいなそれw
MoveFile()やMoveFileEx()は 移動先もファイル名まで指定しなければいけないようですけど、 移動先フォルダを渡すだけで済むAPI(名前を変えずに移動)は無いのでしょうか?
658 :
デフォルトの名無しさん :2008/09/01(月) 19:43:11
がんばれよ
SHFileOperation かな
CreateProcessでコンソールアプリ(perlです)を起動して そのコンソールの内容をWin32の起動元のアプリで受け取ることは 出来ますか?
標準入出力のリダイレクト程度なら
Win32APIで無くて良いならpopenの方が手っ取り早い
popenというのを知りませんでした〜 なんとなく出来そうです有難うございます
664 :
660 :2008/09/02(火) 03:24:22
よく読んだら_popenはWindowsで使うなって書いてあった><;
いや、それ標準出力持たないGUIアプリとかの話だから。 Perlでコンソールアプリなら問題ないよ。
popenの中を調べたらどうなっとる?
pop en って何?
SetEvent関係をわかりやすく解説してるサイトありませんか? IQ80でもわかるところがいいです。
>>668 残念だが、IQ85ないとSetEventは理解できないんだわ。
>>669 やっぱりそうですか・・・どこを見ても理解不能なのでorz
頭悪すぎだろ…
672 :
デフォルトの名無しさん :2008/09/02(火) 10:31:48
CreateEventとWaitForSingleObjectならシリアルポート関連で 使ったことあるけど、SetEventは無いや。
>>669 「マルチスレッドプログラミング」 とか 「スレッド間」 「同期」 「通信」 あたりでググればそのうち巡りつく
ExplorerやIEやOfficeが固まるたびに思うんだが 阿呆はマルチスレッドやプロセス間通信を使うべきではない
スレッドを使わないがために、何かの待ち等で画面が固まってしまうようなソフト(の作者)もアレだが
>>675 いや、そういうのはスレッド使ってもロクでもないことになる可能性が
高いと思うが?
マルチスレッドの怖さは、外部にロックアップの原因となるイベント現を
持たない場合でもデザインが下手だとタイミング次第で固まる可能性が
あるってことさ。つまり、ちょっくら難しい。無論、悪ではない。
677 :
デフォルトの名無しさん :2008/09/02(火) 14:03:46
だがしかし、
スガシカオ、
679 :
デフォルトの名無しさん :2008/09/02(火) 17:57:29
だまれくず
クリティカルセクション
痛恨の一撃
会心の一撃は敵からしてみれば痛恨の一撃なのですか? それとも会心の一撃は会心の一撃なのでしょうか?
683 :
デフォルトの名無しさん :2008/09/02(火) 18:43:50
毒針で急所を突いた
痛恨の一撃を放つモンスターを仲間にしても痛恨の一撃のままじゃなかったっけ
でも効果音はいっしょだよね
>>676 昔、マルチスレッドをまともにテストするなら、
4CPUの環境を使えと書いてあるのを読んだことがあるな。
デュアルコア程度なら大丈夫だったコードも、コアが増え続けると厳しくなってくる予感。
アウトオブオーダーの罠とかも、あっさり踏んだりするようになるんだろうなあ。
687 :
デフォルトの名無しさん :2008/09/02(火) 19:45:26
システムフックに関して質問です。 とある被所有型ウィンドウのプロセスが処理を終えるとウィンドウを最前面に出してくるのを無効化したいのですが、 WH_CBTのHCBT_ACTIVATEでウィンドウハンドル一致時にreturn 1返したり、 WH_CALLWNDPROCで同様にWM_WINDOWPOSCHANGING、WM_ACTIVATEの時にreturn 0にしても非アクティブ状態で最前面に出てきます。 Spy+で見る限りSetWindowPosでSWP_NOACTIVATEフラグでZオーダーのみ変更してるっぽいのですが、 どうしても指定プロセスと親に指定されたウィンドウが最前面に出させない方法が見つかりません。 最前面に出る時のSpy+のログは以下のような感じです。 WM_WINDOWPOSCHANGING>.WM_GETTEXT>WM_ERASEBKGND>WM_WINDOWPOSCHANGED >WM_ACTIVATE(S)>.WM_SETFOCUS(S)>..WM_KILLFOCUS>.WM_SETFOCUS(R)>WM_WINDOWPOSCHANGING >WM_PAINT(S)>.WM_ERASEBKGND>WM_PAINT(R) (R):return, (S):send, 括弧無しは両方です。WM_TIMER等は省きました。 分かりづらい文章ですいません、、情報不足でしたら指摘していただけると幸いです。 フックのコードそのものは、殆ど猫でも〜の流用で動作自体は確認出来てます。
WM_WINDOWPOSCHANGINGのWINDOWPOS構造体を書き換えてみるとか・・
>>687 XPの自動更新で再起動するかっていうダイアログを黙らせる方法みたいなもの?
[後で再起動する]を選んでも、しばらくすると、作業中に奴が出てきて妨害するから。
奴のせいで二回予期せぬ再起動をしたことがあるTT
690 :
687 :2008/09/02(火) 20:22:06
レスありがとうございます。
一応それも思いついてやってみました。
if(nCode == HC_ACTION){
if(wp == NULL){
pcwp = (CWPSTRUCT *)lp;
if(pcwp->message == WM_WINDOWPOSCHANGING){
lpwp = (WINDOWPOS *)lp;
lpwp->flags = SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER;
}
}
}
return CallNextHookEx(hHook, nCode, wp, lp);
こんな感じにしましたが変化無しでした。(ウィンドウハンドル一致if文は省いて抜粋)
>>689 具体的に書くとTWAINウィンドウがスキャン後に最前面に出てくるって感じですね。
別のスキャナの時は勝手に出てくる事が無かったのでドライバ側が終了時に呼び出してると読んでるんですが。。
確かWH_CALLWNDPROCは変更不可じゃなかったか?
692 :
687 :2008/09/02(火) 23:41:20
>>691 確かそのようにどこかに記述があったので、
WM_WINDOWPOSCHANGINGやWM_ACTIVATEとハンドル一致の時だけreturn 0にしてみたのですが、ダメでした。
ちなみに、メッセージ条件にWM_PAINTを入れたら全ウィンドウ再描画がダメになったので止めました。orz
ウィンドウハンドルは一応メッセージボックス等で一致確認してあるんですが。。
モードレスのダイアログプロシージャって返り値BOOLなの?INT_PTRなんですか?他に処理するものがないときは DefDialogProc使うべきなんですか?
DefDlgProcのことだと思うが、呼ばんでいい デフォルトの処理をさせたいときは0を返す
> ダイアログプロシージャ 昔(VC6の頃)はBOOL 最近(XP以降ぐらい?)はINT_PTR つか、こういうの変えるなよなぁ 何のために大文字だらけのtypedefしてるんだか
>>687 ちゃんと見てないんだけど、まさかフックして構造体を書き換えた後、
フックしたエントリーを呼び出してないよね?
ウィンドウを最前面に出すプロセスが、もう一度構造体を書き換えてるなんて
オチは・・・
半透明ウィンドウへのマウス入力を直下のウィンドウへ透過させることはできないでしょうか?
WS_EX_TRANSPARENT でいけそうですね。すいませんでした。
GoogleChromeがAeroGlassをきちんと使った設計になっててびっくり ソース公開されたらAPIの使い方の参考にしてみるか
>>699 元MSの人にとってみれば得意分野だろうしなぁ。わくわく。
うんこしたいんですけどどうしたらいいですか?
703 :
デフォルトの名無しさん :2008/09/03(水) 15:02:27
Rich Edit Control のカーソルが現れてブリンクしているかどうかを知る API ってありますか。 EM_STREAMIN で Unicode 文書を読み込ませて、カーソルが出る前に画面を クリックすると、「応答なし」になるんで、WAIT ポインタでも出して回避 したい。(時計も止まるんでそれを見ると 12 秒位かかっている。) Vista SP1, 2.1GHz CPU, 2.0GB RAM です。文書は 450 KB 程度です。
マルチディスプレイでプライマリモニタを変更する方法を探しています 最初はChangeDisplaySettingsExでプライマリモニタにしたいモニタにCDS_SET_PRIMARYを指定すればいいと思ったのですが効果がありませんでした 次にプライマリモニタにしたいモニタ以外をデタッチした後、デタッチしたモニタをアタッチしなおしてみました この場合、当然ですがデタッチした時点では目的のモニタがプライマリになっていたのですが、アタッチし直すと何故かデタッチする前にプライマリだったモニタがプライマリに戻ってしまいました どこで道を誤ったのか、解決方法をご教示ください
>>704 プライマリモニタを変更しようと思ったこと
>>705 できれば、その解決方法もお願いします…
コンパネ開いて設定したらいいんじゃね プログラムで
708 :
687 :2008/09/03(水) 18:52:31
>>696 レス遅れました。大体以下のような感じです。最初から載せれば良かったですね。
上に有るとおり、構造体は修正出来ないので0を返してますが、それでも勝手に最前面に出てきますね。
プロセス自体が何をやってるのかが掴めたらもうちょっと何とかなるんですが。
HC_CBTでアクティブ化無効は出来たのだけど、Zオーダーのみ変更のメッセージらしく意味無しでした。。orz
ちなみにタイマーで実行ボタンをSendMessageで押すツールを使ってるとバグなのか、たまにぴたりと最前面に出てこなくなります。
if (nCode < 0 || nCode == HC_NOREMOVE) {
return CallNextHookEx(hHook, nCode, wp, lp);
}
if(nCode == HC_ACTION){
if(wp == NULL){
pcwp = (CWPSTRUCT *)lp;
if(pcwp->message == WM_WINDOWPOSCHANGING || pcwp->message == WM_ACTIVATE || pcwp->message == WM_SETFOCUS){
hw = FindWindow("__Canon_ScanGear_Main__", "ScanGear");
if(pcwp->hwnd == hw){
return 0;
}
}
}
}
return CallNextHookEx(hHook, nCode, wp, lp);
709 :
704 :2008/09/03(水) 21:24:11
多分自己解決しました スレ汚し申し訳ありませんでした
アンノウンポインタをピーウンコと呼んでいいのは小学校低学年まで
XpSP3、VS2005、VB CreateFileA、CreateFileMappingA、MapViewOfFileを使用してプロセス間での共有メモリの使用はできたのですが、 複数ユーザーでアプリケーションを実行し同じ共有メモリを使おうとするとCreateFileMappingAでエラー(ERROR_ACCESS_DENIED)が発生します。 どのようにパラメーターを指定すれば可能でしょうか?そもそもユーザー間で使用することは可能でしょうか??
XpSP3、VS2005、VB CreateFileA、CreateFileMappingA、MapViewOfFileを使用してプロセス間での共有メモリの使用はできたのですが、 複数ユーザーでアプリケーションを実行し同じ共有メモリを使おうとするとCreateFileMappingAでエラー(ERROR_ACCESS_DENIED)が発生します。 どのようにパラメーターを指定すれば可能でしょうか?そもそもユーザー間で使用することは可能でしょうか??
VistaでIPを変えるにはどうすればいいか教えてください
ケーブルを抜いてつなぎなおす。
Windows板行け
API板に行けって言われたのにwww プログラム中にでIPアドレスって変えれるんだよね?
まあ、OSもプログラムだからね。
プロバイダでもハックすればいいんじゃね
IPConfigとかnetshとか呼び出せばいいんじゃね?
IPHelperFunctionsで再取得
そもそも静的にIPを変えるのか、DHCPから再取得したいのか、 プライベートIPの話なのか、プロバイダから割り当てられたグローバルを変えたいのか、 やりたいことが全く説明されていない。
グローバルIPです 同じサイトに違うIPで入りなおしたいんです
自演したいだけか
IPの取得方法なんて色々あるからね どの方法で取得されているのかによって変え方も変わって来る そもそもそんな事すらわかってない奴にプログラムを書くのはとても無理
まあ今までの材料だと無理だと思えるね プロバイダもうひとつ契約するとか外にサーバ借りて串置くとかしないと
そもそも今日び直で繋いでる奴はそうそういないだろ もう夏休みは終わったというのに 大学はまだだが
windows.hしかインクルードしてない状態だったらCreateThreadは安全っていえるの?
Cの標準関数でリークが起きるって話のことか?
作成するのがDLLならリークしない EXEの場合ならCRTにダイナミックリンクする設定でビルドすればリークしない
2分おきに値を10づつ増加せさるループの場合どのAPI関数を使えばいいでしょうか?
リーク云々より、初期化が行われない方が問題なんじゃあるまいか。
具体的にどのCRT関数でリークするとか情報あったっけ? strtokなんかは怪しいが、strcpyでリークするとも思えないし。
スレッドセーフな関数と スレッド生成/消滅時の作業とはまた別ではなかろうかと。 関数をスレッドセーフにする為の準備作業が全てではないだろうと予測するけど _beginthread の中身見てみないとワカランよなぁ…
>>737 ランタイムスタートアップ の ソース (crt0.c とかね)は付いてるのは見たけど
_beginthread の本体はソース付いてたっけ?
入口→ 最終的には CreateThread(Ex) →出口 となっているだろうけど
挟まれている部分で何やってるか次第だな
739 :
736 :2008/09/04(木) 16:54:11
>>737 ごめん VC6 には付いてた
CRT/thread.c と CRT/threadex.c
俺のスキルでは、追っかけて理解できるかどうかは怪しい
>>738 CreateThreadExなんてあったか?
741 :
736 :2008/09/04(木) 16:56:47
勢いで Ex つけちまった CreateThreadEx なんて無い
>>735 ptd (per-thread data)がリークする
どのCRT関数が該当するかはソースを _getptd でgrepすれば分かる
リークするのが嫌ならCRTをダイナミックリンクにすれば済むので、
わざわざCreateThreadを避ける理由も無い
>>742 わざわざ_beginthreadを避ける理由も無い
↑話を理解してない馬鹿
>>742 _beginthread は
CreateThread に渡すコールバック関数で _getptd 〜 _freeptd で挟んでいる
CreateThread 単体呼び出し + CRTのダイナミックリンクだと
プロセス終了時に _calloc_crt で得たメモリを一気に返却するけど
スレッド作って終わってが頻発するようなやつだと あぶなくね?
まあ、BoostのどこかのMLで、VCはスタティックリンクだと、結局リークする場合があるなんていわれてたしな。 今どきのVCのCRTはDLLにしておくべきだろ。 VCのCRTのDLLは、DirectXのランタイムと違って、自由に同梱していいので、扱いは楽だし。
>>745 スレッド終了時じゃないのか?
そのためのDLLだろ。
>>746 最近のCRTはmanifestの関係でただ同梱するだけでは無理じゃなかったか?
そのせいか知らんがFirefox3は自前ビルドのCRTを用意してるみたいだが
>>747 大変に申し訳ない
DLL_THREAD_DETACH で grep したら _freeptd あったわ
>>743 話は逸れるけど、_beginthreadは勝手にCloseHandleしてくれるお節介付きだから、
_beginthreadexのほうがお勧めだよ。ラップすればCreateThreadと引数・戻り値同じにできるし。
話を逸らすな
話を戻して会心の一撃
>>731 マルチメディアタイマ(timeSetEvent)、Waitable-timer、Timer-queueとかも。
他に何もするつもりがないなら、Sleep(120000)でループするのもあり。
受け狙いなら、Winsockのselect関数でfds全部NULLにしてタイムアウト待ち。
WaitFor〜系関数のタイムアウト使うってのもあるな。
WIN32API.TXTの最新版ってどこで手に入りますか?
なくなりました。
ゲームパッドの入力とか含めてすべての仮想キーを収納できる配列の要素数はいくつですか?
0x00 - 0xFF
>>746 OSがFlsAllocに対応してればそれでも結局は解放されるかな。
現実的には、XPが長生きするのでFlsAllocは当てにできないんだけど。
>>758 挿しているJoyパッド n個全て独立して取り扱うとすると…
DirectInput のデバイス列挙で可変長個数 量的に突破する可能性があるかもないかも
assert.h complex.h ctype.h errno.h fenv.h float.h inttypes.h iso646.h limits.h locale.h math.h setjmp.h signal.h stdarg.h stdbool.h stddef.h stdint.h stdio.h stdlib.h string.h tgmath.h time.h wchar.h wctype.h このへんを使わなければCreateThreadでもいいってことでおk?
それだけじゃVC以外のCRTって事しか判らないので、何ともいえない。 つうか、complex.hとか何時の時代だよ。
完全に追跡しきってないけど ptd の中身(mtdll.h) に FPエラー や シグナル C++例外ハンドラ を持っているんだよね これ未初期化の状態で 例外発生したり、シグナル立ったりしたら どーなるんだろ?
> 未初期化の状態で _getptdで同時に初期化も行ってるから問題ない。CRTのソース読め てかダイナミックリンクすればCreateThreadとか_beginthreadexとか気にしなくて済むと何度も出てるだろうに ランタイムの再配布権利が無いExpressEdition使ってる奴しかいないのか?
>>764 いや 生成された新規スレッド側で CRT系未呼び出しの間のスキマの話
dllcrt0.c に DLL_THREAD_ATTACH ハンドリングしてなくて、_getptd 居ないのが気になるの
ダイナミックリンクすれば CreateThread とか_beginthreadex とか気にしなくて済む ということで その詳細は気になるなら各自確認汁
>>765 CRT関数が呼ばれてなければ未初期化とか関係ないだろうが
馬鹿ですか?
なんでこんな話題でのびてんの? スレッド作るときは、_beginthreadex 使え、以上。 って話じゃないの? もの凄くコアの多いCPUで、もの凄く小さいスレッドを、 もの凄くたくさん作る場合で、オーバーヘッドが問題になるような もの凄く特殊な場合を除いて、CreateThread を使わなければ ならないようなシチュエーションはなさそうな気がするんだが。
スレッドって何個まで作れるの?
255
>>769-771 2032個まで作れたぞ。
DWORD i, d;
for(i=0; CreateThread(0,0,(LPTHREAD_START_ROUTINE)Sleep,(void*)INFINITE,0,&d); i++);
printf("%d\n", i);
スレッドの数ってアドレス空間の問題なんじゃね? ひとつのスレッドにつき、MSVCのリンカーは、デフォルトで1MBのスタックサイズにするから。 32bitだと2GBだからな。 64bitコードならもっと作れるんじゃね?
>>768 あと、C/C++でないので、CRTを使わない場合もCreateThreadにすると思う。
ヤフーなどの検索サイトを開くと検索窓にフォーカスがありますが それを外すにはどうすればいいですか? Tabキー送信では隣の検索ボタンに移動してしまいますし…
それって解決してるじゃん
>>777 です。
>>778 いやサイトによるでしょ?必ずしも検索サイト全てがTabキー押せば隣のボタンに移動って
限らない。
ゲームってWinMainでメッセージループを処理して ゲームのロジックとか描画は別にスレッドを走らせて処理するんですか?
ググれば分かるがメッセージループで手の空いた時に描画している
ぐぐってみた PeekMessageでメッセージがあればそれの処理、メッセージがなければ1フレーム進めるという無限ループということ? でもこれって移動用の方向キーを押しっぱなしにしてキャラを歩かせようとしたら メッセージにWM_KEYDOWNが入りっぱなしになってゲームの処理がなかなか進まなくなるのでは?
∩___∩ | | ノ\ ヽ | / ●゛ ● | | | ∪ ( _●_) ミ j 彡、 |∪| | J / ∩ノ ⊃ ヽ ( \ / _ノ | | .\ “ /__| | \ /___ /
タイマー投げてPeek…いや、なんでもない
何度も駄目だといわれ続けてきた方法を公然と言い放つ
>>782 は
サンプルをコンパイルする程度しかやったことがないんだろうな
そんなに駄目出しされていたとは初耳だなあ。
CPU使用率が100%になるとかそういう事が言いたいんだろ Sleep(1);でも入れとけばいい
メッセージが来るかタイマーなどがシグナル状態になるまで待つAPIがあるだろ。
だから?
つうか普通ウェイトかけるだろ 全力で描画してどうするよ
いや・・Sleepはないだろ・・・
Sleepをいれたら通常メッセージの応答まで鈍くなるぞ
データファイルの読み込みや展開に時間がかかる場合に、 メッセージループで処理すると、その間ウインドウメッセージに反応出来ずに、 全く応答しない駄目アプリになる。 小規模なサンプルプログラムをいじっている程度なら気にならないが、 まともなものを作ろうとすると、そんな手法は使い物にならない。
読み込みだけは非同期で何とかなるが。
結局どうすればいいのさ 別スレッドでゲームループを回すの?
スレッド以外に選択肢はない
スレッド以外の選択肢が思い浮かばない奴は馬鹿
↑馬鹿
↑大馬鹿
一通り状況は分かったはずだから、あとは使う人間が判断すればいい。 小規模なものならメッセージループでやってもいいし、 負荷がかかるものならスレッドをわければいい。
メッセージをスレッドで処理してゲームをwinmainで進めるのと メッセージをwinmainで処理してゲームをスレッドで進めるのはどっちが素敵?
>>805 マジレスすると、メッセージキューはスレッドごとに独立しているから、
ウインドウを作成したスレッド以外では処理できない。
警察ならまだしも私立探偵が人の部屋に勝手に入って捜査していいもんなの?
あれれー誤爆しちゃったぞー
警察だろうがなんだろうが、現行犯でなければ令状無しに捜査することは出来ない。
異なるスレッドからひとつのグローバルな変数にアクセスするときに 書き込みと書き込み、書き込みと読み込みだとやばいってのはわかるんだけど 読み込みと読み込みだったら別に安全な気がするんだけど、どうなんでしょう?やっぱりだめですか?
InterlockeExchange
InterlockedExchangeだった
CreateDialogIndirectParamで作ったダイアログにSetWindowTextでタイトルを設定しようとしたら WM_SETTEXTメッセージのLPARAMが空になっていました。なぜなのでしょうか?
HeapCreateの最大サイズを0にしておけばHeapAllocで初期サイズを超えるメモリをとっても問題ないってことですか? 細かい管理を考えなければHeapCleate(0, 0, 0)でいいってことでしょうか
> HeapCleate(0, 0, 0)でいい はい
Cleate(笑)
っつーか質問じゃないんだけど ちょっと玄人気取りで_endthreadexでスレッド終了してると、デストラクタ呼ばれないのな。 頭では分かっていたはずなのに、なんだこの体たらく。俺どんだけ素人なんだ・・
ウインドウにスキン機能をつけたいと考えています。 アルファ付きPNGをアルファブレンドしながらウインドウと合成して表示するにはどうしたらよいでしょうか? Win2000以降のレイヤードウインドウがそれかと思いましたが、 カラーキーを利用して一部のみをクリッピング?する、及び、 全体を透明度を指定して半透明化するサンプルしか見つかりませんでした。
>>821 UpdateLayeredWindow
>>822 thanx!!
UpdateLayeredWindowで32bit bitmapのDCを渡してやればいけそうです
タブコントロールについて質問です。TVIF_TEXTでマスクを初期化して追加したタブを TabCtrl_GetItemマクロで取得した時何故かTCITEM構造体のmaskメンバがとんでもなくでかい数に なっています。表示等はされているのですが、どんな現象が起こっていると考えられるのでしょうか?
ListCtrlにツールチップ作ってサブアイテム判別し表示させようと思って作ったのはいいんだけど debugビルドだと何も問題ないのにreleaseビルドになると作ったツールチップが上手く機能しない Spy++で見てみるとreleaseだとツールチップのメッセージが全く無関係で親子関係のないツールチップから飛んできてるし debugだと普通に自分で作ったツールチップから飛んできてるのに・・・ なんなんだこれは('A`)
別々の場所にある2台のPCそれぞれについて 同じ処理を行なったときの時刻を求めたいと考えています。 GPSを用いて1msくらいの精度でPC間の時刻同期はできると思うんですけど GetLocalTimeを用いてそれぞれのPCで特定の処理を行なった瞬間の時刻を求めても 10msくらいの精度でしか現在時刻を取得することができません。 timeGetTimeとかだと1ms精度のタイマとなるようですが 時刻を求めるような関数ではありません。 Windows上で、ms精度で現在時刻を求めるような方法ってありませんか?
NTPサーバを利用する 但し、精度はネットワーク品質に依存
829 :
827 :2008/09/07(日) 18:29:27
>>828 ありがとうございます。
時計合わせのほうはGPSを用いて1msくらいの精度は出せると思うんですけど
プログラム上での時刻取得の精度を上げたいと考えています。
>>829 デバッグビルドで動作するがリリースビルドでこける現象の99%はワークの初期化忘れ。
>>829 ちょっとググってみたが、Windowsは15.625msか10.0144msおきの
クロック割込みで時刻を進めるという話ばかりだぞ。無理じゃないか?
>>828 SNTPじゃないNTPならネットワークの遅延も考慮して計算するはず。
確か、デバッグビルドだと確保したスタックやメモリは0xccで埋められるんだったな てか確保したメモリを自動的に0x00で埋めてくれるコンパイラオプションが欲しい
WM_MOUSEWHEELからホイールを上下どちらに動かしているかを取ろうとしています short delta = GET_WHEEL_DELTA_WPARAM(wp); if(delta > 0) printf("UP!\n"); else printf("DOWN!\n"); これでやるとホイールを上下どちらに動かしても常にDOWNしか取れません 正の値が上で負の値が下と思ってるんですが違うんでしょうか?
>>829 GPSから時刻が得られるなら、GPSから得ればいいじゃないか。
QueryPerformanceCounterとGPSのPPSあたりでPLLを構成するとか。 10MHz Outの出るGPSでをカウンタに突っ込むとか。
言えない・・・ ASSERT()にAPI突っ込んでいただなんて言えない・・・
assertに副作用のある式を書くなとあれほど
ASSERT()使ったことないんだけぢ
ASSERTを使ったことが無い奴は大したプログラムを書いたことが無い奴
どんなときに使うの?
アサートしたいとき
>>830 デバッグビルドで、0x00が格納されているならともかく、
0xccで埋められてるのに動作するってのは変じゃない?
ターミナルサービスとかで接続すると別のセッションができますよね この「自分とは別のセッション」に任意のプロセスを生成することって出来ますか? (CreateProcessにセッションIDを指定するようなイメージ) よい方法があれば教えてもらえるとうれしいです
デバッグビルドだと、大きめにメモリが確保されるんで、 少々はみ出して書き込みしても大丈夫だけど。 リリースビルドだと、モロ、他の変数の値を破壊してしまうから、 だったかな。
普通デバッグビルドだとオーバーラン検知のために シグネチャを埋め込んであるもんだと思ったが DEADBEEFとか
>>848 cc をうっかり「実行」するとブレークするから cc で埋めるんだよ
あぁスタックの話ね
自作プログラムからCFカード上(固定、リムーバブルどちらでも)のボリュームの削除をするプログラムを作成しております。 DeviceIoControlを使用して、 FSCTL_LOCK_VOLUME IOCTL_DISK_SET_DRIVE_LAYOUT IOCTL_DISK_VERIFY FSCTL_UNLOCK_VOLUME の順番で実行させてみましたがIOCTL_DISK_VERIFYが失敗し上手く作成できませんでした。 CreateFileでのデバイスハンドルは正常に取得出来ています。 また削除の方は、着手出来ていませんが FSCTL_DISMOUNT_VOLUMEを使用すれば良いのでしょうか? サンプルソースの情報などありましたらよろしくお願いいたします。
>>845 CreateProcessAsUserとかCreateProcessWithLogonWとかでどぉ?
>>852 どうもです
まだ試してないのですが
サービス経由で当該セッションのwinlogon.exeのトークンを取得してCreateProcessAsUser
で出来るみたいです
>>853 わが国のITはユーザに使用法を十分説明する時間がありません。
このため、初心者がベテランに疑問についてたずねる光景を目にすることがあります。
しかし本来は事故(情報漏えいなど)が発生した場合の責任は、
接続業者、サーバ運営者、システムを開発したエンジニアにあります。
メーカあるいは購入店にたずねるべきです。
利用者の仕事は自治(掲示板の秩序を守ること)です。助言を行ってはなりません。
素人が専門技術に言及するのは「親切」ではありません。「無責任」です。
海外のプロフェッショナルは、「私の仕事ではない」と答えるはずです。
スレタイの趣旨を思いっきり無視しているなw
>>838-840 リリースビルドでも式を評価だけはするVERIFYってなかったっけ
あれはMFCか?
まあ無ければ自分で書きゃいいんだが
自分で書くなんて御免だね
じゃあオレが代わりに書いてやる
いや俺が
じゃ書いて
お前がかけよ
うん
やっぱり俺が
どうぞどうぞ
#define VERIFY(a) (a)
HDC hForeScrDC, hBackScrDC; HBITMAP hBackScrBMP, hFormerBMP; ダブルバッファリングでアニメーションさせたいんですが 流れは↓見たいな感じで間違いないでしょうか? hForeScrDC = GetDC(hWnd); hBackScrDC = CreateCompatibleDC(hForeScrDC); hBackScrBMP = CreateCompatibleBitmap(hBackScrBMP, width, height); hFomerBMP = (HBITMAP)SelectObject(hBackScrDC, hBackScrBMP); while(アニメーション中){ // hBackScrDCに描画 BitBlt(hForeScrDC, x, y, width, height, hBackScrDC , 0, 0, SRCCOPY); } SelectObject(hBackScrDC, hFormerBMP); DeleteObject(hBackScrBMP); DeleteDC(hBackScrDC); ReleaseDC(hWnd, hForeScrDC);
すいません間違えました ダブルバッファリングでアニメーションさせたいんですが 流れは↓見たいな感じで間違いないでしょうか? HDC hForeScrDC, hBackScrDC; HBITMAP hBackScrBMP, hFormerBMP; hForeScrDC = GetDC(hWnd); hBackScrDC = CreateCompatibleDC(hForeScrDC); hBackScrBMP = CreateCompatibleBitmap(hBackScrBMP, width, height); hFomerBMP = (HBITMAP)SelectObject(hBackScrDC, hBackScrBMP); while(アニメーション中){ // hBackScrDCに描画 BitBlt(hForeScrDC, x, y, width, height, hBackScrDC , 0, 0, SRCCOPY); } SelectObject(hBackScrDC, hFormerBMP); DeleteObject(hBackScrBMP); DeleteDC(hBackScrDC); ReleaseDC(hWnd, hForeScrDC);
869 :
デフォルトの名無しさん :2008/09/08(月) 15:36:15
複数のエディットコントロールを配置して エンターが押されたら次のコントロールに移動するようにしたいのですが 日本語変換して決定するときのエンターも取得されてしまいます。 今はフック関数の中でエンターが押されたかどうかで調べていますが 変換決定のエンターと移動する際に押すエンターを区別する方法はありますか? .net2003 C++
WM_IMECOMPOSITION見たら?
871 :
デフォルトの名無しさん :2008/09/08(月) 16:21:29
調べてみてとても参考になりました。 ありがとうございました。
もちろん俺が答えました
各ユーザーのAppDataにデータを保存するアプリを作っています。 これのアンインストーラを自前で用意するんですが、AppData内のデータを削除するのに 例えばユーザーA・B・Cの3人がこれを使っていたとして、Aがアンインストールを実行すると、 A\AppDataはCSIDLでAppDataを拾えば消せますけど、B\AppDataやC\AppDataは簡単には 消せない(簡単にパスが拾えない)と思います。 これは自前で各ユーザーを列挙し、そのフォルダを消すように実装するしかないでしょうか? アンインストーラは管理者権限を必要とさせますので削除権限は問題ないと考えられます。 WindowsInstallerのAPIなどにはこういう処理に対応するものがあるんでしょうか。
すみません。うんこしてきます。
基本的にアンインストールでデータは消さないんじゃないの? 再インストールのたびに初期化されたらたまらんw
>>868 CreateCompatibleBitmapの引数がおかしい。
乱数発生用のWIN32APIとかって無いの?
CryptGenRandom
>>122 ベンダーと組んで
専用マウス強制販売
それ以外はシャットアウト
__beginthreadとSEHの事で質問です 現在、__beginthreadを用いてスレッドを生成するユーティリティクラスを作り使用しています これによって生成された任意のスレッド内でメモリアクセス違反などの例外が発生した場合に SEHにて捕捉したいのですがどのようにすればいいのでしょうか?
__beginthread なんて見当たらないが、自作関数か? _beginthread や _beginthreadex なら見つかったが。
関数名間違いはいいとして 普通にスレッド関数内で何とかすればいいだろ
プログラムがメモリリークしてるかどうかチェックするにはどうすればいい?
とりあえずうんこしてくるからそれまでにレスしとけよ
どうやってメモリを確保してるかによる
うんこしてきた
APIで?
BoundsChecker とか Purify 使うとか
APIでうんこしないよばかー
ウィンドウが完全に破壊されるのは、WM_DESTROYを経てウィンドウプロシージャを抜けた直後と考えてよいのですか? もしそうならば、PostQuitMessageでポストしたものが、メッセージループのGetMessageに届いたときには、 すでにウィンドウは存在しないということですか。
まだその後にWM_NCDESTROYが来るけど、 まぁそのときにはウィンドウはすでに存在しないかもね
じゃあスレッドが破棄されるタイミングは?
プロセス終了時じゃね
すいません。今まで4:3の液晶ディスプレイを使って自作ゲームをフルスクリーンの640x480の解像度で表示してきたのですが、 この度ワイド液晶を導入したところ、ゲームの画面が横に伸びた感じで表示されてしまいます。 液晶ディスプレイがどちらでも4:3のときのように表示できるようにするにはどうしたらいいですか。
モニタかビデオカードの設定。
ビデオカードかディスプレイ側のストレッチを切るか、 ディスプレイが対応する適切な対応解像度にプログラム側が対応する
>>611 WM_GETFONTメッセージでHFONT取得したあとに
SelectObjectしなきゃいけなかったらしいです
GetDCとSendDlgMessageで同じHWND使ってるのに
関連付けを自分でやんなきゃダメってちょっと納得いかない(´・ω・`)
で、これすることで正確なTEXTMETRIC構造体がとれるようになった
いじょ
くだらない消防が紛れ込んでるなぁ…
くだらない厨房がご立腹ですよおまえら
す、すいません
くだらない厨房が紛れ込んでるなぁ…
くだらない消防がご立腹ですよおまえら
す、すいません
とりあえずうんこしてくるからそれまでにレスしとけよ
どうやってメモリを確保してるかによる
うんこしてきた
while (1) { Unko(); }
void Unko(){ exit(EXIT_SUCCESS); }
いまうんこしながられすしてるとこ
作っているプログラムがクラッシュする度にユーザーのフォルダの中にある ReportArchive ってフォルダにクラッシュ情報がどんどん溜まるんですが、 あれはいつか排泄されるんもんでしょうか。下剤とかあるなら教えて下さい。
今下痢してるから
汚いスレだなぁ
他のプログラムを起動する方法を教えてください。
エクスプローラでファイルをダブルクリックする
ハ,,ハ _ ( ゚ω゚ ) お断りします ◎ー) / \ | | (⌒) (⌒二 ) ブッ!ブバァァ!!ビチビチィィ!! ~~~ /⌒ヽ( ̄、 ヽ プシャァァ!!ブチャブチャァァ!!! / Lヽ \ノ ゲリゲリー!!ブリュッブリュブリュゥゥ!!! ゙ー―――(__)
shellexecuteex
ダブルバッファリングでちらつきを抑えるのには成功したんですけど たまに残像というか微妙なちらつきが現れます ゲームボーイのようにロゴマークを画面外から中央まで落とすといった白黒のアニメーションなんですが・・・ これは画面のリフレッシュレートの問題なのでしょうか?
背景書き直しを抑制してない、とか? まあVsync跨いでんじゃないかとは思うが。
vsyncでぐぐったらそれっぽかったです 本当にありがとうございました
ぐぐってみたかんじ垂直同期を待つWIN32APIはないっぽいすね DirectXかOpenGLあたりならできるみたいですけど・・・ 勉強することが増える一方で作りたいものがなかなか進まないよ
そりゃそうさ 一人で何でもかんでも作れたらゲーム会社なんか必要ない
一人で何でもかんでも作れない奴が職業プログラマになるんだろ
>>921 GDIならInvalidateRect()+WM_PAINTで描画してれば、ある程度ティアリングは抑えられるんじゃないか。
他のイベントでGetDC()して描画してるとティアリングが起きやすい気がする
WM_PAINTの時点で問題外
>>925 知らないならレスしないでくださいうざいです
borland Compilerでソフト作った場合、ランタイムは いるんですか?
WPFは面白そうなんだけど、ゲーム向きなんでしょうか?
それをいうならGDIもゲーム向きじゃないんじゃ
>>925 マジレスすると、GDIなら問題外でも何でもない。
WM_PAINTの更新領域を、ダブルバッファの完成してる方から画面に
BitBltするのは、当たり前の技法だ。
WM_PAINTじゃなくてWM_DRAWだろとかいうんなら、それはまた別の話。
WM_PAINTでダブルバッファの裏側を描画するとか言うなら、確かに論外。
>>921 windows3.1/95時代に、Inside windowsあたりで、GDIの描画はちゃんと
VSYNC見てるとかいう話が出てたような気がする。だから無いのかも。
>>924 GDIは、スレッドセーフに出来ていないので、複数スレッドで同期を取らずに
描画したりすると、画面が変になるかも。あとGDIの実行キャッシュをフラッシュ
せず、CreateDIBSectionあたりで取得したサーフェスに直接書き込んでも変になる。
WM_DRAW(笑) ホントに何も知らないんだな
>>932 知らないならレスしないでくださいうざいです
WM_DRAWって何だ? もしかしてMFCのOnDraw()はWM_DRAWというメッセージのハンドラだと思ってるのか?
>>934 知らないならレスしないでくださいうざいです
>>935 知らないならレスしないでくださいうざいです
937 :
931 :2008/09/11(木) 17:25:33
WM_DRAWすら知らないお子様がプログラミングする時代なのね
モードレスダイアログを使うときはIsDialogMessageでチェックする必要があるみたいだけど 複数のモードレスダイアログがある場合はその全てについてチェックすべきなん?
>>929 そんなことはない。
コントロールの柔軟性が高さは一度体験してみるべき。
日本語でおk
>>941 そのようなaものが全くありません。
コントロールの柔軟性は一度高さになるべきです。
>>938 アクティブになっているダイアログだけチェックすればおk
>>943 サンクス
ところで自作ウィンドウクラスのイベントハンドラを呼び出す時SetProp/GetPropを使って
ポインタを取り出すのと、std::mapで関連付けた物を使うのとではどっちの方がいいんだろうか
使い分けってことだろうけど・・・
聞きたいことがありまして質問させてください。 開発環境は、XP SP2、VS2005 Standard Edition VC++ 2005、Win32API + SDKでプログラミングしおります。 時計アプリを作っています。 クイック起動にある「デスクトップの表示」をクリックして 全ウィンドウがデスクトップから最小化されますが、時計アプリだけ ウィンドウを表示したままにしたいのです。 時計アプリを最前面にすると「デスクトップの表示」をクリックしても 時計アプリのウィンドウが表示されたままになりますが、時計アプリの ウィンドウの最前面を解除するとどうしても隠れます。 何かウィンドウメッセージが来ればいいのですが、それらしきメッセージが 来ません。 アドバイスをお願いいたします。
最小化された時反応するイベントに書いたら?
最前面に固定しとけばいいんじゃね
>>944 グローバル変数でmap使うと、
登録とかで書き込み処理するし排他制御がいる分、面倒そうな感じがする。
Win32APIをがちがちに使ったほうが美しく感じるぜ! まーためしに土日で両方書いてみたら楽しいんじゃない?
>>948 map使わずにInterlockedPushEntrySList辺りで書けば排他制御無くせそうだな
>>949 さっきどちらも試してみました。
>>948 ,950
とりあえず
mapはマルチスレッドで使う時は排他制御がいる。要素数が増えてくるとメッセージ毎のポインタ検索の
負荷が大きくなる。→シングルスレッド・少数起動向け
32APIはマルチスレッドでも使える。ハンドルからポインタを得るのは要素数に対してはO(1)で済む。
→本格的(?)にする場合はこっち?
という感じでしょうか?当面はmapでやってみます。ありがとうございました。
MyWindow* table[0x4000]; #define HWND2INDEX(hWnd) (((INT_PTR)(hWnd) >> 2) & 0x3fff) こんな感じでいいだろ。 table[HWND2INDEX(hWnd)]でアクセスできるし排他制御も不要でO(1)だ。 最大の欠点は、Win9x系でしか正常動作しない事ぐらいか。
それは結構な欠陥だと思うぞw
逆ならまだしもな
サンク最強説
OSどころかCPUに依存しまくるサンクのどこが最強なんだか
> ハンドルからポインタを得るのは要素数に対してはO(1)で済む これは大嘘だろ
要素をそのウィンドウに関連付けられたプロパティとすればO(N)とかでも 要素をウィンドウハンドルの数と考えたらO(1)じゃないの?他のウィンドウは関係ないんだから
じゃあ要素をそのウィンドウに関連付けられたプロパティとすればO(N)とかでも 要素をウィンドウハンドルの数と考えたらO(1)じゃないの?他のウィンドウは関係ないんだからってこと?
SetProp/GetPropがO(1)とかアホすぐるだろwww
ハッシュで持てよ
文字列をGUIDに変換したいと思っているのですが、そのようなapiが見つかりません。 GUIDFromStringのような名前のものが欲しいのですが、 StringFromGUID2というGUIDから文字列を取得する関数しかありません。 ご教授願います。
mapをstatic libに入れて、exeとdllでlibを利用する場合、 mapを唯一にするにはどうしたらいいの
>>964 「map」が何のことか分からないが
exe dll 共に static library をリンクするなら実体は複数になる
exe と dll で
データを共有したい?
コードを共有したい?
>>966 ひとつのプロセス内のexeとdllでデータを共有したいです。
また、exeが当該static libを使っていない場合もdllを使いたいです。
共有データセグメント
↑話を理解してない馬鹿
973 :
967 :2008/09/13(土) 12:55:47
>>968 これだとプロセス間で共有されるような気が
グローバルじゃない方のAtomは一応プロセス単位で一意だな。 とはいえ、素直に共有DLL使ってシングルトンした方が良いような気もするけど。
PIDで名前付き共有メモリブロックでも使ったらいいんでね?
> ひとつのプロセス内のexeとdllでデータを共有したい ってどういうこと? 同一プロセスならアドレス空間が同じだから共有も何も無いんじゃね?
ウィンドウハンドルだかDCだかなんかをスレッドのパラメーターで渡して操作しようとしたらバグったんだけどなんで?
>>977 何を渡したのかも正確に書けない馬鹿がプログラムを作ったせい
結構前のことで忘れちゃったんだよ
もう忘れるんだ そして俺の胸の中に飛び込んでこい
ウィンドウはスレッドに関連づくよ DCもたぶんそう
984 :
967 :2008/09/13(土) 22:26:22
>>976 共有したいデータはstatic libraryの中にあり、
exeとdllはこのlibraryを使っています。
別のexeはこのlibraryを使うけどdllは使わない、
さらに別のexeはこのlibraryを使わないけどdllは使う。
上記のいずれでもデータを一意にする方法を教えてください。
>別のexeはこのlibraryを使うけどdllは使わない、 >さらに別のexeはこのlibraryを使わないけどdllは使う。 使っていないのならデータが多重にならないんだから、その時点で一意だろ。 頭は大丈夫か?
共有するのか一意にするのか、どっちなんだよ
windowsアプリってちょっと作業進めると、新しい知識が入ってきて前にやってた作業部分を書き直したくなってぜんぜん進まないね
どうせ同じような場面に遭遇するんだからわざわざ書き直さない
別にWindowsに限ったことではない。
アホか
994 :
821 :2008/09/14(日) 07:55:07
>>821 です
UpdateLayeredWindowを使ってみているのですが、
UpdateLayeredWindowに渡すDCのビットマップは
もしかして、表示されるときに加算っぽくされますか?
各ピクセルにアルファを掛けないと上手く表示されません。
(実際には、Color * Alpha / 255)
これってビットマップを合成させるとか、アニメーションさせたいととか思ったら、
オフスクリーン用のBitmapをもう1枚用意して
最後にUpdateLayeredWindowに渡す用に変換するという感じで使うのかな・・・
ネットのサンプルとか見ても、各ピクセルにアルファを掛けないと上手く表示されない件に関して、
記述がなくハマったんですが・・・
996 :
821 :2008/09/14(日) 08:23:36
そんなところにドキュメントが・・・(´д`) りgたとう
997 :
デフォルトの名無しさん :2008/09/14(日) 17:41:58
WinapiのCHMヘルプ作ってください。 文書はオンラインMSDNを表示します。 最近のヘルプは重いです。
>>998 CPUとHDDを新しい物に取り替えたら軽くなるよ
999 :
デフォルトの名無しさん :2008/09/14(日) 18:11:08
999 !!!!!!
しょこたん!
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。