Win32API 質問箱 Build5
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGやさしいお兄さんたちが答えてくれるかも。
でも、最低限Web検索ぐらいはしてね。
前スレ
Win32API 質問箱
http://pc.2ch.net/tech/kako/991/991576947.html
Win32API【2】
http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Win32API 質問箱 Build3
http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Win32API 質問箱 Build4
http://pc3.2ch.net/test/read.cgi/tech/1023361418/
参考
MSDN Online
http://www.microsoft.com/japan/msdn/default.asp
猫でもわかるプログラミング
ttp://www.kumei.ne.jp/c_lang/index.html
0136デフォルトの名無しさん
NGNG起動元のユーザーはTCB特権を持っていますか?
0137デフォルトの名無しさん
NGNGTCB特権って何ですか?
調べてみたんですけど、それらしいものがでません。。。
0138デフォルトの名無しさん
NGNGこれじゃないの? 手元の MSDN Library だと LogonUser() API の解説に
書いてあったんだが。
> LogonUser 関数を呼び出すプロセスは、SE_TCB_NAME 特権を備えて
> いなければなりません。
ついでにサポート技術情報から。
> 注意: ユーザー マネージャ [原則] - [ユーザーの権利] で、高度なユーザー権利の
> [オペレーティングシステムの一部として機能] をユーザーに許可することで
> 上記の権限をユーザーに持たせられます。
0139デフォルトの名無しさん
NGNGSE_TCB_NAMEを付加するくらいだったら最初からAdministrators
与えとけよというくらい危険
0140138
NGNG話が逸れるんだが、Win32 の特権について詳解している書籍とかって知ってる?
MSDN Library にはパラパラとは書いてあるんだが、全体像を把握しかねてて。
0141デフォルトの名無しさん
NGNG0142デフォルトの名無しさん
NGNGSleep関数の精度っていうのはどの程度なのでしょうか?
どうも1ミリ秒単位で正確ではないようなのですが。
やはり正確さを取るには
for(dwTime=timeGetTime()+10; timeGetTime()<dwTime; Sleep(0));
のようにするか、for文の中でQueryPerformanceCounterを回して
時間の差を判定するしかないのでしょうか。
でも、こうするとやたら重くなるのでできればSleepのような軽い関数が
あればいいなぁ・・・
0143デフォルトの名無しさん
NGNG0144ssssss
NGNG今回の場合に使えるかどうか分からないけど、
WM_NCHITTESTを処理すれば、
特定の辺だけサイズ変更できる(マウスでドラッグできる)
ってことができるんじゃないかと思います。
0145デフォルトの名無しさん
NGNG正確な時間を何の為に欲しいの?
Win32アプリだと QueryPerformanceCounterを使っても スレッドが割り込まれると駄目だしさ
0146YahooBB237224045.bbtec.net
NGNGする段取を初心者用に
書いたアーティクルはないもんでしょうか.
「猫でもわかる」その他検索しましたが見つけられません.
スージプラグインとか必須ですか?
0147142
NGNG違います。
timeGetTime()は1ミリ秒ですが
Sleepは最低5ミリ秒くらいの精度になります。
>>145
ある一定の間隔でポートから出力したいんです。
±0.1ミリ秒程度の精度が欲しいのですが、やはり無理なのでしょうか。
0148デフォルトの名無しさん
NGNGRDTSC
0149デフォルトの名無しさん
NGNGhttp://www.google.co.jp/search?q=StretchDIBits+jpeg
>>147
殆ど使われてない マザーのbeep機能を使ったらどう?
0151デフォルトの名無しさん
NGNG要求サイズを変更すればいいんでしょうか?
その場合元のメモリの内容は保障されてるのでしょうか?
よろしくお願いします。
0152デフォルトの名無しさん
NGNG01531
NGNG0154デフォルトの名無しさん
NGNGJPEGは特許がやばいからやめとけ。
悪いことは言わないから、おとなしくmalloc/freeを使っとけ。
0156DELL
NGNGVBの場合ならshape1.move x,y でできましたが、
APIはRectangle(hdc,x,y,x+10,y+10);
をどこのプロシージャで使えばいいか分かりません。
しかも上記のアルゴリズムでは移動するということではなく、
次々と新規に描かれていくように思えます。
だれか図形を移動させる方法教えてください。
0157デフォルトの名無しさん
NGNGVirtualProtectってCなの?
C++ならnew/deleteだと思われ
0158デフォルトの名無しさん
NGNGきみはこのスレで何を言ってるのかね
0159デフォルトの名無しさん
NGNGもしそうだと case WM_PAINT: でこれをつかったら
∞ループにはまりますよね.
0160デフォルトの名無しさん
NGNGhttp://www.matsusaka-u.ac.jp/~okumura/compression/jpegpat.html
0161151
NGNGいぢわるしないで教えてください。
malloc/free に当たる処理を作りたいんです。
>>157
realloc に当たる処理が無いですけどね < new/free
普通は std::vector 使うから。
というか VirtualAlloc が成功しないです…。
何が悪いんだろう…
とりあえず某 VB のサイトにあった引数を参考にして試してるのですが…。
VirtualAlloc (NULL, 4096, MEM_COMMIT, PAGE_READWRITE | PAGE_NOCACHE );
環境は Windows2k です。
アドバイスお願いします。
0162デフォルトの名無しさん
NGNGもしかしたら、NT系/非NT系によりますか?
0163デフォルトの名無しさん
NGNG最後のパラメータを false にすると発生しないと思う
> もしそうだと case WM_PAINT: でこれをつかったら
普通、そんなに頻繁にウィンドウリージョンを設定しないだろ
0164デフォルトの名無しさん
NGNG普通そんなこと誰もしない=誰も知らないバグが残ってる可能性がある
やめとけ。
0165デフォルトの名無しさん
NGNGノーキャッシュをはずしたらどうよ?
0166デフォルトの名無しさん
NGNGPAGE_NOCACHE
が怪しい。こんなものはまず使わん。
0167166
NGNG0169151
NGNGケコーンおめでとうございます。
ちょっと簡略化の為に嘘書いてました。
要求サイズをページサイズ分に切り上げる処理を書き間違ってて
中途半端なサイズを要求していた事が原因でした。
で、やっぱり VirtualProtect でサイズを変えることは出来ないんでしょうか?
0170コギャルとHな出会い
NGNG朝までから騒ぎ!!
小中高生
コギャル〜熟女まで
メル友
i/j/PC/対応
女性の子もたくさん来てね
小中高生大歓迎です
全国デ−トスポット情報も有ります。
全国エステ&ネイル情報あります。
激安携帯情報あります。
どうやっても無理。おとなしくmalloc/free使っとけって。
0172デフォルトの名無しさん
NGNG自分ででっかいプールをつくったら?
0173151
NGNGやっぱり Heap系じゃないと増分は無理なんですか?
そういう書き方だと教えてくれてるのか煽りなのか区別がつかないもので…。
>>172
でっかいプールを作るのに VirtualAlloc を使いたいんですよねー
0174デフォルトの名無しさん
NGNGグラフを書きたいといって、
右端で直線を引きながら
BitBlt(memdc, 0, 0, 520, 460, memdc, 1, 0, SRCCOPY);
(memdcは裏画面のデバイスコンテキスト)
というようにすれば右から左に流れるような直線が書けると
教えていただいたのですが、これだとやはり時間がかかってしまいます。
何か高速な画面の移動の方法は無いでしょうか。
0175デフォルトの名無しさん
NGNGXOR
0176デフォルトの名無しさん
NGNGなるほろ.
しかしそれではせっかく設定したリージョンが..
0177デフォルトの名無しさん
NGNG早レスありがとうございます。
XORっていうのは、
LineToを呼んで、背景色と色AのXORの色Bで直線を描画して、
今度は色Bの上から色Aで描画すれば背景色に戻る
っていうので合ってるでしょうか?
LineToを何度も呼ぶことになると思いますが、その方が高速なんでしょうか。
煽っているつもりは全くないのだが。
VirtualProtectはメモリの保護モードを変更するものなので、
サイズを変更することはできない(てか、ヘルプ読めよ)。
unixのbrkのような使い方をしたいのであれば、
あらかじめVirtualAllocで巨大な領域をreserveしておいて、
必要になった時点でcommitすることで、似たような動作にすることはできる。
単にクラスを識別するだけの役割しかないのに、
文字列の内容が関係すると思うか?
0181デフォルトの名無しさん
NGNG増やすときに、VirtualAllocの lpAdressに、予約済み領域の直後のアドレスを
指定(ページ境界に注意)してやればいいのでは?
0182デフォルトの名無しさん
NGNG試してみりゃ分かるやろ。
0184151
NGNG> サイズを変更することはできない(てか、ヘルプ読めよ)。
「要求するメモリのサイズ」って書いてあった(VirtualAllocで指定したサイズでなければいけないとは書いてなかった)ので
変更は可なのかなー等と思ってしまいました。
> あらかじめVirtualAllocで巨大な領域をreserveしておいて、
> 必要になった時点でcommitすることで、似たような動作にすることはできる。
なるほろ!これは気がつきませんでした。
ありがとうございます。
>>173
ありがとうございます。その手もありますね。
しかしライブラリ等の弄れない部分がOSからメモリー割り当てしてると失敗してしまいますね…(当たり前ですけど)
ポインタ比較に意味無くなってもいいからヒープ毎に独立したアドレス空間欲しぃ…。
とりあえず >>178 さんのアドバイスを元に頑張ってみようと思います。
皆さんありがとうございました。
0185デフォルトの名無しさん
NGNGScrollWindowとかScrollDCとか
0186DOSっていいな
NGNGこれと同じようなことをWindowsからできないのでしょうか。
別プロセス空間に2Gバイト近くのメモリーをそれぞれ確保しており、合計で
6Gバイト以上のアドレスを確保しています。この別プロセスのメモリーを共
有メモリーでランダムアクセスしたいのですが、
1:OpenProcessからReadProcessMemory, WriteProcessMemoryでは一旦コピー
してからのアクセスになるためランダムアクセスに向きません
2:ファイルマッピングでメモリーファイルにすると、アドレス空間が2Gバイ
トに限定されるため、大量に取得したメモリー全部にアクセスすることがで
きません。
別プロセスのメモリー空間のポインタを取得する(実アドレスに割り当てる)
APIってないでしょうか。
0187デフォルトの名無しさん
NGNG6Gの仮想メモリで何がしたいねん?
結局は単一の物理メモリやん。
0188デフォルトの名無しさん
NGNGwin32でできたっけ?
VirtualAllocVlmとか。
0190DOSっていいな
NGNG各プロセスはリニアに32ビット(4Gバイト)のアドレスしかアクセス
できませんが、(実際はOSの都合で2Gバイトしか確保できない)
別プロセスではそれぞれのセレクタが別の物理メモリー空間をアドレス
するようになります。
この辺はOSの仕事ですが、実際に確保できてしまいます。
>>186
たとえば、スキャナからの画像を9600BPIでA3全体を読み込むと
数Gバイトになります。もちろん今作っているのは、こんな馬鹿
みたいなこととは違いますが。。。
0191デフォルトの名無しさん
NGNGOSのメモリ管理限界より、実メモリが増えてなきゃ、
そもそも意味がないだろ。
0192DOSっていいな
NGNG確かに。
メモリーは誰かが金出して、10Gバイトくらい載るマザーボードと
メモリーを用意するだろう。
インテルCPUではFS,GSのセレクタレジスタが遊んでいるので、
それぞれ別空間をポイントできないかと考えたわけだ。
あるいは、OSからすれば、ページングで同じ物理メモリーを2つのプ
ロセスのリニアアドレスに割り当てればよいことで、簡単にバンク切り
替えができるのかと思って調べたが、見当たらなくてここで質問してい
ます。
0193デフォルトの名無しさん
NGNG> で、やっぱり VirtualProtect でサイズを変えることは出来ないんでしょうか?
MSDN Library を読んだ上で言ってるのか?
VirtualProtect は割り当てられたページの属性 (read/write/execute) を設定
する API。CPU がサポートする仮想記憶システムで使うデータベース(ページ
テーブルやディレクトリテーブル)の属性部分だけ仮想化したもの、といや良い
のかな。
俺も試したことはないんだが >>189 が言ってるように VirtualAllocVlm 系の
API を使うか、ファイルマッピング (CreateFileMapping) とかでどうかねぇ。
>>191
IA-32 だと、仮想記憶アドレスの限界以上の実メモリを使える。36bit PSE あ
たりのキーワードで検索すると出てくると思うけど。
0194DOSっていいな
NGNGVirtualAllocVlmって、64ビットのアドレスが返るのですね。
Borland C++Builderを使っているのですが、どうやって使う
のでしょうか。
0195デフォルトの名無しさん
NGNGgoogle で検索したら、トップで出てきたぞ…。
http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_virtualallocvlm.htm
0196デフォルトの名無しさん
NGNG特許は最近話題になったものだけにあるわけではないぞ
0197151
NGNG私の質問はもう終わってるんだけどな…。
直後に似た API の質問だから混同してもしょうがないけど。
でもやっぱり後でもう一回来てよかった。
なんかその Vlm ってのも調べてみようっと。
あと、>>178 さんに教えてもらったやり方でバッチグーに実装できました。
マジでありがとうございました。
0198151
NGNGhttp://www.microsoft.com/japan/developer/library/jpwinpf/_win32_virtualallocvlm.htm
VirtualAllocVlm 関数は専用のリソースを割り当てるので、控えめに使ってください。
~~~~~~~~~~~~~~~~~~~~~~
↑ワロタ MS のドキュメントにしては珍しいあからさまに曖昧な表現。
0199デフォルトの名無しさん
NGNG>2:ファイルマッピングでメモリーファイルにすると、アドレス空間が2Gバイ
> トに限定されるため、大量に取得したメモリー全部にアクセスすることがで
> きません。
うそー?MapViewOfFile でマップするファイル位置を指定出来ただろ?64ビットで
0200デフォルトの名無しさん
NGNGWindowsから警告音が来てしまうんですが、
これを止める方法はないでしょうか?
0201デフォルトの名無しさん
NGNGMapViewOfFileEx() の方かね。
いずれにせよ返ってくるのは LPVOID だから「大量に取得したメモリー全部に
アクセスすることができない」と思うが、そこは手作業でファイルマッピングの
切り替えだろう。
(狭い仮想アドレスを使い回す以上、バンク切り替え相当の手間が掛かるのは、
仕方ないよな)
0202デフォルトの名無しさん
NGNG0203デフォルトの名無しさん
NGNG犯罪の匂いがする
0204デフォルトの名無しさん
NGNGいえ、そういうのじゃないですよ。
レジストリの特定のキーを削除したいんです。
とりあえず今考えてるのはレジストリをいじるだけのプログラムを作ってお
いて、それを別ユーザとして起動すればいいかな〜って思ってるんですが、
もう少しスマートな方法がないかと思いまして。
0205デフォルトの名無しさん
NGNG> レジストリの特定のキーを削除したいんです。
なぜ?
一般論として言えば、Administrator しか削除できないキーを一般ユーザが削除する
のは(仮にできたら)、致命的なトラブルになるぞ。本当に必要なら、そのユーザに
ローカルマシンの Administrator 権限を付与するのが正道と思われ。
0206デフォルトの名無しさん
NGNGそれでは、Administratorでない場合はどうでしょう?
他のアプリケーションの設定などを別ユーザからいじるということはできますか?
0207デフォルトの名無しさん
NGNG必要ならAdministrator権限をもらえって事だよ
そんな簡単に権限無視が出来るんじゃなんのためのユーザー管理だよ
0208デフォルトの名無しさん
NGNG0209デフォルトの名無しさん
NGNG0210デフォルトの名無しさん
NGNGttp://support.microsoft.com/default.aspx?scid=http://www.microsoft.com/Japan/s
upport/kb/articles/JP253/0/66.ASP
だから何だと言われても困る。
0211デフォルトの名無しさん
NGNGWindows2000でファイルを選択してマウス右ボタンのプロパティから概要タブで
タイトルやコメントとかを設定できますけど、
あれってどこに記録されているのでしょう & 設定するAPIはあるのでしょうか。
0212デフォルトの名無しさん
NGNGの下の方にある、福次ストリームを利用しているはず。
0213デフォルトの名無しさん
NGNG0214デフォルトの名無しさん
NGNG詳しく調べてないけどたぶんIPropertyStorageを使うんだと思う
http://msdn.microsoft.com/library/en-us/stg/stg/ipropertystorage_ntfs_file_system_implementation.asp
0215デフォルトの名無しさん
NGNGダイアログテンプレートで作成することはできますか?
なんかDLGITEMTEMPLATEの中はクラス名かIDが必要みたいなんですが、
ここにダイアログを直接置くことはできないんですか?
0217StretchDIBits
NGNGIMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
GetObject(hBitmap, sizeof(BITMAP), &bmp_info);
wx = bmp_info.bmWidth;
wy = bmp_info.bmHeight;
hdc_mem = CreateCompatibleDC(hdc);
SelectObject(hdc_mem, hBitmap);
StretchDIBits(hdc,0,0,wx, wy,
0,0,wx, wy,
pBits,&bmp_info,DIB_RGB_COLORS,SRCCOPY);
とした場合最終行のpBitsには"DIBのビットデータの先頭へのポインタ"
をいれるという説明なのですが,これはどうやって取得できますか?
0218API学くん
NGNGリッチエディットコントロールをSDKのC言語で組もうとしてる者です。
EDITSTREAM構造体のdwCookieとpfnCallbackメンバを設定して、
EM_STREAMINメッセージでストリームにデータを送ってリッチエディット
コントロールに表示させるらしいという事がわかりました。
しかし実際に表示させようとしても、やり方がわかりません。
具体的に言うとchar goku[30]="こんにちは"という、メモリ上のデータを
表示させようとするときdwCookieに何を指定するのか分かりません。
es.dwCookie = (DWORD)goku;のように指定しても駄目でした。
ファイルを読み込んでそれを表示する事は出来るのです。
dwCookieにCreateFileで作成したhFileを指定すれば、ファイルの内容が
リッチエディットコントロールに表示されました。
es.dwCookie = (DWORD)hFile;
という感じで大丈夫でした。
ネット上で調べたのですが情報がありません。
メモリ上のデータをリッチエディットコントロールに表示するにはどうすれば
いいか教えて下さい。
0219デフォルトの名無しさん
NGNGコピペじゃ駄目?
CHARRANGE cr;
cr.cpMin = cr.cpMax = -1;
SendMessage(hRich,EM_EXSETSEL,0,(LPARAM)&cr);
SendMessage(hRich,EM_REPLASESEL,0,(LPARAM)"こんにちわ");
SetWindowText(hRich,"こんにちわ");
でもいいかも。
参考→ttp://www.kumei.ne.jp/c_lang/sdk2/sdk_130.htm
0220デフォルトの名無しさん
NGNGStretchDIBits() → StretchBlt() じゃないの?
0221デフォルトの名無しさん
NGNG0222デフォルトの名無しさん
NGNGPlatform SDK にドキュメントついてきたと思うが。英語だけど。
0223API学くん
NGNGコピペという方法があったのですね。
リッチテキストを扱うからエディットストリームだという固定観念で調べてました。
普通のエディットコントロールも知らないで、いきなりリッチエディットを
作ろうとしたのが勘違いの元でした。
どうもありがとうございました。
0224APIビギナー
NGNGに落とすにはどんな方法がありますか?
0225デフォルトの名無しさん
NGNG2000/XPではCAPTUREBLTをお忘れなく
0226デフォルトの名無しさん
NGNGMSDNに入れば、「Subscriber Downloads」でダウンロードできるよ(藁
0227APIビギナー
NGNG>2000/XPではCAPTUREBLTをお忘れなく
を,どうも.猫でもできる,を参考にしてやって見ます.
ところでウィン98だと選択の度にWM_PAINTで書きなおして表示されて
いた画像が,Xpだと全く更新されないままになるってのは
何が原因でしょうか.
0228デフォルトの名無しさん
NGNGダイアログテンプレートで作成することはできますか?
なんかDLGITEMTEMPLATEの中はクラス名かIDが必要みたいなんですが、
ここにダイアログを直接置くことはできないんですか?
0229デフォルトの名無しさん
NGNG"外部参照 1 が未解決です。"
みたいなメッセージがでてきてエラーになるんですが、
そのまま元に戻す方法だれか知りませんか?
0231デフォルトの名無しさん
NGNG取りあえず他のスレにまで迷惑かけるなって。
0232デフォルトの名無しさん
NGNG>>230
すまんが意味がまったくわからん。
もう少しわかりやすい日本語を話してくれ。
0233デフォルトの名無しさん
NGNGOSボム
http://pc3.2ch.net/test/read.cgi/tech/1029678513/l50
ここのネタだよ。気にしなくていい。
日本語?
まぁお前ら天才だからこれくらいの日本語理解できるんとちゃうん?
お前は天才じゃなかったか。スマソ
>231->233
ここはWin32API質問箱だぞ?
スレに関係ない話題はやめろ荒らしめ
0235デフォルトの名無しさん
NGNGDELLさん、逆ギレですか?
0236DELL
NGNGとにかく、230の質問が解ればそれでいいのだ。
隣でVisualC++開いている。
2chで問題が解決すれば得だろ?
■ このスレッドは過去ログ倉庫に格納されています